如何在matlab用带通滤波器进行滤波?
主要内容是在知乎上看到的一篇文章 链接: https://zhuanlan.zhihu.com/p/152647067?from_voters_page=true.可以直接看这篇文章。
以带通滤波器——巴特沃斯滤波器为例
matlab给出的代码如下:[n,Wn] = buttord(Wp,Ws,Rp,Rs)
要理解这里面的参数需要补充一些知识:一个带通滤波器的幅频特性图中,分为通带、阻带、过渡带三大部分。
通带截止频率和阻带截止频率对这三部分进行划分,二者之间的部分即为过渡带。
一、如何设计带通滤波器?
1. Wp,Ws分别是通带频率和阻带截止频率
这两个频率是指同一侧的通带和阻带频率,比如设计一个40Hz~100Hz的带通滤波器
Wp1=40Hz,Wp2=100Hz,代表Wp1~Wp2之间是通带
Ws1=20Hz,Ws2=120Hz,代表(0到20Hz)和(120Hz到正无穷)为阻带
**过渡带宽度=阻带边缘频率-通带边缘频率(高频的一侧)**=Ws2-Wp2=20Hz
2. Rp,Rs是描述通带、阻带幅值的两个重要参量
Rp是描述**通带波纹(起伏程度)**的一个参量,通带纹波是指在滤波器的频响中通带的最大幅值和最小幅值之间的差值,正常的纹波一般小于1db。
*通带波纹当然越小越好,这样通带内频率的幅度都基本稳定在单倍幅度上,因此Rp是允许的通带波纹的最大值。*
Rs是描述**阻带衰减**的一个参量
*阻带衰减越大越好,衰减越大代表对不想要的信号频率成分的滤除效果越好,因此Rs是允许的需要达到的阻带衰减的最小值。*
3. n,Wn是设计得到滤波器的阶数和截止频率
下面是一个带通滤波器的一个设计代码案例:
Wp = [40 100]/500;
Ws = [20 120]/500;
Rp = 3;
Rs = 40;
[n,Wn] = buttord(Wp,Ws,Rp,Rs)
上述在Wp,Ws的赋值过程中进行了归一化,因此run之后得到的Wn的值也是归一化过的
n = 12
Wn = 0.0799 0.2002
二、如何绘制带通滤波器的幅频响应?
可以先调用butter()函数返回巴特沃斯滤波器传递函数的零极点系数和增益。
[z,p,k] = butter(n,Wn);
sos = zp2sos(z,p,k);
freqz(sos,512,1000)
title(sprintf('n = %d Butterworth Lowpass Filter',n))
三、如何使用带通滤波器对一组数据进行滤波?
y = filter(b,a,x)
利用分子和分母系数 b 和 a 定义的有理传递函数对输入数据 x 进行滤波。
这里作者附了一个百度知道的链接:设计一个MATLAB带通滤波器代码链接: https://zhidao.baidu.com/question/423138525.html.
四、如何合理确定滤波器的参数?
我们已知所需要的通带截止频率,阻带截止频率,可以通过一个便捷的方式由matlab直接确定滤波器的参数。输入fdatool命令,具体方法可参见以下博客。
Matlab fir滤波(conv)
matlab中fdatool使用说明
- 滤波的阶数
滤波器的阶数,就是滤波几次的意思,一阶,就是对谐波过滤一次,滤波器的阶数越高,滤波效果越好,但是,成本也会成倍的增加,因此,选择合适的阶数是非常重要的。
今天的文章学习如何在matlab用带通滤波器进行滤波分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/85395.html