Paparazzi UAS  v5.15_devel-99-g2ff7410
Paparazzi is a free software Unmanned Aircraft System.
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
low_pass_filter.h File Reference

Simple first order low pass filter with bilinear transform. More...

#include "std.h"
#include "math/pprz_algebra_int.h"
+ Include dependency graph for low_pass_filter.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  FirstOrderLowPass
 First order low pass filter structure. More...
 
struct  SecondOrderLowPass
 Second order low pass filter structure. More...
 
struct  SecondOrderLowPass_int
 
struct  Butterworth4LowPass
 Fourth order Butterworth low pass filter. More...
 
struct  Butterworth4LowPass_int
 Fourth order Butterworth low pass filter(fixed point version). More...
 

Macros

#define INT32_FILT_FRAC   8
 

Typedefs

typedef struct SecondOrderLowPass Butterworth2LowPass
 Second order Butterworth low pass filter. More...
 
typedef struct
SecondOrderLowPass_int 
Butterworth2LowPass_int
 Second order Butterworth low pass filter(fixed point version). More...
 

Functions

static void init_first_order_low_pass (struct FirstOrderLowPass *filter, float tau, float sample_time, float value)
 Init first order low pass filter. More...
 
static float update_first_order_low_pass (struct FirstOrderLowPass *filter, float value)
 Update first order low pass filter state with a new value. More...
 
static float get_first_order_low_pass (struct FirstOrderLowPass *filter)
 Get current value of the first order low pass filter. More...
 
static void init_second_order_low_pass (struct SecondOrderLowPass *filter, float tau, float Q, float sample_time, float value)
 Init second order low pass filter. More...
 
static float update_second_order_low_pass (struct SecondOrderLowPass *filter, float value)
 Update second order low pass filter state with a new value. More...
 
static float get_second_order_low_pass (struct SecondOrderLowPass *filter)
 Get current value of the second order low pass filter. More...
 
static void init_second_order_low_pass_int (struct SecondOrderLowPass_int *filter, float cut_off, float Q, float sample_time, int32_t value)
 Init second order low pass filter(fixed point version). More...
 
static int32_t update_second_order_low_pass_int (struct SecondOrderLowPass_int *filter, int32_t value)
 Update second order low pass filter state with a new value(fixed point version). More...
 
static int32_t get_second_order_low_pass_int (struct SecondOrderLowPass_int *filter)
 Get current value of the second order low pass filter(fixed point version). More...
 
static void init_butterworth_2_low_pass (Butterworth2LowPass *filter, float tau, float sample_time, float value)
 Init a second order Butterworth filter. More...
 
static float update_butterworth_2_low_pass (Butterworth2LowPass *filter, float value)
 Update second order Butterworth low pass filter state with a new value. More...
 
static float get_butterworth_2_low_pass (Butterworth2LowPass *filter)
 Get current value of the second order Butterworth low pass filter. More...
 
static void init_butterworth_2_low_pass_int (Butterworth2LowPass_int *filter, float cut_off, float sample_time, int32_t value)
 Init a second order Butterworth filter. More...
 
static int32_t update_butterworth_2_low_pass_int (Butterworth2LowPass_int *filter, int32_t value)
 Update second order Butterworth low pass filter state with a new value(fixed point version). More...
 
static int32_t get_butterworth_2_low_pass_int (Butterworth2LowPass_int *filter)
 Get current value of the second order Butterworth low pass filter(fixed point version). More...
 
static void init_butterworth_4_low_pass (Butterworth4LowPass *filter, float tau, float sample_time, float value)
 Init a fourth order Butterworth filter. More...
 
static float update_butterworth_4_low_pass (Butterworth4LowPass *filter, float value)
 Update fourth order Butterworth low pass filter state with a new value. More...
 
static float get_butterworth_4_low_pass (Butterworth4LowPass *filter)
 Get current value of the fourth order Butterworth low pass filter. More...
 
static void init_butterworth_4_low_pass_int (Butterworth4LowPass_int *filter, float cut_off, float sample_time, int32_t value)
 Init a fourth order Butterworth filter(fixed point version). More...
 
static int32_t update_butterworth_4_low_pass_int (Butterworth4LowPass_int *filter, int32_t value)
 Update fourth order Butterworth low pass filter state with a new value(fixed point version). More...
 
static int32_t get_butterworth_4_low_pass_int (Butterworth4LowPass_int *filter)
 Get current value of the fourth order Butterworth low pass filter(fixed point version). More...
 

Detailed Description

Simple first order low pass filter with bilinear transform.

Definition in file low_pass_filter.h.


Data Structure Documentation

struct FirstOrderLowPass

First order low pass filter structure.

using bilinear z transform

Definition at line 39 of file low_pass_filter.h.

Data Fields
float last_in
float last_out
float time_const
struct SecondOrderLowPass

