xn = [1,1,1,1]; XK4 = fft(xn,4); XK8 = fft(xn,8); XK16 = fft(xn,16); XK32 = fft(xn,32);绘制四个幅频和相频的matlab程序
时间: 2024-10-22 21:22:33 浏览: 30
matlab fft变换
在MATLAB中,你可以使用`fft`函数对一维数组`xn`计算不同长度的离散傅立叶变换(DFT),然后通过`plot`函数绘制幅频谱和相频谱图。以下是针对给定的`xn`数组,计算并绘制4种不同点数FFT结果的简单示例:
```Matlab
% 定义输入信号
xn = [1, 1, 1, 1];
% 计算不同长度的FFT
fs = length(xn); % 真实采样率,假设等于序列长度
XK4 = fft(xn, 4); % DFT点数为4
XK8 = fft(xn, 8);
XK16 = fft(xn, 16);
XK32 = fft(xn, 32);
% 获取幅值和角度
abs_XK4 = abs(XK4) / fs; % 幅值
angle_XK4 = unwrap(angle(XK4)); % 相位(unwrap消除π周跳)
abs_XK8 = abs(XK8) / fs;
angle_XK8 = unwrap(angle(XK8));
abs_XK16 = abs(XK16) / fs;
angle_XK16 = unwrap(angle(XK16));
abs_XK32 = abs(XK32) / fs;
angle_XK32 = unwrap(angle(XK32));
% 绘制幅频谱
figure;
subplot(2, 2, 1)
plot(freqs(XK4), abs_XK4);
title('4-point FFT (Abs)');
xlabel('Frequency (normalized)');
ylabel('Magnitude');
subplot(2, 2, 2)
plot(freqs(XK8), abs_XK8);
title('8-point FFT (Abs)');
subplot(2, 2, 3)
plot(freqs(XK16), abs_XK16);
title('16-point FFT (Abs)');
subplot(2, 2, 4)
plot(freqs(XK32), abs_XK32);
title('32-point FFT (Abs)');
% 绘制相频谱
figure;
subplot(2, 2, 1)
plot(freqs(XK4), angle_XK4);
title('4-point FFT (Phase)');
subplot(2, 2, 2)
plot(freqs(XK8), angle_XK8);
subplot(2, 2, 3)
plot(freqs(XK16), angle_XK16);
subplot(2, 2, 4)
plot(freqs(XK32), angle_XK32);
% 显示频率范围
xlim([0, 1]);
% 设置轴标签和其他细节
%
阅读全文