Exemple #1
0
void Radix2_Stage_DFT_2(void* inputFIFOs[], void* outputFIFOs[], Param inParams[], Param outParams[]){
	fft_2(
		/* n  */ (Param) inParams[0],
		/* p  */ (Param) inParams[1],
		/* N2 */ (Param) inParams[3],
		/* N1 */ (Param) inParams[2],
		/* ix */ (char*) inputFIFOs[2],
		/* i0 */ (CplxSp*) inputFIFOs[0],
		/* i1 */ (CplxSp*) inputFIFOs[1],
		/* o0 */ (CplxSp*) outputFIFOs[0],
		/* o1 */ (CplxSp*) outputFIFOs[1]
	);
}
Exemple #2
0
    void twiddleTransf(int sofarRadix, int radix, int remainRadix,
                        T3 yRe[], T4 yIm[])

    {   /* twiddleTransf */ 
        double cosw, sinw, gem;

        initTrig(radix);
        omega = 2*M_PI/(double)(sofarRadix*radix);
        cosw =  cos(omega);
        sinw = -sin(omega);
        tw_re = 1.0;
        tw_im = 0;
        dataOffset=0;
        groupOffset=dataOffset;
        adr=groupOffset;
        for (dataNo=0; dataNo<sofarRadix; dataNo++)
        {
            if (sofarRadix>1)
            {
                twiddleRe[0] = 1.0; 
                twiddleIm[0] = 0.0;
                twiddleRe[1] = tw_re;
                twiddleIm[1] = tw_im;
                for (twNo=2; twNo<radix; twNo++)
                {
                    twiddleRe[twNo]=tw_re*twiddleRe[twNo-1]
                                   - tw_im*twiddleIm[twNo-1];
                    twiddleIm[twNo]=tw_im*twiddleRe[twNo-1]
                                   + tw_re*twiddleIm[twNo-1];
                }
                gem   = cosw*tw_re - sinw*tw_im;
                tw_im = sinw*tw_re + cosw*tw_im;
                tw_re = gem;                      
            }
            for (groupNo=0; groupNo<remainRadix; groupNo++)
            {
                if ((sofarRadix>1) && (dataNo > 0))
                {
                    zRe[0]=yRe[adr];
                    zIm[0]=yIm[adr];
                    blockNo=1;
                    do {
                        adr = adr + sofarRadix;
                        zRe[blockNo]=  twiddleRe[blockNo] * yRe[adr]
                                     - twiddleIm[blockNo] * yIm[adr];
                        zIm[blockNo]=  twiddleRe[blockNo] * yIm[adr]
                                     + twiddleIm[blockNo] * yRe[adr]; 
                    
                        blockNo++;
                    } while (blockNo < radix);
                }
                else
                    for (blockNo=0; blockNo<radix; blockNo++)
                    {
                       zRe[blockNo]=yRe[adr];
                       zIm[blockNo]=yIm[adr];
                       adr=adr+sofarRadix;
                    }
                switch(radix) {
    			// T.Grill - replaced the inlined code by their function counterparts
    			  case  2  : fft_2(zRe,zIm); break;
    			  case  3  : fft_3(zRe,zIm); break;
                  case  4  : fft_4(zRe,zIm); break;
                  case  5  : fft_5(zRe,zIm); break;
                  case  8  : fft_8(); break;
                  case 10  : fft_10(); break;
                  default  : fft_odd(radix); break;
                }
                adr=groupOffset;
                for (blockNo=0; blockNo<radix; blockNo++)
                {
                    yRe[adr]=zRe[blockNo]; yIm[adr]=zIm[blockNo];
                    adr=adr+sofarRadix;
                }
                groupOffset=groupOffset+sofarRadix*radix;
                adr=groupOffset;
            }
            dataOffset=dataOffset+1;
            groupOffset=dataOffset;
            adr=groupOffset;
        }
    }   /* twiddleTransf */