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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%Matlab提供了计算线性卷积和两个多项式相乘的函数conv,语法格式w=conv(u,v),其中u和v分别是有限长度序列向量,w是u和v的卷积结果序列向量。 5 ]8 T7 b5 c7 v5 o
%如果向量u和v的长度分别为N和M,则向量w的长度为N+M-1.如果向量u和v是两个多项式的系数,则w就是这两个多项式乘积的系数。 ; ~" c  c0 W* _& D9 k
x=ones(1,4);                                        %x(n)=R4(n)
3 S) j6 ?3 n- n* ^8 y' b+ ^$ N& Mh=ones(1,4);                                        %h(n)=R4(n)                      f- M* c$ L6 @7 w; k, V9 i9 G9 T
y=conv(x,h);                                        %y(n)=x(n) * h(n)      
conv是做卷积,就是按照书上的做法,先翻转,在一步步平移,得出结果。对于两个长度分别为n,m的序列,卷积结果长度为m+n-16 y6 Q3 O7 G7 D8 Z/ w. Q+ ?$ j; U
1.y1的确是严格按照卷积的数学表达式计算的,不解释。
filter([1,2],1,[1,2,3,4,5])实现  y[k]=x[k]+2*x[k-1]: [' {' [; k" A) a
咱们这里讨论的就是A=1的情况。有了基本说明,现在言归正传:
& ?* s2 M  m7 W' ^; t
  •                 1   1   1
  • 5   4   3   2   1
  • 输出1,到
  •                 1   1   1
  •                 5   4   3   2   1
  • 输出12
    7 m" F- ?) k! x* G* V
% }/ p: ]6 U* W: Z6 ]
8 K) o. Y- T' w( ?
, I( k3 W. _: I; j* s: X
4.依然是验证2的观点,从

3 a% {7 T: W  D# O5 \2 J* D
  •                 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+ U! z) K" E& J" o/ |

" I) T: N' R$ k8 m. z7 h) s& K" j& X8 a6 g8 [
) _& D6 {5 n" l% k2 q* ^2 T

7 ?6 O- t8 L4 q) d
到这里,我想大家就明白了二者的区别和关系。

5 w: ]& f0 P, P% i" s: [, z# ?. a) n7 j
在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数 y=conv(x,h)计算卷积。
0 \4 y  D" A0 M+ T5 t7 k* h/ }(1)即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。: q5 ?! s/ n. H$ d4 G
实现差分方程,先从简单的说起:
1 q% C  F! F: N( vfilter([1,2],1,[1,2,3,4,5]),实现y[k]=x[k]+2*x[k-1]( ]2 Y( O0 R1 o( v( @
y[1]=x[1]+2*0=1    (x[1]之前状态都用0)3 }" ]/ ]9 Q2 r: R
y[2]=x[2]+2*x[1]=2+2*1=45 Z' w7 W* {) H
(2)y=conv(x,h)是用来实现卷级的,对x序列和h序列进行卷积,输出的结果个数等于x的长度与h的长度之和减去1。- {! ~* k. c! g9 B! L2 P* B' N, l, v
卷积公式:z(n)=x(n)*y(n)= ∫x(m)y(n-m)dm.
, n6 S# S  F' H6 `) q' Z# r: C2 {3 O
(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)
% {" k, F3 E( {8 O' c7 U0 R# E               y2=filter(h,1,x)% ?5 o# {3 @+ G  H3 N: ~( M
               y3=filter(x,1,h)
       y2 = 1     3     6     9    12
可见:filter函数y(n)是从n=1开始,认为所有n<1都为0;而conv是从卷积公式计算,包括n<1部分。
程序三:滤波后信号幅度的变化
MATLAB中提供了卷积运算的函数命令conv2,其语法格式为: 0 x1 {) @: W' E4 }. ?, c% f
C = conv2(A,B) ) o5 t1 m! {2 p' E' O
C = conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×nb的矩阵,则C的大小为(ma+mb-1)×(na+nb-1)。

6 G4 i5 o4 d4 n' D例: & c% G. g8 w1 r$ D6 }/ T
A=magic(5) $ j7 @, E$ q! K
A =
# D* F5 G$ R, a& ~17 24 1 8 15
5 U; K3 z- q1 I3 P, a8 y- d23 5 7 14 16
8 F+ W% s$ i, M! ]) Y+ x4 s4 6 13 20 22 ! n7 S; _8 ]4 w! p3 h% ]
10 12 19 21 3
1 ]& M( }) R$ ?# J8 t8 L11 18 25 2 9   p) V: p8 x( d, h
>> B=[1 2 1 ;0 2 0;3 1 3] 8 Y5 G% H# d' c& R) Y4 ~- k5 r
B =
/ z/ k: y  k! G) o2 C1 2 1 . W# O( e$ `1 M6 i- I' x6 A- n0 G
0 2 0
( x# u6 S- p2 ]* x$ A) J3 1 3
" {: [3 W8 {, L% z! `+ u  H. j>> C=conv2(A,B)
# A( W4 L; `( k% v8 r  dC = , D: M- r; M* t( }# m) s0 p
17 58 66 34 32 38 15 # m3 ^  Q0 F$ `# P, E- G- l, N
23 85 88 35 67 76 16 5 K9 l; {# K0 h6 a  y2 l+ x# E
55 149 117 163 159 135 67 8 Q8 Q6 {0 D3 s( b
79 78 160 161 187 129 51 & t( q, r7 N+ c4 U/ w& s4 J1 I+ k
23 82 153 199 205 108 75
3 Q# a4 m, `6 W8 N# E% e' Z30 68 135 168 91 84 9
$ {/ s! Z* C* t33 65 126 85 104 15 27
% b8 F+ w. n; d( J$ WMATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:
. j- g4 C- K# \0 a, m! u3 w4 U$ CY = filter2(h,X)
1 |: f3 n2 f1 k7 G7 |, b其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如: 4 |* z4 H4 ]" l0 ~# u- V) ~' h( w
其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。
% J8 }" S9 p6 q4 P# tFspecial函数用于创建预定义的滤波算子,其语法格式为: 9 F2 ]* D: y# w9 A
h = fspecial(type)
% a' z" O" k6 k) d% `8 X' _h = fspecial(type,parameters) ! p. F' [! e+ {/ \
参数type制定算子类型,parameters指定相应的参数,具体格式为:
2 r' ?  \8 u) L. ~6 mtype='average',为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。
5 i- {7 b+ W% Y/ O4 a  ~4 ztype= 'gaussian',为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为0.5
3 P2 {; x9 _* w  u3 v2 g
' [9 d. P# A) O' Z1 V7 U0 t+ @

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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