如何在实时信号的FIR带通滤波器中获得瞬态响应?
How to get ride of transient response in FIR bandpass filter of real-time signal?
我正在尝试自学一个俱乐部项目的数字滤波器设计。我需要对模拟数据进行采样并使用带通滤波器通过 20-40kHz。我使用 MATLAB 为 FIR 滤波器生成抽头,并使用这些系数在 C 中实现了一个滤波器。现在,我正在处理一组样本数据,只是为了让我的过滤器和 运行,但最终这将是来自 ADC 的流数据。
现在在 MATLAB 和我的代码中,过滤后的数据在输出样本数据的开头都有一个瞬态响应。由于我是数字滤波器领域的新手,我有两个问题:
这种短暂上涨背后的原因是什么?有没有什么办法可以通过不同的方式梳理数据来消除这种瞬变以进行实时分析?
我需要测量 ping 命中两个不同水听器之间的时间差,因此过滤数据的开头非常重要。
这是我的响应片段:(输入是振幅为 1 的 40kHz 正弦波)
对于模拟滤波,我认为这不是什么大问题,但是如果我对实时数据的缓冲区数组执行相同的过程,输出数据的每次迭代都会保持这个短暂的。
消除 FIR 滤波器瞬态响应的唯一方法是在感兴趣的信号之后 and/or 之前收集更多数据(取决于 FIR 滤波器内核的对称性和宽度)。
我正在尝试自学一个俱乐部项目的数字滤波器设计。我需要对模拟数据进行采样并使用带通滤波器通过 20-40kHz。我使用 MATLAB 为 FIR 滤波器生成抽头,并使用这些系数在 C 中实现了一个滤波器。现在,我正在处理一组样本数据,只是为了让我的过滤器和 运行,但最终这将是来自 ADC 的流数据。
现在在 MATLAB 和我的代码中,过滤后的数据在输出样本数据的开头都有一个瞬态响应。由于我是数字滤波器领域的新手,我有两个问题:
这种短暂上涨背后的原因是什么?有没有什么办法可以通过不同的方式梳理数据来消除这种瞬变以进行实时分析?
我需要测量 ping 命中两个不同水听器之间的时间差,因此过滤数据的开头非常重要。
这是我的响应片段:(输入是振幅为 1 的 40kHz 正弦波)
对于模拟滤波,我认为这不是什么大问题,但是如果我对实时数据的缓冲区数组执行相同的过程,输出数据的每次迭代都会保持这个短暂的。
消除 FIR 滤波器瞬态响应的唯一方法是在感兴趣的信号之后 and/or 之前收集更多数据(取决于 FIR 滤波器内核的对称性和宽度)。