libRBR  v1.2.3
RBR instrument communication API
RBRDynamicCorrection.h
Go to the documentation of this file.
1 
11 #ifndef LIBRBR_DYNAMICCORRECTION_H
12 #define LIBRBR_DYNAMICCORRECTION_H
13 
14 #include <stdint.h>
15 
16 
21 /* Define the maximum amount of lag permitted.
22  * (this need to be increase for faster sampling rate).
23  * DCORR_MAX_LAG_ARRAY/F_s > t_delay */
24 #define DCORR_MAX_LAG_ARRAY 20
25 
26 
27 /* default parameters
28  * (applicable for 10cm/sec ascent/descent rate) */
29 
33 #define DCORR_T_DELAY 0.35f
34 
37 #define DCORR_ALPHA 0.041f
38 
41 #define DCORR_ALPHA_A 0.00323f
42 
45 #define DCORR_ALPHA_E -1.03f
46 
50 #define DCORR_TAU 8.11f
51 
54 #define DCORR_TAU_A 4.93f
55 
58 #define DCORR_TAU_E -0.26f
59 
63 #define DCORR_CT_COEFF 0.97e-2f
64 
67 #define DCORR_CT_COEFF_A 0.00139f
68 
71 #define DCORR_CT_COEFF_E -1.00f
72 
76 #define DCORR_VP_MIN 0.03f
77 
81 #define DCORR_VP_MAX 0.45f
82 
86 #define DCORR_VP_FC 0.04f
87 
88 
96 typedef enum
97 {
111 
126 typedef struct
127 {
128  float t_delay; // time delay (sec), or C-T lag
129  float Fs; // sampling rate (Hz)
130  float alpha;
131  float tau;
132  float CT_coeff;
133  float alpha_a; // alpha = alpha_a * powf(Vp * alpha_e)
134  float alpha_e;
135  float tau_a; // tau = tau_a * powf(Vp * tau_e)
136  float tau_e;
137  float ctcoeff_a; // ctcoeff = ctcoeff_a * powf(Vp * ctcoeff_e)
138  float ctcoeff_e;
139  float Vp_min;
140  float Vp_max;
141  float Vp_fc;
142  // --- internal private data ---
144  int32_t _firstCall;
145  int32_t _isError;
146  float _ascentRate;
147  float _lastPressure;
148  float _lastPressureTime;
149  float _phi;
150  float _cte_a;
151  float _cte_b;
152  int32_t _lagIndex;
153  float _T_meas_lag;
154  float _C_meas_lag;
155  float _T_cond_lag;
156  float _P_meas_lag;
157  float _T_cor_lag;
158  float _T_short_lag;
159  int32_t _isValid_lagArray[DCORR_MAX_LAG_ARRAY];
160  float _timestamp_lagArray[DCORR_MAX_LAG_ARRAY];
161  float _C_meas_lagArray[DCORR_MAX_LAG_ARRAY];
162  float _P_meas_lagArray[DCORR_MAX_LAG_ARRAY];
163  float _T_cond_lagArray[DCORR_MAX_LAG_ARRAY];
166 
181 typedef struct {
182  float timestamp; // Time in seconds
183  float conductivity; // Conductivity measurement (mS/cm)
184  float marineTemperature; // Marine temperature measurement (°C)
185  float condTemperature; // Temperature of conductivity cell measurement (°C)
186  float pressure; // Pressure measurement (dbar)
188 
203 typedef struct {
204  float timestamp; // Time in seconds
205  float conductivity; // Conductivity measurement (mS/cm)
206  float corrTemperature; // Corrected temperature (°C)
207  float pressure; // Sea pressure measurement (dbar)
208  float corrSalinity; // Practical salinity after all corrections (unitless)
210 
231  float t_delay, float alpha_a, float alpha_e,
232  float tau_a, float tau_e, float ctcoeff_a, float ctcoeff_e,
233  float Vp_min, float Vp_max, float Vp_fc);
234 
243 
255 
256 
257 #endif // LIBRBR_DYNAMICCORRECTION_H
RBR_DCORR_SUCCESS
@ RBR_DCORR_SUCCESS
Definition: RBRDynamicCorrection.h:99
RBRDynamicCorrectionMeasurement::marineTemperature
float marineTemperature
Definition: RBRDynamicCorrection.h:184
RBR_DCORR_NOT_VALID_YET
@ RBR_DCORR_NOT_VALID_YET
Definition: RBRDynamicCorrection.h:103
RBRDynamicCorrectionMeasurement::conductivity
float conductivity
Definition: RBRDynamicCorrection.h:183
RBRDynamicCorrectionParams::tau
float tau
Definition: RBRDynamicCorrection.h:131
RBRDynamicCorrection_addMeasurement
RBRDynamicCorrectionError RBRDynamicCorrection_addMeasurement(RBRDynamicCorrectionParams *params, const RBRDynamicCorrectionMeasurement *measIn, RBRDynamicCorrectionResult *corrMeasOut)
Feed a new measurement in the algorithm.
RBRDynamicCorrection_update_Fs
RBRDynamicCorrectionError RBRDynamicCorrection_update_Fs(RBRDynamicCorrectionParams *params, float Fs)
Change the sampling rate for the algorithm.
DYN_CORR_UNKNOWN_ERROR
@ DYN_CORR_UNKNOWN_ERROR
Definition: RBRDynamicCorrection.h:109
RBRDynamicCorrectionResult
Definition: RBRDynamicCorrection.h:203
RBRDynamicCorrectionParams::CT_coeff
float CT_coeff
Definition: RBRDynamicCorrection.h:132
DYN_CORR_CORRUPTED
@ DYN_CORR_CORRUPTED
Definition: RBRDynamicCorrection.h:105
RBRDynamicCorrectionMeasurement::condTemperature
float condTemperature
Definition: RBRDynamicCorrection.h:185
RBRDynamicCorrectionResult::corrTemperature
float corrTemperature
Definition: RBRDynamicCorrection.h:206
RBRDynamicCorrection_init
RBRDynamicCorrectionError RBRDynamicCorrection_init(RBRDynamicCorrectionParams *params, float Fs, float t_delay, float alpha_a, float alpha_e, float tau_a, float tau_e, float ctcoeff_a, float ctcoeff_e, float Vp_min, float Vp_max, float Vp_fc)
Initialize the dynamic correction algorithm.
DCORR_MAX_LAG_ARRAY
#define DCORR_MAX_LAG_ARRAY
Define the maximum amount of lag permitted.
Definition: RBRDynamicCorrection.h:24
RBRDynamicCorrectionResult::corrSalinity
float corrSalinity
Definition: RBRDynamicCorrection.h:208
RBRDynamicCorrectionParams
Definition: RBRDynamicCorrection.h:126
RBRDynamicCorrectionParams::alpha
float alpha
Definition: RBRDynamicCorrection.h:130
RBRDynamicCorrectionParams::Fs
float Fs
Definition: RBRDynamicCorrection.h:129
RBRDynamicCorrectionResult::timestamp
float timestamp
Definition: RBRDynamicCorrection.h:204
RBRDynamicCorrectionMeasurement::pressure
float pressure
Definition: RBRDynamicCorrection.h:186
RBRDynamicCorrectionMeasurement::timestamp
float timestamp
Definition: RBRDynamicCorrection.h:182
RBRDynamicCorrectionError
RBRDynamicCorrectionError
Errors which can be returned from dynamic correction algorithm.
Definition: RBRDynamicCorrection.h:96
RBRDynamicCorrectionParams::t_delay
float t_delay
Definition: RBRDynamicCorrection.h:128
DYN_CORR_BAD_PARAMS
@ DYN_CORR_BAD_PARAMS
Definition: RBRDynamicCorrection.h:107
RBR_DCORR_INVALID_SAMPLING_RATE
@ RBR_DCORR_INVALID_SAMPLING_RATE
Definition: RBRDynamicCorrection.h:101
RBRDynamicCorrectionResult::pressure
float pressure
Definition: RBRDynamicCorrection.h:207
RBRDynamicCorrectionMeasurement
Definition: RBRDynamicCorrection.h:181
RBRDynamicCorrectionResult::conductivity
float conductivity
Definition: RBRDynamicCorrection.h:205