在MATLAB中计算时间信号的DFT

问题描述

代码从时域计算DFT。 谁能看到下面的代码并帮助我获得正确的答案? 我的问题是: 当我将N值更改为例如4、5、10或其他值时。 X(1)随此改变。但是我认为X(1)对于N的每个值都必须相同。 就像下面的形状:N值改变,但垂直值相同。 谢谢您的帮助。 谢谢。

enter image description here

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

解决方法

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

要验证这一点,您可以调用Matlab的fft函数并将其与结果进行比较。您应该从Matlab的fft得到相同的答案。请注意,Matlab的fft documentation说:

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...