尋峰函數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