关于数据抖动频率的计算 程序解决方法

关于数据抖动频率的计算 程序
我们有一组数据,
例如:
(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的误差。

谁能想到好的算法帮我解决这个问题?




------解决方案--------------------
C/C++ code

int cnt = 0;
for(i = 1; i < 19; ++i)
{
    if((data[i] > data[i-1] && data[i] > data[i+1]) || 
       (data[i] < data[i-1] && data[i] < data[i+1]) )
    {
        ++cnt;//抖动次数累加

    }
}