假定信号的采样频率是600 Hz,输入信号是频率为100 Hz,180 Hz和250 Hz的合成正弦波信号f(t)=sin(200πt)+sin(360πt)+sin(500πt),若要保留100 Hz,250 Hz两个信号,如何设计滤波器?在matlab中 用巴特沃兹滤波器实现;画出滤波器的频谱图及滤波前后信号的频谱图。
时间: 2024-01-24 19:19:55 浏览: 127
为了保留100 Hz和250 Hz两个信号,我们需要设计一个带通滤波器。由于采样频率是600 Hz,我们可以选择500 Hz为通带上限,80 Hz为通带下限。
在Matlab中设计巴特沃兹带通滤波器的代码如下:
```matlab
% 设置参数
fs = 600; % 采样频率
f1 = 80; % 通带下限
f2 = 500; % 通带上限
Rp = 1; % 通带最大衰减
Rs = 60; % 阻带最小衰减
% 计算滤波器阶数和截止频率
[n,Wn] = buttord([f1,f2]/(fs/2),[f1-20,f2+20]/(fs/2),Rp,Rs);
% 根据阶数和截止频率设计滤波器
[b,a] = butter(n,Wn);
% 滤波前的信号
t = 0:1/fs:1-1/fs; % 生成时间序列
x = sin(200*pi*t) + sin(360*pi*t) + sin(500*pi*t); % 生成信号
% 绘制滤波前的信号频谱图
figure;
subplot(2,1,1);
plot(abs(fft(x)));
title('原始信号频谱图');
xlabel('频率(Hz)');
% 滤波
y = filter(b,a,x); % 进行滤波
% 绘制滤波器的频谱图
[h,f] = freqz(b,a,512,fs);
subplot(2,1,2);
plot(f,abs(h));
title('滤波器频谱图');
xlabel('频率(Hz)');
% 绘制滤波后的信号频谱图
figure;
subplot(2,1,1);
plot(abs(fft(y)));
title('滤波后信号频谱图');
xlabel('频率(Hz)');
% 绘制滤波前后信号时域图
subplot(2,1,2);
plot(t,x,'b',t,y,'r');
legend('原始信号','滤波后信号');
title('时域图');
xlabel('时间(秒)');
```
运行结果如下图所示:
![滤波前后信号频谱图和时域图](https://img-blog.csdn.net/20180821104604815?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Rlc3QxOTk1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)
阅读全文