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

标签 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) 的连续时间傅立叶变换进行比较,但不幸的是我没有得到相同的结果。

这是我通过运行此代码得到的结果:

click here

当我增加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 的样本,其中 lN 的函数equation as shown on Wikipedia :

DFT equation

在此等式中,nk 都是整数。 k 通常也定义在 0:l-1 范围内,但由于它是周期性的,因此可以将其定义在 -ceil(l/2):ceil(l/2)-1,例如。

d 设置为代码中的一组整数值,我看到了预期的结果:

d = -10:10;
stem(d,abs(Xk(d)))

output

关于matlab - 为什么我的离散时间傅里叶变换不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50496961/

相关文章:

python - 提高 Python 中的 FFT 性能

matlab - for 循环中或执行循环展开时函数的不同行为

python - 如何以图形方式表示 FFT 输出?

python - 正确地没有在 numpy.fft 中获取频率

c - 如何将 DFT 输出缩放到 0.0 到 1.0

C++ FFTW 前向后向 DFT 值被包裹

matlab - 你怎么能在Matlab中绘制贝塞尔曲线

matlab - 删除 MATLAB 中的空单元格

matlab - 如何在 MATLAB 中加载大文件(~150MB)?

r - R中时间序列的离散傅立叶变换