信号与系统中的卷积算法 论文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信号与系统论文
卷积算法
姓名:***
班级:电气10-9
学号:29号
卷积算法
摘要:卷积是在信号与线性系统的基础上或背景中出现的,脱离这个背景单独
谈卷积是没有意义的。卷积运算是一种有别于其他运算的新型运算,是信号处理领域中一种常用的重要工具。随着信号与系统理论的研究的深入及计算机技术发展,不仅使卷积方法在很多领域得到很广泛的应用,而且卷积运算的逆运算------反卷积的问题也越来越受重视和应用。在语言识别、现代地震勘测,超声诊断,光学诊断,光学成像,系统辨识及其他诸多信号处理领域中卷积和反卷积无处不在,而且许多都是有待深入开发研究的课题。用计算机来进行信号与系统分析,了解并灵活运用卷积运算去解决问题,提高自身的理论知识水平和动手能力,才是学习卷积运算的真正目的。
卷积运算的理论运算
1 卷积的概念及表达方式
卷积是信号处理中经常用到的运算。其离散型基本的表达式为:
∑=-=*=n
m m n h n x n h n x n y 0
)
()()()()(
其连续型基本的表达式为:
⎰+∞
∞
-=
*=τ
ττd t h x t h t x t )-()()()()(y
换而言之,假设两个信号f 1(t)和f 2(t),两者做卷积运算定义为
f(t)d
做一变量代换不难得出:
f(t)d=f 1(t)*f 2(t)=f 2(t)*f 1(t) 2 阶梯函数卷积
所谓阶梯函数,即是可以用阶梯函数u(t) 和u(t-1)的线性组合来表示的函数,可以看做是一些矩形脉冲的集合,图1-1给除了两个阶梯函数的例子
1—1 其中
3)-u(t -2)-2u(t -1)-u(t 2u(t)f(t)+=, 3)-3u(t -2)-2u(t 1)-u(t -2u(t) h(t)+=。
以图1—1中两个阶梯函数为例介绍本文提出的阶梯函数卷积算法。
根据卷积的性质(又称为杜阿美尔积分),上述f(t)与h(t)的卷积等于f(t)的导数与 h(t)的积分的卷积,即: ()t d h dt t d t h t ⎰+∞
∞
-=
)t *)
(f )(*)(f ( 由于f(t)为阶梯函数,因此其导数也为冲击函数及其延时的线性组合, 如图1—2(a ) 所示。
1—2
由于h(t)也为阶梯函数,所以其积分也能方便地求得,其值为阶梯函数图像下方的面积,记作为H(t),如图1—2(b)所示:
冲击函数与其它函数的卷积有如下的关系:H(t)=H(t-T),
因此f(t)*h(t)=2H(t)+2H(t-1)-H(t-2)-H(t-3).
即f(t)和(t)的卷积等于H(t)及其延时的线性组合,如图1-3所示:
1—3
从以上分析可以看到,两个阶梯函数的卷积等于其中一个函数的积分H(t)及其延迟H(t)的线性组合,组合系数对应于各个冲击函数的系数。
对于任意函数的卷积,可以先将他们的用矩形脉冲函数来逼近只要时间间隔足够小就能达到足够的逼近精度。逼近所得到的函数即为阶梯函数,然后又采用上述方法即可得到任意两个函数的卷积。
3任意函数的卷积
假设要计算任意函数的卷积:y(t)=x(t)*h(t)
其中x(t),h(t)可谓无限长,分别如图3—4(a),(b)所示。
3—4 连续时间函数
对上述x(t)和h(t),用宽度为的梯形脉冲函数逼近,x(t)和h(t)就转化为斜梯函数,用折现函数及其延时的线性组合表示,如图3—4(a),(b)中虚线所示。
x(t)=u(t+c 1 )[u(t-m)-u(t-(m+1))] 2—2 h(t)=u(t+c 1)[u(t-n)-u(t-(n+1) 2—3
此处c 1,c 2为常数,由于球x(t)和h(t)的微积分时,与此常数无关,所以此处可不必求出。
对式子2—2,求微分有:x ’(t)=du(t+c 1)[u(t-m)-u(t-(m+1))]/dt 2—4 设t=k
则 x ’(t)和h ’(t)如图2—5(a),(b)所示:
3—5 斜梯函数的一次微分与积分
∑∞
=∆
∆∆+=0m )]/x(m -)1)[x((m (t)x' 2—6
()()()∆∆++∆=∑∞
=)(
1[2
10'
k h k h t h k 式2—6,2—7如下图3—6所示。
3—6 斜梯函数的二次额积分
令H(k=h(-2)(t),
2—7 x(t)和h(t)的卷机过程
子程序流程图
程序及硬件实现
程序大意:
首先定义了一个计算卷积的函数
Convolveok( double *Input, double *Impulse, double *Output, Word16 Length);
其中输入为两个双精度的数组Input ,Impulse,以及卷积的长度Length,输出为一个双精度的数组Output,这个计算过程详见程序2
还定义了一个中断int2,功能是:判断(intnum == Length) 是否成立,若不成立则退出,若成立,则执行:将数组in_x[]中的每一个元素与平均值做差,得到一个新的数组Input[],再将Input[]复制到Impulse[]中,将Input[]和Impulse[]作为输入序列,调用Convolveok()做卷积。
在main函数中:先调用cpu_init初始化配置,然后对数组Input[]和Impulse[]进行赋值:
(1) 将数组Input[]中的第0个到第Length/2 -1个元素置为200,剩下的从第Length/2个到第Length -1个元素置为0;
(2) 将数组Impulse[]中的第0个到第Length/2 -1个元素置为100,剩下的从第Length/2个到第Length -1个元素置为0
然后调用Convolveok()做一次卷积运算
开中断,进入死循环,等待中断到来,当中断发生时,则执行int2
的功能。
******************************************************************************/ 程序1**
The programme of the Convolution Algorithm.
Using INT2 to get the input signal.
Array Input, in first step, is the input signal produced programme,
in next step, is the input signal get from A/D,
the length is 128, 32-bit floating point.
Array Impulse, in first step, is the input signal produced programme,
in next step, is the input signal get from A/D,
the length is 128, 32-bit floating point.
Array Output is the Convolution result, the length is 256, 32-bit floating point.
******************************************************************************* **/
#pragma CODE_SECTION(vect,"vect")
extern void InitC5402(void);