卷积、反卷积简析与其矩阵实现
本文关注数字信号的卷积、反卷积基本概念的理解与矩阵实现
卷积
LTI(线性时不变)系统常用卷积来表征。卷积的定义为:
这个描述加上公式,如同一记闷棍,直接把很多初学者打翻在地。类似的形式很多教材都在用,我当年深受其害。
下面提供一个思路来理清卷积与LTI的概念与关联。
LTI (线性时不变系统)这个名字里就包含了它的两个关键概念。
线性
假设输入1,输出2。如果输入3,那么输出就是6。输入增加,输出等比例增加,就是线性。
时不变
如果t=0时刻输入x[0]=1,输出y[0]=2。那么t=1时刻输入x[1]=1, 输出y[1]=2。不同的时刻给以相同的输入,系统会做出相同的反应,就是时不变。
卷积计算过程
通过一个例子来理解一下计算过程(自己用笔写一下效果更好)。
假设一个系统的冲激响应(impulse response)是h[n]=[3, 2, 1]。(为了简便使用整数)
意思是如果输入x[0]=1,则输出y[0]=3; y[1]=2; y[2]=1。(就是这么拖泥带水,如果每个输入只产生一个输出,就用不到卷积了)
如果给一串输入会怎样呢?例如x[n]=[2, 0, 1] ,过程是这样的:
t=0: 输入x[0]=2,输出应为y[0]=6,(「线性」特点:输入翻倍,输出翻倍)
t=1: 输入x[1]=0,无输入,对应无输出,但因为还残留对x[0]的响应,所以输出y[1]=4
t=2: 输入x[2]=1,对应输出y[2]=3,(「时不变」特点:无论何时输入同样的内容,会有同样的响应),同时系统此时仍残留对x[0]的响应为2,所以最终输出y[2]=3+2=5.(再次应用「线性」特点)
t=3/t=4时刻,系统已没有输入,只有残留的对x[2]的响应,所以输出y[3]=2, y[4]=1.
所以结果是,x[n]=[2, 0, 1]输入到冲激响应为h[n]=[3, 2, 1]的系统中,产生了输出y[n]=[6, 4, 5, 2 ,1]。这个结果与应用卷积公式算得的结果是一样的。
所以卷积并不是什么神奇的操作,本质是一个时刻的输入产生一串输出,它下一时刻的输出叠加(线性)到对下一时刻的输入的响应(时不变)上了。或者换个说法是,当前时刻的输出,除了对当前输入的响应之外,还要加上之前输入的影响。
反卷积
反卷积就是卷积的逆运算,已知输出y[n]和冲激响应h[n],求输入x[n]的过程,或者已知输入输出求冲激响应。过程不赘述。
卷积与反卷积的矩阵实现
根据前面所说的卷积计算概念,可以有以下两种实现方法:
这两种方法是等价的,对于复杂输入和响应,这样计算就太费劲了。而矩阵计算是自带乘积求和属性的,所以借助计算机来用矩阵来计算卷积是非常方便的。
可以通过构造输入矩阵或者响应矩阵来实现上面两种计算方法:
而对于反卷积,就是求逆运算
上面的例子不能直接逆运算,因为H不是方阵,没有逆。但如果我们将t=3/t=4时刻的输出去掉(因为这时输入已经结束了)。
逆运算直接用matlab或octave计算:
>> H
H =
3 0 0
2 3 0
1 2 3
>> y
y =
6
4
5
>> x=inv(H)*y
x =
2.00000
0.00000
1.00000
总结
这里为了说明方便使用了离散的整数数值,理解了核心概念,就可以将卷积的理解带入到连续信号、二维图像等应用中去。
推荐阅读: