用matlab继续写出对y=sin(2*pi*20*x)+sin(2*pi*100*x)进行矩形窗、Blackman 窗、汉宁窗、汉明窗的低通滤波,截止频率为50的过程,并写出画该函数滤波后频谱图的代码
时间: 2023-10-21 10:20:39 浏览: 93
以下是对 y=sin(2*pi*20*x)+sin(2*pi*100*x) 进行矩形窗、Blackman 窗、汉宁窗、汉明窗的低通滤波,截止频率为50的 MATLAB 代码:
```matlab
% 生成数据
fs = 1000; % 采样频率
t = 0:1/fs:1-1/fs; % 时间序列
x = sin(2*pi*20*t) + sin(2*pi*100*t); % 原始信号
% 计算滤波器系数
fc = 50; % 截止频率
N = 101; % 滤波器阶数
h_rect = fir1(N-1, fc/(fs/2), 'low', rectwin(N)); % 矩形窗
h_blackman = fir1(N-1, fc/(fs/2), 'low', blackman(N)); % Blackman 窗
h_hanning = fir1(N-1, fc/(fs/2), 'low', hann(N)); % 汉宁窗
h_hamming = fir1(N-1, fc/(fs/2), 'low', hamming(N)); % 汉明窗
% 应用滤波器
y_rect = filter(h_rect, 1, x); % 矩形窗
y_blackman = filter(h_blackman, 1, x); % Blackman 窗
y_hanning = filter(h_hanning, 1, x); % 汉宁窗
y_hamming = filter(h_hamming, 1, x); % 汉明窗
% 绘制滤波后的信号和频谱图
figure;
subplot(2,2,1);
plot(t, y_rect);
xlabel('Time (s)');
title('Rectangular Window');
subplot(2,2,2);
plot(t, y_blackman);
xlabel('Time (s)');
title('Blackman Window');
subplot(2,2,3);
plot(t, y_hanning);
xlabel('Time (s)');
title('Hanning Window');
subplot(2,2,4);
plot(t, y_hamming);
xlabel('Time (s)');
title('Hamming Window');
figure;
subplot(2,2,1);
periodogram(y_rect, [], [], fs);
title('Rectangular Window');
subplot(2,2,2);
periodogram(y_blackman, [], [], fs);
title('Blackman Window');
subplot(2,2,3);
periodogram(y_hanning, [], [], fs);
title('Hanning Window');
subplot(2,2,4);
periodogram(y_hamming, [], [], fs);
title('Hamming Window');
```
运行以上代码,即可得到对应的滤波后信号和频谱图。其中,`fir1` 函数用于计算 FIR 滤波器系数,`filter` 函数用于应用滤波器,`periodogram` 函数用于绘制频谱图。
阅读全文