EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
%Matlab提供了计算线性卷积和两个多项式相乘的函数conv,语法格式w=conv(u,v),其中u和v分别是有限长度序列向量,w是u和v的卷积结果序列向量。 6 ^4 p5 a. d0 q& g8 _9 P( r
%如果向量u和v的长度分别为N和M,则向量w的长度为N+M-1.如果向量u和v是两个多项式的系数,则w就是这两个多项式乘积的系数。
, R2 \. d3 d# A% A! Y7 nx=ones(1,4); %x(n)=R4(n) 4 E: j5 Y0 O6 q0 }& B
h=ones(1,4); %h(n)=R4(n)
' f2 I* u/ [9 L' A2 Vy=conv(x,h); %y(n)=x(n) * h(n) conv是做卷积,就是按照书上的做法,先翻转,在一步步平移,得出结果。对于两个长度分别为n,m的序列,卷积结果长度为m+n-1' t: j0 @ O6 q, h$ s
1.y1的确是严格按照卷积的数学表达式计算的,不解释。 filter([1,2],1,[1,2,3,4,5])实现 y[k]=x[k]+2*x[k-1]' `7 s) L3 b8 g* |- P
咱们这里讨论的就是A=1的情况。有了基本说明,现在言归正传: 从
4 _6 y6 ?/ t' v+ @# w8 s6 w# X- 1 1 1
- 5 4 3 2 1
- 输出1,到
- 1 1 1
- 5 4 3 2 1
- 输出12- ?# m i, t5 V+ { e
! t) T% a# U8 A! I
9 f6 S6 e4 H; p! g
. h. w' c7 t b; x g5 G/ k. }从 4.依然是验证2的观点,从
( f' S- b" a# U7 V1 g# r- 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
* {; K3 B4 ]# k, Y4 S
0 ]8 r; \* [5 D4 B4 i9 j6 [, J) y& i5 _/ k& H! i' s
# b$ O7 ^8 x& R% W; G8 p( |# Y: q( H8 P$ s1 Z. Y4 J
到这里,我想大家就明白了二者的区别和关系。
: P B2 {) p3 e1 P) Q
0 v) d4 P; l# L5 i G! ^在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数 y=conv(x,h)计算卷积。. Q4 X- F0 @) M$ f6 z6 ~9 {4 j
(1)即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。
6 ~: W% g2 p1 `! q; ?! O! }实现差分方程,先从简单的说起:+ e! R3 O5 j' S8 C
filter([1,2],1,[1,2,3,4,5]),实现y[k]=x[k]+2*x[k-1]
% V' f$ [% a" {y[1]=x[1]+2*0=1 (x[1]之前状态都用0)% v: g7 i& L+ h2 m
y[2]=x[2]+2*x[1]=2+2*1=4
; l6 H0 f$ h. {& m(2)y=conv(x,h)是用来实现卷级的,对x序列和h序列进行卷积,输出的结果个数等于x的长度与h的长度之和减去1。
2 r, v- T" l- C2 R卷积公式:z(n)=x(n)*y(n)= ∫x(m)y(n-m)dm.
$ D% L" Q; ^6 t$ }0 C: @
0 I8 r ]" Z% x. \- ]' c(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)
2 F9 F$ B( U! ^# [# {8 F+ k y2=filter(h,1,x)* o! l) R/ L. m6 O; [& t! p
y3=filter(x,1,h) y2 = 1 3 6 9 12 可见:filter函数y(n)是从n=1开始,认为所有n<1都为0;而conv是从卷积公式计算,包括n<1部分。 程序三:滤波后信号幅度的变化 MATLAB中提供了卷积运算的函数命令conv2,其语法格式为: 4 K5 u& b) J/ q2 X8 V
C = conv2(A,B) . q& D- @5 l2 d& i ?. V
C = conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×nb的矩阵,则C的大小为(ma+mb-1)×(na+nb-1)。
5 e4 x: G+ f6 s" D/ v+ {例:
, y3 o5 U9 b- {A=magic(5) $ T5 K' m7 @ o& e
A = * X8 v6 P) F- C
17 24 1 8 15 0 y) F) n" {8 {
23 5 7 14 16
- V# X' b) V$ p9 A( O9 {8 f4 6 13 20 22
% T* j2 V* D7 A3 O& Y0 J3 i4 W10 12 19 21 3 5 ^* j8 e! X4 J; S
11 18 25 2 9
7 ~1 g; {" p6 T- o>> B=[1 2 1 ;0 2 0;3 1 3] - L$ N5 Z W& {
B =
0 w d; m2 ]$ {0 p9 M1 2 1
* S+ M7 h; q, _" m& Z6 f0 2 0
% E& l6 g8 \- S, m! e- N4 K7 z3 1 3 # L3 M9 {3 k" _- Y) [, S
>> C=conv2(A,B)
0 f# o8 Z, D( G/ D- W( v4 P3 OC =
7 n( v% l) D( }& b. U- n17 58 66 34 32 38 15
3 ?+ d* [$ X3 _23 85 88 35 67 76 16 1 S* L/ k9 J V4 ?3 T
55 149 117 163 159 135 67
( [$ {/ o+ E) ]; i; E3 m79 78 160 161 187 129 51
0 J( S8 K1 P( R d$ J23 82 153 199 205 108 75
0 @, I# E7 N9 b" Y; f, f" t& q: j3 l30 68 135 168 91 84 9
! D: b# S, a$ U3 {2 {33 65 126 85 104 15 27 4 |1 y7 Y" ^; X5 T" L! z
MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为: , G6 S( f/ A' @, ]
Y = filter2(h,X) + ^) c3 L* f, G/ ]2 }( y# P6 c
其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如: / E* q" q* U" E6 s9 a/ b
其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。 8 N0 e0 B' C: N" l7 z* w
Fspecial函数用于创建预定义的滤波算子,其语法格式为: 0 [5 {2 O$ Q+ Z" m* Q" t7 ~
h = fspecial(type) . `8 T& Q2 ~7 ^/ @. H0 b
h = fspecial(type,parameters) : x8 e, V9 p4 w' j1 T- N4 ^
参数type制定算子类型,parameters指定相应的参数,具体格式为:
' b1 I6 o6 q$ m# Z: Stype='average',为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。 % j7 u0 U: `5 s2 U* j
type= 'gaussian',为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为0.5 0 j. U6 H7 ~ U
# l6 G: c: w& K
|