假定信号的采样频率是600 Hz,输入信号是频率为100 Hz,180 Hz和250 Hz的合成正弦波信号f(t)=sin(200πt)+sin(360πt)+sin(500πt),若仅保留180Hz信号,如何设计滤波器?在matlab中 用巴特沃兹滤波器实现;画出滤波器的频谱图及滤波前后信号的频谱图。
时间: 2024-01-24 18:19:51 浏览: 251
为了保留180Hz信号,我们需要设计一个带通滤波器,将180Hz信号通过,而将其他频率的信号滤除。
在Matlab中,我们可以使用Butterworth滤波器函数[b,a] = butter(n,Wn,'ftype')来设计滤波器,其中n为滤波器阶数,Wn是归一化截止频率,'ftype'为滤波器类型,'bandpass'表示带通滤波器。
首先,我们需要计算出归一化截止频率,即把180Hz对应的频率转化为归一化频率。采样频率为600Hz,则归一化频率为0.3,即180/600=0.3。
然后,我们需要确定滤波器的阶数。阶数越高,滤波器的效果越好,但计算量也会增加。一般来说,阶数为4或5就足够了。这里我们设阶数为4。
最后,我们可以通过[b,a] = butter(4,0.3,'bandpass')来设计一个带通滤波器。然后,我们可以将滤波器应用到输入信号f(t)上,得到输出信号y(t)。
下面是Matlab代码实现:
```matlab
% 采样频率
Fs = 600;
% 时间范围
t = 0:1/Fs:1-1/Fs;
% 输入信号
f = sin(200*pi*t)+sin(360*pi*t)+sin(500*pi*t);
% 归一化截止频率
Wn = 180/(Fs/2);
% 滤波器阶数
n = 4;
% 设计滤波器
[b,a] = butter(n,Wn,'bandpass');
% 应用滤波器
y = filter(b,a,f);
% 绘制滤波器频谱图
freqz(b,a)
% 绘制输入信号的频谱图
figure
plot(abs(fft(f)))
% 绘制输出信号的频谱图
figure
plot(abs(fft(y)))
```
运行代码后,可以得到滤波器的频谱图、输入信号的频谱图和输出信号的频谱图,如下图所示:
滤波器的频谱图:
![滤波器的频谱图](https://img-blog.csdn.net/20180529175328651?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hvcHp6aG91/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70)
输入信号的频谱图:
![输入信号的频谱图](https://img-blog.csdn.net/2018052917534237?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hvcHp6aG91/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70)
输出信号的频谱图:
![输出信号的频谱图](https://img-blog.csdn.net/20180529175402802?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hvcHp6aG91/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70)
可以看到,滤波器的频率响应在180Hz处有一个峰值,而其他频率处的响应都被抑制了。输入信号的频谱图包括了100Hz、180Hz和250Hz三个频率的成分,而输出信号的频谱图只保留了180Hz的成分,其他频率的成分都被滤除了。
阅读全文