找回密码
 注册
关于网站域名变更的通知
查看: 539|回复: 1
打印 上一主题 下一主题

matlab中的卷积——filter,conv之间的区别

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-8-26 19:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
%Matlab提供了计算线性卷积和两个多项式相乘的函数conv,语法格式w=conv(u,v),其中u和v分别是有限长度序列向量,w是u和v的卷积结果序列向量。
. m" d8 V% _$ G: R6 H" {, c; \%如果向量u和v的长度分别为N和M,则向量w的长度为N+M-1.如果向量u和v是两个多项式的系数,则w就是这两个多项式乘积的系数。 % R3 f# w5 V) u0 f' B( A
x=ones(1,4);                                        %x(n)=R4(n) : i. i0 z5 H5 u! v' }4 a
h=ones(1,4);                                        %h(n)=R4(n)                    * g- |4 v" o% T3 q/ I8 g) S
y=conv(x,h);                                        %y(n)=x(n) * h(n)      
conv是做卷积,就是按照书上的做法,先翻转,在一步步平移,得出结果。对于两个长度分别为n,m的序列,卷积结果长度为m+n-1
2 u) t, j4 e1 B5 B
1.y1的确是严格按照卷积的数学表达式计算的,不解释。
filter([1,2],1,[1,2,3,4,5])实现  y[k]=x[k]+2*x[k-1]' z; K( o- Z+ J* V
咱们这里讨论的就是A=1的情况。有了基本说明,现在言归正传:

1 \1 j: E/ @5 Q( i. N$ ^: T2 {, ?6 W
  •                 1   1   1
  • 5   4   3   2   1
  • 输出1,到
  •                 1   1   1
  •                 5   4   3   2   1
  • 输出12+ l  q2 w& H+ y

, K6 F( G3 Z: L; C6 i( l! s
. w( V: V& u% J5 V9 ~$ T
) D7 R4 d1 ]0 ~9 \
4.依然是验证2的观点,从

9 f2 r: X% @2 r. N4 z
  •                 1   2   3   4   5
  • 0   0   0   0   1   1   1   1
  • 输出1,到
  •                 1   2   3   4   5
  •                 0   0   0   0   1   1   1   1
  • 输出5
    $ |2 {. ~1 r$ J( O
& \5 [# s4 U+ o. f0 u1 T: L- s
% F0 N. h& Z) z% J) B! }& G
* z3 {% w- o4 }& H5 |
+ ~# ]" P! S! {
到这里,我想大家就明白了二者的区别和关系。

" @) L7 a; M, I$ H
- u! `* S2 T3 M  j9 P在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数 y=conv(x,h)计算卷积。! |" A: D9 H& E
(1)即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。
/ q& g# P5 b* A2 w8 @/ y实现差分方程,先从简单的说起:# E1 u* Z# o& T9 x7 Z3 Z4 p
filter([1,2],1,[1,2,3,4,5]),实现y[k]=x[k]+2*x[k-1]0 |: g# Y' T: y$ s( [- M
y[1]=x[1]+2*0=1    (x[1]之前状态都用0)+ {) }4 M* D# u- @4 p, A! P9 q
y[2]=x[2]+2*x[1]=2+2*1=4
& h# Z- X1 ?! x) N# q(2)y=conv(x,h)是用来实现卷级的,对x序列和h序列进行卷积,输出的结果个数等于x的长度与h的长度之和减去1。
$ B' T" }9 t" [0 w" `卷积公式:z(n)=x(n)*y(n)= ∫x(m)y(n-m)dm.8 T6 H0 n$ q& q; f

. f& d% A. y/ q* V5 E, g
(1)h = [3 2 1 -2 1 0 -4 0 3]; % impulse response
         y = conv(h,x);
         subplot(2,1,1);
         xlabel('Time index n'); ylabel('Amplitude');
(2)x1 = [x zeros(1,8)];
          subplot(2,1,2);
         xlabel('Time index n'); ylabel('Amplitude');
程序二:filter和conv的不同
               y1=conv(h,x)
" G2 e9 H/ ~6 P1 {1 a- L& O6 y/ z               y2=filter(h,1,x)
4 z  r3 c8 J3 ]$ M  R) U               y3=filter(x,1,h)
       y2 = 1     3     6     9    12
可见:filter函数y(n)是从n=1开始,认为所有n<1都为0;而conv是从卷积公式计算,包括n<1部分。
程序三:滤波后信号幅度的变化
MATLAB中提供了卷积运算的函数命令conv2,其语法格式为: 9 w0 F" P8 P0 Y, p4 r
C = conv2(A,B) % y3 o: g; n0 y- @3 E
C = conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×nb的矩阵,则C的大小为(ma+mb-1)×(na+nb-1)。

. l. D) U& A. v6 N8 K: j例:
& B7 C" ~- [- h, }A=magic(5) $ V  ?, a/ r9 m2 [% _& T9 a
A = & r. x8 p0 k  H9 H% r" y
17 24 1 8 15
# k4 h3 A  A; ~/ S. ?2 F- ^5 j23 5 7 14 16
3 u( v6 d$ k: Q2 n2 v* C! S# X4 6 13 20 22
8 j. Z* F4 ]( Q* M1 T* M* P! c6 a10 12 19 21 3 4 L7 }1 A+ f+ g+ D) w6 o* r
11 18 25 2 9 ) Z9 d9 T% H/ C6 J5 m2 P: p& c
>> B=[1 2 1 ;0 2 0;3 1 3]
% @, _& w9 @2 }$ ^* l' tB = 3 ?6 w% L  n" K
1 2 1 # g4 t5 X( J9 N0 y; M
0 2 0
( ^* o# @, `# r2 u! o3 1 3
% B) l" E3 s- t# r>> C=conv2(A,B)
5 Y  y# ^! o* yC =
! Y+ Z/ D- C. [9 ]8 N7 o# x17 58 66 34 32 38 15   v2 r% p2 ^/ g9 @
23 85 88 35 67 76 16 $ n" |3 f1 B$ w
55 149 117 163 159 135 67 5 y3 w9 H2 A8 T% Q5 t7 x4 [3 s5 O$ b
79 78 160 161 187 129 51
/ Q8 Z3 Y3 `/ a; l: r2 {23 82 153 199 205 108 75
1 ]0 @+ A- I/ d& o& S30 68 135 168 91 84 9
) e" u  Y6 h0 R+ B33 65 126 85 104 15 27   S3 v/ M9 N+ h6 c
MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为: , h0 R, D. h5 `" ^( n/ A
Y = filter2(h,X)
! B- L6 G& G' k: X- f- o4 W其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如: . }9 i: }6 s6 G9 M/ ?
其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。
! O& G/ T1 x9 q" S( a! EFspecial函数用于创建预定义的滤波算子,其语法格式为:
+ y( f0 |9 E( U3 l1 @- C# N  gh = fspecial(type)
6 ~4 C2 g; l% ~  r" J7 S  oh = fspecial(type,parameters)
% _2 b& z/ `- t0 ^7 j; @+ S7 F参数type制定算子类型,parameters指定相应的参数,具体格式为:   {. B. K1 U, c( g* d& u2 c5 m
type='average',为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。 % l3 Q- _+ k* s
type= 'gaussian',为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为0.5

( }! ^0 C# h' b
) l' O  c, C) L2 Y0 I

该用户从未签到

2#
发表于 2020-8-26 20:12 | 只看该作者
matlab中的卷积——filter,conv之间的区别
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 19:23 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表