峰值查找算法 - 动态阈值或替代方法

Posted

技术标签:

【中文标题】峰值查找算法 - 动态阈值或替代方法【英文标题】:Peak finding algorithm - Dynamic thresholding or alternative methods 【发布时间】:2014-01-03 19:34:00 【问题描述】:

我正在寻求一些建议。抱歉,或者您觉得属于其他网站。

我的任务是识别信号中的特定社交呼叫(来自蝙蝠),并且我一直在研究应该使用哪些类型的方法来隔离不同的呼叫。所以,首先,这就是整个信号的样子:

这个信号非常大,因此信号被分成1024*100的块(每个大约10MB左右),这里是一个块的样本:

此信号更理想,并且可以从视觉上轻松识别峰值。以下是一些与此相关的问题:

1) 计算短期能量是否是确定峰值的适当方法?

2) 有没有动态分配阈值的方法?例如。为这个块创建的算法,应该潜在地适用于信号中的所有其他块以及输入的任何其他信号吗?

3) 将此信号转换为频域(使用 STFT 方法)会有什么不同吗?

这是使用 FFT 算法的块:

预期输出:

任何建议将不胜感激

【问题讨论】:

我只是好奇:难道不能用 101 个统计数据过滤这些信号吗…… @achingfingers 我不知道这个概念?如果您指的是编程语言,我正在使用 C++/Python 来解决这个问题。为什么使用 101 统计数据会有所作为,只是出于好奇? 我不想冒犯。而且我不是很喜欢你在做什么......但对我来说,上面的模式看起来可以很容易地用标准偏差阈值过滤......当然用你选择的语言实现。 @achingfingers 哦,我很抱歉,如果我的反应好像我在冒犯一样,我真的没有(只是有压力!!)。谢谢你的回复:)我会查一下标准差阈值,看看我在哪里,我只是不知道这个概念而已!我会回帖的! @achingfingers 抱歉,您有任何可能对标准差阈值有用的论文或教程吗?会有所帮助:) 【参考方案1】:

    是的。您必须尝试找出合适的间隔长度。

    是的。一种方法是从较大块的平均能量开始,并将阈值设置为该值的 10 倍。

    视情况而定。你想知道频率吗?它可以用来区分蝙蝠噪声和不相关类型的背景噪声。如果没有很多其他噪音并且您对频率不感兴趣,请不要打扰。如果你只是想找到峰,那也无济于事。

【讨论】:

【参考方案2】:

可能有关于峰值检测算法的论文。但是如果你没有时间,你可以尝试沿着时间窗口移动,并使用它的能量来计算一个阈值。

也许您还可以查看峰密度(如果沿时间存在或多或少相同数量的峰),以了解您应该期望在给定窗口中找到多少峰。 (好吧,如果没有静默,但通常很容易使用能量区分静默和噪音)。

我怀疑 FFT 会有所帮助。我们可以看到没有明显的频率,任何类型的过滤都会污染峰值。

【讨论】:

【参考方案3】:

我会研究频率,检查时频分析。也许小波或 wigner 变换或简单的声波图会有所帮助。

时间-频率表示通常同时为您提供时间、能量和频率。好东西。

【讨论】:

以上是关于峰值查找算法 - 动态阈值或替代方法的主要内容,如果未能解决你的问题,请参考以下文章

分治算法用于在数组中查找峰值。

数据结构(C语言版)严蔚敏--->常用的查找算法[静态查找表动态查找表]

数据结构(C语言版)严蔚敏--->常用的查找算法[静态查找表动态查找表]

二分查找算法算法指导 意境级讲解

常用查找算法

iOS开发底层之方法的慢速查找流程探索+方法动态决议上 - 10