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

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

[复制链接]

该用户从未签到

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

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( L
1.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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-27 14:33 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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