Second order low pass filter structure.

using biquad filter with bilinear z transform

http://en.wikipedia.org/wiki/Digital_biquad_filter http://www.earlevel.com/main/2003/03/02/the-bilinear-z-transform

Laplace continious form:

            1

H(s) = ----------------— s^2/w^2 + s/w*Q + 1

Polynomial discrete form:

   b0 + b1 z^-1 + b2 z^-2

H(z) = -------------------— a0 + a1 z^-1 + a2 z^-2

with: a0 = 1 a1 = 2*(K^2 - 1) / (K^2 + K/Q + 1) a2 = (K^2 - K/Q + 1) / (K^2 + K/Q + 1) b0 = K^2 / (K^2 + K/Q + 1) b1 = 2*b0 b2 = b0 K = tan(pi*Fc/Fs) ~ pi*Fc/Fs = Ts/(2*tau) Fc: cutting frequency Fs: sampling frequency Ts: sampling period tau: time constant (tau = 1/(2*pi*Fc)) Q: gain at cutoff frequency

Note that b[0]=b[2], so we don't need to save b[2]

Definition at line 125 of file low_pass_filter.h.

Data Fields
float a[2] denominator gains
float b[2] numerator gains
float i[2] input history
float o[2] output history
struct SecondOrderLowPass_int

Definition at line 183 of file low_pass_filter.h.

Data Fields
int32_t a[2] denominator gains
int32_t b[2] numerator gains
int32_t i[2] input history
int32_t loop_gain loop gain
int32_t o[2] output history
struct Butterworth4LowPass

Fourth order Butterworth low pass filter.

using two cascaded second order filters

Definition at line 342 of file low_pass_filter.h.

+ Collaboration diagram for Butterworth4LowPass:
Data Fields
struct SecondOrderLowPass lp1
struct SecondOrderLowPass lp2
struct Butterworth4LowPass_int

Fourth order Butterworth low pass filter(fixed point version).

using two cascaded second order filters

Definition at line 394 of file low_pass_filter.h.

+ Collaboration diagram for Butterworth4LowPass_int:
Data Fields
struct SecondOrderLowPass_int lp1
struct SecondOrderLowPass_int lp2

Macro Definition Documentation

#define INT32_FILT_FRAC   8

Definition at line 33 of file low_pass_filter.h.

Referenced by init_second_order_low_pass_int().

Typedef Documentation

Second order Butterworth low pass filter.

Definition at line 255 of file low_pass_filter.h.

Second order Butterworth low pass filter(fixed point version).

Definition at line 297 of file low_pass_filter.h.

Function Documentation

static float get_butterworth_2_low_pass ( Butterworth2LowPass filter)
inlinestatic

Get current value of the second order Butterworth low pass filter.

Parameters
filtersecond order Butterworth low pass filter structure
Returns
current value of the filter

Definition at line 290 of file low_pass_filter.h.

References SecondOrderLowPass::o.

static int32_t get_butterworth_2_low_pass_int ( Butterworth2LowPass_int filter)
inlinestatic

Get current value of the second order Butterworth low pass filter(fixed point version).

Parameters
filtersecond order Butterworth low pass filter structure
Returns
current value of the filter

Definition at line 333 of file low_pass_filter.h.

References SecondOrderLowPass_int::o.

Referenced by mavlink_send_highres_imu().

+ Here is the caller graph for this function:

static float get_butterworth_4_low_pass ( Butterworth4LowPass filter)
inlinestatic

Get current value of the fourth order Butterworth low pass filter.

Parameters
filterfourth order Butterworth low pass filter structure
Returns
current value of the filter

Definition at line 385 of file low_pass_filter.h.

References Butterworth4LowPass::lp2, and SecondOrderLowPass::o.

static int32_t get_butterworth_4_low_pass_int ( Butterworth4LowPass_int filter)
inlinestatic

Get current value of the fourth order Butterworth low pass filter(fixed point version).

Parameters
filterfourth order Butterworth low pass filter structure
Returns
current value of the filter

Definition at line 438 of file low_pass_filter.h.

References Butterworth4LowPass_int::lp2, and SecondOrderLowPass_int::o.

static float get_first_order_low_pass ( struct FirstOrderLowPass filter)
inlinestatic

Get current value of the first order low pass filter.

Parameters
filterfirst order low pass filter structure
Returns
current value of the filter

Definition at line 84 of file low_pass_filter.h.

References FirstOrderLowPass::last_out.

static float get_second_order_low_pass ( struct SecondOrderLowPass filter)
inlinestatic

Get current value of the second order low pass filter.

Parameters
filtersecond order low pass filter structure
Returns
current value of the filter

Definition at line 178 of file low_pass_filter.h.

References SecondOrderLowPass::o.

