我创建了一个代码来尝试计算函数的 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)
的傅立叶变换为deltaFunction(x-1)+deltaFunction(x+1)
)
感谢您的帮助。我知道 MATLAB 中有可以执行此操作的函数,但我尝试自己创建一个函数。
最佳答案
您所看到的是使用 k
非整数值的结果。
DTFT:
DTFT 假设输入信号无限大。你没有这个,你只有一个余弦周期。假设信号的其余部分全为零,则在 t=0 且 t=2π 时从 1 到 0 的过渡中引入了许多高频。您还引入了一些较低的频率。这些频率是您在绘图中看到的频率。
如果你想计算cos(t)
的DTFT,其中t
不限于一个周期,那么你的计算中需要一个无限的总和,你不能这样做这当然。
如果您想假设信号是周期性的,那么您正在计算 DFT。
DFT:
您在转换中定义了一系列位于 n = 0:l-1
的样本,其中 l
取 N 的函数
在 equation as shown on Wikipedia :
在此等式中,n
和 k
都是整数。 k
通常也定义在 0:l-1
范围内,但由于它是周期性的,因此可以将其定义在 -ceil(l/2):ceil(l/2)-1
,例如。
将 d
设置为代码中的一组整数值,我看到了预期的结果:
d = -10:10;
stem(d,abs(Xk(d)))
关于matlab - 为什么我的离散时间傅里叶变换不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50496961/