zero case optimized

This commit is contained in:
Mark Borgerding 2003-12-09 01:37:48 +00:00
parent 548032e305
commit 008d7fd4ea

View File

@ -74,32 +74,27 @@ void kiss_fftr(const void * cfg,const kiss_fft_scalar *fin,kiss_fft_cpx *fout)
/*perform the parallel fft of two real signals packed in real,imag*/ /*perform the parallel fft of two real signals packed in real,imag*/
kiss_fft( st->substate , (const kiss_fft_cpx*)fin, st->tmpbuf ); kiss_fft( st->substate , (const kiss_fft_cpx*)fin, st->tmpbuf );
for (k=0;k<N;++k) { fout[0].r = st->tmpbuf[0].r + st->tmpbuf[0].i;
kiss_fft_cpx fpnk,fpk,f1k,f2k,scr[3]; fout[0].i = 0;
fpk = st->tmpbuf[k];
/* fpk is Fp[k] */
if (k==0) for (k=1;k<N;++k) {
fpnk = st->tmpbuf[0]; kiss_fft_cpx fpnk,fpk,f1k,f2k,scr[2];
else
fpnk = st->tmpbuf[N-k]; fpk = st->tmpbuf[k];
fpnk.i = fpnk.i * -1;
/* fpnk is Fp[-k].conjugate() */ fpnk.r = st->tmpbuf[N-k].r;
fpnk.i = -st->tmpbuf[N-k].i;
C_ADD( f1k, fpk , fpnk ); C_ADD( f1k, fpk , fpnk );
/*printf("F1k[%d]:",k); pcpx(&f1k); */ C_SUBFROM( fpk , fpnk );
C_SUB( scr[0], fpk , fpnk ); f2k.r = fpk.i;
f2k.r = scr[0].i; f2k.i = -fpk.r;
f2k.i = -scr[0].r;
/*
printf("F2k[%d]:",k); pcpx(&f2k);
*/
C_MUL( scr[1], f2k , st->super_twiddles[k] ); C_MUL( scr[1], f2k , st->super_twiddles[k] );
C_ADD(fout[k],f1k,scr[1]); C_ADD(fout[k],f1k,scr[1]);
fout[k].r /= 2; fout[k].r /= 2;
fout[k].i /= 2; fout[k].i /= 2;
} }