static int32_t get_second_order_low_pass_int ( struct SecondOrderLowPass_int filter)
inlinestatic

Get current value of the second order low pass filter(fixed point version).

Parameters
filtersecond order low pass filter structure
Returns
current value of the filter

Definition at line 248 of file low_pass_filter.h.

References SecondOrderLowPass_int::o.

static void init_butterworth_2_low_pass ( Butterworth2LowPass filter,
float  tau,
float  sample_time,
float  value 
)
inlinestatic

Init a second order Butterworth filter.

based on the generic second order filter with Q = 0.7071 = 1/sqrt(2)

http://en.wikipedia.org/wiki/Butterworth_filter

Parameters
filtersecond order Butterworth low pass filter structure
tautime constant of the second order low pass filter
sample_timesampling period of the signal
valueinitial value of the filter

Definition at line 269 of file low_pass_filter.h.

References init_second_order_low_pass().

Referenced by guidance_indi_enter(), indi_init_filters(), init_filters(), ms45xx_i2c_init(), and sdp3x_init().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void init_butterworth_2_low_pass_int ( Butterworth2LowPass_int filter,
float  cut_off,
float  sample_time,
int32_t  value 
)
inlinestatic

Init a second order Butterworth filter.

based on the generic second order filter with Q = 0.7071 = 1/sqrt(2)

http://en.wikipedia.org/wiki/Butterworth_filter

Parameters
filtersecond order Butterworth low pass filter structure
cut_offCutoff frequency of the filter with -3dB
sample_timesampling period of the signal
valueinitial value of the filter

Definition at line 311 of file low_pass_filter.h.

References init_second_order_low_pass_int().

Referenced by hff_init(), jevois_mavlink_filter_init(), and stabilization_attitude_init().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void init_butterworth_4_low_pass ( Butterworth4LowPass filter,
float  tau,
float  sample_time,
float  value 
)
inlinestatic

Init a fourth order Butterworth filter.

based on two generic second order filters with Q1 = 1.30651 and Q2 = 0.541184

http://en.wikipedia.org/wiki/Butterworth_filter

Parameters
filterfourth order Butterworth low pass filter structure
tautime constant of the fourth order low pass filter
sample_timesampling period of the signal
valueinitial value of the filter

Definition at line 360 of file low_pass_filter.h.

References init_second_order_low_pass(), Butterworth4LowPass::lp1, and Butterworth4LowPass::lp2.

+ Here is the call graph for this function:

static void init_butterworth_4_low_pass_int ( Butterworth4LowPass_int filter,
float  cut_off,
float  sample_time,
int32_t  value 
)
inlinestatic

Init a fourth order Butterworth filter(fixed point version).

based on two generic second order filters with Q1 = 1.30651 and Q2 = 0.541184

http://en.wikipedia.org/wiki/Butterworth_filter

Parameters
filterfourth order Butterworth low pass filter structure
cut_offCutoff frequency of the filter with -3dB
sample_timesampling period of the signal
valueinitial value of the filter

Definition at line 412 of file low_pass_filter.h.

References init_second_order_low_pass_int(), Butterworth4LowPass_int::lp1, and Butterworth4LowPass_int::lp2.

+ Here is the call graph for this function:

static void init_first_order_low_pass ( struct FirstOrderLowPass filter,
float  tau,
float  sample_time,
float  value 
)
inlinestatic

Init first order low pass filter.

Laplace transform in continious time: 1 H(s) = ------— 1 + tau*s

Parameters
filterfirst order low pass filter structure
tautime constant of the first order low pass filter
sample_timesampling period of the signal
valueinitial value of the filter

Definition at line 57 of file low_pass_filter.h.

References FirstOrderLowPass::last_in, FirstOrderLowPass::last_out, and FirstOrderLowPass::time_const.

Referenced by nps_fdm_init(), and rpm_sensor_init().

+ Here is the caller graph for this function:

static void init_second_order_low_pass ( struct SecondOrderLowPass filter,
float  tau,
float  Q,
float  sample_time,
float  value 
)
inlinestatic

Init second order low pass filter.

Parameters
filtersecond order low pass filter structure
tautime constant of the second order low pass filter
QQ value of the second order low pass filter
sample_timesampling period of the signal
valueinitial value of the filter

Definition at line 141 of file low_pass_filter.h.

References SecondOrderLowPass::a, SecondOrderLowPass::b, SecondOrderLowPass::i, K, and SecondOrderLowPass::o.

Referenced by init_butterworth_2_low_pass(), and init_butterworth_4_low_pass().

+ Here is the caller graph for this function:

static void init_second_order_low_pass_int ( struct SecondOrderLowPass_int filter,
float  cut_off,
float  Q,
float  sample_time,
int32_t  value 
)
inlinestatic

Init second order low pass filter(fixed point version).

