MBot Software Library
v1.0
An API documentation to mbot_firmware repository
|
This is a collection of functions for generating and implementing discrete SISO filters for arbitrary transfer functions. More...
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
#include <rc/math/filter.h>
#include <rc/math/polynomial.h>
#include "algebra_common.h"
Functions | |
rc_filter_t | rc_filter_empty (void) |
Critical function for initializing rc_filter_t structs. More... | |
int | rc_filter_alloc (rc_filter_t *f, rc_vector_t num, rc_vector_t den, double dt) |
Allocate memory for a discrete-time filter & populates it with the transfer function coefficients provided in vectors num and den. More... | |
int | rc_filter_alloc_from_arrays (rc_filter_t *f, double dt, double *num, int numlen, double *den, int denlen) |
Like rc_filter_alloc(), but takes arrays for the numerator and denominator coefficients instead of vectors. More... | |
int | rc_filter_duplicate (rc_filter_t *f, rc_filter_t old) |
duplicates a filter More... | |
int | rc_filter_free (rc_filter_t *f) |
Frees the memory allocated by a filter's buffers and coefficient vectors. Also resets all filter properties back to 0. More... | |
double | rc_filter_march (rc_filter_t *f, double new_input) |
March a filter forward one step with new input provided as an argument. More... | |
int | rc_filter_reset (rc_filter_t *f) |
Resets all previous inputs and outputs to 0. Also resets the step counter & saturation flag. More... | |
int | rc_filter_print (rc_filter_t f) |
Prints the transfer function and other statistic of a filter to the screen. More... | |
int | rc_filter_enable_saturation (rc_filter_t *f, double min, double max) |
Enables saturation between bounds min and max. More... | |
int | rc_filter_get_saturation_flag (rc_filter_t *f) |
Checks if the filter saturated the last time step. More... | |
int | rc_filter_enable_soft_start (rc_filter_t *f, double seconds) |
Enables soft start functionality where the output bound is gradually opened linearly from 0 to the normal saturation range. More... | |
double | rc_filter_previous_input (rc_filter_t *f, int steps) |
Returns the input 'steps' back in time. Steps=0 returns most recent input. More... | |
double | rc_filter_previous_output (rc_filter_t *f, int steps) |
Returns the output 'steps' back in time. Steps = 0 returns most recent output. More... | |
int | rc_filter_prefill_inputs (rc_filter_t *f, double in) |
Fills all previous inputs to the filter as if they had been equal to 'in'. More... | |
int | rc_filter_prefill_outputs (rc_filter_t *f, double out) |
Fills all previous outputs of the filter as if they had been equal to 'out'. More... | |
int | rc_filter_multiply (rc_filter_t f1, rc_filter_t f2, rc_filter_t *f3) |
Creates a new filter 'out' by multiplying f1*f2. More... | |
int | rc_filter_multiply_three (rc_filter_t f1, rc_filter_t f2, rc_filter_t f3, rc_filter_t *out) |
Creates a new filter 'out' by multiplying f1*f2*f3. More... | |
int | rc_filter_c2d_tustin (rc_filter_t *f, double dt, rc_vector_t num, rc_vector_t den, double w) |
Creates a discrete time filter with similar dynamics to a provided continuous time transfer function using tustin's approximation with prewarping about a frequency of interest 'w' in radians per second. More... | |
int | rc_filter_normalize (rc_filter_t *f) |
Normalizes a discrete time filter so that the leading demoninator coefficient is 1. More... | |
int | rc_filter_first_order_lowpass (rc_filter_t *f, double dt, double time_constant) |
Creates a first order low pass filter. More... | |
int | rc_filter_first_order_highpass (rc_filter_t *f, double dt, double time_constant) |
Creates a first order high pass filter. More... | |
int | rc_filter_butterworth_lowpass (rc_filter_t *f, int order, double dt, double wc) |
Creates a Butterworth low pass filter of specified order and cutoff frequency. More... | |
int | rc_filter_butterworth_highpass (rc_filter_t *f, int order, double dt, double wc) |
Creates a Butterworth high pass filter of specified order and cutoff frequency. More... | |
int | rc_filter_moving_average (rc_filter_t *f, int samples, double dt) |
Makes a FIR moving average filter that averages over specified number of samples. More... | |
int | rc_filter_integrator (rc_filter_t *f, double dt) |
Creates a first order integrator. More... | |
int | rc_filter_double_integrator (rc_filter_t *f, double dt) |
Creates a second order double integrator. More... | |
int | rc_filter_pid (rc_filter_t *f, double kp, double ki, double kd, double Tf, double dt) |
Creates a discrete-time implementation of a parallel PID controller with high-frequency rolloff using the forward-Euler integration method. More... | |
int | rc_filter_third_order_complement (rc_filter_t *lp, rc_filter_t *hp, double freq, double damp, double dt) |
Creates a third order symmetric complementary pair of high/low pass filters. More... | |
This is a collection of functions for generating and implementing discrete SISO filters for arbitrary transfer functions.