swift中无寻找信号峰值函数,自己写了一个,可以检测固定阈值和距离间隔的峰值索引。
func findPeaks(velocity_data:Array, height:Double, distance:Double) -> Array { //筛选所有大于height的点 var indexList1:Array = [] for index in 0.. = height{ indexList1.append(index) } } //筛选连续索引中的最大值点 let indexSet = IndexSet(indexList1) let rangeView = indexSet.rangeView let rangeViewArray = rangeView.map { Array($0.indices) } var indexList2:Array = [] for range in rangeViewArray{ var maxData = height var index = 0 for data in range{ if velocity_data[data] >= maxData{ maxData = velocity_data[data] index = data } } indexList2.append(index) } //筛选满足最小距离的点 var keep:Array = Array(repeating: 1, count: indexList2.count) let priority = indexList2.map{velocity_data[$0]} let priorityToPosition = priority.enumerated().sorted(by: {$0.element < $1.element }).map{$0.offset} for i in stride(from: indexList2.count-1, through: 0, by: -1){ let j:Int = priorityToPosition[i] if keep[j] == 0{ continue } var k:Int = j-1 while 0<=k && indexList2[j] - indexList2[k] < Int(distance){ keep[k] = 0 k -= 1 } k = j+1 while k = [] for i in 0..



