上面使用的方法对于较短或中等长度序列的滤波处理来说是比较好用的,但是对于长序列的滤波处理会怎么样呢?对于实时系统怎么样呢?在这里长度几乎无限的序列(输入序列长度可能持续几天或者几个月)是非常常见的。我们需要找到一个上面所描述的执行滤波运算的快速卷积的一个变换形式,因为我们不想在处理之前在存储器中存储所有的输入采样值。另外,在我们开始实际的滤波器运算之前,采集长序列的所有采样点所需的等待或者反应时间破坏了实时数字信号处理的目的。
为了滤除特别长的信号序列,我们必须把这个信号分割成为能够分别滤波的较短长度的序列,然后再重新组成一个完整的原始信号滤波后的版本。针对这个运算的一些方法已经开发出来了,但是我们将限定相关讨论在两个共同点上:重叠相加和交叠保存技术。在关于这两个技术的主要讨论中,对于h[n]和x[n]序列我们将只使用短的输入序列,希望能够提高对这个处理过程需求的理解能力。但是这个技术更适于处理特别长的数据序列。
交叠相加
在图8.6中,x[n]是一个30点的序列,这个序列补零到36点(0≤n≤35),从而让所有子图适合统一的x轴标示方式。在这个例子中,我们希望x[n]与图8.7中的6阶低通滤波器脉冲响应序列h[n]卷积。显而易见,h[n]的长度是M=7。在图8.6中,第2个(x0[n]),第3个(x1[n]),和第4个(x2[n])子图内,划分x[n]为3个非交叠段,每一个段有10个采样点,长度N=10。本段的长度(N=10个采样点)依据使用16点FFT的需要来选择。记住,卷积运算的输出等于L=N+M-1。对这个例子,总的长度是L=16并且滤波器的长度M=7,因此我们的数据长度被要求为N=10个采样点。在图8.6中,第5个y0[n],第6个y1[n]和第7个y2[n]显示了基于x0[n]、x1[n]、x2[n]和h0[n]的滤波运算(应用FFT和IFFT的快速卷积)结果。注意对x0[n]的滤波处理,一个10点采样的序列,与h[n]卷积,其结果在16个采样序列y0[n]中。y0[n]最后面的6个采样值与y1[n]前面的6个采样值产生交叠。类似地,y1[n]最后面的6个采样值与y2[n]前面的6个采样值产生交叠。为了获得滤波器的正常输出,交叠的部分必须预先加上一些采样值,并发送到DSP系统的输出装置(因此名为“交叠相加”)。图8.6中,后面的子图提供一个与传统的时间抽取卷积的比较。最后两个子图论述的是基于变换方法和传统的卷积求和方法返回相同的结果。
图8.6 交叠相加快速卷积处理(画圈的位置是补0的值)
图8.7 和低通滤波器相联系的脉冲响应(低通滤波器用在交叠相加快速卷积处理中)(www.xing528.com)
交叠存储
在图8.8中,x[n]也是36点的输入序列。在这个例子中,我们需要x[n]与前面使用过的相同6阶低通滤波器脉冲响应相卷积,如图8.7所示。因此,h[n]的长度是M=7。在图8.8中,x[n]分割成x0[n]、x1[n]、x2[n]三个有交叠的数据段,每段数据段的长度是16个采样点。这样划分数据长度依据的是16点FFT算法的要求。在图8.8中,第5行(y0[n])、第6行(y1[n])、第7行(y2[n])子图显示的是基于x0[n]、x1[n]和x2[n]与h[n]进行滤波运算的结果。y0[n]、y1[n]和y2[n]开头的6个采样点(M-1=6,是低通滤波器的阶数)是不正确的和不可用的。这些值沿着x轴的绘出值很大,正说明了这一点。为了获得滤波器的输出,y0[n]、y1[n]、y2[n]的部分没有较大的沿x轴的绘出值。在图8.8中,最后的子图提供了与使用传统的时域卷积方法的系统输出进行了比较。最后的两个子图说明,除了滤波器的开始瞬间,这个基于交叠存储变换技术的结果和传统的卷积求和技术得到结果是一样的。
图8.8 交叠存储快速卷积处理(填充的圆圈是零补充值)
总之,交叠和相加技术如果没有输入的交叠,那么就必须在输出数据段中加一些填充点,这样才能得到正确的输出结果。交叠存储技术在输入段中填充数据点,然后放弃输出结果数据段中混叠的地方,并且剩余部分是无痕地“缝合在一起”。
每一种技术都允许长时间持续的输入序列的实时滤波处理,甚至是使用更高阶的滤波器。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。