我们有一组数据,
例如:
(C语言方便,借一下C的方法表达)
data[20]={1,2,4,2,3,5,1,4,6,7,8,9,0,2,6,7,-1,-9,1,-20}
想要用一种方法计算数据的抖动频率(往复频率)。
然后我自己想了一个算法,就是:
If (data(i) > data(i - 1)) Then
Ady1 = 1
Else
Ady1 = -1
End If
If (data(i - 1) > data(i - 2)) Then
Ady2 = 1
Else
Ady2 = -1
End If
Ady2 * Ady1 <0 说明数的增减方向有转向(抖动)
If (Ady2 * Ady1 < 0) Then
ShakeY = ShakeY + 1 '抖动次数累加
End If
但是这个方法有一个缺陷,那就是前面的抖动点会重复计算两次,而最后一次却不会。
所以最后结果:Label14 = Round(ShakeX / 2) 会有1HZ的误差。
谁能想到好的算法帮我解决这个问题? |