|
|
@ -57,14 +57,40 @@ typedef struct { |
|
|
|
float efectiveFactor; |
|
|
|
} filter_t; |
|
|
|
|
|
|
|
typedef struct { |
|
|
|
float coef[2]; |
|
|
|
float v_out[2]; |
|
|
|
} LPFilter; |
|
|
|
#define PI 3.14159265358979323846f |
|
|
|
|
|
|
|
filter_t m_filter = {0, 0.8}; |
|
|
|
|
|
|
|
LPFilter m_lpfilter_01; |
|
|
|
LPFilter m_lpfilter_02; |
|
|
|
|
|
|
|
static float Filter(filter_t* filter, float newInput) { |
|
|
|
float newv = ((float)filter->value * (1.0f - filter->efectiveFactor)) + ((float)newInput * filter->efectiveFactor); |
|
|
|
filter->value = newv; |
|
|
|
return newv; |
|
|
|
} |
|
|
|
|
|
|
|
void LPFilter_Init(LPFilter* filter, float cutoffFreqHz, float sampleTimeS) { |
|
|
|
float RC = 0.0; |
|
|
|
RC = 1.0 / (2 * PI * cutoffFreqHz); |
|
|
|
filter->coef[0] = sampleTimeS / (sampleTimeS + RC); |
|
|
|
filter->coef[1] = RC / (sampleTimeS + RC); |
|
|
|
|
|
|
|
filter->v_out[0] = 0.0; |
|
|
|
filter->v_out[1] = 0.0; |
|
|
|
} |
|
|
|
|
|
|
|
float LPFilter_Update(LPFilter* filter, float v_in) { |
|
|
|
filter->v_out[1] = filter->v_out[0]; |
|
|
|
filter->v_out[0] = (filter->coef[0] * v_in) + (filter->coef[1] * filter->v_out[1]); |
|
|
|
|
|
|
|
return (filter->v_out[0]); |
|
|
|
} |
|
|
|
|
|
|
|
/******************************************************************************* |
|
|
|
* 小包数据上报 * |
|
|
|
*******************************************************************************/ |
|
|
@ -104,11 +130,11 @@ uint16_t getRecommendedMagnification() { |
|
|
|
} |
|
|
|
// 3750.0f |
|
|
|
if (max <= (3750 / 2)) { |
|
|
|
return 10; |
|
|
|
return 15; |
|
|
|
} |
|
|
|
float af = (3750 / 2) / (max - 3750 / 2); |
|
|
|
if (af > 10) { |
|
|
|
return 10; |
|
|
|
if (af > 15) { |
|
|
|
return 15; |
|
|
|
} |
|
|
|
return af; |
|
|
|
} |
|
|
@ -121,12 +147,12 @@ void nrfx_timer_event_handler(nrf_timer_event_t event_type, void* p_context) { |
|
|
|
*******************************************************************************/ |
|
|
|
|
|
|
|
// QRS_getMaxValueLastVal(); |
|
|
|
|
|
|
|
QRS_processData(val); |
|
|
|
float val_af100 = (float)val / 3750.0f * 100; // 参考电压为3.6v,但信号范围为3.3v |
|
|
|
int16_t lowpassf_val = LPFilter_Update(&m_lpfilter_01, val); |
|
|
|
QRS_processData(lowpassf_val); |
|
|
|
float val_af100 = (float)lowpassf_val / 3750.0f * 100; // 参考电压为3.6v,但信号范围为3.3v |
|
|
|
m_frame_index++; |
|
|
|
val_af100 = amp_val(val_af100, 50, getRecommendedMagnification()); |
|
|
|
val_af100 = Filter(&m_filter, val_af100); |
|
|
|
val_af100 = LPFilter_Update(&m_lpfilter_02, val_af100); |
|
|
|
m_sensor_display_data = val_af100; |
|
|
|
|
|
|
|
/******************************************************************************* |
|
|
@ -189,6 +215,8 @@ void hwss_start_capture(void) { |
|
|
|
m_start_capture_tp = znordic_getpower_on_s(); |
|
|
|
swap_buffer(); |
|
|
|
m_frame_index = 0; |
|
|
|
LPFilter_Init(&m_lpfilter_01, 15, 0.002); |
|
|
|
LPFilter_Init(&m_lpfilter_02, 15, 0.002); |
|
|
|
|
|
|
|
QRS_resetBuf(); |
|
|
|
|
|
|
|