急!Matlab里面模拟滤波器函数怎么使用啊?谢谢!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急!Matlab里面模拟滤波器函数怎么使用啊?谢谢!相关的知识,希望对你有一定的参考价值。
我用buttord和buffer得到了拉普拉斯变换的分子分母多项式系数b,a。那接下去我想用这个滤波器去滤波处理一个信号,请问怎么编写程序啊?
我想设计一个模拟滤波器的话怎么做?就是从截止频率到无穷都是截止的。谢谢!
我当时学时也很困惑怎么用,后来我做的尝试,我给你一个例子看看吧,是我学习时自己写的
设计一个高通滤波器,并检验它的性能
采样率为10kHZ
阻带边缘为1.5Khz,衰减为40bB
通带边缘为2kHz,波纹为3Db
>>Fs=1e4;
>>fs=1.5e3;
>>fp=2e3;
>>As=40;
>>Rp=3;
>>wp=2*fp/Fs;
>>ws=2*fs/Fs;
>>[N,wn]=cheb2ord(wp,ws,Rp,As);
>>[b,a]=cheby2(N,As,wn,'high');
>>[db,mag,pha,grd,w]=freqz_m(b,a);
>> subplot(2,2,1);plot(w/pi,mag);
>> axis([0,1,0,1]);
>> setX([0 0.3 0.4 1]);
>>setY([0.01 0.7279 1])
>> title('Magnitude Response');
>> subplot(2,2,2);plot(w/pi,db);
>> axis([0 1 -70 0])
>> setX([0 0.3 0.4 1])
>> setY([-40 -2.7589])
>> title('Magnitude Response in dB');
然后给你一个信号x=cos(0.2*pi*n);
>>n=0:200;
>>x=cos(0.6*pi*n);
>>y=filter(b,a,x);
>>subplot(2,2,3);plot(n,x);
>>subplot(2,2,4);plot(n,y);
>>x1=fft(x,201);
>>x11=abs(x1);
>>subplot(2,2,1);stem(n,x11);
>>y1=fft(y,201);
>>y11=abs(y1);
>>subplot(2,2,2);stem(n,y11);
>>setX([0 60 140 201])
>>title('FFT of y');
>>subplot(2,2,1);stem(n,x11);
>>setX([0 60 140 201])
>>title('FFT of x');
>>g=x11-y11;
>>subplot(2,2,3);stem(n,g);
你运行一下,就可以看到结果,刚好把此信号滤掉
给你一个设计思路,你改变截止频率和阻带衰减就可以了
>> %假设截止频率为W,我随便定义一下
>> %比如wp=0.3*pi;ws=0.4*pi
>> wp=0.3*pi;ws=0.4*pi;
>> %阻带衰减为50分贝
>> %通带波纹为0.2分贝
>> As=50;Rp=0.2;
>> %那么可以用两个函数得到系数a,b
>> [N,wn]=buttord(wp/pi,ws/pi,Rp,As);
>> [b,a]=butter(N,wn);
>> %该滤波器就是从截止频率到无穷远都不响应
希采纳 参考技术A 其实滤波本身很简单:
x=filter(b, a ,yy);
yy是你要滤的信号,注意它是个矢量,即数组。b和a是上面式子里的B,A。
滤波器的关键是在设计,即如何求B,A。你上面的那几句是远远不够的。详细的我一下说不清楚。建议你在网上找几个具体的例子体会一下就能掌握。
simulink里的滤波器是简单和直观,但是没有办法把它转换到脚本或函数里,而很多时候我们依然是要写程序的。 参考技术B 虽然matlab提供了很多产生低通滤波器的函数,而且也提供了将低通转换为高通、带通等滤波器的方法函数,以及数字化的函数。但是为了简化设计及设计者方便考虑,matlab还提供了更为简便的产生各种滤波器的方法。
1 besself
功能:贝塞尔(Bessel)模拟滤波器设计。
格式:[b,a] = besself(n,Wn)
[b,a] = besself(n,Wn,'ftype')
[z,p,k] = besself(...)
[A,B,C,D] = besself(...)
说明:besself函数可以设计模拟低通、高通、带通和带阻贝塞尔(Bessel)滤波器。
[b,a] = besself(n,Wn)返回截止频率为Wn(单位为弧度/秒)的n阶贝塞尔模拟
低通滤波器,b、a分别为滤波器传递函数的分子和分母系数向量(降幂排列)。
当Wn为二元向量,即Wn=[W1 W2] (W1<W2)时,[b,a] = besself(n,Wn)返
回一个2n阶模拟带通滤波器,其通带为W1<ω< W2。
[b,a] = besself(n,Wn,'ftype')用于设计高通和带阻滤波器,即
·ftype=high时,返回截止频率为Wn的高通滤波器;
·ftype=stop时,Wn=[W1 W2] (W1<W2),返回阻带为W1<ω< W2的模
拟带阻滤波器。
[z,p,k] = besself(...)得到滤波器的零-极点增益模型,z、p、k分别为零点向量、
极点向量和增益系数。
[A,B,C,D] = besself(...)得到滤波器的状态空间模型。
2 butter
功能:巴特沃思(Butterworth)模拟/数字滤波器设计。
格式:[b,a] = butter(n,Wn)
[b,a] = butter(n,Wn,'ftype')
[b,a] = butter(n,Wn,'s')
[b,a] = butter(n,Wn,'ftype','s')
[z,p,k] = butter(...)
[A,B,C,D] = butter(...)
说明:butter函数可以设计模拟或数字的低通、高通、带通和带阻Butterworth滤波
器。Butterworth滤波器可以使通带内的幅频响应最大程度地平坦,但这也使
得它的通带到阻带的过渡过程较慢。在这方面Chebyshev滤波器和椭圆滤波
器性能较好。
在设计数字滤波器时,butter函数中的参数Wn与besself函数有很大的区别,
它是一个相对量,其定义区间为Wn∈[0,1],其中1对应于0.5fs,fs为采样
频率(单位Hz);在设计模拟滤波器时,Wn采用真实频率,单位为Hz。
[b,a] = butter(n,Wn)返回截止频率为Wn(单位为弧度/秒)的n阶Butterworth
数字低通滤波器,b、a分别为滤波器传递函数的分子和分母系数向量(降幂
排列)。
当Wn为二元向量,即Wn = [W1 W2] (W1<W2)时,[b,a] = butter(n,Wn)返
回一个2n阶数字带通滤波器,其通带为W1<ω< W2。
[b,a] = butter(n,Wn,'ftype')用于设计数字高通和数字带阻滤波器,即
·ftype = high时,返回截止频率为Wn的数字高通滤波器;
·ftype =stop时, Wn = [W1 W2] (W1<W2),返回阻带为W1<ω< W2的
数字带阻滤波器
[b,a] = butter(n,Wn,'s')和[b,a] = butter(n,Wn,'ftype','s')中加入了选项‘s’,用于
设计各种模拟Butterworth滤波器。
[z,p,k] = butter(...)得到滤波器的零-极点增益模型,z、p、k分别为零点向量、
极点向量和增益系数。
[A,B,C,D] = butter(...)得到滤波器的状态空间模型
3 cheby1
功能:切比雪夫(Chebyshev)I型模拟/数字滤波器设计。
格式:[b,a] = cheby1(n,Rp,Wn)
[b,a] = cheby1(n,Rp,Wn,'ftype')
[b,a] = cheby1(n,Rp,Wn,'s')
[b,a] = cheby1(n,Rp,Wn,'ftype','s')
[z,p,k] = cheby1(...)
[A,B,C,D] = cheby1(...)
说明:cheby1函数可以设计模拟或数字的低通、高通、带通和带阻ChebyshevI型滤
波器。ChebyshevI型滤波器通带内为等波纹,阻带内单调,通带到阻带的过
渡过程较快,代价是通带内波纹较大。
在设计数字滤波器时,cheby1函数中的参数Wn是一个相对量,其定义区间
为Wn∈[0,1],其中1对应于0.5fs,fs为采样频率(单位Hz);在设计模拟
滤波器时,Wn采用真实频率,单位为Hz。
[b,a] = cheby1(n,Rp,Wn)返回截止频率为Wn(单位为弧度/秒)的n阶
ChebyshevI型数字低通滤波器,通带内波纹为Rp。b、a分别为滤波器传递函
数的分子和分母系数向量(降幂排列)。当Wn为二元向量,即Wn=[W1 W2]
(W1<W2)时,[b,a] = cheby1(n,Rp,Wn)返回一个2n阶数字带通滤波器,其通
带为W1<ω< W2。
[b,a] = cheby1(n,Rp,Wn,'ftype')用于设计数字高通和数字带阻滤波器,即
·ftype = high时,返回截止频率为Wn的数字高通滤波器;
·ftype = stop时, Wn = [W1 W2] (W1<W2),返回阻带为W1<ω< W2的
数字带阻滤波器
[b,a] = cheby1(n,Rp,Wn,'s')和[b,a] = cheby1(n,Rp,Wn,'ftype','s')中加入了选项
‘s’,用于设计各种模拟ChebyshevI型滤波器。
[z,p,k] = cheby1(...)得到滤波器的零-极点增益模型,z、p、k分别为零点向量、
极点向量和增益系数。
[A,B,C,D] = cheby1(...)得到滤波器的状态空间模型。
4 cheby2
功能:切比雪夫(Chebyshev)II型模拟/数字滤波器设计。
格式:[b,a] = cheby2(n,Rs,Wn)
[b,a] = cheby2(n,Rs,Wn,'ftype')
[b,a] = cheby2(n,Rs,Wn,'s')
[b,a] = cheby2(n,Rs,Wn,'ftype','s')
[z,p,k] = cheby2(...)
[A,B,C,D] = cheby2(...)
说明:cheby2函数可以设计模拟或数字的低通、高通、带通和带阻ChebyshevII型
滤波器。与ChebyshevI型滤波器不同,ChebyshevII型滤波器通带内为单调,
阻带内等波纹。它的通带到阻带的过渡过程比较快,代价是通带内波纹较大。
在设计数字滤波器时,cheby2函数中的参数Wn是一个相对量,其定义区间为
Wn∈[0,1],其中1对应于0.5fs,fs为采样频率(单位Hz);在设计模拟滤波器
时,Wn采用真实频率,单位为Hz。
[b,a] = cheby2(n,Rs,Wn)返回截止频率为Wn(单位为弧度/秒)的n阶
ChebyshevII型数字低通滤波器,阻带内波纹为Rs。b、a分别为滤波器传递
函数的分子和分母系数向量(降幂排列)。当Wn为二元向量,即Wn=[W1 W2]
(W1<W2)时,[b,a] = cheby2(n,Rs,Wn)返回一个2n阶数字带通滤波器,其通带
为W1<ω< W2。
[b,a] = cheby2(n,Rs,Wn,'ftype')用于设计数字高通和数字带阻滤波器,即
·ftype = high时,返回截止频率为Wn的数字高通滤波器;
·ftype = stop时, Wn = [W1 W2] (W1<W2),返回阻带为W1<ω< W2的
数字带阻滤波器。
[b,a] = cheby2(n,Rs,Wn,'s')和[b,a] = cheby2(n,Rs,Wn,'ftype','s')中加入选项‘s’,
用于设计各种模拟ChebyshevII型滤波器。
[z,p,k] = cheby2(...)得到滤波器的零-极点增益模型,z、p、k分别为零点向量、
极点向量和增益系数。
[A,B,C,D] = cheby2(...)得到滤波器的状态空间模型。
5 ellip
功能:椭圆模拟/数字滤波器设计。
格式:[b,a] = ellip(n,Rp,Rs,Wn)
[b,a] = ellip(n,Rp,Rs,Wn,'ftype')
[b,a] = ellip(n,Rp,Rs,Wn,'s')
[b,a] = ellip(n,Rp,Rs,Wn,'ftype','s')
[z,p,k] = ellip(...)
[A,B,C,D] = ellip(...)
说明:ellip函数可以设计模拟或数字的低通、高通、带通和带阻椭圆滤波器。椭圆
滤波器的通带和阻带内均为等波纹,通带到阻带的过渡过程很快。在给定的
性能指标下,椭圆滤波器能以最低的阶实现。
在设计数字滤波器时,ellip函数中的参数Wn是一个相对量,其定义区间为
Wn∈[0,1],其中1对应于0.5fs,fs为采样频率(单位Hz);在设计模拟滤波
器时,Wn采用真实频率,单位为Hz。
[b,a] = ellip(n,Rp,Rs,Wn)返回截止频率为Wn的n阶椭圆数字低通滤波器,Rp、
Rs分别为通带和阻带内的波纹,b、a分别为滤波器传递函数的分子和分母系
数向量(降幂排列)。当Wn为二元向量,即Wn = [W1 W2] (W1<W2)时,
[b,a] = ellip(n,Rp,Rs,Wn)返回一个2n阶数字带通滤波器,其通带为W1<ω<
W2。
[b,a] = ellip(n,Rp,Rs,Wn,'ftype')用于设计数字高通和数字带阻滤波器,即
·ftype = high时,返回截止频率为Wn的数字高通滤波器;
·ftype = stop时, , Wn = [W1 W2] (W1<W2),返回阻带为W1<ω< W2的
数字带阻滤波器。
[b,a] = ellip(n,Rp,Rs,Wn,'s')和[b,a] = butter(n,Rp,Rs,Wn,'ftype','s')中加入了选项
‘s’,用于设计各种模拟椭圆滤波器。
[z,p,k] = ellip(...)得到滤波器的零-极点增益模型,z、p、k分别为零点向量、
极点向量和增益系数。
[A,B,C,D] = ellip(...)得到滤波器的状态空间模型。
6 yulewalk
功能:递归数字滤波器设计。
格式:[b,a] = yulewalk(n,f,m)
说明:yulewalk函数采用对指定的频率响应进行最小二乘拟合的方法设计递归的IIR
数字滤波器。
[b,a] = yulewalk(n,f,m)返回n阶IIR滤波器的传递函数,b、a分别为分子和分
母多项式系数向量,按降幂排列。
向量f、m指定了所希望的幅频响应形状。其中,f为频率点向量,采用相对
频率,即f∈[0,1],f = 1时对应0.5fs,fs为采样频率。m为对应的幅频响应
值向量,f、m的长度必须相同。用plot(f,m)可以画出滤波器的幅频响应曲线。
在指定幅频响应特性时,在通带和阻带之间要存在一定的过渡过程。 参考技术C 在主界面敲入fdatool,在出来的界面上输入你的设置值,这样做比编程方便. 参考技术D 你得到系数a,b后,你信号也知道吧,假设是x,然后你就用y=filter(b,a,x);
我当时学时也很困惑怎么用,后来我做的尝试,我给你一个例子看看吧,是我学习时自己写的
设计一个高通滤波器,并检验它的性能
采样率为10kHZ
阻带边缘为1.5Khz,衰减为40bB
通带边缘为2kHz,波纹为3Db
>>Fs=1e4;
>>fs=1.5e3;
>>fp=2e3;
>>As=40;
>>Rp=3;
>>wp=2*fp/Fs;
>>ws=2*fs/Fs;
>>[N,wn]=cheb2ord(wp,ws,Rp,As);
>>[b,a]=cheby2(N,As,wn,'high');
>>[db,mag,pha,grd,w]=freqz_m(b,a);
>> subplot(2,2,1);plot(w/pi,mag);
>> axis([0,1,0,1]);
>> setX([0 0.3 0.4 1]);
>>setY([0.01 0.7279 1])
>> title('Magnitude Response');
>> subplot(2,2,2);plot(w/pi,db);
>> axis([0 1 -70 0])
>> setX([0 0.3 0.4 1])
>> setY([-40 -2.7589])
>> title('Magnitude Response in dB');
然后给你一个信号x=cos(0.2*pi*n);
>>n=0:200;
>>x=cos(0.6*pi*n);
>>y=filter(b,a,x);
>>subplot(2,2,3);plot(n,x);
>>subplot(2,2,4);plot(n,y);
>>x1=fft(x,201);
>>x11=abs(x1);
>>subplot(2,2,1);stem(n,x11);
>>y1=fft(y,201);
>>y11=abs(y1);
>>subplot(2,2,2);stem(n,y11);
>>setX([0 60 140 201])
>>title('FFT of y');
>>subplot(2,2,1);stem(n,x11);
>>setX([0 60 140 201])
>>title('FFT of x');
>>g=x11-y11;
>>subplot(2,2,3);stem(n,g);
你运行一下,就可以看到结果,刚好把此信号滤掉
给你一个设计思路,你改变截止频率和阻带衰减就可以了
>> %假设截止频率为W,我随便定义一下
>> %比如wp=0.3*pi;ws=0.4*pi
>> wp=0.3*pi;ws=0.4*pi;
>> %阻带衰减为50分贝
>> %通带波纹为0.2分贝
>> As=50;Rp=0.2;
>> %那么可以用两个函数得到系数a,b
>> [N,wn]=buttord(wp/pi,ws/pi,Rp,As);
>> [b,a]=butter(N,wn);
>> %该滤波器就是从截止频率到无穷远都不响应本回答被提问者和网友采纳
以上是关于急!Matlab里面模拟滤波器函数怎么使用啊?谢谢!的主要内容,如果未能解决你的问题,请参考以下文章
基于MATLAB的IIR滤波器的设计及应用(信号去噪)怎么设计啊