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