寻峰函数fIndpeaks的C++实现


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

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

参考链接:https://blog.csdn.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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM