From 66b3f2029176b6db9e965f7d5795d433d85761f6 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Tue, 14 May 2024 18:14:14 +0800 Subject: [PATCH] update --- .../app_service/ecg_service/algo/MedianFilter.c | 1 + .../ecg_service/algo/iflytop_simple_filter.c | 18 +++++++ .../ecg_service/algo/iflytop_simple_filter.h | 15 +++++- app/src/app_service/ecg_service/ecg_algo.c | 54 ++++++++++++++------- test/a.exe | Bin 0 -> 56711 bytes test/test.c | 3 +- 6 files changed, 70 insertions(+), 21 deletions(-) create mode 100644 test/a.exe diff --git a/app/src/app_service/ecg_service/algo/MedianFilter.c b/app/src/app_service/ecg_service/algo/MedianFilter.c index a785900..db5f928 100644 --- a/app/src/app_service/ecg_service/algo/MedianFilter.c +++ b/app/src/app_service/ecg_service/algo/MedianFilter.c @@ -6,6 +6,7 @@ */ #include "MedianFilter.h" +#include int MEDIANFILTER_Init(sMedianFilter_t *medianFilter) { diff --git a/app/src/app_service/ecg_service/algo/iflytop_simple_filter.c b/app/src/app_service/ecg_service/algo/iflytop_simple_filter.c index 9f9d1fd..54d53ca 100644 --- a/app/src/app_service/ecg_service/algo/iflytop_simple_filter.c +++ b/app/src/app_service/ecg_service/algo/iflytop_simple_filter.c @@ -250,3 +250,21 @@ float BaselineDriftRemoval_Update(BaselineDriftRemoval_t *filter, float vin) { return min_data_in_fifo - mid; } + +void fix_delay_fifo_init(fix_delay_fifo_t *buffer, float *fifo, int fifosize) { + buffer->fifo = fifo; + buffer->fifosize = fifosize; + buffer->head = 0; + buffer->tail = 0; + memset(buffer->fifo, 0, fifosize * sizeof(float)); +} +float fix_delay_fifo_update(fix_delay_fifo_t *buffer, float vin) { + buffer->fifo[buffer->tail] = vin; + buffer->tail = (buffer->tail + 1) % buffer->fifosize; + float fifoheadval = 0; + if (buffer->tail == buffer->head) { + fifoheadval = buffer->fifo[buffer->head]; + buffer->head = (buffer->head + 1) % buffer->fifosize; + } + return fifoheadval; +} \ No newline at end of file diff --git a/app/src/app_service/ecg_service/algo/iflytop_simple_filter.h b/app/src/app_service/ecg_service/algo/iflytop_simple_filter.h index fdff1bf..a3be706 100644 --- a/app/src/app_service/ecg_service/algo/iflytop_simple_filter.h +++ b/app/src/app_service/ecg_service/algo/iflytop_simple_filter.h @@ -67,7 +67,7 @@ float NOTCHFilter_Update(NOTCHFilter_t *filter, float vin); // #ifdef __cplusplus // } // #endif -#define MEDIAN_FILTER_MAX_SIZE 50 +#define MEDIAN_FILTER_MAX_SIZE 200 typedef struct { float val[MEDIAN_FILTER_MAX_SIZE]; @@ -93,7 +93,6 @@ typedef struct { void SmoothingFilter_Init(SmoothingFilter_t *filter, int windows_size, bool enable); float SmoothingFilter_Update(SmoothingFilter_t *filter, float vin); - #define MEDIAN_FILTER_SIZE 300 typedef struct { float fifo[MEDIAN_FILTER_SIZE]; @@ -107,4 +106,16 @@ typedef struct { void BaselineDriftRemoval_Init(BaselineDriftRemoval_t *filter, int windows_size, bool enable); float BaselineDriftRemoval_Update(BaselineDriftRemoval_t *filter, float vin); +typedef struct { + float *fifo; + int fifosize; + + int head; + int tail; + +} fix_delay_fifo_t; + +void fix_delay_fifo_init(fix_delay_fifo_t *buffer, float *fifo, int fifosize); +float fix_delay_fifo_update(fix_delay_fifo_t *buffer, float vin); + #endif \ No newline at end of file diff --git a/app/src/app_service/ecg_service/ecg_algo.c b/app/src/app_service/ecg_service/ecg_algo.c index c54f37b..31a6590 100644 --- a/app/src/app_service/ecg_service/ecg_algo.c +++ b/app/src/app_service/ecg_service/ecg_algo.c @@ -8,38 +8,52 @@ #define REPORT_MEDIAN_WINDOWS_SIZE 151 // 必须是奇数 -LPFilterExt_t m_lp_filter; -HPFilterExt_t m_hp_filter; -NOTCHFilterExt_t m_notch_filter; +LPFilterExt_t m_lp_filter; +HPFilterExt_t m_hp_filter; +NOTCHFilterExt_t m_notch_filter; + static sMedianFilter_t report_medianFilter; static sMedianNode_t report_medianBuffer[REPORT_MEDIAN_WINDOWS_SIZE]; -SmoothingFilter_t m_report_smoothing_filter; -int32_t m_data_statistics_buf[STATISTICS_BUF_SIZE]; // 心率判断 -zdata_statistics_t m_data_statistics; +static float m_data_fifo[REPORT_MEDIAN_WINDOWS_SIZE / 2]; +fix_delay_fifo_t m_fix_delay_fifo; + +SmoothingFilter_t m_report_smoothing_filter; + +int32_t m_data_statistics_buf[STATISTICS_BUF_SIZE]; +zdata_statistics_t m_leadoff_statistics; // 脱落检测 int32_t reportdata; -bool m_leadoff; +bool m_leadoff; + +static int32_t m_frame_cnt; void ecg_algo_init() { ecg_algo_reset(); } void report_data_process(int32_t indata) { + m_frame_cnt++; float data = indata; data = HPFilterExt_update(&m_hp_filter, data); // 高通 data = LPFilterExt_update(&m_lp_filter, data); // 低通 data = NOTCHFilterExt_update(&m_notch_filter, data); // 带阻 - int medianValue = MEDIANFILTER_Insert(&report_medianFilter, data); - data = indata - medianValue; - data = SmoothingFilter_Update(&m_report_smoothing_filter, data); - reportdata = data; + float medianValue = MEDIANFILTER_Insert(&report_medianFilter, data); + float delay_data = fix_delay_fifo_update(&m_fix_delay_fifo, data); + + if (m_frame_cnt < REPORT_MEDIAN_WINDOWS_SIZE) { + reportdata = 0; + return; + } + data = delay_data - medianValue; + data = SmoothingFilter_Update(&m_report_smoothing_filter, data); + reportdata = data; } void leadoff_data_process(int32_t indata) { - zdata_statistics_push(&m_data_statistics, indata); - if (zdata_statistics_is_full(&m_data_statistics)) { - int32_t max = zdata_statistics_get_max(&m_data_statistics); - int32_t min = zdata_statistics_get_min(&m_data_statistics); + zdata_statistics_push(&m_leadoff_statistics, indata); + if (zdata_statistics_is_full(&m_leadoff_statistics)) { + int32_t max = zdata_statistics_get_max(&m_leadoff_statistics); + int32_t min = zdata_statistics_get_min(&m_leadoff_statistics); if (max - min > 45000) { m_leadoff = true; } else { @@ -70,9 +84,13 @@ void ecg_algo_reset() { SmoothingFilter_Init(&m_report_smoothing_filter, 8, true); - zdata_statistics_init(&m_data_statistics, m_data_statistics_buf, STATISTICS_BUF_SIZE); - zdata_statistics_clear(&m_data_statistics); + zdata_statistics_init(&m_leadoff_statistics, m_data_statistics_buf, STATISTICS_BUF_SIZE); + + fix_delay_fifo_init(&m_fix_delay_fifo, m_data_fifo, REPORT_MEDIAN_WINDOWS_SIZE / 2); + + zdata_statistics_clear(&m_leadoff_statistics); + m_frame_cnt = 0; } int32_t ecg_algo_get_report_data() { return reportdata; } -bool ecg_algo_get_leadoff_state() { return m_leadoff; } \ No newline at end of file +bool ecg_algo_get_leadoff_state() { return m_leadoff; } \ No newline at end of file diff --git a/test/a.exe b/test/a.exe new file mode 100644 index 0000000000000000000000000000000000000000..d807dab30c597394396d98226c0359aea9cbb3e8 GIT binary patch literal 56711 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 F{|6k}^|b&1 literal 0 HcmV?d00001 diff --git a/test/test.c b/test/test.c index b4b75e4..ebfaf6e 100644 --- a/test/test.c +++ b/test/test.c @@ -14,9 +14,10 @@ int main() { medianFilter.medianBuffer = medianBuffer; MEDIANFILTER_Init(&medianFilter); + int newValue = 1; while (1) { - int newValue = rand() % 100; + newValue++; int medianValue = MEDIANFILTER_Insert(&medianFilter, newValue); printf("New value: %d \tMedian value: %d\r\n", newValue, medianValue);