[Add Code]: fix hr down && up bug

This commit is contained in:
Brin 2025-05-09 09:17:41 +08:00
parent d1a7b23ea8
commit ad03636629
11 changed files with 11786 additions and 84 deletions

View File

@ -3,5 +3,10 @@
"board/esp32-wrover-kit-3.3v.cfg"
],
"idf.portWin": "COM12",
"idf.flashType": "UART"
"idf.flashType": "UART",
"files.associations": {
"main.h": "c",
"bsp_algcom.h": "c",
"bsp_mqtt.h": "c"
}
}

View File

@ -15,3 +15,8 @@ Date 2025年4月22日
Log : 旧版本体征监测垫程序 ,兼容最新算法
新建分支
```
---
```
Date 2025年5月9日
Log : 增加相关修正数据
```

View File

@ -93,25 +93,25 @@
<flags>2</flags>
<showCmd>3</showCmd>
<MinPosition>
<xPos>-1</xPos>
<yPos>-1</yPos>
<xPos>-32000</xPos>
<yPos>-32000</yPos>
</MinPosition>
<MaxPosition>
<xPos>-1</xPos>
<yPos>-1</yPos>
</MaxPosition>
<NormalPosition>
<Top>615</Top>
<Left>-1920</Left>
<Right>-800</Right>
<Bottom>1256</Bottom>
<Top>96</Top>
<Left>378</Left>
<Right>1498</Right>
<Bottom>737</Bottom>
</NormalPosition>
</WindowPosition>
<MDIClientArea>
<RegID>0</RegID>
<MDITabState>
<Len>1114</Len>
<Data>01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000008000000030000000100000050443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C4A6F625F5369676E7350616473286769746561295C53544D33325C436F64655C53544D3332463430355C555345525C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF59443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C4A6F625F5369676E7350616473286769746561295C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C4D79546F6F6C2E6300000000084D79546F6F6C2E6300000000FFDC7800FFFFFFFF62443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C4A6F625F5369676E7350616473286769746561295C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C6377745C4D79416C676F726974686D2E63000000000D4D79416C676F726974686D2E6300000000BECEA100FFFFFFFF50443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C4A6F625F5369676E7350616473286769746561295C53544D33325C436F64655C53544D3332463430355C555345525C6D61696E2E6800000000066D61696E2E6800000000F0A0A100FFFFFFFF62443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C4A6F625F5369676E7350616473286769746561295C53544D33325C436F64655C53544D33322D4941505C434F52455C737461727475705F73746D33326634305F34317878782E730000000018737461727475705F73746D33326634305F34317878782E7300000000BCA8E100FFFFFFFF50443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C4A6F625F5369676E7350616473286769746561295C53544D33325C436F64655C53544D33322D4941505C555345525C6D61696E2E6300000000066D61696E2E63000000009CC1B600FFFFFFFF5D443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C4A6F625F5369676E7350616473286769746561295C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C66696E645F7065616B732E68000000000C66696E645F7065616B732E6800000000F7B88600FFFFFFFF5D443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C4A6F625F5369676E7350616473286769746561295C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C66696E645F7065616B732E63000000000C66696E645F7065616B732E6300000000D9ADC200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000095F9FFFFA2010000000000005C040000</Data>
<Len>1214</Len>
<Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000900000003000000010000004F443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D3332463430355C555345525C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF58443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C4D79546F6F6C2E6300000000084D79546F6F6C2E6300000000FFDC7800FFFFFFFF61443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C6377745C4D79416C676F726974686D2E63000000000D4D79416C676F726974686D2E6300000000BECEA100FFFFFFFF4F443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D3332463430355C555345525C6D61696E2E6800000000066D61696E2E6800000000F0A0A100FFFFFFFF61443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D33322D4941505C434F52455C737461727475705F73746D33326634305F34317878782E730000000018737461727475705F73746D33326634305F34317878782E7300000000BCA8E100FFFFFFFF4F443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D33322D4941505C555345525C6D61696E2E6300000000066D61696E2E63000000009CC1B600FFFFFFFF5C443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C66696E645F7065616B732E68000000000C66696E645F7065616B732E6800000000F7B88600FFFFFFFF5C443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C66696E645F7065616B732E63000000000C66696E645F7065616B732E6300000000D9ADC200FFFFFFFF55443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C6F706D2E6300000000056F706D2E6300000000A5C2D700FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000001501000066000000D50500008D020000</Data>
</MDITabState>
</MDIClientArea>
<ViewEx>

View File

@ -494,6 +494,10 @@ int MyToolSelectHp(float *hpList, float *ratioList, float *formerHps, uint16_t t
else
{
res = (int)round(loMax);
if (noZeroCount > 10 && fabs(noZeroAvg - res) > 20)
res = noZeroAvg;
if (res < 48)
res = noZeroAvg;
}
if (res == 0)

View File

@ -844,11 +844,8 @@ float32_t fft_Output(float32_t *Input, int Length, char type)
*/
void fft_heartDataPostProcessing(float32_t data)
{
move_update(f_BPM_hr, 5, round(data));
if (f_BPM_hr[4] <= 90)
f_BPM_hr[4] = f_BPM_hr[4] - 3;
else
f_BPM_hr[4] = f_BPM_hr[4] - 4;
move_update(f_BPM_hr, 5, (data));
f_BPM_hr[4] -= (f_BPM_hr[4] <= 90) ? 3 : 4; // 固定offset
// note: 增加对应的偏置
#if LINE_COEFF_EN
if (HeartBeatRate >= 83 && HeartBeatRate <= 110)
@ -857,40 +854,37 @@ void fft_heartDataPostProcessing(float32_t data)
;
#endif
//========================================================================数据后处理
for (int i = 0; i < 4; i++) // 把前4个数据复制出来供后处理分析
{
f_BPM_hr2[i] = f_BPM_hr[i];
}
memcpy(f_BPM_hr2, f_BPM_hr, sizeof(float) * 4);
if (f_BPM_hr[0] > 0) // 当数据满5个之后开始后处理
{
if ((f_BPM_hr[4] - MyToolMidValue(f_BPM_hr2, 4) >= 12) || (f_BPM_hr[4] - f_BPM_hr[3] >= 8)) // 比前4个中位数大7
if ((f_BPM_hr[4] - MyToolMidValue(f_BPM_hr2, 4) >= 10) || (f_BPM_hr[4] - f_BPM_hr[3] >= 5)) // 比前4个中位数大12或比前面一个大8????????????????????????????????????????????
{
count_up_hr += 1;
count_up_hr += 1; // 判断上升的条件+1,苛刻
#if FFT_VERSION
if (count_up_hr >= 10)
if (count_up_hr >= 12)
#else
if (count_up_hr >= 8)
#endif
{
f_BPM_hr[4] = f_BPM_hr[3] + (2 < (f_BPM_hr[4] - f_BPM_hr[3]) ? 2 : (f_BPM_hr[4] - f_BPM_hr[3]));
f_BPM_hr[4] = f_BPM_hr[3] + (3 < (f_BPM_hr[4] - f_BPM_hr[3]) ? 3 : (f_BPM_hr[4] - f_BPM_hr[3])); // 最多+3
}
#if FFT_VERSION
else if (count_up_hr >= 5)
else if (count_up_hr >= 6)
#else
else if (count_up_hr >= 4)
#endif
{
f_BPM_hr[4] = f_BPM_hr[3] + (1 < (f_BPM_hr[4] - f_BPM_hr[3]) ? 1 : (f_BPM_hr[4] - f_BPM_hr[3]));
f_BPM_hr[4] = f_BPM_hr[3] + (2 < (f_BPM_hr[4] - f_BPM_hr[3]) ? 2 : (f_BPM_hr[4] - f_BPM_hr[3])); // 最多+2
}
else
{
f_BPM_hr[4] = f_BPM_hr[3];
f_BPM_hr[4] = f_BPM_hr[3] + 1;
}
count_down_hr = 0;
count_down_hr_m = 0;
count_out_range_hr = 0;
}
else if ((f_BPM_hr[4] - MyToolMidValue(f_BPM_hr2, 4) <= (-8)) || (f_BPM_hr[4] - f_BPM_hr[3] <= (-6))) // 比前4个中位数小8
else if ((f_BPM_hr[4] - MyToolMidValue(f_BPM_hr2, 4) <= (-8)) || (f_BPM_hr[4] - f_BPM_hr[3] <= (-6))) // 比前4个中位数小8或比前面一个值小6
{
count_down_hr += 1;
#if FFT_VERSION
@ -923,20 +917,20 @@ void fft_heartDataPostProcessing(float32_t data)
{
count_up_hr_m += 1;
#if FFT_VERSION
if (count_down_hr + count_down_hr_m >= 8)
if (count_up_hr + count_up_hr_m >= 10)
#else
if (count_down_hr + count_down_hr_m >= 8)
if (count_up_hr + count_up_hr_m >= 8)
#endif
{
f_BPM_hr[4] = f_BPM_hr[3] + (2 < (f_BPM_hr[4] - f_BPM_hr[3]) ? 2 : (f_BPM_hr[4] - f_BPM_hr[3]));
f_BPM_hr[4] = f_BPM_hr[3] + (2 < (f_BPM_hr[4] - f_BPM_hr[3]) ? 2 : (f_BPM_hr[4] - f_BPM_hr[3])); // 最多+2
}
#if FFT_VERSION
else if (count_up_hr_m >= 10)
else if (count_up_hr_m >= 8)
#else
else if (count_up_hr_m >= 8)
#endif
{
f_BPM_hr[4] = f_BPM_hr[3] + (2 < (f_BPM_hr[4] - f_BPM_hr[3]) ? 2 : (f_BPM_hr[4] - f_BPM_hr[3]));
f_BPM_hr[4] = f_BPM_hr[3] + (2 < (f_BPM_hr[4] - f_BPM_hr[3]) ? 2 : (f_BPM_hr[4] - f_BPM_hr[3])); // 最多+2
}
#if FFT_VERSION
else if (count_up_hr_m >= 2)
@ -954,17 +948,18 @@ void fft_heartDataPostProcessing(float32_t data)
count_down_hr = 0;
count_down_hr_m = 0;
count_out_range_hr = 0;
count_up_hr = 0;
// count_up_hr = 0;
}
else if (f_BPM_hr[4] - f_BPM_hr[3] < 0)
{
if (f_BPM_hr[4] - f_BPM_hr[3] <= (-3))
{
count_down_hr_m += 1;
#if FFT_VERSION
if (count_up_hr + count_up_hr_m >= 8)
if (count_down_hr + count_down_hr_m >= 8)
#else
if (count_up_hr + count_up_hr_m >= 8)
if (count_down_hr + count_down_hr_m >= 8)
#endif
{
f_BPM_hr[4] = f_BPM_hr[3] + ((-2) > (f_BPM_hr[4] - f_BPM_hr[3]) ? (-2) : (f_BPM_hr[4] - f_BPM_hr[3]));
@ -1003,13 +998,13 @@ void fft_heartDataPostProcessing(float32_t data)
f_BPM_hr[4] = 170;
}
/**/
HeartBeatRate = f_BPM_hr[4];
HeartBeatRate = (uint8_t)round(f_BPM_hr[4]);
// rt_kprintf("------------------- Freq %.6f\r\n", freq_calculated(nf, 0));
}
else
else // 数据没满五个,取平均值, 且输出值固定在65-75之间
{
int Count = 0;
float sum, avg = 0.0f;
float sum = 0.0f, avg = 0.0f;
for (char i = 0; i < 5; i++)
{
// rt_kprintf("f_BPM_hr[%d] = %f\r\n", i, f_BPM_hr[i]);

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -101,17 +101,17 @@
<yPos>-1</yPos>
</MaxPosition>
<NormalPosition>
<Top>615</Top>
<Left>-1920</Left>
<Right>-800</Right>
<Bottom>1256</Bottom>
<Top>96</Top>
<Left>378</Left>
<Right>1498</Right>
<Bottom>737</Bottom>
</NormalPosition>
</WindowPosition>
<MDIClientArea>
<RegID>0</RegID>
<MDITabState>
<Len>1114</Len>
<Data>01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000008000000030000000100000050443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C4A6F625F5369676E7350616473286769746561295C53544D33325C436F64655C53544D3332463430355C555345525C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF59443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C4A6F625F5369676E7350616473286769746561295C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C4D79546F6F6C2E6300000000084D79546F6F6C2E6300000000FFDC7800FFFFFFFF62443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C4A6F625F5369676E7350616473286769746561295C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C6377745C4D79416C676F726974686D2E63000000000D4D79416C676F726974686D2E6300000000BECEA100FFFFFFFF50443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C4A6F625F5369676E7350616473286769746561295C53544D33325C436F64655C53544D3332463430355C555345525C6D61696E2E6800000000066D61696E2E6800000000F0A0A100FFFFFFFF62443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C4A6F625F5369676E7350616473286769746561295C53544D33325C436F64655C53544D33322D4941505C434F52455C737461727475705F73746D33326634305F34317878782E730000000018737461727475705F73746D33326634305F34317878782E7300000000BCA8E100FFFFFFFF50443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C4A6F625F5369676E7350616473286769746561295C53544D33325C436F64655C53544D33322D4941505C555345525C6D61696E2E6300000000066D61696E2E63000000009CC1B600FFFFFFFF5D443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C4A6F625F5369676E7350616473286769746561295C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C66696E645F7065616B732E68000000000C66696E645F7065616B732E6800000000F7B88600FFFFFFFF5D443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C4A6F625F5369676E7350616473286769746561295C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C66696E645F7065616B732E63000000000C66696E645F7065616B732E6300000000D9ADC200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000095F9FFFFA2010000000000005C040000</Data>
<Len>1214</Len>
<Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000900000003000000010000004F443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D3332463430355C555345525C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF58443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C4D79546F6F6C2E6300000000084D79546F6F6C2E6300000000FFDC7800FFFFFFFF61443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C6377745C4D79416C676F726974686D2E63000000000D4D79416C676F726974686D2E6300000000BECEA100FFFFFFFF4F443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D3332463430355C555345525C6D61696E2E6800000000066D61696E2E6800000000F0A0A100FFFFFFFF61443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D33322D4941505C434F52455C737461727475705F73746D33326634305F34317878782E730000000018737461727475705F73746D33326634305F34317878782E7300000000BCA8E100FFFFFFFF4F443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D33322D4941505C555345525C6D61696E2E6300000000066D61696E2E63000000009CC1B600FFFFFFFF5C443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C66696E645F7065616B732E68000000000C66696E645F7065616B732E6800000000F7B88600FFFFFFFF5C443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C66696E645F7065616B732E63000000000C66696E645F7065616B732E6300000000D9ADC200FFFFFFFF55443A5C4A6F625F576F726B5C436F64655C305F50726F6A6563745C47697465615C4A6F625F5369676E73506164735C53544D33325C436F64655C53544D3332463430355C4170706C69636174696F6E5C6F706D2E6300000000056F706D2E6300000000A5C2D700FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000001501000066000000D50500008D020000</Data>
</MDITabState>
</MDIClientArea>
<ViewEx>

View File

@ -603,7 +603,7 @@
<Group>
<GroupName>USER</GroupName>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -891,7 +891,7 @@
<Group>
<GroupName>Application</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>

View File

@ -187,12 +187,12 @@
<RvdsMve>0</RvdsMve>
<hadIRAM2>1</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>16</StupSel>
<StupSel>8</StupSel>
<useUlib>1</useUlib>
<EndSel>0</EndSel>
<uLtcg>0</uLtcg>
<nSecure>0</nSecure>
<RoSelD>4</RoSelD>
<RoSelD>3</RoSelD>
<RwSelD>4</RwSelD>
<CodeSel>0</CodeSel>
<OptFeed>0</OptFeed>
@ -204,8 +204,8 @@
<Ro1Chk>0</Ro1Chk>
<Ro2Chk>0</Ro2Chk>
<Ro3Chk>0</Ro3Chk>
<Ir1Chk>0</Ir1Chk>
<Ir2Chk>1</Ir2Chk>
<Ir1Chk>1</Ir1Chk>
<Ir2Chk>0</Ir2Chk>
<Ra1Chk>0</Ra1Chk>
<Ra2Chk>0</Ra2Chk>
<Ra3Chk>0</Ra3Chk>

File diff suppressed because one or more lines are too long