使用slope找到峰值 - android - java

时间:2015-12-28 15:15:37

标签: java android arrays

我正在尝试编码如果斜率的符号值从正变为负,则该值索引是传感器的压力峰值。即使它找到了峰值,也可能因压力增加而出现另一个峰值。 我该怎么办?先感谢您。

for (int i =1;i<strNumbers.length -2;i++){ //strNumber is the array stream from sensor.
            String y1;
            y1 = strNumbers[i];
            String y2;
            y2 = strNumbers[i+1];
            float y_2 = Float.parseFloat(y2);
            float y_1 = Float.parseFloat(y1);
            float delta_y = y_2  - y_1;
            float mySlope = 0;
            float delta_x;
            delta_x  = 1; //always difference is 1.  
             mySlope =  (delta_y / delta_x);

              activity.FirstPeak.setTextColor(Color.RED);
              activity.FirstPeak.setText(String.valueOf(mySlope));

        }

1 个答案:

答案 0 :(得分:0)

在循环中的每个点,您需要比较两个渐变 - 左边的渐变和右边的渐变。如果左边是正面,右边是负面,那么你找到了一个峰值。

List<Integer> peaks = new ArrayList<>();

for (int i = 1; i < strNumbers.length - 1; i++)
{
    float left = Float.parseFloat(strNumbers[i]) - Float.parseFloat(strNumbers[i - 1]);
    float right = Float.parseFloat(strNumbers[i + 1]) - Float.parseFloat(strNumbers[i]);
    if (left > 0 && right <= 0)
        peaks.add(i);
}

现在你有一个数组,包含所有峰的索引。你可以找到这样的绝对最大值:

float max = 0;
float maxIndex = -1;
for (Integer i : peaks)
{
    float peak = Float.parseFloat(strNumbers[i]);
    if (peak > max)
    {
        max = peak;
        maxIndex = i;
    }
}

你可以找到这样的峰 - 峰距离:

int sum = 0;
for (int i = 0; i < peaks.size() - 1; i++)
    sum += peaks.get(i + 1) - peaks.get(i);
float average = (float)sum / (peaks.size() - 1)