Motorola DSP Developer's Kit | ![]() ![]() |
Y = mot###_ifft( X )
Description
This function returns the discrete Fourier transform (DFT) of the input for complex vector X
Input/Output
Input: Complex vector X, including vector Xr (real input) and vector Xi (imaginary input)
Output: Complex vector Yr (real output), and vector Yi (imaginary output)
Algorithm
Passnum = (int) (Log2(size) + 0.5);//calculated by mex function GroupPerPass= 1; ButterflyPerGroup = size / 2; Set coefficient table addressing mode as bit-reversed; Clear scaling bit; Set scaling down mode; Scalexp = 1;//scaling exponent for(i = 0; i < Passnum; i++) { pA = 0;/*address pointer of the first input of butterfly */ pB = pA + ButterflyPerGroup;/*address pointer of the second input of butterfly */ pC = 0;/*address pointer of coefficient lookup table C */ for (j = 0; j < GroupPerPass; j++) { for (k = 0; k < ButterflyPerGroup; k++) { Xr[pA] = Xr[pA] + Xr[pB]*Cr[pC] + Xi[pB]*Ci[pC]; Xi[pA] = Xi[pA] + Xi[pB]*Cr[pC] - Xr[pB]*Ci[pC]; Xr[pB] = 2*Xr[pA] - Xr[pA]; Xi[pB] = 2*Xi[pA] - Xi[pA]; pA ++; pB ++; } Clr scaling down mode; if has overflow { Set scaling down mode; Clr scaling bit; Scalexp++; } pA += ButterflyPerGroup; pB += ButterflyPerGroup; pC += size / 4;/* bit-reverse */ } ButterflyPerGroup >>= 1; GroupPerPass<<= 1; } Clear scaling bit; Set no scaling mode; Convert bit reverse order to normal order in-place;
Note The actual output data should be scaled up by 2^(Scalexp-1). This will be done by the MEX function. |
Memory & Register
Above two symbols are also used as output symbols
Status Register
The assembly function ifft-c.asm
does not explicitly set any status registers/bits during the function execution.
Data Size Limit
The length of vector X can't be larger than the continuous available data memory size.
Data Range Limit
The value of input vector X must be between -1.0 and +1.0.
![]() | ifft-r.asm | interp-r.asm | ![]() |