长时间数据流的信号滤波处理——基于MATLAB的FIR滤波器设计(1)

背景

对于任意一个场景,获取到的信号都是经过噪声污染过的,一些简单的加性噪声可以通过统计的特性进行滤除,而对于一些乘性的噪声,只能通过滤波进行滤除。

在信号处理中,信号滤波会广泛使用。在做研究分析信号的特征时,直接读取到数据,然后分析特征;但是,要想解决实际场景中的问题,就需要一些工程化的思想,因为数据是实时产生的数据流,而滤波也需要实时计算

举个栗子:

有一个5秒钟的音频信号,采样频率44100hz,需要滤波提取1500-3000hz频带的信号,假设实际中每次发出1秒钟的音频信号,以数据流的形式发送出来,共发送了5秒钟(实际是无限长的时间)。

滤波器设计:

基于MATLAB的FIR滤波器的设计

音频信号波形:

在这里插入图片描述

信号FFT:

上图:原始音频信号,FFT后的频谱
下图:带通音频信号,FFT后的频谱,可看出,设计的FIR滤波器的系数还是可以的


在这里插入图片描述

敲重点:

数据流的信号滤波,有两种方案:

(1)每接收到1秒数据,直接进行滤波
这个方案将无法保证信号的连续性,中间会有间断点,实验结果如下图所示:
上图:5秒钟信号,直接一次滤波处理
中图:5秒钟信号,按照数据来的顺序,分五次滤波处理
下图:两个滤波方法的误差值,可以明显看到中间的间断点,这在一些场景中是无法接受的


在这里插入图片描述


(2)每接收到1秒数据,根据上次滤波结果就进行滤波
这个方案保证信号的连续性,实验结果如下图所示:
上图:5秒钟信号,直接一次滤波处理
中图:5秒钟信号,按照数据来的顺序,分五次滤波处理
下图:两个滤波方法的误差值,误差为0,没有任何间断点,一次滤波和分5次滤波结果完全一致。


在这里插入图片描述


结论:

对于长时间数据流的信号滤波处理,一定到考虑分段数据中间的间断点处理问题。本文主要通过基于MATLAB的FIR滤波器的设计,解决了分段数据流的滤波不连续问题,这在实际工程项目中,非常值得借鉴和参考。

本文的所有代码和测试数据,都放在了这里。

猜你喜欢

转载自blog.csdn.net/erkuoge6464/article/details/126449005