Browse Source

V509

master
zhaohe 1 year ago
parent
commit
7ab772437c
  1. 1
      app/src/app_service/ecg_service/algo/zdata_statistics.c
  2. 89
      app/src/app_service/ecg_service/ecg_algo.c
  3. 4
      app/src/app_service/ecg_service/ecg_algo.h
  4. 9
      app/src/app_service/ecg_service/ecg_service.c
  5. 2
      app/src/aproject_config/config.h

1
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) {}

89
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; }

4
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();

9
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;
}

2
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)

Loading…
Cancel
Save