Matlab fft 函数交换索引
Matlab fft function swapping indices
我编写了一个简单且非常小的 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 - 请记住正向变换 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));
我编写了一个简单且非常小的 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 - 请记住正向变换 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));