如何在实时信号的 FIR 带通滤波器中摆脱瞬态响应?

Posted

技术标签:

【中文标题】如何在实时信号的 FIR 带通滤波器中摆脱瞬态响应?【英文标题】:How to get ride of transient response in FIR bandpass filter of real-time signal? 【发布时间】:2021-11-03 18:33:16 【问题描述】:

我正在尝试为一个俱乐部项目自学数字滤波器设计。我需要对模拟数据进行采样并使用带通滤波器通过 20-40kHz。我使用 MATLAB 为 FIR 滤波器生成抽头,并使用这些系数在 C 语言中实现了一个滤波器。目前,我正在处理一组样本数据,只是为了让我的过滤器启动并运行,但最终这将是来自 ADC 的流式数据。

现在在 MATLAB 和我的代码中,过滤后的数据在输出样本数据的开头都有一个瞬态响应。由于我是数字滤波器领域的新手,我有两个问题:

这种短暂上涨背后的原因是什么?有没有办法以不同的方式梳理数据以消除这种瞬态以进行实时分析?

我需要测量 ping 击中两个不同的水听器之间的时间差,因此我过滤数据的开头非常重要。

这是我的响应的 sn-p:(输入是幅度为 1 的 40kHz 正弦波)

使用模拟滤波我认为这不会有太大问题,但如果我对实时数据的缓冲区数组执行相同的过程,输出数据的每次迭代都会保持这种瞬态。

【问题讨论】:

瞬态正常。您可以将过滤器响应视为最初用零填充的“单元格”链。在每个样本周期,一个新样本进入单元链,现有样本移动一个单元。所以需要一个等于滤波器长度的时间来达到稳定状态,即所有单元格都已经包含信号值 【参考方案1】:

消除 FIR 滤波器瞬态响应的唯一方法是在感兴趣的信号之前和/或之后收集更多数据(取决于 FIR 滤波器内核的对称性和宽度)。

【讨论】:

以上是关于如何在实时信号的 FIR 带通滤波器中摆脱瞬态响应?的主要内容,如果未能解决你的问题,请参考以下文章

STM32F429的DSP教程第39章 STM32F429的FIR带通滤波器实现(支持逐个数据的实时滤波)

STM32F407的DSP教程第39章 STM32F407的FIR带通滤波器实现(支持逐个数据的实时滤波)

信号处理基于 FIR与IIR滤波器低通高通带通设计matlab源码含GUI

信号处理基于 FIR与IIR滤波器低通高通带通设计matlab源码含GUI

语音处理基于matlab音频信号FIR+IIR(高通+低通+带通)滤波器频谱分析含Matlab源码 1732期

FIR滤波器的Matlab设计(含低通,高通,带通和带阻)