# Problem Using Kiss FFT

Started by July 20, 2014
```On Sunday, July 20, 2014 6:06:34 PM UTC+12, Javier Pajuelo wrote:
> I get different results using Kiss FFT and Octave/Matlab fft.
>
>
>
> Here's the input/output of my code:
>
> =========================================================
>
> xtmp[2][4]
>
> 	0		1		2		3
>
> 0 (0.2348,-0.5121) (-0.2745,0.0647)(-0.06092,-0.4704)	(-0.04771,0.1112)
>
> 1 (-0.14,-0.04515)(-0.5469,0.4785)	(-0.3687,-0.2009)(-0.04413,0.1298)
>
>
>
> Input:		Output:
>
> 0.234797 -0.512116		-0.1706950.026731
>
> -0.274483 0.064698		0.128480-0.021765
>
> -0.060917 -0.470399		0.0131070.008202
>
> -0.047714 0.111247		0.012300-0.097780
>
> -0.140031 -0.045153		0.0576210.186990
>
> -0.546944 0.478488		0.0032580.104076
>
> -0.368746 -0.200878		0.088650-0.140648
>
> -0.044125 0.129769		-0.0153230.051592
>
>
>
>
>
> x_tmp from ifft:
>
>
>
> =========================================================
>
> x_tmp[2][4]
>
> 	0		1		2		3
>
> 0   (-0.1707,0.02673)(0.1285,-0.02177)	(0.01311,0.008202)(0.0123,-0.09778)
>
> 1	(0.05762,0.187)	(0.003258,0.1041)(0.08865,-0.1406)(-0.01532,0.05159)
>
>
>
>
>
>
>
> -----------------------------------------------------------------------------
>
> And, this is the correct output from Matlab/Octave:
>
>
>
> x_tmp =
>
>
>
>    0.2348 - 0.5121i  -0.2745 + 0.0647i  -0.0609 - 0.4704i  -0.0477 + 0.1112i
>
>   -0.1400 - 0.0452i  -0.5469 + 0.4785i  -0.3687 - 0.2009i  -0.0441 + 0.1298i
>
>
>
>
>
> x_tmp_after_ifft =
>
>
>
>    0.0474 - 0.2786i  -0.4107 + 0.2716i  -0.2148 - 0.3356i  -0.0459 + 0.1205i
>
>    0.1874 - 0.2335i   0.1362 - 0.2069i   0.1539 - 0.1348i  -0.0018 - 0.0093i
>
>
>
> ----------------------------------------------------------------------------
>
> Here's my code calling fft from Kiss:
>
>
>
> <code>
>
>  int i;
>
>                                         int isinverse = 1;
>
>
>
>                                          // TODO try row wise storage
>
>                                          int rows = x_tmp.size(); int cols=x_tmp[0].size();
>
>                                          double array_r[rows*cols];int idx=0;
>
>                                          double array_i[rows*cols];
>
>                                          double buf[rows*cols]; int size=rows*cols;
>
>                                          double buf_i[rows*cols];
>
>
>
>
>
>                                          for(int i=0; i<rows;i++)
>
>                                                  for(int j=0;j<cols;j++)
>
>                                                  {
>
>                                                          array_r[idx]=x_tmp[i][j].real();
>
>                                                          array_i[idx]=x_tmp[i][j].imag();
>
>                                                          idx++;
>
>                                                  }
>
>
>
>                                          kiss_fft_cpx out_cpx[size],out[size],*cpx_buf;
>
>
>
>                                          kiss_fftr_cfg fft = kiss_fftr_alloc(size*2 ,0 ,0,0);
>
>                                          kiss_fftr_cfg ifft = kiss_fftr_alloc(size*2,isinverse,0,0);
>
>
>
>                                          cpx_buf = copycpx(array_r, array_i, size);
>
>
>
>                                  //      kiss_fftr(fft,(kiss_fft_scalar*)cpx_buf, out_cpx);
>
>
>
>                                          // out_cpx has our input
>
>                                          //kiss_fftri(ifft,out_cpx,(kiss_fft_scalar*)out );
>
>                                          kiss_fftri(ifft,cpx_buf,(kiss_fft_scalar*)out );
>
>
>
>                                          printf("Input:\t\tOutput:\n");
>
>                                          for(i=0;i<size;i++)
>
>                                          {
>
>                                                  buf[i] = (out[i].r)/(size*2);
>
>                                                  buf_i[i]=(out[i].i)/(size*2);
>
>
>
>                                                  printf("%f%f\t\t%f%f\n",array_r[i]
>
> , array_i[i],buf[i], buf_i[i]);
>
>                                          }
>
>
>
>                                          kiss_fft_cleanup();
>
>                                          free(fft);
>
>                                          free(ifft);
>
>
>
> </code>
>
> ------------------------------------------------------
>
>
>