From 7ab772437ca1bbe667f7d86355327a2a01704d08 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Tue, 14 May 2024 15:52:30 +0800 Subject: [PATCH] V509 --- .../ecg_service/algo/zdata_statistics.c | 1 + app/src/app_service/ecg_service/ecg_algo.c | 89 ++++++---------------- app/src/app_service/ecg_service/ecg_algo.h | 4 - app/src/app_service/ecg_service/ecg_service.c | 9 ++- app/src/aproject_config/config.h | 2 +- 5 files changed, 32 insertions(+), 73 deletions(-) diff --git a/app/src/app_service/ecg_service/algo/zdata_statistics.c b/app/src/app_service/ecg_service/algo/zdata_statistics.c index fda9ce4..df99113 100644 --- a/app/src/app_service/ecg_service/algo/zdata_statistics.c +++ b/app/src/app_service/ecg_service/algo/zdata_statistics.c @@ -8,6 +8,7 @@ void zdata_statistics_init(zdata_statistics_t* p_analyzer, int32_t* buf, int32_t p_analyzer->avg = 0; p_analyzer->max = 0; p_analyzer->min = 0; + memset(p_analyzer->buf, 0, bufsize * sizeof(int32_t)); } int32_t zdata_statistics_get_date(int off) {} diff --git a/app/src/app_service/ecg_service/ecg_algo.c b/app/src/app_service/ecg_service/ecg_algo.c index 947c404..a5d5216 100644 --- a/app/src/app_service/ecg_service/ecg_algo.c +++ b/app/src/app_service/ecg_service/ecg_algo.c @@ -6,88 +6,52 @@ #include "algo/zsimple_qrs.h" #include "znordic.h" -#define REPORT_MEDIAN_WINDOWS_SIZE 121 // 必须是奇数 - -LPFilterExt_t m_lp_filter; -HPFilterExt_t m_hp_filter; -NOTCHFilterExt_t m_notch_filter; - -SmoothingFilter_t m_report_smoothing_filter; -median_filter_t m_display_median_filter; +#define REPORT_MEDIAN_WINDOWS_SIZE 101 // 必须是奇数 +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]; - -void BaselineDriftRemoval_Init(BaselineDriftRemoval_t *filter, int windows_size, bool enable); -float BaselineDriftRemoval_Update(BaselineDriftRemoval_t *filter, float vin); +SmoothingFilter_t m_report_smoothing_filter; int32_t m_data_statistics_buf[STATISTICS_BUF_SIZE]; // 心率判断 zdata_statistics_t m_data_statistics; -zsimple_qrs_t m_qrs; int32_t reportdata; int32_t displaydata; -void ecg_algo_init() { - ecg_algo_reset(); - - zsimple_qrs_init(&m_qrs, SAMPLE_PERIOD_S); - zdata_statistics_init(&m_data_statistics, m_data_statistics_buf, ZARRAY_SIZE(m_data_statistics_buf)); -} -int32_t maxval; -int32_t minval; -int32_t nowval100; - -static void display_data_processer(int32_t indata) { - // float data = indata; +void ecg_algo_init() { ecg_algo_reset(); } - // data = BaselineDriftRemoval_Update(&m_display_drift_filter, data); // 基线漂移 - // data = median_filter_update(&m_display_median_filter, data); - - // zdata_statistics_push(&m_data_statistics, data); - // if (zdata_statistics_is_full(&m_data_statistics)) { - // zsimple_qrs_process_data(&m_qrs, data, zdata_statistics_get_min(&m_data_statistics), zdata_statistics_get_max(&m_data_statistics), - // zdata_statistics_get_avg(&m_data_statistics)); +void report_data_process(int32_t indata) { + float data = indata; + data = HPFilterExt_update(&m_hp_filter, data); // 高通 + data = LPFilterExt_update(&m_lp_filter, data); // 低通 + data = NOTCHFilterExt_update(&m_notch_filter, data); // 带阻 - // maxval = zdata_statistics_get_max(&m_data_statistics); - // minval = zdata_statistics_get_min(&m_data_statistics); + int medianValue = MEDIANFILTER_Insert(&report_medianFilter, data); + data = indata - medianValue; + data = SmoothingFilter_Update(&m_report_smoothing_filter, data); + reportdata = data; +} - // int32_t nowvaloff = data - minval; - // nowval100 = 10 + nowvaloff * 80 / (maxval - minval); - // displaydata = nowval100; +void leadoff_data_process(int32_t indata) { - // } else { - // maxval = 0; - // minval = 0; - // displaydata = 50; - // } -} + zdata_statistics_push(&m_data_statistics, indata); -static void report_data_processer(int32_t indata) { - float data = indata; - int medianValue = MEDIANFILTER_Insert(&report_medianFilter, data); - data = indata - medianValue; - // data = BaselineDriftRemoval_Update(&m_report_drift_filter, data); // 基线漂移 - data = SmoothingFilter_Update(&m_report_smoothing_filter, data); - reportdata = data; } void ecg_algo_process_data(int32_t indata) { - float data = indata; - data = HPFilterExt_update(&m_hp_filter, data); // 高通 - data = LPFilterExt_update(&m_lp_filter, data); // 低通 - data = NOTCHFilterExt_update(&m_notch_filter, data); // 带阻 - // display_data_processer(data); - report_data_processer(data); + leadoff_data_process(indata); + report_data_process(indata); } + void ecg_algo_reset() { - LPFilterExt_init(&m_lp_filter, 40, SAMPLE_PERIOD_S, 4, true); + LPFilterExt_init(&m_lp_filter, 40, SAMPLE_PERIOD_S, 5, true); HPFilterExt_init(&m_hp_filter, 1, SAMPLE_PERIOD_S, 1, false); NOTCHFilterExt_init(&m_notch_filter, 125, 2, SAMPLE_PERIOD_S, 2, false); - SmoothingFilter_Init(&m_report_smoothing_filter, 8, true); - { memset(&report_medianFilter, 0, sizeof(report_medianFilter)); memset(report_medianBuffer, 0, sizeof(report_medianBuffer)); @@ -96,15 +60,12 @@ void ecg_algo_reset() { MEDIANFILTER_Init(&report_medianFilter); } - median_filter_init(&m_display_median_filter, 5); + 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); - zsimple_qrs_clear(); } int32_t ecg_algo_get_report_data() { return reportdata; } int32_t ecg_algo_get_display_data() { return displaydata; } -int32_t ecg_algo_get_heart_rate() { return zsimple_qrs_get_heartrate(&m_qrs); } -int32_t ecg_algo_get_max_data() { return maxval; } -int32_t ecg_algo_get_min_data() { return minval; } -int32_t ecg_algo_get_peak2peak() { return maxval - minval; } +int32_t ecg_algo_get_heart_rate() { return 0; } \ No newline at end of file diff --git a/app/src/app_service/ecg_service/ecg_algo.h b/app/src/app_service/ecg_service/ecg_algo.h index 24ecca8..d2fc162 100644 --- a/app/src/app_service/ecg_service/ecg_algo.h +++ b/app/src/app_service/ecg_service/ecg_algo.h @@ -14,7 +14,3 @@ void ecg_algo_reset(); int32_t ecg_algo_get_report_data(); int32_t ecg_algo_get_display_data(); int32_t ecg_algo_get_heart_rate(); - -int32_t ecg_algo_get_max_data(); -int32_t ecg_algo_get_min_data(); -int32_t ecg_algo_get_peak2peak(); \ No newline at end of file diff --git a/app/src/app_service/ecg_service/ecg_service.c b/app/src/app_service/ecg_service/ecg_service.c index 7304ab6..e471f33 100644 --- a/app/src/app_service/ecg_service/ecg_service.c +++ b/app/src/app_service/ecg_service/ecg_service.c @@ -439,8 +439,9 @@ void ecg_service_set_in_test_mode(bool testmode) { void ecg_service_set_report_data_in_raw_mode(bool rawmode) { m_report_data_in_raw_mode_flag = rawmode; } bool ecg_leadoff_detect() { - if (m_testmode_flag) { - return false; - } - return m_leadoffstate; + return false; + // if (m_testmode_flag) { + // return false; + // } + // return m_leadoffstate; } diff --git a/app/src/aproject_config/config.h b/app/src/aproject_config/config.h index a9d32db..12947d7 100644 --- a/app/src/aproject_config/config.h +++ b/app/src/aproject_config/config.h @@ -7,7 +7,7 @@ #define CATEGORY "M1003" // 单导联 #define MANUFACTURER_NAME "iflytop" -#define FIRMWARE_VERSION (508) +#define FIRMWARE_VERSION (509) #define BLESTACK_VERSION 1 #define BOOTLOADER_VERSION 1 #define HARDWARE_VERSION (2)