我正在使用C语言在8bit pic微分机上进行定点FFT,我能够从我采用的样本中得到FFT结果,但是当我对FFT结果进行IFFT时输出错误。
我正在做的程序流程如下
但如果我对Real值(1,2,3,4,5,6,7,8)和虚数值(0,0,0,0,0,0,0,0)应用相同的i在IFFT之后得到错误的结果,例如实际值(1,2,4,7,4,5,4,5)和虚数值是(-0,-3,-1,-0,1,0,0) ,2)
请帮助我,我做错了什么......
答案 0 :(得分:1)
FFT解决了插值问题,IFFT解决了相应的多点评估问题
FFT的结果是多项式p(z)的系数,其中p(w k )= x k ,w是与维度相关联的单位根FFT的D。
用p s表示,k (z)由p(z)的系数子序列形成的多项式以k开始并以索引距离s间隔开。
如果D = 2N是偶数,从值到系数的一般想法是使用w N = - 1和分解
p(z)= p 2,0 (z²)+ z * p 2,1 (z²)
中的关系
x k = p(w k )= p 2,0 (w 2k )+ w k * p 2,1 (w k )
x N + k = p(w N + k )= p(-w k )
= p 2,0 (w 2k ) - w k * p 2,1 (w 2K )
将大插值问题减少为两个大小的子问题,
2 * p 2,0 (w 2k )= x k + x N + k < / p>
2 * p 2,1 (w 2k )= w -k *(x k - X <子> N + K 子>)
在下一步中,
等。
对于8个输入的序列,第一步得到w =(1 + i)/ sqrt(2)和w 2 = i
...
在下一步中,一个得到w = i而w 2 = - 1
...
-
...
最后FFT系数X k = x 3,k 使用w = -1且w²= 1
-
-
-
请检查这些步骤是否反映在您的代码中,尤其是2的平方根出现在必要的位置。随机整数输入的输出极不可能是严格整数。
答案 1 :(得分:0)
在你的描述中,你没有采取逆DFT。
考虑一下发生了什么,假设您将DFT结果作为X,采用X * X将为您提供功率谱,而不是逆DFT。然后在此上执行DFT将不会给你一个时间域,它会给你废话。
您需要在正在使用的库中找到逆DFT函数。