为什么我的离散时间傅里叶变换不正确?
Why is my discrete time Fourier transform incorrect?
我创建了一个代码来尝试计算函数的 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(x)
的连续时间傅里叶变换进行比较来计算 cos(n)
的离散时间傅里叶变换, 但不幸的是我没有得到相同的结果。
这是我通过 运行 这段代码得到的:
当我增加 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
在 equation as shown on Wikipedia 中采用 N
的函数:
在这个等式中,n
和k
都是整数。 k
通常也在 0:l-1
范围内定义,但由于它是周期性的,因此可以将其定义在 -ceil(l/2):ceil(l/2)-1
范围内,例如
在您的代码中将 d
设置为一组整数值,我看到了预期的结果:
d = -10:10;
stem(d,abs(Xk(d)))
首先,您显示的结果对于余弦 window 在 0 和 2π 之间的 DTFT 是正确的。我感觉您对计算从 -∞ 到 +∞ 的余弦的 DFT 很感兴趣, 已经证明了这一点。
我认为简要讨论一下余弦的傅里叶变换、windowed 余弦和 DTFT 会很有用。
余弦的傅里叶变换是
其中余弦定义为t = -∞到+∞,可以通过DFT计算。但是 windowed 余弦
的傅里叶变换
是
其中 N 是 window(上面的 1)的周期数。在 MATLAB 中绘制此图会产生
所以,在 MATLAB 中,如果你想计算余弦的 DTFT,你的输入应该是从 t = -∞ 到 +∞ 的采样余弦,你的结果应该类似于
因为 DTFT 是周期性的,周期为 2π 而 DFT 不是。余弦的 DTFT 是
我创建了一个代码来尝试计算函数的 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(x)
的连续时间傅里叶变换进行比较来计算 cos(n)
的离散时间傅里叶变换, 但不幸的是我没有得到相同的结果。
这是我通过 运行 这段代码得到的:
当我增加 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
在 equation as shown on Wikipedia 中采用 N
的函数:
在这个等式中,n
和k
都是整数。 k
通常也在 0:l-1
范围内定义,但由于它是周期性的,因此可以将其定义在 -ceil(l/2):ceil(l/2)-1
范围内,例如
在您的代码中将 d
设置为一组整数值,我看到了预期的结果:
d = -10:10;
stem(d,abs(Xk(d)))
首先,您显示的结果对于余弦 window 在 0 和 2π 之间的 DTFT 是正确的。我感觉您对计算从 -∞ 到 +∞ 的余弦的 DFT 很感兴趣,
我认为简要讨论一下余弦的傅里叶变换、windowed 余弦和 DTFT 会很有用。
余弦的傅里叶变换是
其中余弦定义为t = -∞到+∞,可以通过DFT计算。但是 windowed 余弦
的傅里叶变换是
其中 N 是 window(上面的 1)的周期数。在 MATLAB 中绘制此图会产生
所以,在 MATLAB 中,如果你想计算余弦的 DTFT,你的输入应该是从 t = -∞ 到 +∞ 的采样余弦,你的结果应该类似于
因为 DTFT 是周期性的,周期为 2π 而 DFT 不是。余弦的 DTFT 是