数字信号处理中卷积的运算
1.卷积的概念
首先卷积是什么,大多数时候大家看到这个词都会想到很高深的东西,然后联想到一大堆数学公式。其实如果做为使用者我们不用关心卷积是如何定义的。我们在线性信号系统中只要先明确一个概念就好,卷积指的就是 in_put输入信号和out_put输出信号以及脉冲响应之间的关系运算号。
简单来说,你给一个脉冲响应,给我一个信号输入,我就能通过卷积运算得到一个输出信号。
到这里首先明确一件事,卷积运算在数字信号处理中只关注这三种信号。并且运算并不麻烦,大家可以用matlab里的卷积函数试试,然后再和自己手算结果作对比。
2. 输入输出信号,脉冲响应
首先大家需要知道脉冲信号和脉冲响应的区别,脉冲信号指的是除了一个非0点以外其他信号采样点全部是0的信号,当我们有了一个信号处理系统,我们把一个脉冲信号丢进去,就会得到这个系统的脉冲响应。注意这里我们测试系统一般会丢进去一个单位脉冲信号(也就是非零值为1的脉冲信号),这样方便计算。
注意这里的系统我们默认它是线性系统。
输入信号,输出信号,我想就不用我再赘述了。
3.卷积运算
下面是我在网上找的一个例子,来自这本书(http://dspguide.com/)。
x[n]是输入信号,h[n]是脉冲响应,y[n]是输出信号。
具体运算步骤我先给出图片。
注意一点,输出信号的长度是输入信号和脉冲响应的长度和减1。至于为什么是和我在下面会解释。
我们开始运算。首先我们使用输入信号的第一个信号采样点乘上全部的脉冲响应信号。我们可以得到上图中第一个图像,因为我们的第一个采样点值是0,这里的图一作为输出合成的一部分先保留,然后我们输入的第二个采样点是-1,我们用-1乘上脉冲响应信号得到第二个图像,以此类推我们不断得重复上述过程可以得到9张图,因为输入信号有个9采样点。要注意当我们进行到最后一个采样点的时候我们会发现这个采样点之后没有信号的采样点了,但是我们不能只取脉冲响应的一个值。我们依然使用整段脉冲响应,所以这里输出信号的长度是需要加上一段脉冲响应的长度的,这里要注意的是我们最后一个脉冲响应的0值是被取到的,所以我们这不能简单的把输入信号长度加上脉冲响应长度再减去2。
之后我们把这九张图像叠加在一起,每个点的值直接相加,就得到了,我们的输出信号,比如输出信号的第一个信号我们直接把九张图的里0号采样点的值全部相加,就得到了输出的第一个信号是0,第二个输出信号我们把9张图中每张的1号采样点的值全部相加,得到输出信号的第二个值。以此类推我们可以得到最后的输出信号。
如果使用数学公式来表达
这里y是输出信号,y[i]就是输出信号i采样点的值,h是脉冲响应,x时输入信号。
比如第6个信号采样点就是
y[6]=x[3]h[3]+x[4]h[2]+x[5]h[1]+x[6]h[0]
那么我们的前三个信号去哪里呢?因为脉冲响应长度是4,所以知道第三个图像才开始有第6个点的值,0值我们这里就省去啦。当我们移动到第7个采样点的时候,前面的点就都设为0值,所以这里也不加入计算啦。
到这一步我么就可以算出来我们的输出信号啦。
使用matlab我们可以简单的使用conv(A,B)来计算两个信号的卷积的结果,大家可以试试。
如果我们继续深入就会牵扯到卷积机器的运算问题这里也是有几个点要注意的,
首先就是在信号不完整的时候需要用0值来延伸信号让脉冲响应可以匹配到输入信号。
再一个就是输出信号的起始点和终点可能不可用,是因为我们自主扩展了0值。
到此我们基本掌握了信号处理中卷积运算的规则。
有错误请大家直接评论指出,以上是我个人对信号系统卷积运算的理解。