![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
para el ventilador
filters.cpp
- Committer:
- miguelangelpachas
- Date:
- 2020-05-15
- Revision:
- 13:e0a6033cb39d
- Parent:
- 11:5cb7ae8bd831
File content as of revision 13:e0a6033cb39d:
/* File inclusion */ #include "stdint.h" #include "project_defines.h" float RC_LPF_01(float raw_value, uint8_t restart){ static float lpf_prev_out = 0.0; float lpf_out, sample_period_sec, div; if(restart){ lpf_prev_out = 0.0; lpf_out = 0.0; }else{ sample_period_sec = 0.001 * ((float)PRESSURE_SENSOR_READ_PERIOD_MS); div = sample_period_sec + P1_LPF_RC_CONSTANT_SEC; lpf_out = (raw_value * (sample_period_sec / div)) + (lpf_prev_out * (P1_LPF_RC_CONSTANT_SEC / div)); lpf_prev_out = lpf_out; } return lpf_out; } float RC_HPF_01(float raw_value, uint8_t restart){ static float prev_raw_value = 0.0, hpf_prev_out = 0.0; float hpf_out, sample_period_sec, div; if(restart){ prev_raw_value = 0.0; hpf_prev_out = 0.0; hpf_out = 0.0; }else{ sample_period_sec = 0.001 * ((float)PRESSURE_SENSOR_READ_PERIOD_MS); div = sample_period_sec + F_HPF_RC_CONSTANT_SEC; hpf_out = (raw_value - prev_raw_value + hpf_prev_out) * (F_HPF_RC_CONSTANT_SEC / div); hpf_prev_out = hpf_out; prev_raw_value = raw_value; } return hpf_out; } float RC_LPF_02(float raw_value, uint8_t restart){ static float lpf_prev_out = 0; float lpf_out, sample_period_sec, div; if(restart){ lpf_prev_out = 0.0; lpf_out = 0.0; }else{ sample_period_sec = 0.001 * ((float)PRESSURE_SENSOR_READ_PERIOD_MS); div = sample_period_sec + P2_LPF_RC_CONSTANT_SEC; lpf_out = (raw_value * (sample_period_sec / div)) + (lpf_prev_out * (P2_LPF_RC_CONSTANT_SEC / div)); lpf_prev_out = lpf_out; } return lpf_out; } float Pressure_01_Cheby2_LPF(float raw_value, uint8_t restart){ const float b[PRESSURE_01_LPF_N] = {0.20077, 0.47142, 0.47142, 0.20077}; const float a[PRESSURE_01_LPF_N] = {1.0000000, -0.0398709, 0.3747845, 0.0094542}; static float x[PRESSURE_01_LPF_N]; static float y[PRESSURE_01_LPF_N]; int16_t i; if(restart){ for(i = 0; i < PRESSURE_01_LPF_N; i++){ x[i] = 0.0; y[i] = 0.0; } }else{ /* Update recorded input and output values */ for(i = PRESSURE_01_LPF_N - 1; i > 0; i--){ x[i] = x[i - 1]; y[i] = y[i - 1]; } /* Update current input and output values */ x[0] = raw_value; y[0] = b[0] * x[0]; for(i = 1; i < PRESSURE_01_LPF_N; i++){ y[0] += (b[i] * x[i]) - (a[i] * y[i]); } } return y[0]; } float Pressure_02_Cheby2_LPF(float raw_value, uint8_t restart){ const float b[PRESSURE_02_LPF_N] = {0.20077, 0.47142, 0.47142, 0.20077}; const float a[PRESSURE_02_LPF_N] = {1.0000000, -0.0398709, 0.3747845, 0.0094542}; static float x[PRESSURE_02_LPF_N]; static float y[PRESSURE_02_LPF_N]; int16_t i; if(restart){ for(i = 0; i < PRESSURE_02_LPF_N; i++){ x[i] = 0.0; y[i] = 0.0; } }else{ /* Update recorded input and output values */ for(i = PRESSURE_02_LPF_N - 1; i > 0; i--){ x[i] = x[i - 1]; y[i] = y[i - 1]; } /* Update current input and output values */ x[0] = raw_value; y[0] = b[0] * x[0]; for(i = 1; i < PRESSURE_02_LPF_N; i++){ y[0] += (b[i] * x[i]) - (a[i] * y[i]); } } return y[0]; } float Flow_Cheby2_HPF(float raw_value, uint8_t restart){ const float b[FLOW_HPF_N] = {0.97692, -1.95383, 0.97692}; const float a[FLOW_HPF_N] = {1.00000, -1.95330, 0.95438}; static float x[FLOW_HPF_N]; static float y[FLOW_HPF_N]; int16_t i; if(restart){ for(i = 0; i < FLOW_HPF_N; i++){ x[i] = 0.0; y[i] = 0.0; } }else{ /* Update recorded input and output values */ for(i = FLOW_HPF_N - 1; i > 0; i--){ x[i] = x[i - 1]; y[i] = y[i - 1]; } /* Update current input and output values */ x[0] = raw_value; y[0] = b[0] * x[0]; for(i = 1; i < FLOW_HPF_N; i++){ y[0] += (b[i] * x[i]) - (a[i] * y[i]); } } return y[0]; } float Flow_FIR_LPF(float raw_value, uint8_t restart){ const float b[FLOW_LPF_N] = {-0.00204445, 0.00170497, -0.00013853, -0.00430077, 0.01165634, -0.01836386, 0.01729751, -0.00064490, -0.03547909, 0.08723292, -0.14261912, 0.18533572, 0.80072653, 0.18533572, -0.14261912, 0.08723292, -0.03547909, -0.00064490, 0.01729751, -0.01836386, 0.01165634, -0.00430077, -0.00013853, 0.00170497, -0.00204445 }; static float x[FLOW_LPF_N]; float y; int16_t i; if(restart){ for(i = 0; i < FLOW_LPF_N; i++){ x[i] = 0.0; } }else{ /* Update recorded input values */ for(i = FLOW_LPF_N - 1; i > 0; i--){ x[i] = x[i - 1]; } /* Update current input and output values */ x[0] = raw_value; y = 0; for(i = 0; i < FLOW_LPF_N; i++){ y += (b[i] * x[i]); } } return y; }