我编写了一个简单且非常小的 Matlab 代码,用于计算给定数组(或向量)的离散傅里叶变换。
我手动计算出来并得到了答案,我的 Matlab 代码也给出了相同的答案。但fft
通过交换索引给出了与此不同的答案。以下是我所做的手动计算:
这是第二张图片:
这是第三张图片:
从这些计算中可以清楚地看出我的答案是{12, -3-3j, -2, -3+3j}
这是我使用过的 Matlab 代码:
clc;
clear all;
close all;
inp=[1,2,3,4];
j=sqrt(-1);
op=zeros(1,length(inp));
for k=1:length(inp)
sigma=0;
for n=1:length(inp)
sigma=sigma+inp(n)*exp((j*2*pi*(k-1)*(n-1))/length(inp));
end
op(k)=sigma;
end
% Checking with fft
fft(inp)
现在我得到的输出如下:
非常出乎我意料的是,我的价值观被交换了。它正在交换索引 2 和 4。
看起来你的权重符号错误(这意味着你可能正在执行逆 FFT 而不是正向 FFT - 请记住对于正向变换权重是exp(-j * theta) https://en.wikipedia.org/wiki/Discrete_Fourier_transform#Definition).
Change:
sigma=sigma+inp(n)*exp((j*2*pi*(k-1)*(n-1))/length(inp));
to:
sigma=sigma+inp(n)*exp(-(j*2*pi*(k-1)*(n-1))/length(inp));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)