设 x(n)= {2,-1,1,1 }完成如下要求: (1)计算其 DTFT ,并画出[- π , π ]区间的波形 (2)计算 4 点 DFT ,并把结果显示在(1)所画的图形中 (3)对 x(n)补零,计算 64 点 DFT ,并显示结果。 给出matlab程序
时间: 2024-10-19 09:04:53 浏览: 39
使用 DFT 和 IDFT 对周期序列进行卷积。:DFT:离散傅立叶变换 它计算 DTFT 的 N 个等距频率样本。 IDFT:离散傅立叶逆变换-matlab开发
为了帮助您完成这些任务,我们首先需要编写几个MATLAB函数。我们将分别计算离散时间傅立叶变换(DTFT)、DFT(对于4点和64点)以及绘制相应的图像。
```matlab
% 定义x(n)
x = [2, -1, 1, 1];
% (1)计算DTFT
N = length(x);
X_dtft = fftshift(fft(x)) / N; % 注意这里使用fftshift使频率轴对称
% 绘制DTFT波形
f = (-pi : pi/N : pi) - pi/2; % 创建频率轴
plot(f, abs(X_dtft), 'LineWidth', 2); % 绘制幅度谱
xlabel('Frequency (radians/sample)');
ylabel('Magnitude');
title('DTFT of x(n)');
xlim([-pi pi]);
grid on;
% (2)4点DFT
X_dft_4pt = ifft([x; zeros(1, 4-length(x))]); % 补全0,然后计算DFT
X_dft_4pt = X_dft_4pt(1:4); % 取前4个元素
% 在原图上添加4点DFT的结果
hold on;
stem(f, real(X_dft_4pt), 'r', 'filled');
stem(f, imag(X_dft_4pt), 'g', 'filled');
legend('DTFT', '4-point DFT Real', '4-point DFT Imaginary');
% (3)64点DFT
X_dft_64pt = fft(x, 64); % 直接计算64点DFT,不需要补零
% 显示64点DFT的结果
subplot(2, 1, 2);
plot(0:63/64:63, abs(X_dft_64pt), 'LineWidth', 2);
xlabel('Index (normalized)');
ylabel('Magnitude');
title('64-point DFT of x(n)');
grid on;
% 结束hold状态
hold off;
%
阅读全文