Matlab fft函数交换索引

3

我写了一个简单而非常小的 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)

现在我得到的输出是这样的:

Matlab Output

非常意外的是,我得到的值被交换了。它交换了索引2和4。
1个回答

4

看起来你的权重符号有误(这意味着你可能正在执行逆FFT而不是正向FFT - 请记住,对于正向变换权重为exp(-j * theta))。

更改为:

    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));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接