本文关注数字信号的卷积、反卷积基本概念的理解与矩阵实现

卷积

LTI(线性时不变)系统常用卷积来表征。卷积的定义为:

y[n] =x[n]*h[n]= sum_{k=-infty}^{infty}{x[k]h[n-k]}

这个描述加上公式,如同一记闷棍,直接把很多初学者打翻在地。类似的形式很多教材都在用,我当年深受其害。

下面提供一个思路来理清卷积与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]。这个结果与应用卷积公式算得的结果是一样的。

[2,0,1]*[3,2,1]=[6,4,5,2,1]

所以卷积并不是什么神奇的操作,本质是一个时刻的输入产生一串输出,它下一时刻的输出叠加(线性)到对下一时刻的输入的响应(时不变)上了。或者换个说法是,当前时刻的输出,除了对当前输入的响应之外,还要加上之前输入的影响。

反卷积

反卷积就是卷积的逆运算,已知输出y[n]和冲激响应h[n],求输入x[n]的过程,或者已知输入输出求冲激响应。过程不赘述。

卷积与反卷积的矩阵实现

根据前面所说的卷积计算概念,可以有以下两种实现方法:

这两种方法是等价的,对于复杂输入和响应,这样计算就太费劲了。而矩阵计算是自带乘积求和属性的,所以借助计算机来用矩阵来计算卷积是非常方便的。

可以通过构造输入矩阵或者响应矩阵来实现上面两种计算方法:

y=Hx=egin{bmatrix} 3 & 0 & 0 \ 2 & 3 & 0 \ 1 & 2 & 3 \ 0&1&2\0&0&1end{bmatrix}egin{bmatrix} 2 \  0 \ 1end{bmatrix}=egin{bmatrix} 6 \ 4 \ 5 \ 2\1end{bmatrix}

y=hX=egin{bmatrix} 3 & 2 & 1end{bmatrix}egin{bmatrix} 2&0&1&0&0 \  0 &2&0&1&0\ 0&0&2&0&1end{bmatrix}=egin{bmatrix} 6 & 4 & 5 & 2&1end{bmatrix}

而对于反卷积,就是求逆运算

x=H^{-1}y

上面的例子不能直接逆运算,因为H不是方阵,没有逆。但如果我们将t=3/t=4时刻的输出去掉(因为这时输入已经结束了)。

y=Hx=egin{bmatrix} 3 & 0 & 0 \ 2 & 3 & 0 \ 1 & 2 & 3end{bmatrix}egin{bmatrix} 2 \  0 \ 1end{bmatrix}=egin{bmatrix} 6 \ 4 \ 5 end{bmatrix}

逆运算直接用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

总结

这里为了说明方便使用了离散的整数数值,理解了核心概念,就可以将卷积的理解带入到连续信号、二维图像等应用中去。


推荐阅读:
相关文章