我创建了一个试图计算函数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
的离散时间傅里叶变换,但是不幸的是,我没有得到相同的结果。
以下是运行此代码所得到的内容:
当我增加-1,1
时,虽然cos(x)
中的值正如我们预期的那样增加,但非零值也会增加,相反达到预期值。 / p>
(deltaFunction(x-1)+deltaFunction(x+1)
的傅里叶变换为{{1}})
感谢您的帮助。我知道MATLAB中有函数可以这样做,但我尝试自己创建一个函数。
答案 0 :(得分:3)
您所看到的是使用k
的非整数值的结果。
DTFT:
DTFT假定无限输入信号。你没有这个,你只有一段余弦。假设信号的其余部分全为零,则在t = 0和t =2π时从1到0的过渡中引入许多高频。您还会介绍一些较低的频率。这些频率是您在情节中看到的频率。
如果你想计算cos(t)
的{{1}}的DTFT不限于一个句号,那么你的计算中需要一个无限的总和,当然你不能这样做。
如果您想假设您的信号是周期性的,那么您正在计算DFT。
DFT:
您有一系列样本,您定义为变换中的t
,n = 0:l-1
在equation as shown on Wikipedia中使用l
的函数:
在此等式中,N
和n
都是整数。 k
通常也会在k
范围内定义,但由于它是周期性的,因此可以在0:l-1
范围内定义它,例如。
将-ceil(l/2):ceil(l/2)-1
设置为代码中的一组整数值,我看到了预期的结果:
d
答案 1 :(得分:2)
首先,您显示的结果对于窗口在0和2π之间的余弦的DTFT是正确的。我感觉你有兴趣计算余弦的DFT,从-∞到+∞Cris Luengo已经证明了。
我认为简单地讨论余弦,窗口余弦和DTFT的傅里叶变换是有用的。
余弦的傅里叶变换是
其中余弦定义为t =-∞到+∞,可以通过DFT计算。但是窗口余弦的傅里叶变换
是
其中N是窗口的周期数(上面的1)。在MATLAB中绘制这个产生
所以,在MATLAB中,如果你想计算余弦的DTFT,你的输入应该是从t =-∞到+∞的采样余弦,你的结果应该类似于
因为DTFT是周期性的,周期为2π,但DFT不是。余弦的DTFT是