找回密码
 注册
关于网站域名变更的通知
查看: 494|回复: 1
打印 上一主题 下一主题

matlab中的卷积——filter,conv之间的区别

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-8-26 19:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
%Matlab提供了计算线性卷积和两个多项式相乘的函数conv,语法格式w=conv(u,v),其中u和v分别是有限长度序列向量,w是u和v的卷积结果序列向量。
' T9 U& |, g5 ~- ]0 D- O%如果向量u和v的长度分别为N和M,则向量w的长度为N+M-1.如果向量u和v是两个多项式的系数,则w就是这两个多项式乘积的系数。 7 F8 \8 O" f1 }5 x3 S* @$ X
x=ones(1,4);                                        %x(n)=R4(n)
4 t- n# J2 q! o* r& ^! nh=ones(1,4);                                        %h(n)=R4(n)                    
1 O  }- e: [, m. ty=conv(x,h);                                        %y(n)=x(n) * h(n)      
conv是做卷积,就是按照书上的做法,先翻转,在一步步平移,得出结果。对于两个长度分别为n,m的序列,卷积结果长度为m+n-1! g( D; j2 N  k
1.y1的确是严格按照卷积的数学表达式计算的,不解释。
filter([1,2],1,[1,2,3,4,5])实现  y[k]=x[k]+2*x[k-1]  s2 N, z9 V1 ?( I/ h0 \4 H
咱们这里讨论的就是A=1的情况。有了基本说明,现在言归正传:
2 f7 F% \, h* X
  •                 1   1   1
  • 5   4   3   2   1
  • 输出1,到
  •                 1   1   1
  •                 5   4   3   2   1
  • 输出12
    & B# u- F% n0 b8 s
' {8 u# u5 u! t. |2 @& ?: n
5 U- D/ Y" r0 o( v) l

# B" V' ~& h8 e9 B* b
4.依然是验证2的观点,从

& Q4 I. n" ]% u' D" x6 Y3 \
  •                 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
    : w8 |8 ]( G( r" d1 ~* s

" C& _0 X8 ^5 t7 C1 c2 o2 ]1 e5 n: T, _& ?! k* s! s

4 ?+ S! L+ T0 ]# `9 g
% U* h8 N( B$ u5 }; e' H: L
到这里,我想大家就明白了二者的区别和关系。
( ~% }  J; M8 ?/ q+ h' Q" T0 _9 i
) g$ b% X1 M7 |% x$ X
在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数 y=conv(x,h)计算卷积。5 J1 J  X! K8 j& q9 y
(1)即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。
8 w7 e- y) S3 v1 K, ?实现差分方程,先从简单的说起:  r7 c4 s6 m# t3 ]* l) b. K: \' y
filter([1,2],1,[1,2,3,4,5]),实现y[k]=x[k]+2*x[k-1]
2 v4 J' F! u% n5 t' z* x% t# ay[1]=x[1]+2*0=1    (x[1]之前状态都用0)+ z  z2 v0 D& g+ K+ c! a
y[2]=x[2]+2*x[1]=2+2*1=4
' y" O  Q7 `4 m/ g1 b, T4 v(2)y=conv(x,h)是用来实现卷级的,对x序列和h序列进行卷积,输出的结果个数等于x的长度与h的长度之和减去1。
! H5 p* ^5 e( p& o$ }; d; H! M卷积公式:z(n)=x(n)*y(n)= ∫x(m)y(n-m)dm.
8 y* x7 U6 Q6 M% l* `' u- L7 W3 E3 M+ w  A
(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)4 s& |( q& E7 Q  W9 s$ P9 M/ W8 j
               y2=filter(h,1,x)1 P3 A& U  u# |& h' 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,其语法格式为: # C. ^; }! |. h: k& w' O) F6 R
C = conv2(A,B)
- G. q1 A0 {7 g9 o3 t( `* \C = conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×nb的矩阵,则C的大小为(ma+mb-1)×(na+nb-1)。
. d( N0 ?9 J- F* z& _
例:
/ A9 T* g5 k% C  L8 @A=magic(5)
' W) j+ S0 O( tA =
; U: P  D+ {" K1 @17 24 1 8 15 3 z# B) p6 {+ f2 G+ @
23 5 7 14 16
# d, j) X! K: w- E, u$ S4 6 13 20 22
+ M6 z3 o8 I$ ^! F4 F0 W+ e" I6 Z4 I, y10 12 19 21 3
/ s4 g0 a* z' {+ @11 18 25 2 9 . O+ b$ X5 Y9 |2 |3 e6 E
>> B=[1 2 1 ;0 2 0;3 1 3] ; d. H; b% Q" [/ q! V
B = + p5 u+ P& |. v
1 2 1 + f1 X" E+ Z9 Q
0 2 0
& q7 E% ^& Z0 }& W: Y( x5 O" \3 1 3
5 a" n2 Y, L' b5 s>> C=conv2(A,B)
' p/ P) y6 U/ V6 nC = 7 ]% Y) [) ]; ~1 B7 d
17 58 66 34 32 38 15
8 Y( T: R' |* z$ D1 g23 85 88 35 67 76 16
9 U6 c2 f5 {6 L4 `55 149 117 163 159 135 67
  E8 W, z+ ]0 u2 ]79 78 160 161 187 129 51 3 y- S* b5 F9 \# N* t) c
23 82 153 199 205 108 75 ; Z' L2 z% V% V  ?# K- d* n  s
30 68 135 168 91 84 9
  O3 _+ M1 {6 t33 65 126 85 104 15 27
; x0 i* y7 j# [) [; ?3 w% hMATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:
+ p! l7 Z' m  F8 [8 Z6 P, ]Y = filter2(h,X) 3 ?+ B& O5 N# f0 ]
其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如:
- C: Q; ]8 J  {其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。
3 [, W) `* e5 \/ U% l' t$ oFspecial函数用于创建预定义的滤波算子,其语法格式为:   [0 X7 o/ w& X4 _, @5 i' K
h = fspecial(type) * f1 E4 [# G! w0 K
h = fspecial(type,parameters) " \/ x" |9 ^+ }3 e8 N
参数type制定算子类型,parameters指定相应的参数,具体格式为: ) K. ~" N2 v$ b: b
type='average',为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。
% p( w6 u8 U% G7 C. Otype= 'gaussian',为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为0.5

$ o( J4 U, T3 L" T4 i: ]/ D6 u! p5 Y3 s6 h

该用户从未签到

2#
发表于 2020-8-26 20:12 | 只看该作者
matlab中的卷积——filter,conv之间的区别
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-22 18:29 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表