为什么我的离散时间傅立叶变换不正确?

时间:2018-05-23 20:28:05

标签: matlab fft dft

我创建了一个试图计算函数DTFT的代码。

这是我的代码:

figure
n = linspace(0,2*pi,1500); %example
x = cos(n); %example
l = length(n);
syms k w
Xk = sum(x(1:l).*exp((-1i.*k.*2/l.*pi.*(0:l-1))));
Xk = matlabFunction(Xk);
d = linspace(-5,5,1000);
stem(d,Xk(d))

为了检查我的代码,正如您所看到的,我尝试通过对cos(n)进行采样并将其与cos(x)的连续时间傅里叶变换进行比较来计算n的离散时间傅里叶变换,但是不幸的是,我没有得到相同的结果。

以下是运行此代码所得到的内容:

click here

当我增加-1,1时,虽然cos(x)中的值正如我们预期的那样增加,但非零值也会增加,相反达到预期值。 / p>

deltaFunction(x-1)+deltaFunction(x+1)的傅里叶变换为{{1}})

感谢您的帮助。我知道MATLAB中有函数可以这样做,但我尝试自己创建一个函数。

2 个答案:

答案 0 :(得分:3)

您所看到的是使用k的非整数值的结果。

DTFT:

DTFT假定无限输入信号。你没有这个,你只有一段余弦。假设信号的其余部分全为零,则在t = 0和t =2π时从1到0的过渡中引入许多高频。您还会介绍一些较低的频率。这些频率是您在情节中看到的频率。

如果你想计算cos(t)的{​​{1}}的DTFT不限于一个句号,那么你的计算中需要一个无限的总和,当然你不能这样做。

如果您想假设您的信号是周期性的,那么您正在计算DFT。

DFT:

您有一系列样本,您定义为变换中的tn = 0:l-1equation as shown on Wikipedia中使用l的函数:

DFT equation

在此等式中,Nn都是整数。 k通常也会在k范围内定义,但由于它是周期性的,因此可以在0:l-1范围内定义它,例如。

-ceil(l/2):ceil(l/2)-1设置为代码中的一组整数值,我看到了预期的结果:

d

output

答案 1 :(得分:2)

首先,您显示的结果对于窗口在0和2π之间的余弦的DTFT是正确的。我感觉你有兴趣计算余弦的DFT,从-∞到+∞Cris Luengo已经证明了。

我认为简单地讨论余弦,窗口余弦和DTFT的傅里叶变换是有用的。

余弦的傅里叶变换是

Fourier transform of cosine

其中余弦定义为t =-∞到+∞,可以通过DFT计算。但是窗口余弦的傅里叶变换

Windowed cosine

Fourier transform of windowed cosine

其中N是窗口的周期数(上面的1)。在MATLAB中绘制这个产生

Plot of Fourier transform of windowed cosine

所以,在MATLAB中,如果你想计算余弦的DTFT,你的输入应该是从t =-∞到+∞的采样余弦,你的结果应该类似于

Plot of DTFT of cosine

因为DTFT是周期性的,周期为2π,但DFT不是。余弦的DTFT是

DTFT of cosine