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