最近项目需要把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