matlab中filter函数的用法

matlab中filter函数的用法,第1张

看楼主的意思主要是想实现差分方程
先从简单的说起:
filter([1,2],1,[1,2,3,4,5])
实现 y[k]=x[k]+2x[k-1]
y[1]=x[1]+20 %(x[1]之前状态都用0)
=1
y[2]=x[2]+2x[1]=2+21=4

然后说你感兴趣的filter(b,a,x)
这里a,b都是矢量
你提到输入[zeros(1,100),ones(1,101)]
差分方程 2y[k]-y[k-1]-3y[k-2]=2x[k]-x[k-1]
往里面代
[1]之前的状态都为0
y[1]=1/2(2x[1])=0
y[2]=1/2(2x[2]-x[1]+y[1])=0

显示的数为差分方程的输出y
这个函数和还有其它的用法,再次我就不说了
matlab的帮助中说的比较详细,你可以自己看一下

filter2函数
功能:计算二维线型数字滤波,它与函数
fspecial
连用
格式:Y=filter2(B,X)
Y=filter2(B,X,'shape')
说明:对于
Y=filter2(B,X)
,filter2
使用矩阵
B
中的二维
FIR
滤波器对数据
X
进行滤波,结果
Y
是通过二维互相关计算出来的,其大小与
X
一样;对于
Y=filter2(B,X,'shape')
,filter2
返回的
Y
是通过二维互相关计算出来的,其大小由参数
shape
确定,其取值如下:
》full
返回二维相关的全部结果,size(Y)>size(X);
》same
返回二维互相关结果的中间部分,Y

X
大小相同;
》valid
返回在二维互相关过程中,未使用边缘补
0
部分进行计算的结果部分,有
size(Y)<size(X)

在wos上方的命令中选择插入函数,选择filter函数就可以了。
首先框选中数组返回区域,然后输入公式filter,比如我们要筛选出姓名,因此在第一个参数输入姓名列,接着第二个参数为条件区域,表示按班级筛选姓名,因此选择班级列,在选择好条件区域后必须要输入等于号加上一班才能够按照班级筛选出对应的姓名。然后按Ctrl+Shift+Enter键确定。
是PHP过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤的。它由数组,包括,空值三个参数所构成,其中数组表示函数计算后的返回区域,如姓名列。包括则表示函数查找的条件区域,如性别。空值表示数组内的所有值都为空时返回的值。

调用filter函数解差分方程。
1)yn=filter(B,A,xn)是计算输入向量xn的零状态响应输出信号yn,yn与xn长度相等,
其中B=[b0,b1,……bn], A=[a0,a1,……an]。其中a0=1。
2)yn=filter(B,A,xn,xi)是计算全响应的函数。xi是等效初始条件的输入序列,xi能由初始条件确定。此时需要调用filtic函数。xi=filtic(B,A,ys,xs)。其中ys,xs是初始条件向量。
其中ys=[y(-1),y(-2)……y(-N)],xs=[x(-1),x(-2),……x(-M)]
另外若xn为因果序列xs=0可缺省。
举个例子若y(n)-08y(n-1)=x(n),初始条件y(-1)=1。
a=08,ys=1;
xn=[1,zeros(1,30)];
B=1, A=[1,-a];
xi=filtic(B,A,ys);
yn=filter(B,A,xn,xi);
%以下是解出来的yn图像
n=0:length(yn)-1;
stem(n,yn,'');

看文字的话会很乱,和图一起看会好一点

首先,it是个生成器(_odd_iter),并使n=3,随后,it作为一个生成器存在于filter对象中(迭代器),并使it为一个filter对象,经过循环,到达next语句,先计算it _odd_iter(生成器),生成了新的数之后,开始计算filter。第一次循环的时候第18行的代码相当于 it = filter(_not_divisible(3), it ),等号右面的it还在等待next调用生成值,生成值之后,就将它代入为lambda的x中……第二次循环的时候第18行代码变成 it = filter(_not_divisible(5), filter(_not_divisible(3), it ) ),同样等号右面的it仍然在等待next调用生成新的值
我刚看这个教程,不知道对不对。。。

对了我看见有一个人问把代码第18行改成 it = filter(lambda x: x % n > 0, it)

会失去过滤功能,我觉得,lambda是一个临时函数,所以觉得像filter(div(5), filter(div(3), it))这种存在多个lambda临时函数的话是很奇怪的,

在调试时,发现filter只检测了一个n(最近被赋值的),相当于7%5,9%7这样,因此失去过滤素数功能。模拟一下,在将要输出5的时候,it = filter()的那行代码变为:

it = filter(lambda x : x % n >0 , filter (lambda x : x % n > 0 , it ) ),it将值赋给x,但是,我觉得n被赋值时,会刷新其他lambda中的n,造成类似于 it = filter(lambda x : x % 5 >0 , filter (lambda x : x % 5 > 0 , it ) )的情况


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13405720.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-30
下一篇 2023-07-30

发表评论

登录后才能评论

评论列表(0条)

保存