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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%Matlab提供了计算线性卷积和两个多项式相乘的函数conv,语法格式w=conv(u,v),其中u和v分别是有限长度序列向量,w是u和v的卷积结果序列向量。
7 w% S4 ~/ U% [%如果向量u和v的长度分别为N和M,则向量w的长度为N+M-1.如果向量u和v是两个多项式的系数,则w就是这两个多项式乘积的系数。
) k! c) P9 `, V4 }x=ones(1,4);                                        %x(n)=R4(n)
  x- B+ b1 n6 J6 zh=ones(1,4);                                        %h(n)=R4(n)                    
$ ^. v, j+ h1 @y=conv(x,h);                                        %y(n)=x(n) * h(n)      
conv是做卷积,就是按照书上的做法,先翻转,在一步步平移,得出结果。对于两个长度分别为n,m的序列,卷积结果长度为m+n-1; j  o' V# _& C8 I) g
1.y1的确是严格按照卷积的数学表达式计算的,不解释。
filter([1,2],1,[1,2,3,4,5])实现  y[k]=x[k]+2*x[k-1]
5 _" B$ N2 j' \+ E# V5 i咱们这里讨论的就是A=1的情况。有了基本说明,现在言归正传:

; e" G! N& M6 R
  •                 1   1   1
  • 5   4   3   2   1
  • 输出1,到
  •                 1   1   1
  •                 5   4   3   2   1
  • 输出125 L9 \+ \: e/ i! w
8 U" o. B: x, h' E# {
  b; l+ C+ N  Q! M
. V0 y+ ~# g7 B* i+ d  j( y2 C
4.依然是验证2的观点,从
8 n2 v( t( w" U6 t4 L, m) M
  •                 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  h0 X$ H6 F* ?
8 [8 C7 {: a. }$ u
  x' ~9 L9 f2 K6 K

: ~# S* U& T2 w# U1 _2 ~
. D1 @8 H# j7 f; x1 F
到这里,我想大家就明白了二者的区别和关系。

( a8 ], @0 ?; t' y/ [$ \* ^# P3 S
/ ^) O  f  g0 M8 a! O& Q在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数 y=conv(x,h)计算卷积。0 ~1 @% o4 z, M8 [3 `( E
(1)即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。/ U' H& i0 @; h( r7 T) C
实现差分方程,先从简单的说起:
& G( i) }4 w- v" Cfilter([1,2],1,[1,2,3,4,5]),实现y[k]=x[k]+2*x[k-1]
. q& c; G. a( X% l! Q+ i. Py[1]=x[1]+2*0=1    (x[1]之前状态都用0)
' f8 S# U9 s8 a' a# n3 k8 _y[2]=x[2]+2*x[1]=2+2*1=46 z( g- Z& Q0 E+ U
(2)y=conv(x,h)是用来实现卷级的,对x序列和h序列进行卷积,输出的结果个数等于x的长度与h的长度之和减去1。
+ s" Y; b" a: M1 q9 V卷积公式:z(n)=x(n)*y(n)= ∫x(m)y(n-m)dm.  ?" Y2 Y' G, b' s( L* Q

8 {1 O- [/ y3 k: ^, c! J9 J
(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)
: {% p: }8 P9 T  ~: S7 X3 _3 m/ r               y2=filter(h,1,x)
! R, p3 c! G( `5 X. y1 h9 m               y3=filter(x,1,h)
       y2 = 1     3     6     9    12
可见:filter函数y(n)是从n=1开始,认为所有n<1都为0;而conv是从卷积公式计算,包括n<1部分。
程序三:滤波后信号幅度的变化
MATLAB中提供了卷积运算的函数命令conv2,其语法格式为:
/ C( W8 u+ Q# LC = conv2(A,B)
/ ]5 ~! k* S3 A) M) f# k8 L" ~C = conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×nb的矩阵,则C的大小为(ma+mb-1)×(na+nb-1)。
$ x3 K' @% D; Z
例: 0 |" j7 ^# j" [5 c" m0 j/ D! K, d
A=magic(5)
3 h- B  _( ~8 C6 k0 E' F' |# \, \9 ]A = & X& t9 p' e$ ]* `2 a2 {
17 24 1 8 15 6 R7 u: W8 Q0 U
23 5 7 14 16
; v6 I# _, g3 O/ ]# T# T9 ]# T% L4 6 13 20 22 " {+ R7 L0 R8 O1 z; }/ ?- n
10 12 19 21 3
! k1 S. n8 C% f7 H$ G2 }, ]. z11 18 25 2 9 # ?* L6 h, m& Y, P" e( B
>> B=[1 2 1 ;0 2 0;3 1 3] 0 \3 E: d. u/ E, a6 B9 |
B =
5 }# h9 _+ l) v1 2 1 7 k: ?1 N: J+ r: k
0 2 0 8 U% V; X1 l5 a( m
3 1 3
5 j  G& v2 ?' u& d! V% Q3 h>> C=conv2(A,B) * `# t: A% C$ q2 x7 F! C2 N) D. J
C =
, @7 Q+ m* B1 i9 `; g17 58 66 34 32 38 15 $ S) ~# G. Q, L
23 85 88 35 67 76 16
$ P9 D5 z- Z5 \55 149 117 163 159 135 67 / r+ l! q# D  n2 b1 a5 |( x
79 78 160 161 187 129 51 ( ]1 `) v2 i5 ]! g
23 82 153 199 205 108 75   G3 T5 I/ ^0 g4 p' y8 G
30 68 135 168 91 84 9
& X! Q! I' t  N3 H& i* l33 65 126 85 104 15 27 " l" t" s" K& ~4 c
MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为: . S& `* c9 c- w: |0 j
Y = filter2(h,X)
8 \$ B) t4 h0 O$ B" H5 V$ K2 }4 G其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如: 2 S) `! ~- y4 y6 ]
其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。
5 B! q" S4 a  O# ]Fspecial函数用于创建预定义的滤波算子,其语法格式为: ! ?' V, i- i/ ^& y0 f8 M
h = fspecial(type)
7 L2 t% J' i2 O; v* ph = fspecial(type,parameters)
& ~7 E1 ^( K, T; F: o+ o0 `参数type制定算子类型,parameters指定相应的参数,具体格式为: ) t6 U  U7 }$ m6 m4 I* J
type='average',为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。
( f% c' g, P, K1 ?; Stype= 'gaussian',为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为0.5

" J$ H. ^$ N. e! T* J' Z
) L& o; L8 k" b6 W

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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