如何利用matlab实现两个有限长序列的卷积

如何利用matlab实现两个有限长序列的卷积,第1张

基本数学原理

我们假设有两个长度有限的任意序列A(n)和B(n),其中A(n)和B(n)的具体数学表达式可以看下图一。那么这两个有限长序列的卷积就应该为C(n)=A(n)B(n),其具体表达式请参看一下图二。

2

相关函数指令

Matlab中的conv和deconv指令不仅可以用于多项式的乘除运算,还可以用于两个有限长序列的卷积和解积运算。

Matlab提供的函数conv,语法格式:w=conv(u,v),其中u和v分别是有限长度序列向量,w是u和v的卷积结果序列向量。如果向量u和v的长度分别为N和M,则向量w的长度为N+M-1如果向量u和v是两个多项式的系数,则w就是这两个多项式乘积的系数。下面我们看一下deconv指令。功能:求向量反褶积和进行多项式除法运算。语法格式:[q,r]=deconv(v,u)

,参数q和r分别返回多项式v除以多项式u的商多项式和余多项式。具体实例请看下一步。

3

conv和deconv指令实例

具体实例请看下图,这里我们求多项式(x2+2x+1)与多项式(2x2+x+3)的积,再求积与(x2+2x+1)的商。需要注意的是向量c代表多项式(2x4+5x3+7x2+7x+3)。

END

两个有限长序列的卷积实例

具体序列的数学形式

在这一步我们将具体的有限长时间序列按数学方式显示,具体请看下图。

解法一:循环求合法求卷积

在本例中我们将按照原理方法第一步中图二的方式进行卷积计算,即循环求合法求卷积。具体的代码及结果请看下图。图一是是生成有限长度时间序列,图二是根据原理方法第一步中图二的方式即循环求合法求卷积的具体代码,图三是是图二的计算结果。

解法二:0起点序列法

下面就说一下第二种方法,即“0起点序列法”,所采用的指令就是我们在原理方法中介绍的conv函数指令。具体代码看下图。

解法三:非平凡区间序列法

下面就说一下第二种方法,即“0起点序列法”,所采用的指令就是我们在原理方法中介绍的conv函数指令。具体代码看下图。图一为计算代码,图二为计算结果。

绘图比较

这一步我们将解法二和解法三的计算结果绘制在一张中进行比较,其中第一幅是“0起点法”的计算结果图,第二幅是“非平凡区间法”的计算结果图。其中画图代码为:

