我编写了一个简单且非常小的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。
答案 0 :(得分:4)
看起来您的权重符号错误(这意味着您可能正在进行逆FFT而不是正向FFT - 请记住正向变换the weights are exp(-j * theta)
)。
变化:
sigma=sigma+inp(n)*exp((j*2*pi*(k-1)*(n-1))/length(inp));
为:
sigma=sigma+inp(n)*exp(-(j*2*pi*(k-1)*(n-1))/length(inp));