Motorola DSP Developer's Kit | ![]() ![]() |
Y = mot###_interp(IDATA, R, LEN, B)
Description
This function resamples data at a higher rate using lowpass interpolation. The input data is complex data.
Y = INTERP (IDATA, R, LEN, B) resamples the sequence in vector IDATA at R times the original sample rate. The resulting resampled vector Y is R times longer, LENGTH(Y) = R*LENGTH(IDATA). A symmetric filter, B, allows the original data to pass through unchanged and interpolates between so that the mean square error between them and their ideal values is minimized.
Input/Output
Input: Complex vector IDATA, int R, int LEN, and vector B
Algorithm
int I; for ( I = 0; I < lengthIDATA*R; I ++) { Y_REAL [I] = 1; Y_IMAGE [I] = 1; } for ( I = 0; I < lengthIDATA ; I = I ++) { Y_REAL[I*R] = IDATA_REAL[I]; Y_IMAGE[I*R] = IDATA_IMAGE[I]; } for( I = 0; I < 2*LEN*R; I ++) { OD_REAL[I] = 0; OD_IMAGE[I] = 0; } for (I = 0; I < 2 * LEN; I++) { OD_REAL[I*R] = 2*IDATA_REAL [LEN-1] -IDATA_REAL [2*LEN - I]; OD_IMAGE[I*R] = 2*IDATA_IMAGE [LEN-1] -IDATA_IMAGE [2*LEN - I]; } /* Call filter */ [OD, ZI] = filter(B, LEN, OD); [Y, ZF] = filter(B, LEN, Y, ZI]; for( I = 0, I < (lengthIDATA -LEN) * R; I++) { Y_REAL[I] = Y_REAL[LEN*R+I]; Y_IMAGE[I] = Y_IMAGE[LEN*R+I]; } for( I = 0; I < 2*LEN*R; I ++) { OD_REAL[I] = 0; OD_IMAGE[I] = 0; } for (I = 0; I < 2*LEN; I++) { OD_REAL[I*R] = 2*IDATA_REAL[lengthIDATA] - IDATA_REAL[lengthIDATA -1 -I]; OD_IMAGE[I*R] = 2*IDATA_IMAGE[lengthIDATA] - IDATA_IMAGE[lengthIDATA -1 -I]; } OD = filter (B, LEN, OD, ZF); for(I=0;I < LEN*R; I++) { Y_REAL[lengthIDATA*R - LEN*R + I] = OD_REAL[I]; Y_IMAGE[lengthIDATA*R - LEN*R + I] = OD_IMAGE[I]; }
Memory & Register
idata
tb
odata
od
n
r
l
tb
(2*r*l+1
)n*r
Status Register
The assembly function interp-c.asm
does not set explicitly any status registers/bits during the function execution.
Data Size Limit
The length of vector IDATA can't be larger than the continuous available data memory size.
Data Range Limit
The value of input vectors must be between -1.0 and +1.0.
Precision
In the case of DSP563, precision is 21 bits.
In the case of DSP566, precision is 12 bits.
![]() | interp-r.asm | log-r.asm | ![]() |