Exemple #1
0
void fft_10()
{
    double  aRe[5], aIm[5], bRe[5], bIm[5];

    aRe[0] = zRe[0];    bRe[0] = zRe[5];
    aRe[1] = zRe[2];    bRe[1] = zRe[7];
    aRe[2] = zRe[4];    bRe[2] = zRe[9];
    aRe[3] = zRe[6];    bRe[3] = zRe[1];
    aRe[4] = zRe[8];    bRe[4] = zRe[3];

    aIm[0] = zIm[0];    bIm[0] = zIm[5];
    aIm[1] = zIm[2];    bIm[1] = zIm[7];
    aIm[2] = zIm[4];    bIm[2] = zIm[9];
    aIm[3] = zIm[6];    bIm[3] = zIm[1];
    aIm[4] = zIm[8];    bIm[4] = zIm[3];

    fft_5(aRe, aIm); fft_5(bRe, bIm);

    zRe[0] = aRe[0] + bRe[0]; zRe[5] = aRe[0] - bRe[0];
    zRe[6] = aRe[1] + bRe[1]; zRe[1] = aRe[1] - bRe[1];
    zRe[2] = aRe[2] + bRe[2]; zRe[7] = aRe[2] - bRe[2];
    zRe[8] = aRe[3] + bRe[3]; zRe[3] = aRe[3] - bRe[3];
    zRe[4] = aRe[4] + bRe[4]; zRe[9] = aRe[4] - bRe[4];

    zIm[0] = aIm[0] + bIm[0]; zIm[5] = aIm[0] - bIm[0];
    zIm[6] = aIm[1] + bIm[1]; zIm[1] = aIm[1] - bIm[1];
    zIm[2] = aIm[2] + bIm[2]; zIm[7] = aIm[2] - bIm[2];
    zIm[8] = aIm[3] + bIm[3]; zIm[3] = aIm[3] - bIm[3];
    zIm[4] = aIm[4] + bIm[4]; zIm[9] = aIm[4] - bIm[4];
}   /* fft_10 */
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 */