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 |