EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
%Matlab提供了计算线性卷积和两个多项式相乘的函数conv,语法格式w=conv(u,v),其中u和v分别是有限长度序列向量,w是u和v的卷积结果序列向量。
, X9 H9 s, Y6 _+ B0 U%如果向量u和v的长度分别为N和M,则向量w的长度为N+M-1.如果向量u和v是两个多项式的系数,则w就是这两个多项式乘积的系数。 1 B0 V8 l/ A: I1 k
x=ones(1,4); %x(n)=R4(n)
* \' h e a- b! {6 {h=ones(1,4); %h(n)=R4(n)
4 Q0 c! y6 i& L2 {, ~. z. \' k3 ]y=conv(x,h); %y(n)=x(n) * h(n) conv是做卷积,就是按照书上的做法,先翻转,在一步步平移,得出结果。对于两个长度分别为n,m的序列,卷积结果长度为m+n-1
& U- Q' F& R. t) `/ W( L1.y1的确是严格按照卷积的数学表达式计算的,不解释。 filter([1,2],1,[1,2,3,4,5])实现 y[k]=x[k]+2*x[k-1]
- n4 v, p2 |( b3 k0 D咱们这里讨论的就是A=1的情况。有了基本说明,现在言归正传: 从
) _7 s& \+ V: e- 1 1 1
- 5 4 3 2 1
- 输出1,到
- 1 1 1
- 5 4 3 2 1
- 输出12
1 I4 e, f8 F1 f M# m $ L7 N2 P" ^" F
! P9 A: [! h8 b
! @1 x0 @, `: N m1 V8 V; U p4 N& _从 4.依然是验证2的观点,从 & x* {8 w4 {' }+ D5 b# x
- 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
- 输出57 t, u' y" @8 P# I
, ~- o# E3 R$ S/ r
/ ?" @/ A- |! E1 G) M; ~8 x9 A: O* @4 ~1 P- U X
3 ^( y6 O0 c) N( O$ U4 }0 {# G到这里,我想大家就明白了二者的区别和关系。 `+ f: S( m6 K( P; p. h* R, w7 f; F
6 i. j( c( Q: S$ S _7 s( F
在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数 y=conv(x,h)计算卷积。
6 A8 B0 ?; w1 V: |# G$ Q(1)即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。% L- V3 u# [* W; w4 d2 U
实现差分方程,先从简单的说起:
6 B' L6 V1 {1 K3 A9 Y) [filter([1,2],1,[1,2,3,4,5]),实现y[k]=x[k]+2*x[k-1]; P: L9 f) j) o& i
y[1]=x[1]+2*0=1 (x[1]之前状态都用0)& l2 Z% C( \ c5 u, H, L
y[2]=x[2]+2*x[1]=2+2*1=4
. Z/ T4 V% y0 t t7 j% G0 V(2)y=conv(x,h)是用来实现卷级的,对x序列和h序列进行卷积,输出的结果个数等于x的长度与h的长度之和减去1。$ ^% ]' q4 A2 K! a9 E
卷积公式:z(n)=x(n)*y(n)= ∫x(m)y(n-m)dm.8 a% o8 I: [! d1 U9 X. |" l& |9 a
$ R# R) D, c |) I(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)
7 w% l( Z# i' g/ p4 a- t y2=filter(h,1,x)5 F1 b5 z* p% l9 V
y3=filter(x,1,h) y2 = 1 3 6 9 12 可见:filter函数y(n)是从n=1开始,认为所有n<1都为0;而conv是从卷积公式计算,包括n<1部分。 程序三:滤波后信号幅度的变化 MATLAB中提供了卷积运算的函数命令conv2,其语法格式为: 1 X K( B6 {( |! }0 K h
C = conv2(A,B)
' t$ u$ D2 \4 `! ?4 q9 cC = conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×nb的矩阵,则C的大小为(ma+mb-1)×(na+nb-1)。
( O) K* N! M7 Z$ m6 X, i: d例: + P0 x, M0 d" ^6 n0 @
A=magic(5)
0 x4 o8 R+ A2 i& B: [3 WA =
% a: @3 D( {$ c9 i+ I* _/ R17 24 1 8 15 . y: K% J8 K* n9 r3 a6 [
23 5 7 14 16
9 P7 Y( m) }0 v8 d4 6 13 20 22 5 b1 o" S5 k! z# ~/ b7 f+ p
10 12 19 21 3
( B9 c" n4 o% G. C( N3 ^- x11 18 25 2 9 + O: d" D, p- n3 y( s# }
>> B=[1 2 1 ;0 2 0;3 1 3] 7 [6 N- X0 w& _3 D6 M, m6 b4 q
B = / D8 g2 ^$ F3 K) K
1 2 1
8 Y" f F5 R0 P8 C- {* r6 m0 2 0
/ `. g; W4 m0 k t. [! ~/ j5 N6 ^3 1 3
& V1 O/ Q* h. a# W>> C=conv2(A,B) 7 ?' b: |4 p8 |- A. h/ v/ b7 W
C = 2 b6 t% y3 G! p. @' s1 f
17 58 66 34 32 38 15
, X: o, J i( B3 Q* ~+ `23 85 88 35 67 76 16
2 q: p% w/ H# \55 149 117 163 159 135 67
?. h& m) V" X$ o79 78 160 161 187 129 51
n% Y q i1 c6 ~3 G5 a23 82 153 199 205 108 75 1 p( B( A2 J r/ A
30 68 135 168 91 84 9 + l! U) ~( k% W! @$ [
33 65 126 85 104 15 27
) I+ ^7 T% o! m; j3 W. ]MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:
r/ l! ~5 N/ ]2 N, O4 ^% AY = filter2(h,X)
, z; \) | `; k3 X0 A其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如: ! B; x6 M9 ?8 m3 h1 G
其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。
4 n5 b9 r% T9 r. u# T3 {Fspecial函数用于创建预定义的滤波算子,其语法格式为: ( C4 y# J+ S( j
h = fspecial(type) - _" E1 l+ n; _
h = fspecial(type,parameters) 3 w1 l5 S7 ?, E
参数type制定算子类型,parameters指定相应的参数,具体格式为: 9 | m; c, s2 b
type='average',为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。 : `. X$ y( M: ~+ J D- v
type= 'gaussian',为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为0.5
% z& Q9 y' k7 s ^
" {, A; @1 \" A/ Q/ ~" t |