diff --git a/a8k_opt_algo.cpp b/a8k_opt_algo.cpp index fc8cbed..3567c7f 100644 --- a/a8k_opt_algo.cpp +++ b/a8k_opt_algo.cpp @@ -228,16 +228,29 @@ float find_avg_line(vector& inputRaw) { * ALGO_IMPL * ***********************************************************************************************************************/ -int32_t findPeakTurnPoint(vector& data, int32_t search_start, int32_t suggest_search_end) { - int32_t search_end = 0; - for (int32_t i = search_start; i < suggest_search_end; i++) { - if (data[i] > m_cxt.agvline) { - search_end = i; +int32_t findPeakStartTurnPoint(vector& data, int32_t search_start, int32_t suggest_search_end) { + // int32_t search_end = 0; + // for (int32_t i = search_start; i < suggest_search_end; i++) { + // if (data[i] > m_cxt.agvline) { + // search_end = i; + // } + // } + int32_t search_end = suggest_search_end; + int32_t peakTurnPos = search_start; + float maxdiff2 = m_cxt.diffX2[search_start]; + for (int32_t i = search_start; i < search_end; i++) { + if (m_cxt.diffX2[i] > maxdiff2) { + maxdiff2 = m_cxt.diffX2[i]; + peakTurnPos = i; } } + return peakTurnPos; +} - int32_t peakTurnPos = 0; - float maxdiff2 = 0; +int32_t findPeakEndTurnPoint(vector& data, int32_t search_start, int32_t suggest_search_end) { + int32_t search_end = suggest_search_end; + int32_t peakTurnPos = search_start; + float maxdiff2 = m_cxt.diffX2[search_start]; for (int32_t i = search_start; i < search_end; i++) { if (m_cxt.diffX2[i] > maxdiff2) { maxdiff2 = m_cxt.diffX2[i]; @@ -295,8 +308,8 @@ void findpeak(vector& data, int32_t search_start, int32_t search_end, Pea // find_peak_start // 从pos向前找20个点,从低于均值线的坐标开始找,找到diff2的最大值 retpeak.peak_pos = peakpos; - retpeak.peak_start_pos = findPeakTurnPoint(data, peakpos - 20, peakpos) - 4; //-4 是经验数值 - retpeak.peak_end_pos = findPeakTurnPoint(data, peakpos, peakpos + 20) + 4; //+4 是经验数值 + retpeak.peak_start_pos = findPeakStartTurnPoint(data, peakpos - 20, peakpos) - 4; //-4 是经验数值 + retpeak.peak_end_pos = findPeakEndTurnPoint(data, peakpos, peakpos + 20) + 4; //+4 是经验数值 retpeak.area = computePeakArea(data, retpeak.peak_start_pos, retpeak.peak_end_pos); retpeak.find_peak = true;