Пример #1
0
ResultTreeNode* getHighestValue(ResultTreeNode* prtree) {

    if (prtree == NULL)
        return (NULL);

    if (prtree->right == NULL) /* right child is empty */
        return (prtree);

    return (getHighestValue(prtree->right));
}
Пример #2
0
void peakDetect(int count) {
	if (count == 0) {
		peaksArr = malloc(sizeof(*peaksArr) * numOfPeaks);
	}
	int q = 0;
	int start = 0;

	for (int i = 0; i < TOTAL_VALUES; i++) {
		if (values[i] >= averageValues[q]) {
			// ignore
		} else {
			start = i;
			break;
		}
	}

//	if (start == 0) {
//		start++;
//	}

	// start peak detection now
	int up = 0; // boolean
	int down = 0; // boolean
	int peakStart = 0;
	int peakEnd = 0;

	//printf("Starting from: %d\n", start);
	int peakCounter = 0;
	for (int i = start; i < TOTAL_VALUES; i++) {
		if (up == 0) {
			if (values[i] <= averageValues[i]) {
				// ignore
			} else {
				//printf("crossed avg line from bottom %d\n", i);
				up = 1;
				peakStart = i;
			}
		} else {
			if (values[i] >= averageValues[i]) {
				//ignore

			} else {
				//printf("crossed avg line from top %d\n", i);
				down = 1;
				peakEnd = i;
				//printf("averageValues[%d] = %lf \n", i, averageValues[i]);
				if (getHighestValue(peakStart, peakEnd) - averageValues[i]
						> threshold) {
					// valid peak
					//getHighestValue(peakStart, peakEnd);
					if (count == 1) {
						numOfPeaks++;
						//printf("Number of peaks: %d \n\n" , numOfPeaks);
					} else {
						peaksArr[peakCounter] = i * 5.0; // getHighestValue(peakStart, peakEnd);
						peakCounter++;
						printf("Peak: %d: \n", i * 5);
					}

					//printf("\n\n");
				} else {
					// its just noise
					//printf("\n\n");
				}
				// At this postion we have crossed a peak

				//reset
				up = 0;
				down = 0;

			}
		}

	}
	if(count == 1){
		printf("Number of peaks: %d \n\n" , numOfPeaks);
	}
}