matlab中filter函数的用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab中filter函数的用法相关的知识,希望对你有一定的参考价值。
离散系统的差分方程为
2y[k]-y[-1]-3y[k-2]=2x[k]-x[k-1]
x[k]=(0.5^k)u[k] y[-1]=1 y[-2]=3
用filter求零输入响应 零状态响应
我不知道filter函数是怎么用的,我的做法是:
k=-100:100;
>> uk=[zeros(1,100),ones(1,101)];
>> a=[1 -5 6];
>> b=[2 -1];
>> x=uk;
>> y=filter(b,a,x)
然后出现一堆数据,不知道是什么,高手指教一下这个函数应该怎么用,不会的别瞎说,别到处粘贴,高手指教后我再加100给你,万分感谢
上面a,b的值没有对上,这个无关紧要,主要是函数的用法
先从简单的说起:
filter([1,2],1,[1,2,3,4,5])
实现 y[k]=x[k]+2*x[k-1]
y[1]=x[1]+2*0 %(x[1]之前状态都用0)
=1
y[2]=x[2]+2*x[1]=2+2*1=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*(2*x[1])=0
y[2]=1/2*(2*x[2]-x[1]+y[1])=0
........
显示的数为差分方程的输出y
这个函数和还有其它的用法,再次我就不说了
matlab的帮助中说的比较详细,你可以自己看一下 参考技术A
解决办法如下所示:
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)。
扩展资料:
一、Filter新增加的功能包括:
1、新的国际化。
2、应用程序生命周期事件控制。
3、澄清了类的装载规则。
4、新的错误及安全属性。
5、不赞成使用HttpUtils 类。
6、各种有用的方法。
二、一个filter必须实现javax.servlet.Filter的三个方法:
1. void setFilterConfig(FilterConfig config) //设置filter 的配置对象。
2. FilterConfig getFilterConfig() //返回filter的配置对象。
3. void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) //执行filter 的工作。
参考资料来源:百度百科-Filter
参考技术B conv是卷积,比如说conv(a,b)就是说
a卷积b;
filter是设计滤波器的一种函数,y=filter(b,a,x)表示的是
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) 参考技术C 求解零状态响应的filter的调用形式为:y=filter(b,a,x);
其中 b , a 是差分方程系数矩阵,x 是输入序列(输入响应)。y是输出序列(零状态响应),由一个矩阵表示。可以用stem(k,y)画出零状态响应图. 参考技术D 楼主,你能看懂他说的啥?
matlab中filter和conv函数有啥区别?
在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数 y=conv(x,h)计算卷积,用y=impz(p,d,N)求系统的冲激响应。实现差分方程
先从简单的说起:
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
a. 下面程序是用来实现h和x的卷积得,分别用了filter和conv函数,两者函数得出的结果一样。
h = [3 2 1 -2 1 0 -4 0 3]; % impulse response
x = [1 -2 3 -4 3 2 1]; % input sequence
y = conv(h,x);
n = 0:14;
subplot(2,1,1);
stem(n,y);
xlabel('Time index n'); ylabel('Amplitude');
title('Output Obtained by Convolution'); grid;
x1 = [x zeros(1,8)];
y1 = filter(h,1,x1);
subplot(2,1,2);
stem(n,y1);
xlabel('Time index n'); ylabel('Amplitude');
title('Output Generated by Filtering'); grid;
要实现下式的冲击响应和阶跃响应,可以分别采用三种方法。
y[n]+0.75y[n-1]+0.125y[n-2]=x[n]-x[n-1]。
b. 单位冲激响应:
(1)用filter函数
a1=[1,0.75,0.125];
b1=[1,-1];
n=0:20;
x1=[1 zeros(1,20)];
y1filter=filter(b1,a1,x1);
stem(n,y1filter);
title('y1filter');
xlabel('x');
ylabel('y');
(2)用conv函数
a1=[1,0.75,0.125];
b1=[1,-1];
x1=[1 zeros(1,10)];
[h]=impz(b1,a1,10);
y1conv=conv(h,x1);
n=0:19;
stem(n,y1conv,'filled')
(3)用impz函数
a1=[1,0.75,0.125];
b1=[1,-1];
impz(b1,a1,21);
c. 单位阶跃响应:
(1)用filter函数
a1=[1,0.75,0.125];
b1=[1,-1];
n=0:20;
x2=ones(1,21);
y1filter=filter(b1,a1,x2);
stem(n,y1filter);
title('y1filter_step');
xlabel('x');
ylabel('y');
(2)用conv函数
a1=[1,0.75,0.125];
b1=[1,-1];
x2=ones(1,21);
[h]=impz(b1,a1,20);
y1=conv(h,x2);
y1conv=y1(1:21); %为何y1conv要取y1中1:21的值,解释见
n1=0:20; %y2à单位阶跃响应à用conv函数中注释
stem(n1,y1conv,'filled');
title('y1conv');
xlabel('n');
ylabel('y1[n]');
(3)用impz函数
a=[1,0.75,0.125];
b=1;
impz(b,a)
即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。
而y=conv(x,h)是用来实现卷级的,对x序列和h序列进行卷积,输出的结果个数等于x的长度与h的长度之和减去1。
y=impz(p,d,N)是用来实现冲击响应的,d和p的定义见filter,N表示冲击响应输出的序列个数。 参考技术A conv 是卷积,比如说conv(a,b)就是说 a卷积b;
filter是设计滤波器的一种函数,y=filter(b,a,x)表示的是
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)本回答被提问者采纳
以上是关于matlab中filter函数的用法的主要内容,如果未能解决你的问题,请参考以下文章