已知x(n) = 1 n = 0,1,…, 63 ,对x(n) 进行 DTFT 变换和 64 点 DFT 变换,并绘出它们的 幅频响应图。
时间: 2024-12-11 09:38:20 浏览: 40
在MATLAB中,你可以使用`fft`函数来进行离散傅立叶变换(DFT),而`fftshift`函数可以帮助调整谱图的显示方式。对于序列长度为N=64的情况,DFT的结果是对称的,所以计算64点DFT时通常只取一半的频率分量。
首先,我们需要定义信号x(n),然后计算DFT:
```matlab
% 定义信号x(n)
n = 0:63;
x = ones(1, 64); % x(n) = 1 for n = 0 to 63
% 计算64点DFT
X_dft = fft(x);
% 使用fftshift使幅度在中心位置对齐
X_dft_shifted = fftshift(X_dft);
% 计算DTFT (理论上的无限长序列DFT)
% 对于有限长度序列,我们实际上是在做周期扩展的DFT
X_dtft = ifftshift(X_dft_shifted); % 因为fftshift后需要ifftshift回来
% 绘制幅频响应图
figure;
subplot(2, 1, 1);
plot(abs(X_dft_shifted), 'LineWidth', 2); % DFT的幅度图
title('64点DFT幅频响应');
xlabel('Frequency Index');
ylabel('Magnitude');
subplot(2, 1, 2);
plot(freqz(x), 'LineWidth', 2); % DTFT的幅度图(使用内置freqz函数)
title('DTFT幅频响应');
xlabel('Normalized Frequency [0, 1]');
ylabel('Magnitude');
```
这段代码将会分别绘制出64点DFT和DTFT的幅频响应图。`freqz(x)`函数用于计算DTFT并返回频率轴数据。注意,由于DFT在实际应用中通常是针对有限长度序列的,因此DTFT这里实际上是周期扩展后的结果。
阅读全文