Math 利用FFT结果的共轭实现IFFT
我用C语言在8位pic微控制器上进行定点FFT,我能够从我采集的样本中得到FFT结果,但是当我对FFT结果进行IFFT时,我得到了错误的输出 我正在做的程序流程如下Math 利用FFT结果的共轭实现IFFT,math,signal-processing,fft,Math,Signal Processing,Fft,我用C语言在8位pic微控制器上进行定点FFT,我能够从我采集的样本中得到FFT结果,但是当我对FFT结果进行IFFT时,我得到了错误的输出 我正在做的程序流程如下 对8个样本进行FFT,例如:实值为(1,0,0,0,0,0),虚值为(0,0,0,0,0,0) FFT的输出为(1,1,1,1,1,1,1,1),虚值为(0,0,0,0,0,0,0) 然后取FFT输出的共轭 对共轭结果进行FFT处理 再次取第二次FFT结果的共轭 最后除以8得到时域原始样本 输出为实值为(1,0,0,0,0,0,0)
请帮助我我做错了什么 在您的描述中,您在任何时候都不采用逆DFT 想想发生了什么,假设DFT结果为X,取X*X将得到功率谱,而不是逆DFT。然后在此基础上进行DFT不会给你一个时域,它会让你胡说八道
您需要在正在使用的库中找到逆DFT函数 FFT解决插值问题,IFFT解决相应的多点评估问题 FFT的结果是多项式p(z)的系数,其中p(wk)=xk,w是与FFT的维数D相关联的单位根 用ps,k(z)表示从k开始并以索引距离s隔开的p(z)系数的子序列形成的多项式 如果D=2N是偶数,则从值到系数的一般想法是使用wN=-1和分解 p(z)=p2,0(z²)+z*p2,1(z²) 在关系中 xk=p(wk)=p2,0(w2k)+wk*p2,1(wk) xN+k=p(wN+k)=p(-wk) =p2,0(w2k)-wk*p2,1(w2k) 要将大型插值问题简化为两个大小为一半的子问题 2*p2,0(w2k)=xk+xN+k 2*p2,1(w2k)=w-k*(xk-xN+k) 下一步,
- p2,0减少为p4,0和p4,2,以及
- p2,1减少为p4,1和p4,3
对于8个输入的序列,第一步是w=(1+i)/sqrt(2)和w2=i
- x1,0=2*p2,0(1)=x0+x4
- x1,2=2*p2,0(i)=x1+x5
- x1,4=2*p2,0(-1)=x2+x6
- x1,6=2*p2,0(-i)=x3+x7
- x1,1=2*p2,1(1)=(x0-x4)*1
- x1,3=2*p2,1(i)=(x1-x5)*(1-i)/sqrt(2)
- x1,5=2*p2,1(-1)=(x2-x6)*-i
- x1,7=2*p2,1(-i)=(x3-x7)*(-1-i)/sqrt(2)
- x2,0=4*p4,0(1)=x1,0+x1,4
- x2,4=4*p4,0(-1)=x1,2+x1,6
- x2,2=4*p4,2(1)=(x1,0-x1,4)*1
- x2,6=4*p4,2(-1)=(x1,2-x1,6)*(-i)
- x2,1=4*p4,1(1)=x1,1+x1,5
- x2,5=4*p4,1(-1)=x1,3+x1,7
- x2,3=4*p4,3(1)=(x1,1-x1,5)*1
- x2,7=4*p4,3(-1)=(x1,3-x1,7)*(-i)
- X0=8*p8,0(1)=x2,0+x2,4
- X4=8*p8,4(1)=(x2,0-x2,4)*(-1)
- X2=8*p8,2(1)=X2,2+X2,6
- X6=8*p8,6(1)=(x2,2-x2,6)*(-1)
- X1=8*p8,1(1)=x2,1+x2,5
- X5=8*p8,5(1)=(x2,1-x2,5)*(-1)
- X3=8*p8,3(1)=x2,3+x2,7
- X7=8*p8,7(1)=(x2,3-x2,7)*(-1)
请检查这些步骤是否反映在代码中,特别是2的平方根是否出现在必要的位置。随机整数输入的输出也不太可能是严格的整数。您能给出每个步骤的示例值吗?您是否尝试过一个不是定点的、不限于微控制器但遵循相同计算步骤的原型?你能把它贴出来吗?是的,先生,我已经试过了,但是我也没有得到它。。。但是我在下面提到的IFFTA中提到了这个逻辑,这个逻辑(几乎)是正确的,因为IFFT(x)=conj(FFT(conj(x))/N、 还有第二个共轭,当输出为实时,这应该无关紧要。因此,实现必须存在问题,只能在代码上进行分析,或者至少有一点计算。感谢您的回复…我已经分析了代码FFT,它工作得很好,但IFFT使用上述逻辑它不是…这个逻辑是pr吗操作??是的,逻辑是正确的。请测试输入序列(1,0,0,…,0),(0,1,0,0,…,0),…,(0,0,0,…,0,1),并报告结果。输入和输出中复数的格式/排列/布局是否相同?您的评论通常是正确的,但在FFT的情况下是错误的。您有IFFT(x)=conj(FFT(conj(x))/N、 所以原则上,这个算法应该是可行的。你有什么来源吗?只要看看傅里叶变换的积分形式,它是不匹配的。同样,单位也不可行。时间单位等于倒数时间。我们这里处理的是DFT,没有积分,只有和。单位不变。DFT是积分的特例,傅里叶变换确实改变了单位。你从时间空间到频率空间,你改变了单位。例如,在X[k]=sum(m=0到N-1)exp(-2*piik*m/N)*X[m]中,单位会发生变化吗?