关于matlab filter这个函数到底怎么用?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于matlab filter这个函数到底怎么用?相关的知识,希望对你有一定的参考价值。
filter是一维数字滤波器。
使用方法:
1、语法:filter函数是一维的数字滤波器,主要的应用语法如下所示
y=filter(b,a,X)
[y,zf] = filter(b,a,X)
[y,zf]=filter(b,a,X,zi)
y=filter(b,a,X,zi,dim)
[...]=filter(b,a,X,[],dim)
y=filter(b,a,X)
滤除向量X中的数据,其中b是分子系数向量,a是分母系数向量。如果a(1)不等于1的话,则就利用a标准化滤波器系数,可以利用多项式除法使分母变为1;如果 a 等于0,滤波器返回错误值。
2、算法实现
filter函数通过直接 II 型转置结构实现,可得下面的时域表达式:
y(n)=b(1)*x(n)+b(2)*x(n-1)+...+b(nb+1)*x(n-nb)-a(2)*y(n-1) - ... -a(na+1)*y(n-na)
其中 n-1是滤波器阶数,na 是后向反馈的滤波器阶数,nb 是前向反馈的滤波器阶数。
扩展资料
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等。
主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多。
并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
参考资料来源:百度百科-zplane() Matlab函数
参考技术Afilter函数是一维的数字滤波器,主要的应用语法如下所示
y = filter(b,a,X)
[y,zf] = filter(b,a,X)
[y,zf] = filter(b,a,X,zi)
y = filter(b,a,X,zi,dim)
[...] = filter(b,a,X,[],dim)
这五个用法大同小异,明白一个就知道其他的用法了,下面以最简单的 y = filter(b,a,X) 为例进行讲解。
y = filter(b,a,X) 滤除向量X中的数据,其中b是分子系数向量,a是分母系数向量。如果a(1)不等于1的话,则就利用a(1)标准化滤波器系数,可以利用多项式除法使分母变为1;如果 a(1) 等于0,滤波器返回错误值。
算法实现:
如上图所示,filter函数通过直接 II 型转置结构实现,通过分析上面原理图,可得下面的时域表达式
y(m) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)- a(2)*y(n-1) - ... - a(na+1)*y(n-na)
其中 n-1是滤波器阶数,na 是后向反馈的滤波器阶数,nb 是前向反馈的滤波器阶数。此表达式还不是很明显,不太容易明白,此表达式可变型为
通常情况下,a(n-i)被归一化为1.
3、举例说明:
data = [1:0.2:4]';
windowSize = 5;
filter(ones(1,windowSize)/windowSize,1,data)
ans =
0.2000
0.4400
0.7200
1.0400
1.4000
1.6000
1.8000
2.0000
2.2000
2.4000
2.6000
2.8000
3.0000
3.2000
3.4000
3.6000
解析:
ones(1,windowSize)/windowSize,当windowSize=5时,生成的向量为[0.2 0.2 0.2 0.2 0.2],即分子系数向量 b = [0.2 0.2 0.2 0.2 0.2]
data = [1:0.2:4]' = [1 1.2 1.4 1.6 1.8 2 ··· ···3.8 4]
根据上面的表达式(2),以及 a(n-i) 归一化为1可知下面的推导过程,
y(1) = b(1) ·x(1) = 0.2·1 = 0.2;
y(2) = b(1)·x(2) + z1(1) = b(1)·x(2) + b(2)·x(1) = 0.2·1.2 + 0.2·1 = 0.44;
y(3) = b(1)·x(3) + z1(2) =b(1)·x(3) + b(2)·x(2) + z2(1) = b(1)·x(3) + b(2)·x(2) + b(3)·x(1) = 0.2·1.4 + 0.2·1.2 + 0.2·1 = 0.72
扩展资料:
filter功能:它使用户可以改变一个request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在response离开servlet时处理response.换种说法,filter其实是一个“servlet chaining“.
包括
1. 在servlet被调用之前截获;
2. 在servlet被调用之前检查servlet request;
3. 根据需要修改request头和request数据;
4. 根据需要修改response头和response数据;
5. 在servlet被调用之后截获.
你能够配置一个filter 到一个或多个servlet;单个servlet或servlet组能够被多个filter 使用。几个实用的filter 包括:用户辨认filter,日志filter,加密filter,符号filter,能改变xml内容的XSLT filter等。
参考资料:百度百科-Filter
参考技术B1、语法: filter函数是一维的数字滤波器,主要的应用语法如下所示
y = filter(b,a,X) [y,zf] = filter(b,a,X) [y,zf] = filter(b,a,X,zi) y = filter(b,a,X,zi,dim) [...] = filter(b,a,X,[],dim)
y = filter(b,a,X) 滤除向量X中的数据,其中b是分子系数向量,a是分母系数向量。如果a(1)不等于1的话,则就利用a标准化滤波器系数,可以利用多项式除法使分母变为1;如果 a 等于0,滤波器返回错误值。
2、算法实现
filter函数通过直接 II 型转置结构实现,可得下面的时域表达式:y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)- a(2)*y(n-1) - ... - a(na+1)*y(n-na) ,其中 n-1是滤波器阶数,na 是后向反馈的滤波器阶数,nb 是前向反馈的滤波器阶数。
扩展资料:
zplane(z, p) 绘制出列向量z中的零点(以符号“○” 表示)和列向量p中的极点(以符号“×”表示),同时画出参考单位圆,并在多阶零点和极点的右上角标出其阶数。如果z和p为矩阵,则zplane以不同的颜色分别绘出z和p各列中的零点和极点。
zplane(B, A) 绘制出系统函数H(z)的零极点图。其中B和A为系统函数H(z) = B(z)/A(z)的分子和分母多项式系数向量。 zplane(B, A) 输入的是传递函数模型,函数首先调用root函数以求出它们的零极点
参考资料:百度百科-matlab filter函数
一、在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。
举例:实现差分方程,先从简单的说起:
filter([1,2],1,[1,2,3,4,5]),实现y[k]=x[k]+2*x[k-1]
y[1]=x[1]+2*0=1 (x[1]之前状态都用0)
y[2]=x[2]+2*x[1]=2+2*1=4
二、说明:输入X为滤波前序列,Y为滤波结果序列,B/A 提供滤波器系数,B为分子, A为分母,
并输入Zi指定X的初始状态,Zf为最终状态矢量 《Simulink与信号处理》
FILTER(B,A,X,[],DIM) 或 FILTER(B,A,X,Zi,DIM)指定X的维数DIM进行操作 book.iLoveMatlab.cn
举例k=-100:100; >> uk=[zeros(1,100),ones(1,101)]; >> a=[1 -5 6]; >> b=[2 -1]; >> x=uk; >> y=filter(b,a,x)
扩展资料:
MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:
Y = filter2(h,X) 其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。
例如: 其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。
参考技术DY = FILTER(B,A,X) ,输入X为滤波前序列,Y为滤波结果序列,B/A 提供滤波器系数,B为分子, A为分母
整个滤波过程是通过下面差分方程实现的:
a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)
举例:
k=-100:100;
>> uk=[zeros(1,100),ones(1,101)];
>> a=[1 -5 6];
>> b=[2 -1];
>> x=uk;
>> y=filter(b,a,x)
扩展资料:
MATLAB[1] 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
参考资料:MATLAB-百度百科
急!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 filter这个函数到底怎么用?的主要内容,如果未能解决你的问题,请参考以下文章