peakCentering version 1.6.1: fix bugs and add frmae lastSync

This commit is contained in:
zengHQ 2025-11-24 14:18:11 +08:00
parent 9d4db3772f
commit f7ebcdb77e

View File

@ -113,7 +113,7 @@ void peakCentering(
if(0 == linePk.len) if(0 == linePk.len)
{ {
if(linePk.value >= 240) if(linePk.value >= 240)
pkCenter = RGN_DATA_WIN_SIZE/2; pkCenter = RGN_DATA_WIN_SIZE;
else else
pkCenter = 0; pkCenter = 0;
} }
@ -147,6 +147,7 @@ void peakCentering(
else//for(int i = 0; i < 8; i ++) else//for(int i = 0; i < 8; i ++)
{ {
ap_uint<8> wrPos_0 = i * 2 - 2 + RGN_DATA_WIN_SIZE/2; 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> 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_0 = pkCenter - RGN_DATA_WIN_SIZE/2 + i* 2 -2;
ap_uint<8> rdPos_1 = pkCenter - RGN_DATA_WIN_SIZE/2 + i* 2 -1; ap_uint<8> rdPos_1 = pkCenter - RGN_DATA_WIN_SIZE/2 + i* 2 -1;
@ -191,24 +192,24 @@ void peakCentering(
} }
else else
{ {
currPeak.start = wrPos_1; currPeak.start = wrPos_0;
currPeak.len = 1; currPeak.len = 2;
currPeak.value = data_1; currPeak.value = data_0;
SM = 0b11; SM = 0b11;
linePk.value = data_0; //record initial value linePk.value = data_0; //record initial value
} }
break; break;
case 0b11: //wait state case 0b11: //horizontal state
if(lastData < data_0) 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.start = wrPos_1;
currPeak.len = 1; currPeak.len = 1;
currPeak.value = data_1; currPeak.value = data_1;
SM = 0b01; 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) ) if( (wrPos_0 >= pkRng_S) && (wrPos_0 <= pkRng_E) )
{ {
@ -218,7 +219,7 @@ void peakCentering(
} }
SM = 0b10; 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.start = wrPos_0;
currPeak.len = 2; currPeak.len = 2;
@ -226,24 +227,21 @@ void peakCentering(
SM = 0b01; 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( (lastData > data_0)&& (wrPos_0 > pkRng_S))
{ {
if((currPeak.start >= pkRng_S) && (lastPos <= pkRng_E))
linePk = currPeak; linePk = currPeak;
}
if(data_0 < data_1) //falling - rising, peak is at lastData (pos:0,1,2...), invalid
{
currPeak.start = wrPos_1; currPeak.start = wrPos_1;
currPeak.len = 1; currPeak.len = 1;
currPeak.value = data_1; currPeak.value = data_1;
SM = 0b01; SM = 0b01;
} }
else if(data_0 >= data_1)//falling else// if(data_0 >= data_1)//falling, peak is at lastData
{
SM = 0b10; SM = 0b10;
} }
}
else //lastData == data_0 else //lastData == data_0
{ {
if(data_0 < data_1) //rising if(data_0 < data_1) //rising
@ -256,6 +254,12 @@ void peakCentering(
} }
else if(data_0 > data_1) //falling 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; SM = 0b10;
} }
else else
@ -265,13 +269,13 @@ void peakCentering(
case 0b01: //rising case 0b01: //rising
if(lastData < data_0) if(lastData < data_0)
{ {
if(data_0 <= data_1) if(data_0 < data_1)
{ {
currPeak.start = wrPos_1; currPeak.start = wrPos_1;
currPeak.len = 1; currPeak.len = 1;
currPeak.value = data_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 )) if( (wrPos_0 >= pkRng_S) && (wrPos_0 <= pkRng_E) && (data_0 >linePk.value ))
{ {
@ -291,7 +295,7 @@ void peakCentering(
else if(lastData > data_0) else if(lastData > data_0)
{ {
//compare with exist //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; linePk = currPeak;
} }
@ -314,7 +318,7 @@ void peakCentering(
} }
else if(data_0 > data_1) 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.start = currPeak.start;
linePk.value = currPeak.value; linePk.value = currPeak.value;
@ -327,7 +331,7 @@ void peakCentering(
currPeak.len += 2; currPeak.len += 2;
if(i == 8) //last one 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; linePk = currPeak;
} }