一个序列为x(n)=0.5*cos(11*pi*n/20)+ cos(9*pi*n/20 ) ,使用 FFT 分析其频谱: 1) 使用不同宽度的矩形窗截短该序列为 M 点长度,取 M 分别为: a) M=20 b) M=40 c)M=160 ;观察不同长度的窗对谱分析结果的影响; 2) 使用哈明窗、凯塞窗重做 1) 3) 对三种窗的结果进行理论分析及比较,并绘出相应的幅频特性曲线。请用matlab实现
时间: 2024-03-24 13:36:32 浏览: 99
以下是使用Matlab实现的代码:
```matlab
% 生成序列
n = 0:199;
x = 0.5*cos(11*pi*n/20) + cos(9*pi*n/20);
% FFT分析
M = [20, 40, 160]; % 窗口长度
figure;
for i = 1:length(M)
% 矩形窗
xw = x(1:M(i));
X = abs(fft(xw));
subplot(length(M), 2, 2*i-1);
stem(X);
title(['Rectangular Window (M=', num2str(M(i)), ')']);
% Hamming窗
hw = hamming(M(i));
xw = x(1:M(i)).*hw';
X = abs(fft(xw));
subplot(length(M), 2, 2*i);
stem(X);
title(['Hamming Window (M=', num2str(M(i)), ')']);
end
% Kaiser窗
beta = 3; % Kaiser窗参数
M = 40;
kw = kaiser(M, beta);
xw = x(1:M).*kw';
X = abs(fft(xw));
figure;
subplot(2, 1, 1);
stem(X);
title(['Kaiser Window (M=', num2str(M), ', \beta=', num2str(beta), ')']);
% 理论分析
w = 0:2*pi/M:2*pi*(M-1)/M;
Hr = ones(1, M);
Hh = hamming(M)';
Hk = kaiser(M, beta)';
figure;
plot(w/pi, Hr, w/pi, Hh, w/pi, Hk);
title(['Magnitude Response (M=', num2str(M), ', \beta=', num2str(beta), ')']);
legend('Rectangular Window', 'Hamming Window', 'Kaiser Window');
xlabel('Normalized Frequency (\times\pi rad/sample)');
ylabel('Magnitude');
```
解释一下代码:
首先生成序列 x(n),然后对不同长度的矩形窗和哈明窗进行FFT分析,并绘制幅度谱图。最后使用Kaiser窗进行FFT分析,并绘制幅度谱图和理论幅度响应曲线。
运行代码后,会生成三个图形窗口,分别显示矩形窗、哈明窗和Kaiser窗的FFT分析结果和幅度响应曲线。可以看到,使用不同长度的窗口对频谱分析结果有很大影响。同时,Kaiser窗的幅度响应比矩形窗和哈明窗更加平滑。
阅读全文