From f7ebcdb77ef5d01cdd6c66966ffbd4e9cb9076da Mon Sep 17 00:00:00 2001 From: zengHQ Date: Mon, 24 Nov 2025 14:18:11 +0800 Subject: [PATCH] peakCentering version 1.6.1: fix bugs and add frmae lastSync --- peakCentering/sourceCode/peakCentering.cpp | 50 ++++++++++++---------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/peakCentering/sourceCode/peakCentering.cpp b/peakCentering/sourceCode/peakCentering.cpp index 1ad3e2f..cd6c2e1 100644 --- a/peakCentering/sourceCode/peakCentering.cpp +++ b/peakCentering/sourceCode/peakCentering.cpp @@ -113,7 +113,7 @@ void peakCentering( if(0 == linePk.len) { if(linePk.value >= 240) - pkCenter = RGN_DATA_WIN_SIZE/2; + pkCenter = RGN_DATA_WIN_SIZE; else pkCenter = 0; } @@ -147,6 +147,7 @@ void peakCentering( else//for(int i = 0; i < 8; i ++) { ap_uint<8> wrPos_0 = i * 2 - 2 + RGN_DATA_WIN_SIZE/2; + ap_uint<8> lastPos = wrPos_0 -1; ap_uint<8> wrPos_1 = i * 2 - 1 + RGN_DATA_WIN_SIZE/2; ap_uint<8> rdPos_0 = pkCenter - RGN_DATA_WIN_SIZE/2 + i* 2 -2; ap_uint<8> rdPos_1 = pkCenter - RGN_DATA_WIN_SIZE/2 + i* 2 -1; @@ -191,24 +192,24 @@ void peakCentering( } else { - currPeak.start = wrPos_1; - currPeak.len = 1; - currPeak.value = data_1; + currPeak.start = wrPos_0; + currPeak.len = 2; + currPeak.value = data_0; SM = 0b11; linePk.value = data_0; //record initial value } break; - case 0b11: //wait state - if(lastData < data_0) + case 0b11: //horizontal state + if(lastData < data_0) //rising { - if(data_0 < data_1) //rising + if(data_0 < data_1) //rising - rising. if i==8, data_1 is invalid peak, { currPeak.start = wrPos_1; currPeak.len = 1; currPeak.value = data_1; SM = 0b01; } - else if(data_0 > data_1) //falling + else if(data_0 > data_1) //rising - falling, data_0 is peak { if( (wrPos_0 >= pkRng_S) && (wrPos_0 <= pkRng_E) ) { @@ -218,7 +219,7 @@ void peakCentering( } SM = 0b10; } - else //data_0 == data_1 + else //data_0 == data_1, if i==8, data_0 and data_1 is invalid peak, { currPeak.start = wrPos_0; currPeak.len = 2; @@ -226,23 +227,20 @@ void peakCentering( SM = 0b01; } } - else if(lastData > data_0) + else if(lastData > data_0) //falling { - if(data_0 < data_1) //peak is at edge (pos:0,1,2...), invalid + if((currPeak.start >= pkRng_S) && (lastPos <= pkRng_E)) + linePk = currPeak; + + if(data_0 < data_1) //falling - rising, peak is at lastData (pos:0,1,2...), invalid { - if( (lastData > data_0)&& (wrPos_0 > pkRng_S)) - { - linePk = currPeak; - } currPeak.start = wrPos_1; currPeak.len = 1; currPeak.value = data_1; SM = 0b01; } - else if(data_0 >= data_1)//falling - { + else// if(data_0 >= data_1)//falling, peak is at lastData SM = 0b10; - } } else //lastData == data_0 { @@ -256,6 +254,12 @@ void peakCentering( } else if(data_0 > data_1) //falling { + if( (currPeak.start >= pkRng_S) && (wrPos_0 >= pkRng_S)) + { + linePk.start = currPeak.start; + linePk.len = currPeak.len + 1; + linePk.value = currPeak.value; + } SM = 0b10; } else @@ -265,13 +269,13 @@ void peakCentering( case 0b01: //rising if(lastData < data_0) { - if(data_0 <= data_1) + if(data_0 < data_1) { currPeak.start = wrPos_1; currPeak.len = 1; currPeak.value = data_1; } - else if(data_0 > data_1) //change to falling + else if(data_0 > data_1) //change to falling, compare with exist { if( (wrPos_0 >= pkRng_S) && (wrPos_0 <= pkRng_E) && (data_0 >linePk.value )) { @@ -291,7 +295,7 @@ void peakCentering( else if(lastData > data_0) { //compare with exist - if( (preCenter >= pkRng_S) && (preCenter <= pkRng_E) && (currPeak.value > linePk.value)) + if( (currPeak.start >= pkRng_S) && (lastPos <= pkRng_E) && (currPeak.value > linePk.value)) { linePk = currPeak; } @@ -314,7 +318,7 @@ void peakCentering( } else if(data_0 > data_1) { - if( (preCenter_1 >= pkRng_S) && (preCenter_1 <= pkRng_E) && (currPeak.value > linePk.value)) + if( (currPeak.start >= pkRng_S) && (wrPos_0 = pkRng_E) && (currPeak.value > linePk.value)) { linePk.start = currPeak.start; linePk.value = currPeak.value; @@ -327,7 +331,7 @@ void peakCentering( currPeak.len += 2; if(i == 8) //last one { - if( (currPeak.start <= pkRng_E) && (currPeak.value > linePk.value)) + if( (currPeak.start >= pkRng_S) && (wrPos_1 <= pkRng_E) && (currPeak.value > linePk.value)) { linePk = currPeak; }