寻峰函数fIndpeaks的C++实现

最近项目需要把matlab转C++,并且尽可能将运行速度提高。寻峰函数findpeaks是一维信号处理中常用的函数,我实现了时间复杂度为O(Nlog(N))版本。

注: 主要实现了筛选了最小距离的版本,等价于matlab中 findpeaks(sig,"minpeakdistance",distance)

参考链接:https://blog.****.net/yfl_jybq/article/details/100114952

整个算法主要分成三部分:

1、计算二阶差分,得到所有的峰值索引 (时间复杂度O(N))

2、对峰值索引按照峰值大小降序(快速排序)  (时间复杂度O(Nlog(N)))

3、从小到大,对峰值索引进行筛选,排除已入选的索引左右distance距离的峰值索引 时间复杂度O(Nlog(N)))

 

代码已经放在github上,如果能帮上你,麻烦点个star,链接:https://github.com/anzhi998/findpeaks

上一篇:【数据结构与算法】【左神】02-认识O(Nlog N)的排序


下一篇:《算法图解》- 快速排序