controller
filter_interface.h 文件参考

滤波接口 更多...

浏览源代码.

结构体

struct  MoveAverageFilter
 滑动均值滤波 更多...
 
struct  MoveAverageFilters
 滑动均值滤波 更多...
 
struct  RMATRIX
 矩阵的结构体声明 更多...
 
struct  KalmanFilter
 卡尔曼滤波 更多...
 
struct  TIIRCoeff
 
struct  TIIRFilterParams
 TIIRF的参数定义 更多...
 
struct  TIIRFilter
 TIIRF定义 更多...
 
struct  TIIRFilters
 TIIRF数组 更多...
 

宏定义

#define ONLINEFILTERNUM   10
 滑动均值滤波器数组长度 更多...
 
#define MoveAverageFilter_BUF   2000
 滑动均值滤波的缓冲区大小 更多...
 
#define MATRIX_MAX   100
 矩阵最大维度 更多...
 
#define ARRAY_DIM   50
 这个参数必须大于等于2*MAX_POLE_COUNT,因为一些滤波器的多项式使用2*NumPoles进行定义 更多...
 

类型定义

typedef struct MoveAverageFilter MoveAverageFilter
 滑动均值滤波 更多...
 
typedef struct MoveAverageFilters MoveAverageFilters
 滑动均值滤波 更多...
 
typedef struct RMATRIX RMATRIX
 矩阵的结构体声明 更多...
 
typedef struct KalmanFilter KalmanFilter
 卡尔曼滤波 更多...
 
typedef enum TIIRPassTypes TIIRPassTypes
 多种无限脉冲响应滤波器 更多...
 
typedef struct TIIRCoeff TIIRCoeff
 
typedef enum TFilterPoly TFilterPoly
 一些可用的滤波器 更多...
 
typedef struct TIIRFilterParams TIIRFilterParams
 TIIRF的参数定义 更多...
 
typedef struct TIIRFilter TIIRFilter
 TIIRF定义 更多...
 
typedef struct TIIRFilters TIIRFilters
 TIIRF数组 更多...
 

枚举

enum  TIIRPassTypes {
  iirLPF, iirHPF, iirBPF, iirNOTCH,
  iirALLPASS
}
 多种无限脉冲响应滤波器 更多...
 
enum  TFilterPoly {
  BUTTERWORTH, GAUSSIAN, BESSEL, ADJUSTABLE,
  CHEBYSHEV, INVERSE_CHEBY, PAPOULIS, ELLIPTIC,
  NOT_IIR
}
 一些可用的滤波器 更多...
 

函数

void init_move_average_filter_online (MoveAverageFilter *maf, int buf_num)
 创建在线滑动均值滤波器 更多...
 
double move_average_filter_online (MoveAverageFilter *maf, double value)
 
void init_move_average_filter_onlines (MoveAverageFilters *mafs, int buf_num, int _dof)
 创建多个在线滑动均值滤波器 更多...
 
void move_average_filter_onlines (MoveAverageFilters *mafs, double *value_in, double *value_out, int _dof)
 
void initKalmanFilter (KalmanFilter *kf, double dt, RMATRIX *A, RMATRIX *C, RMATRIX *Q, RMATRIX *R, RMATRIX *P, RMATRIX *x0)
 使用指定的矩阵参数来创建卡尔曼滤波器 更多...
 
RMATRIXKalmanFilter_update (KalmanFilter *kf, RMATRIX *y)
 卡尔曼滤波器参数更新 更多...
 
RMATRIXKalmanFilter_update1 (KalmanFilter *kf, RMATRIX *y, RMATRIX *A)
 卡尔曼滤波器参数更新 更多...
 
RMATRIXgetKalmanFilter_state (KalmanFilter *kf)
 获取卡尔曼滤波器的状态 更多...
 
RMATRIXgetKalmanFilter_out (KalmanFilter *kf)
 获取卡尔曼滤波器的输出 更多...
 
void initKalmanFilter_d (KalmanFilter *kf, double dt, double *A, double *C, double *Q, double *R, double *P, double *x0, int m, int n)
 使用指定的矩阵参数来创建卡尔曼滤波器 更多...
 
void initKalmanFilter_d1 (KalmanFilter *kf, double dt, double **A, double **C, double **Q, double **R, double **P, double *x0, int m, int n)
 使用指定的矩阵参数来创建卡尔曼滤波器 更多...
 
double * KalmanFilter_update_d (KalmanFilter *kf, double *y, double *filter_state)
 
double * KalmanFilter_update1_d (KalmanFilter *kf, double *y, double *A, double *filter_state)
 
double * KalmanFilter_update1_d1 (KalmanFilter *kf, double *y, double **A, double *filter_state)
 
double * getKalmanFilter_state_d (KalmanFilter *kf, double *state)
 
double * getKalmanFilter_out_d (KalmanFilter *kf, double *out)
 