subplot(2,1,1),stem(kc,c),text(20,6,'0

起点法')

%画解法二的结果

CC=[zeros(1,KC(1)),C];

%补零是为了两子图一致

subplot(2,1,2),stem(kc,CC),text(18,6,'非平凡区间法')

%画解法三的结果

xlabel('n')

6

小结

有以上可以得出如下结论:

1、“解法三”最简洁、通用;

2、“解法二”使用于序列起点时刻N1或(和)M1小于0的情况,比较困难;

3、“解法一”最繁琐,效率低下。

如何利用matlab实现两个有限长序列的卷积

胖博士分享

2017-10-02 24024人看过

卷积运算可以说是一种有别于其他运算的新型运算,在信号处理工作中,它是一种常用的工具。随着信号与系统理论研究的深入以及计算机技术的发展,卷积运算被广泛地运用到诸多新处理领域中,如:现代地震勘测,超声诊断,光学诊断,光学成像,系统辨识及其他。 信号的卷积是针对时域信号处理的一种分析方法,它一般用于求取信号通过某系统后的响应。在信号与系统中,我们通常求取某系统的单位冲激响应,所求得的h(k)可作为系统的时域表征。任意系统的系统响应可用卷积的方法求得:y(k)=x(k)h(k) 本片经验我们就来说说如何利用matlab来实现两个有限长序列的卷积。

工具/原料

more

配置不错的电脑 正常工作的matlab软件

原理方法

1/3 分步阅读

基本数学原理

我们假设有两个长度有限的任意序列A(n)和B(n),其中A(n)和B(n)的具体数学表达式可以看下图一。那么这两个有限长序列的卷积就应该为C(n)=A(n)B(n),其具体表达式请参看一下图二。

查看剩余1张图

2/3

相关函数指令

Matlab中的conv和deconv指令不仅可以用于多项式的乘除运算,还可以用于两个有限长序列的卷积和解积运算。

Matlab提供的函数conv,语法格式:w=conv(u,v),其中u和v分别是有限长度序列向量,w是u和v的卷积结果序列向量。如果向量u和v的长度分别为N和M,则向量w的长度为N+M-1如果向量u和v是两个多项式的系数,则w就是这两个多项式乘积的系数。下面我们看一下deconv指令。功能:求向量反褶积和进行多项式除法运算。语法格式:[q,r]=deconv(v,u) ,参数q和r分别返回多项式v除以多项式u的商多项式和余多项式。具体实例请看下一步。

3/3

conv和deconv指令实例

具体实例请看下图,这里我们求多项式(x2+2x+1)与多项式(2x2+x+3)的积,再求积与(x2+2x+1)的商。需要注意的是向量c代表多项式(2x4+5x3+7x2+7x+3)。

两个有限长序列的卷积实例

1/6

具体序列的数学形式

在这一步我们将具体的有限长时间序列按数学方式显示,具体请看下图。

2/6

解法一:循环求合法求卷积

在本例中我们将按照原理方法第一步中图二的方式进行卷积计算,即循环求合法求卷积。具体的代码及结果请看下图。图一是是生成有限长度时间序列,图二是根据原理方法第一步中图二的方式即循环求合法求卷积的具体代码,图三是是图二的计算结果。

查看剩余2张图

3/6

解法二:0起点序列法

下面就说一下第二种方法,即“0起点序列法”,所采用的指令就是我们在原理方法中介绍的conv函数指令。具体代码看下图。

4/6

解法三:非平凡区间序列法

下面就说一下第二种方法,即“0起点序列法”,所采用的指令就是我们在原理方法中介绍的conv函数指令。具体代码看下图。图一为计算代码,图二为计算结果。

查看剩余1张图

5/6

绘图比较

这一步我们将解法二和解法三的计算结果绘制在一张中进行比较,其中第一幅是“0起点法”的计算结果图,第二幅是“非平凡区间法”的计算结果图。其中画图代码为:

subplot(2,1,1),stem(kc,c),text(20,6,'0 起点法') %画解法二的结果

CC=[zeros(1,KC(1)),C]; %补零是为了两子图一致

subplot(2,1,2),stem(kc,CC),text(18,6,'非平凡区间法') %画解法三的结果

xlabel('n')

6/6

小结

有以上可以得出如下结论:

1、“解法三”最简洁、通用;

2、“解法二”使用于序列起点时刻N1或(和)M1小于0的情况,比较困难;

3、“解法一”最繁琐,效率低下。

注意事项

现在有matlab的中文版本:matlab r2016a,大家可以试试。安装激活教程为:>

在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数

y=conv(x,h)计算卷积。

(1)即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。

实现差分方程,先从简单的说起:

filter([1,2],1,[1,2,3,4,5]),实现y[k]=x[k]+2x[k-1]

y[1]=x[1]+20=1

(x[1]之前状态都用0)

y[2]=x[2]+2x[1]=2+21=4

(2)y=conv(x,h)是用来实现卷级的,对x序列和h序列进行卷积,输出的结果个数等于x的长度与h的长度之和减去1。

卷积公式:z(n)=x(n)y(n)=

∫x(m)y(n-m)dm

程序一:以下两个程序的结果一样

(1)h

=

[3

2

1

-2

1

0

-4

0

3];

%

impulse

response

x

=

[1

-2

3

-4

3

2

1];

%

input

sequence

y

=

conv(h,x);

n

=

0:14;

subplot(2,1,1);

stem(n,y);

xlabel('Time

index

n');

ylabel('Amplitude');

title('Output

Obtained

by

Convolution');

grid;

(2)x1

=

[x

zeros(1,8)];

y1

=

filter(h,1,x1);

subplot(2,1,2);

stem(n,y1);

xlabel('Time

index

n');

ylabel('Amplitude');

title('Output

Generated

by

Filtering');

grid;

程序二:filter和conv的不同

x=[1,2,3,4,5];

h=[1,1,1];

y1=conv(h,x)

y2=filter(h,1,x)

y3=filter(x,1,h)

结果:y1

=

1

3

6

9

12

9

5

y2

=

1

3

6

9

12

y3

=

1

3

6

可见:filter函数y(n)是从n=1开始,认为所有n<1都为0;而conv是从卷积公式计算,包括n<1部分。

因此filter

和conv

的结果长短不同

程序三:滤波后信号幅度的变化

num=100;

%总共1000个数

x=rand(1,num);

%生成0~1随机数序列

x(x>05)=1;

x(x<=05)=-1;

h1=[02,05,1,05,02];

h2=[0,0,1,0,0];

y1=filter(h1,1,x);

y2=filter(h2,1,x);

n=0:99;

subplot(2,1,1);

stem(n,y1);

subplot(2,1,2);

stem(n,y2);

MATLAB中提供了卷积运算的函数命令conv2,其语法格式为:

C

=

conv2(A,B)

C

=

conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×nb的矩阵,则C的大小为(ma+mb-1)×(na+nb-1)。

例:

A=magic(5)

A

=

17

24

1

8

15

23

5

7

14

16

4

6

13

20

22

10

12

19

21

3

11

18

25

2

9

>>

B=[1

2

1

;0

2

0;3

1

3]

B

=

1

2

1

0

2

0

3

1

3

>>

C=conv2(A,B)

C

=

17

58

66

34

32

38

15

23

85

88

35

67

76

16

55

149

117

163

159

135

67

79

78

160

161

187

129

51

23

82

153

199

205

108

75

30

68

135

168

91

84

9

33

65

126

85

104

15

27

MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:

Y

=

filter2(h,X)

其中Y

=

filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如:

其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。

Fspecial函数用于创建预定义的滤波算子,其语法格式为:

h

=

fspecial(type)

h

=

fspecial(type,parameters)

参数type制定算子类型,parameters指定相应的参数,具体格式为:

type='average',为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。

type=

'gaussian',为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为05

以上就是关于如何利用matlab实现两个有限长序列的卷积全部的内容,包括:如何利用matlab实现两个有限长序列的卷积、matlab怎样算序列卷积、如何用matlab实现两个函数的卷积运算等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9557995.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存