0

此代码从时域计算 DFT。任何人都可以看到下面的代码并帮助我得到正确的答案吗?我的问题是:当我将 N 值更改为 4、5、10 或其他值时。X(1) 随之改变。但我认为 X(1) 对于 N 的每个值都必须相同。就像下面的形状:N 值发生变化但垂直值相同。如果您能帮助我,我将不胜感激。谢谢你。

在此处输入图像描述

clear; clc;
% %%  Analytical
N=4;
k=0:N-1;
X=zeros(N,1);
t=k/N;
x=(5+2*cos(2*pi*t-pi/2)+3*cos(4*pi*t))
%x=abs((1-(0.012.*(pi.*52.*(t-0.3721)).^2)).*exp(-(pi.*52.*(t-0.3721).^2)))
abs(sum(x))

for k=0:N-1
    for n=0:N-1
        X(k+1)=X(k+1)+x(n+1).*exp(-1i.*2.*pi.*(n).*(k)/N);
    end
end

k1=[0:N-1];
stem(k1,abs(X))
% xlim([0 1])
% ylim([-1 1])
xlabel('Frequency');
ylabel('|X(k)|');
title('Frequency domain - Magnitude response')
4

1 回答 1

0

您对 DFT 的定义(这可能是最常见的定义)不具有X(1)与 N 保持不变的属性。相反,它将X(1)/N保持不变。要使用此 DFT 获得不同频率下的输入幅度,您需要将 DFT 输出除以N

为了验证这一点,您可以调用 Matlab 的fft函数并与您的结果进行比较。您应该从 Matlab 的fft. 请注意,Matlab 的fft 文档说:

得到的 FFT 幅度为 A*n/2,其中 A 是原始幅度,n 是 FFT 点的数量。

于 2020-11-20T21:48:21.387 回答