double * getKalmanFilterA (double *A, double dt, int n)
 
double * getKalmanFilterC (double *C, double dt, int m)
 
double * getKalmanFilterQ (double *Q, double value, int n)
 
double * getKalmanFilterR (double *R, double value, int m)
 
double * getKalmanFilterP (double *P, double value, int n)
 
void initTIIRFilter (TIIRFilter *iirfiler, TIIRPassTypes types, double cornerFreq, double sampleFreq)
 
double IIRFilter (TIIRFilter *iirfiler, double Signal)
 
double * IIRFilterZeroPhase (TIIRFilter *iirfiler, double *Signal_in, double *Signal_out, int n)
 
void initTIIRFilters (TIIRFilters *iirfilers, TIIRPassTypes types, double cornerFreq, double sampleFreq, int n)
 
void IIRFilters (TIIRFilters *iirfilers, double *in, double *out)
 

详细描述

滤波接口

作者
chenchen
版本
1.0
日期
2020-09-11

宏定义说明

◆ ARRAY_DIM

#define ARRAY_DIM   50

这个参数必须大于等于2*MAX_POLE_COUNT,因为一些滤波器的多项式使用2*NumPoles进行定义

◆ MATRIX_MAX

#define MATRIX_MAX   100

矩阵最大维度

◆ MoveAverageFilter_BUF

#define MoveAverageFilter_BUF   2000

滑动均值滤波的缓冲区大小

◆ ONLINEFILTERNUM

#define ONLINEFILTERNUM   10

滑动均值滤波器数组长度

类型定义说明

◆ KalmanFilter

typedef struct KalmanFilter KalmanFilter

卡尔曼滤波

卡尔曼滤波器

◆ MoveAverageFilter

滑动均值滤波

滑动均值滤波器

◆ MoveAverageFilters

滑动均值滤波

滑动均值滤波器数组

◆ RMATRIX

typedef struct RMATRIX RMATRIX

矩阵的结构体声明

声明一个卡尔曼滤波器所需要用到的参数的矩阵结构定义

◆ TFilterPoly

typedef enum TFilterPoly TFilterPoly

一些可用的滤波器

可用滤波器多项式

◆ TIIRCoeff

typedef struct TIIRCoeff TIIRCoeff

◆ TIIRFilter

typedef struct TIIRFilter TIIRFilter

TIIRF定义

需要定义滤波类型(高通、低通等等)、截止频率、带宽、增益、滤波器原型、极点数量、通带波纹、阻带衰减、过渡带宽调整系数

◆ TIIRFilterParams

TIIRF的参数定义

需要定义滤波类型(高通、低通等等)、截止频率、带宽、增益、滤波器原型、极点数量、通带波纹、阻带衰减、过渡带宽调整系数

◆ TIIRFilters

typedef struct TIIRFilters TIIRFilters

TIIRF数组

数组最大容量为是个TIIRF

◆ TIIRPassTypes

多种无限脉冲响应滤波器

TIIR infinite impulse response

枚举类型说明

◆ TFilterPoly

一些可用的滤波器

可用滤波器多项式

枚举值
BUTTERWORTH 

低通滤波

GAUSSIAN 

低通滤波

BESSEL 
ADJUSTABLE 
CHEBYSHEV 
INVERSE_CHEBY 
PAPOULIS 
ELLIPTIC 
NOT_IIR 

测试用

◆ TIIRPassTypes

多种无限脉冲响应滤波器

TIIR infinite impulse response

枚举值
iirLPF 

无限脉冲响应低通滤波

iirHPF 

无限脉冲响应高通滤波

iirBPF 

无限脉冲响应带通滤波

iirNOTCH 

无限脉冲响应陷波滤波

iirALLPASS 

无限脉冲响应全通滤波

函数说明

◆ getKalmanFilter_out()

RMATRIX* getKalmanFilter_out ( KalmanFilter kf)

获取卡尔曼滤波器的输出

参数
kf创建的卡尔曼滤波器

◆ getKalmanFilter_out_d()

double* getKalmanFilter_out_d ( KalmanFilter kf,
double *  out 
)

◆ getKalmanFilter_state()

RMATRIX* getKalmanFilter_state ( KalmanFilter kf)

获取卡尔曼滤波器的状态

参数
kf创建的卡尔曼滤波器

◆ getKalmanFilter_state_d()

double* getKalmanFilter_state_d ( KalmanFilter kf,
double *  state 
)

◆ getKalmanFilterA()

double* getKalmanFilterA ( double *  A,
double  dt,
int  n 
)

◆ getKalmanFilterC()

double* getKalmanFilterC ( double *  C,
double  dt,
int  m 
)

◆ getKalmanFilterP()

double* getKalmanFilterP ( double *  P,
double  value,
int  n 
)

◆ getKalmanFilterQ()

double* getKalmanFilterQ ( double *  Q,
double  value,
int  n 
)