Parameters
filtersecond order low pass filter structure
cut_offCutoff frequency of the filter with -3dB
QQ value of the second order low pass filter
sample_timesampling period of the signal
valueinitial value of the filter

Definition at line 199 of file low_pass_filter.h.

References SecondOrderLowPass::a, SecondOrderLowPass_int::a, SecondOrderLowPass::b, SecondOrderLowPass_int::b, BFP_OF_REAL, SecondOrderLowPass_int::i, INT32_FILT_FRAC, K, SecondOrderLowPass_int::loop_gain, and SecondOrderLowPass_int::o.

Referenced by init_butterworth_2_low_pass_int(), init_butterworth_4_low_pass_int(), and stabilization_init().

+ Here is the caller graph for this function:

static float update_butterworth_2_low_pass ( Butterworth2LowPass filter,
float  value 
)
inlinestatic

Update second order Butterworth low pass filter state with a new value.

Parameters
filtersecond order Butterworth low pass filter structure
valuenew input value of the filter
Returns
new filtered value

Definition at line 280 of file low_pass_filter.h.

References update_second_order_low_pass().

Referenced by filter_pqr(), guidance_indi_propagate_filters(), lms_estimation(), ms45xx_i2c_event(), sdp3x_event(), stabilization_indi_calc_cmd(), and stabilization_indi_run().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static int32_t update_butterworth_2_low_pass_int ( Butterworth2LowPass_int filter,
int32_t  value 
)
inlinestatic

Update second order Butterworth low pass filter state with a new value(fixed point version).

Parameters
filtersecond order Butterworth low pass filter structure
valuenew input value of the filter
Returns
new filtered value

Definition at line 323 of file low_pass_filter.h.

References update_second_order_low_pass_int().

Referenced by hff_propagate(), indi_apply_actuator_butterworth_filters(), indi_apply_measurement_butterworth_filters(), and jevois_mavlink_filter_periodic().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static float update_butterworth_4_low_pass ( Butterworth4LowPass filter,
float  value 
)
inlinestatic

Update fourth order Butterworth low pass filter state with a new value.

using two cascaded second order filters

Parameters
filterfourth order Butterworth low pass filter structure
valuenew input value of the filter
Returns
new filtered value

Definition at line 374 of file low_pass_filter.h.

References Butterworth4LowPass::lp1, Butterworth4LowPass::lp2, and update_second_order_low_pass().

+ Here is the call graph for this function:

static int32_t update_butterworth_4_low_pass_int ( Butterworth4LowPass_int filter,
int32_t  value 
)
inlinestatic

Update fourth order Butterworth low pass filter state with a new value(fixed point version).

using two cascaded second order filters

Parameters
filterfourth order Butterworth low pass filter structure
valuenew input value of the filter
Returns
new filtered value

Definition at line 427 of file low_pass_filter.h.

References Butterworth4LowPass_int::lp1, Butterworth4LowPass_int::lp2, and update_second_order_low_pass_int().

+ Here is the call graph for this function:

static float update_first_order_low_pass ( struct FirstOrderLowPass filter,
float  value 
)
inlinestatic

Update first order low pass filter state with a new value.

Parameters
filterfirst order low pass filter structure
valuenew input value of the filter
Returns
new filtered value

Definition at line 71 of file low_pass_filter.h.

References FirstOrderLowPass::last_in, FirstOrderLowPass::last_out, and FirstOrderLowPass::time_const.

Referenced by gazebo_write(), and rpm_sensor_periodic().

+ Here is the caller graph for this function:

static float update_second_order_low_pass ( struct SecondOrderLowPass filter,
float  value 
)
inlinestatic

Update second order low pass filter state with a new value.

Parameters
filtersecond order low pass filter structure
valuenew input value of the filter
Returns
new filtered value

Definition at line 159 of file low_pass_filter.h.

References SecondOrderLowPass::a, SecondOrderLowPass::b, SecondOrderLowPass::i, and SecondOrderLowPass::o.

Referenced by update_butterworth_2_low_pass(), and update_butterworth_4_low_pass().

+ Here is the caller graph for this function:

static int32_t update_second_order_low_pass_int ( struct SecondOrderLowPass_int filter,
int32_t  value 
)
inlinestatic

Update second order low pass filter state with a new value(fixed point version).

Parameters
filtersecond order low pass filter structure
valuenew input value of the filter
Returns
new filtered value

Definition at line 228 of file low_pass_filter.h.

References SecondOrderLowPass_int::a, SecondOrderLowPass_int::b, SecondOrderLowPass_int::i, SecondOrderLowPass_int::loop_gain, and SecondOrderLowPass_int::o.

Referenced by stabilization_filter_commands(), update_butterworth_2_low_pass_int(), and update_butterworth_4_low_pass_int().

+ Here is the caller graph for this function: