波峰波谷检测算法 阈值法C代码
时间: 2023-10-11 07:13:26 浏览: 272
图像分分割迭代、峰谷、半阈值算法的的vc代码
5星 · 资源好评率100%
以下是波峰波谷检测的阈值法实现的C代码:
```c
#include <stdio.h>
#define THRESHOLD 100 // 阈值
int main() {
int data[] = {50, 70, 90, 120, 100, 80, 60, 80, 110, 130, 100, 70, 50};
int length = sizeof(data) / sizeof(int);
int i, peak = 0, valley = 0;
int peakIndex = 0, valleyIndex = 0;
int lastPeakIndex = 0, lastValleyIndex = 0;
// 找到第一个峰值或谷值
for (i = 1; i < length; i++) {
if (data[i] > data[i-1]) {
peak = 1;
peakIndex = i;
break;
} else if (data[i] < data[i-1]) {
valley = 1;
valleyIndex = i;
break;
}
}
// 从第一个峰值或谷值开始遍历
for (i = peakIndex + 1; i < length; i++) {
// 寻找峰值
if (peak && data[i] < data[i-1]) {
if (data[i-1] - data[peakIndex] > THRESHOLD) {
printf("Peak: %d\n", data[peakIndex]);
lastPeakIndex = peakIndex;
valley = 1;
valleyIndex = i;
}
peak = 0;
}
// 寻找谷值
if (valley && data[i] > data[i-1]) {
if (data[valleyIndex] - data[i-1] > THRESHOLD) {
printf("Valley: %d\n", data[valleyIndex]);
lastValleyIndex = valleyIndex;
peak = 1;
peakIndex = i;
}
valley = 0;
}
}
// 打印最后一个峰值或谷值
if (peak && data[length-1] - data[lastPeakIndex] > THRESHOLD) {
printf("Peak: %d\n", data[peakIndex]);
} else if (valley && data[lastValleyIndex] - data[length-1] > THRESHOLD) {
printf("Valley: %d\n", data[valleyIndex]);
}
return 0;
}
```
这段代码假设输入数据为一维数组 `data`,并且数据点之间的间隔是相等的。算法首先找到第一个峰值或谷值,然后从该点开始遍历数组。在遍历过程中,如果当前点是峰值,则判断其与上一个峰值之间的距离是否超过阈值,如果是,则输出上一个峰值,并将当前点作为下一个谷值;如果当前点是谷值,则判断其与上一个谷值之间的距离是否超过阈值,如果是,则输出上一个谷值,并将当前点作为下一个峰值。最后,如果最后一个点是峰值或谷值,且其与上一个峰值或谷值之间的距离超过阈值,则输出最后一个峰值或谷值。
阅读全文