EDA365电子论坛网
标题: matlab中的卷积——filter,conv之间的区别 [打印本页]
作者: piday123 时间: 2020-8-26 19:47
标题: matlab中的卷积——filter,conv之间的区别
%Matlab提供了计算线性卷积和两个多项式相乘的函数conv,语法格式w=conv(u,v),其中u和v分别是有限长度序列向量,w是u和v的卷积结果序列向量。
. C& V- ]% v7 b' L9 \2 f, V% [' \%如果向量u和v的长度分别为N和M,则向量w的长度为N+M-1.如果向量u和v是两个多项式的系数,则w就是这两个多项式乘积的系数。 : x: r* I* H! w) g) P7 v
x=ones(1,4); %x(n)=R4(n) 9 W7 | c* S& \: E
h=ones(1,4); %h(n)=R4(n)
% A. P: n1 |" \ Z$ A/ e C& d1 ly=conv(x,h); %y(n)=x(n) * h(n) conv是做卷积,就是按照书上的做法,先翻转,在一步步平移,得出结果。对于两个长度分别为n,m的序列,卷积结果长度为m+n-1
2 S& G% C4 m, k5 e# e1.y1的确是严格按照卷积的数学表达式计算的,不解释。
filter([1,2],1,[1,2,3,4,5])实现 y[k]=x[k]+2*x[k-1]
8 E) R' P; J. A- ]( B- |$ v4 O咱们这里讨论的就是A=1的情况。有了基本说明,现在言归正传:
从
7 ^2 n: }4 D6 c3 ?- 1 1 1
- 5 4 3 2 1
- 输出1,到
- 1 1 1
- 5 4 3 2 1
- 输出12
! ~8 j6 q( N$ y% c4 t
* z5 R! L8 G z) @/ X
2 Y% K4 C- w) D- U4 `
2 E* Z! {) U" P
从
4.依然是验证2的观点,从
1 T$ y# z9 `$ r7 W0 V1 {3 m 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
7 k; s7 H3 t4 i& V9 e4 |& m1 s
y/ F4 j' N: v8 L1 ]8 [
* u; {0 `) I2 T% m' G
. J5 [' I3 Q2 \8 Z( T# V+ K, N. V. A9 N+ u ?
到这里,我想大家就明白了二者的区别和关系。
2 v6 M$ o/ W) c0 {
% x0 Q, Y9 A; Y/ {2 j在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数 y=conv(x,h)计算卷积。
6 G Q' B. \3 y- d! R& w(1)即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。2 ]% Z, J' J# _) `- i
实现差分方程,先从简单的说起:
6 B1 c5 ?6 i0 s. ~! ^1 ifilter([1,2],1,[1,2,3,4,5]),实现y[k]=x[k]+2*x[k-1]
+ o' r; k3 r; G# f% `' O2 fy[1]=x[1]+2*0=1 (x[1]之前状态都用0)3 @' j6 S0 K) n0 Z7 K9 G9 X- p: Y
y[2]=x[2]+2*x[1]=2+2*1=4
9 T+ m t1 W+ Q7 E* F(2)y=conv(x,h)是用来实现卷级的,对x序列和h序列进行卷积,输出的结果个数等于x的长度与h的长度之和减去1。
8 b9 y5 E: J/ R' J: Z卷积公式:z(n)=x(n)*y(n)= ∫x(m)y(n-m)dm.
; { u, i# d2 | `; K2 J* d V& v3 a8 l5 o# x; T; c# i9 h
(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)
. A, c. O% J6 K$ |( x0 O y2=filter(h,1,x)
8 r/ U3 n8 F& K: C4 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,其语法格式为:
r. t$ Q2 d. [) I; OC = conv2(A,B) : J `# ~% p) [+ ?
C = conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×nb的矩阵,则C的大小为(ma+mb-1)×(na+nb-1)。
" a1 h7 f1 `& O1 ` g- N* V例:
6 m$ c: ?" U) s# M. w( {4 G* vA=magic(5)
8 E/ Y4 Z( j1 [( F7 f0 C, S) ]; OA =
' Z/ `" B) @# I, G" j2 |: h# `! C17 24 1 8 15 % R4 e, n+ J/ n' T( q0 J* f
23 5 7 14 16
+ v! O7 Q& {* ~/ h6 s4 6 13 20 22
, u" q0 M6 b% P- u' @10 12 19 21 3
$ b' b4 v2 y! k; X- S11 18 25 2 9 0 x, B2 V/ Y: M s& H. x- H, a
>> B=[1 2 1 ;0 2 0;3 1 3] / f: R: l, T9 Z1 j# |1 I
B = 1 l, m; t* i2 a! }: z
1 2 1 5 L: x2 b* [; K+ F1 u
0 2 0 9 Z9 e9 e% F8 _2 N2 x; g
3 1 3
' e% ~/ z5 K: S+ K>> C=conv2(A,B)
& n6 h9 r- a- k! ]0 R0 ^4 }( E! UC =
. G9 J" E8 ?% C, U& ]8 c# |& B5 T17 58 66 34 32 38 15
% o- o6 x# o" k4 J) j23 85 88 35 67 76 16
' Y; b: d% y g/ v& F/ x55 149 117 163 159 135 67 + W# X1 _! T! M, N
79 78 160 161 187 129 51
4 G8 {, h5 I6 {( h# u# F( `23 82 153 199 205 108 75
1 C$ X- [8 }+ v; |6 \; d t30 68 135 168 91 84 9 . C3 X$ Z1 c; Y) l$ Q9 M4 n6 x
33 65 126 85 104 15 27 9 J1 V, O2 e f8 [- ?
MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为: , c5 Z5 }2 i% `" r: H- F: I. L0 a
Y = filter2(h,X)
, q) [( Q6 }' `其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如:
: I0 @! b& Y; n8 o9 w- D其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。 2 v& P& X: X( c- E
Fspecial函数用于创建预定义的滤波算子,其语法格式为:
) v: i4 d- S+ `0 zh = fspecial(type) " w6 R' b6 |4 d+ o0 \5 F
h = fspecial(type,parameters)
* _5 h v6 X$ l参数type制定算子类型,parameters指定相应的参数,具体格式为:
- Z( g8 J7 g$ z3 Y5 K2 L1 a1 @type='average',为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。
( O5 o+ G e- s" Utype= 'gaussian',为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为0.5
: q2 V; y2 h/ b' X; Q# Q
# g& _0 C$ t0 H' ^3 B+ e
作者: SsaaM7 时间: 2020-8-26 20:12
matlab中的卷积——filter,conv之间的区别
| 欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) |
Powered by Discuz! X3.2 |