Kaiser窗口FIR滤波器设计估算参数

Kaiser窗⼝FIR滤波器设计估算参数
kaiserord函数的句法有如下⼏种:
①[n,Wn,beta,ftype] = kaiserord(f,a,dev)
闪蒸塔
②[n,Wn,beta,ftype] = kaiserord(f,a,dev,fs)
③c = kaiserord(f,a,dev,fs,'cell')
kaiserord函数返回⼀个滤波阶数n和beta参数来指定⼀个kaiser窗⼝,供后期的fir1函数使⽤。给定⼀组频域中的规范(其实就是给kaiserord函数⼀些参数,这些参数限定了kaiser窗的⼀些性质),kaiserord函数将会估计出近似满⾜给定规范的最⼩的滤波器阶数。同时,kaiserord函数将会把给定的规范转换为通带和阻带纹波,并将截⽌频率转换为窗⼝FIR滤波器设计所需的形式。
[n,Wn,beta,ftype] = kaiserord(f,a,dev) 得到近似阶数n,归⼀化的频带边缘Wn,并且满⾜输⼊规范的权重f、a和dev。f是⼀个band edge的⽮量。a是⼀个⽮量,指定由f定义的带上的期望幅度。f的长度是a的两倍(最⼩是两倍),f和a⼀起定义⼀个期望的分段常数响应函数。dev是⼀个向量,其⼤⼩与a相同,⽤于指定每个频带的输出滤波器的频率响应与其期望幅度之间的最⼤允许误差或偏差。dev指定通带纹波和阻带衰减。可以指定dev中的每个数都为正数,表⽰绝对滤波器增益(不是以分贝为单位)。注意:如
果在向量dev中指定了不同的带偏差,则使⽤最⼩指定偏差,因为Kaiser窗⼝⽅法被限制为产⽣所有带中具有最⼩偏差的滤波器。
fir1函数可以使⽤kaiserord函数返回的阶数n、频率向量Wn、多频带幅度类型ftype和Kaiser窗⼝参数beta。ftype参数供fir1使⽤:对于⾼通滤波器,它等于'⾼';对于带阻滤波器,它等于'停⽌'。对于多频带滤波器,当第⼀频带是阻带(从f = 0开始)时,它可以等于'DC-0'或当第⼀频带是通带时它可以等于'DC-1'。
要设计⼀个⼤致符合kaiser参数f,a和dev给出的规格的FIR滤波器b,可以使⽤以下命令:
b = fir1(n,Wn,kaiser(n+1,beta),ftype,'noscale')
[n,Wn,beta,ftype] = kaiserord(f,a,dev,fs)使⽤以Hz为单位的采样频率fs。 如果未指定参数fs,或者将其指定为空向量[],则默认为2 Hz,奈奎斯特频率为1 Hz。 可以使⽤此语法指定缩放到特定应⽤程序采样频率的波段边缘。 f中的频带边缘必须从0到fs / 2。
c = kaiserord(f,a,dev,fs,'cell')是⼀个单元数组,c中元素是fir1的参数。注意:在某些情况下,kaiserord低估或⾼估了阶数n。 如果过滤器不符合规格,请尝试更⾼的阶数,例如n+1,n+2等,或尝试更低的阶数例如n-1,n-2等。如果截⽌频率或奈奎斯特频率接近0,或者如果dev很⼤(⼤于10%),则结果不准确。
看到这⼉的时候,还是对这些参数很迷糊,不知道这些参数是⼲什么的、有什么意义。下⾯是⽤matlab做仿真,从仿真图上可以慢慢体会到这些参数在滤波器设计时的作⽤。
举例说明
Kaiser窗⼝低通滤波器设计
设计⼀个低通滤波器,通带定义为0到1 kHz,阻带定义为1.5kHz到4 kHz。指定5%的通带纹波和40 dB的阻带衰减。
fsamp = 8000;
fcuts = [1000 1500];
mags = [1 0];
devs = [0.05 0.01];
[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fsamp);
我们来自未来2电影hh = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');
freqz(hh)
仿真图如下:
得到的仿真结果数据如下图:
Kaiser窗⼝带通滤波器设计
设计⼀个奇数长度的带通滤波器。请注意,奇数长度表⽰偶数顺序,因此输⼊fir1必须是整偶数。
fsamp = 8000;我们这帮人作文
fcuts = [1000 1300 2210 2410];
mags = [0 1 0];
devs = [0.01 0.05 0.01];
[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fsamp);
n = n + rem(n,2);
hh = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');
[H,f] = freqz(hh,1,1024,fsamp);
plot(f,abs(H))
grid
仿真图如下:
仿真的到的结果数据如下图所⽰:
对参数的说明
现在是不是对kaiserord函数中的参数有了⼀些认识了? 下⾯就Kaiser窗⼝带通滤波器设计这个例⼦的程序来进⾏说明。
⾸先来看fsamp参数,当把这个参数的值改为4000会发⽣什么事情呢?
异型淋巴细胞
设置的fcuts是带边缘频率,最⼤达到2410,这个值是⼤于fsamp(fs)的⼆分之⼀的,所以报错。 那么把这个参数改为16000会如何呢?智能卡阅读器>以和为贵13
右下⾓的值变为了8000(fs的⼆分之⼀) ,所以这个图显⽰了fs⼀半的情况,那还有⼀半的情况呢?其实另⼀半和这个情况是⼀样的,只不过是关于竖轴对称⽽已。
关于fcuts和mags参数,这个就⽐较好理解了。我们从带通滤波器设计的第⼀个仿真图来进⾏说明。参数设置为fcuts=[1000 1300 2210 2410]、mags=[0 1 0]。我们从图中可以看出,在1300-2210之间是通带,在1000-1300和2210-2410之间是通带向阻带转变的区间。我们可以这么理解,采样率为8000,它的⼀半为4000,在0-4000这个范围⾥⾯设置通或者阻,在这⾥我们设置阻带为0-1000(mags对应位置的参数为0),1000-1300向通带转变(就是⼀个过渡带,没有mags参数与之对应),
1300-2210为通带(mags对应位置的参数为1),2210-2410向阻带转变,2410-4000为阻带(mags对应位置的参数为0)。如果将fcuts和mags设置为fcuts = [700 800 1200 1300 2700 2800 3200 3300]、mags = [0 1 0 1 0],结果会是怎样呢?如下图所⽰:
devs参数表⽰的是某⼀段波形的平整度。在带通的例⼦⾥,如果我们把devs设置为devs=[0.1 0.5 0.1],则仿真出来的图形如下:
可以看到,通带和阻带的部分,起伏都⽐较⼤。

本文发布于:2024-09-23 21:26:55,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/65655.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:参数   阻带   频率   指定   阶数   通带   函数
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议