我有一个信号以500khz采样。我正在尝试检测传入数据中的上升,下降和峰值。峰值的基准可能是250微秒或2.5毫秒,振幅可能会比本底噪声高6db或15db。不幸的是,我的snr不好。信号的直流电平不是恒定的,但移动速度比交流分量慢得多。

在决策点,我需要知道上升和下降的斜率。这是一个严格的实时系统,在下降斜率达到直流电平后,我真的需要在100usec中做出决定。

我正在寻找建议,如何有效地实现一个体面的算法。

目前,我进行移动平均(过去25个数据点加在一起)并尝试检测趋势。一旦发现上升趋势,便开始寻找下降趋势,一旦发现下降趋势,我可能又收集了50个样本并开始计算。

噪声现在可以很容易地拧紧该算法,因此成为问题。

更新日期

为了他人的利益,我最终实现了移动平均线,之后是积分器。过去64个数据的移动平均线已经足够平滑,但是没有上升到一定程度,对最后8个值进行积分可以使上升回升,我只是在寻找上升和下降,后来对斜率进行了线性回归。可以,不是很好,但是还可以。

评论

您可以发布当前算法失败的数据序列图吗?

尽管噪声很大,但执行此类操作还是很困难的。 Juancho提出的与众不同的建议可能是一个很好的建议。

#1 楼

您应该从带限差分器开始(等效于一个差分器,后跟一个低通滤波器)。微分器将消除低频趋势,并将对您的峰值和斜率做出快速响应。低通分量将消除截止频率以外的噪声。

应设计截止频率,以使斜率得到干净的脉冲。正脉冲;负斜率作为负脉冲,其峰值将对应于正负之间的零交叉。

这种类型的滤波器通常实现为FIR滤波器。滤波器的样本数量将取决于您的实时限制,截止频率的清晰度以及截止频率本身。

评论


$ \ begingroup $
我不太熟悉DSP。您能指出我可能的实现方式吗?根据您的回答和我的有限知识,我认为链接(holoborodko.com/pavel/numerical-methods/numerical-derivative / ...)确实可以满足您的要求。如果使用这种方法,我将不知道1)如何确定我的频率? 2)如何选择滤波系数?
$ \ endgroup $
– Ktuncer
2012年7月8日在1:53

$ \ begingroup $
以下链接也解决了类似的问题,并包含许多链接。 dsprelated.com/showmessage/123740/1.php
$ \ endgroup $
– Ktuncer
2012年7月8日在1:54