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

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

[复制链接]

该用户从未签到

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

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-5 13:07 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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