mirror of
https://github.com/mborgerding/kissfft.git
synced 2025-05-27 21:20:27 -04:00
fix for inplace odd rank multi-dimensional ffts
This commit is contained in:
parent
490a602472
commit
1d58b0eced
@ -45,22 +45,19 @@ void fft_filend(FILE * fin,FILE * fout,int *dims,int ndims,int isinverse)
|
||||
{
|
||||
void *st;
|
||||
kiss_fft_cpx *buf;
|
||||
kiss_fft_cpx *bufout;
|
||||
int dimprod=1,i;
|
||||
for (i=0;i<ndims;++i)
|
||||
dimprod *= dims[i];
|
||||
|
||||
buf = (kiss_fft_cpx *) malloc (sizeof (kiss_fft_cpx) * dimprod);
|
||||
bufout = (kiss_fft_cpx *) malloc (sizeof (kiss_fft_cpx) * dimprod);
|
||||
st = kiss_fftnd_alloc (dims, ndims, isinverse, 0, 0);
|
||||
|
||||
while (fread (buf, sizeof (kiss_fft_cpx) * dimprod, 1, fin) > 0) {
|
||||
kiss_fftnd (st, buf, bufout);
|
||||
fwrite (bufout, sizeof (kiss_fft_cpx), dimprod, fout);
|
||||
kiss_fftnd (st, buf, buf);
|
||||
fwrite (buf, sizeof (kiss_fft_cpx), dimprod, fout);
|
||||
}
|
||||
free (st);
|
||||
free (buf);
|
||||
free (bufout);
|
||||
}
|
||||
|
||||
void fft_file_real(FILE * fin,FILE * fout,int nfft,int isinverse)
|
||||
@ -99,7 +96,7 @@ int get_dims(char * arg,int * dims)
|
||||
if (p0)
|
||||
*p0++ = '\0';
|
||||
dims[ndims++] = atoi(arg);
|
||||
fprintf(stderr,"dims[%d] = %d\n",ndims-1,dims[ndims-1]);
|
||||
/* fprintf(stderr,"dims[%d] = %d\n",ndims-1,dims[ndims-1]); */
|
||||
arg = p0;
|
||||
}while (p0);
|
||||
return ndims;
|
||||
|
@ -146,15 +146,19 @@ void kiss_fftnd(void * cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout)
|
||||
kiss_fft_cpx * bufout;
|
||||
|
||||
/*arrange it so the last bufout == fout*/
|
||||
if ( st->ndims & 1 )
|
||||
if ( st->ndims & 1 ) {
|
||||
bufout = fout;
|
||||
else
|
||||
if (fin==fout) {
|
||||
memcpy( st->tmpbuf, fin, sizeof(kiss_fft_cpx) * st->dimprod );
|
||||
bufin = st->tmpbuf;
|
||||
}
|
||||
}else
|
||||
bufout = st->tmpbuf;
|
||||
|
||||
for ( k=0; k < st->ndims; ++k) {
|
||||
int curdim = st->dims[k];
|
||||
int stride = st->dimprod / curdim;
|
||||
|
||||
|
||||
for ( i=0 ; i<stride ; ++i )
|
||||
kiss_fft_stride( st->states[k], bufin+i , bufout+i*curdim, stride );
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user