ResultTreeNode* getHighestValue(ResultTreeNode* prtree) { if (prtree == NULL) return (NULL); if (prtree->right == NULL) /* right child is empty */ return (prtree); return (getHighestValue(prtree->right)); }
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); } }