以有限长序列xn=[1,0.5,0,0.5,1,1,0 ]为例,计算DFT和IDFT、幅度谱和相位谱。
程序如下:
% 定义序列和采样频率Fs
xn = [1, 0.5, 0, 0.5, 1, 1, 0];
Fs = 20;
% 定义不同的N值
N_values = [8, 32, 64];
% 循环计算DFT和IDFT
for i = 1:length(N_values)
N = N_values(i);
% 计算DFT和IDFT
Xk = fft(xn, N);
xn_restored = ifft(Xk);
% 计算幅度频谱和相位频谱
magnitude_spectrum = abs(Xk);
phase_spectrum = angle(Xk);
% 绘制图像
subplot(length(N_values), 3, (i-1)*3+1);
stem(0:N-1, xn);
xlabel('n');
ylabel('x[n]');
title(['N=', num2str(N), ': Time-domain sequence']);
subplot(length(N_values), 3, (i-1)*3+2);
plot((0:N-1) * Fs/N - Fs/2, fftshift(magnitude_spectrum));
xlabel('Frequency (Hz)');
ylabel('|X(f)|');
title(['Magnitude spectrum of X(k), N=', num2str(N)]);
subplot(length(N_values), 3, (i-1)*3+3);
plot((0:N-1) * Fs/N - Fs/2, fftshift(phase_spectrum));
xlabel('Frequency (Hz)');
ylabel('\angle X(f)');
title(['Phase spectrum of X(k), N=', num2str(N)]);
end
运行上述程序,可以得到三个子图,其中每个子图包含时域序列、幅度频谱和相位频谱的三张图。