注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

李小一的梦想世界

 
 
 

日志

 
 

Matlab中filter和conv函数的区别 zz  

2011-11-16 17:48:50|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
http://apps.hi.baidu.com/share/detail/34708935

MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数 y=conv(x,h)计算卷积。

(1)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

(2)y=conv(x,h)是用来实现卷级的,对x序列和h序列进行卷积,输出的结果个数等于x的长度与h的长度之和减去1。

卷积公式:z(n)=x(n)*y(n)= ∫x(m)y(n-m)dm.

程序一:以下两个程序的结果一样

(1)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;

(2)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;

Matlab中filter和conv函数的区别   zz - hohofist - 李小一的梦想世界

程序二:filter和conv的不同

               x=[1,2,3,4,5];
               h=[1,1,1];

               y1=conv(h,x)
               y2=filter(h,1,x)
               y3=filter(x,1,h)

 结果:y1 =1     3     6     9    12     9     5

             y2 = 1     3     6     9    12

?             y3 =1     3     6  

可见:filter函数y(n)是从n=0开始,认为所有n<0都为0;而conv是从卷积公式计算,包括n<0部分。

                因此filter 和conv 的结果长短不同

程序三:滤波后信号幅度的变化

                num=100; %总共1000个数
                x=rand(1,num); %生成0~1随机数序列 
                x(x>0.5)=1;
                x(x<=0.5)=-1;
                h1=[0.2,0.5,1,0.5,0.2];
                h2=[0,0,1,0,0];
                y1=filter(h1,1,x);
                y2=filter(h2,1,x);
                n=0:99;
                subplot(2,1,1);
                stem(n,y1);
                subplot(2,1,2);
                stem(n,y2);

Matlab中filter和conv函数的区别   zz - hohofist - 李小一的梦想世界

可见:滤波后信号的幅度是发生变化的,最大幅度值也会变化。
  评论这张
 
阅读(636)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017