前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何确定插值滤波器的阶数

如何确定插值滤波器的阶数

作者头像
猫叔Rex
发布2020-11-19 11:21:37
1.5K0
发布2020-11-19 11:21:37
举报
文章被收录于专栏:科学计算科学计算

  在信号处理中,滤波器的系数我们往往都是通过MATLAB来设计,只要我们知道滤波器的通带截止频率和阻带起始频率,就可以通过MATLAB中的fdatool(在MATLAB2020中使用filterDesigner)来设计滤波器了。

  我们使用归一化的参数来设计,通带截止频率是025,阻带起始频率是0.3,通带内纹波是0.2,阻带衰减是60dB,参数设置如下:

image-20201117215623551

  那么问题来了,对于插值滤波器,如何确定通带和阻带的频率呢?这就涉及到我们刚开始学习数字信号处理时的插值和抽取理论。当信号抽取时,在数字频率上,信号的频谱是展宽的,当信号插值时,在数字频率上,信号的频谱是压缩的。这里我们强调数字频率,不是模拟频率,因为100MHz的采样率去采中频10MHz、带宽1MHz的信号,那么抽取2倍后,这个信号的频率还是10MHz,带宽还是1MHz,那为什么说数字频率上频谱展宽了呢?因为数字频率的2pi对应采样率。

  我们以信号处理书上这个经典的例子为例,原始信号的带宽是2pi/3,采样率是2pi,经过3倍抽取后,采样率由fs变为fs/3;而抽取后信号的采样率依旧对于数字域的2pi,因此原先的fs就对应6pi,信号带宽也就变成了2pi。

image-20201117221455842

  而抽取滤波器则刚好相反,对于3倍的插值滤波器,信号带宽在数字频率上,缩小了1/3。也就是原来0~pi的区间缩小到0~pi/3,因此信号的截止频率就是pi/3,我们在设计滤波器时,直接指定截止频率是pi/3即可,至于阻带起始频率,我们可以设计的比通带截止频率稍大一些即可,同时还要考虑滤波器阶数,如果过渡带太窄了,滤波器阶数会太高。像我们上面设计的那个滤波器,正好可以适用于4倍插值滤波器。

  这里我们再提供一种解决方案,这种方法也是我强烈推荐的,就是当我们对一种设计没有头绪时,可以参考mathworks给出的设计。从哪参考呢?当然是MATLAB程序。我们知道Matlab的一个强大之处在于给我们提供了很多API可以调用,为我们节省了不少时间,而且大多数的函数我们都是可以看到源码的。比如我们今天所说的插值滤波器,可以直接使用resample函数,比如要对向量sig插值4倍,就可以直接使用sig2 = resample(sig, 4, 1)。这次我们再打开resample这个函数,可以看到:

image-20201117222730941

这里的N是10,也就是说,如果是p倍插值,Matlab给出的插值滤波器阶数是2x10xp,也就是4倍插值滤波器对应阶数是80阶。再用firls来设计滤波器,最后再给滤波器加个kaiser窗。其实我们也可以直接使用fir2函数来设计,就是把图中高亮的行换成:

代码语言:javascript
复制
h = fir2(L - 1, [0 2*fc 2*fc 1], [1 1 0 0]);

fir2函数默认就是加了hamming窗的。使用这种方法设计的滤波器频响如下:

image-20201117223248809

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 傅里叶的猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档