◆ getKalmanFilterR()

double* getKalmanFilterR ( double *  R,
double  value,
int  m 
)

◆ IIRFilter()

double IIRFilter ( TIIRFilter iirfiler,
double  Signal 
)

◆ IIRFilters()

void IIRFilters ( TIIRFilters iirfilers,
double *  in,
double *  out 
)

◆ IIRFilterZeroPhase()

double* IIRFilterZeroPhase ( TIIRFilter iirfiler,
double *  Signal_in,
double *  Signal_out,
int  n 
)

◆ init_move_average_filter_online()

void init_move_average_filter_online ( MoveAverageFilter maf,
int  buf_num 
)

创建在线滑动均值滤波器

参数
maf滑动均值滤波器
buf_num缓存区数量

◆ init_move_average_filter_onlines()

void init_move_average_filter_onlines ( MoveAverageFilters mafs,
int  buf_num,
int  _dof 
)

创建多个在线滑动均值滤波器

参数
maf滑动均值滤波器数组对象
buf_num缓存区数量

◆ initKalmanFilter()

void initKalmanFilter ( KalmanFilter kf,
double  dt,
RMATRIX A,
RMATRIX C,
RMATRIX Q,
RMATRIX R,
RMATRIX P,
RMATRIX x0 
)

使用指定的矩阵参数来创建卡尔曼滤波器

参数
dt抽样时间
A系统动力学矩阵,尺寸为(n,n)
C输出矩阵,尺寸为(m,n)
Q过程噪声的协方差矩阵,尺寸为(n,n)
R测量噪声的协方差矩阵,尺寸为(m,m)
P估计误差的协方差矩阵,尺寸为(n,n)
x0初始状态,输入尺寸为(n,1)

◆ initKalmanFilter_d()

void initKalmanFilter_d ( KalmanFilter kf,
double  dt,
double *  A,
double *  C,
double *  Q,
double *  R,
double *  P,
double *  x0,
int  m,
int  n 
)

使用指定的矩阵参数来创建卡尔曼滤波器

参数
dt抽样时间
A系统动力学矩阵,尺寸为(n,n)
C输出矩阵,尺寸为(m,n)
Q过程噪声的协方差矩阵,尺寸为(n,n)
R测量噪声的协方差矩阵,尺寸为(m,m)
P估计误差的协方差矩阵,尺寸为(n,n)
x0初始状态,输入尺寸为(n,1)
m输入矩阵尺寸
n输入矩阵尺寸

◆ initKalmanFilter_d1()

void initKalmanFilter_d1 ( KalmanFilter kf,
double  dt,
double **  A,
double **  C,
double **  Q,
double **  R,
double **  P,
double *  x0,
int  m,
int  n 
)

使用指定的矩阵参数来创建卡尔曼滤波器

参数
dt抽样时间
A系统动力学矩阵,尺寸为(n,n)
C输出矩阵,尺寸为(m,n)
Q过程噪声的协方差矩阵,尺寸为(n,n)
R测量噪声的协方差矩阵,尺寸为(m,m)
P估计误差的协方差矩阵,尺寸为(n,n)
x0初始状态,输入尺寸为(n,1)
m输入矩阵尺寸
n输入矩阵尺寸

◆ initTIIRFilter()

void initTIIRFilter ( TIIRFilter iirfiler,
TIIRPassTypes  types,
double  cornerFreq,
double  sampleFreq 
)

◆ initTIIRFilters()

void initTIIRFilters ( TIIRFilters iirfilers,
TIIRPassTypes  types,
double  cornerFreq,
double  sampleFreq,
int  n 
)

◆ KalmanFilter_update()

RMATRIX* KalmanFilter_update ( KalmanFilter kf,
RMATRIX y 
)

卡尔曼滤波器参数更新

参数
kf创建的卡尔曼滤波器
y测量值 用来修正参数

◆ KalmanFilter_update1()

RMATRIX* KalmanFilter_update1 ( KalmanFilter kf,
RMATRIX y,
RMATRIX A 
)

卡尔曼滤波器参数更新

参数
kf创建的卡尔曼滤波器
y测量值
A

◆ KalmanFilter_update1_d()

double* KalmanFilter_update1_d ( KalmanFilter kf,
double *  y,
double *  A,
double *  filter_state 
)

◆ KalmanFilter_update1_d1()

double* KalmanFilter_update1_d1 ( KalmanFilter kf,
double *  y,
double **  A,
double *  filter_state 
)

◆ KalmanFilter_update_d()

double* KalmanFilter_update_d ( KalmanFilter kf,
double *  y,
double *  filter_state 
)

◆ move_average_filter_online()

double move_average_filter_online ( MoveAverageFilter maf,
double  value 
)

◆ move_average_filter_onlines()

void move_average_filter_onlines ( MoveAverageFilters mafs,
double *  value_in,
double *  value_out,
int  _dof 
)