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 B1.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 |