controller
filter_interface.h
浏览该文件的文档.
1 
11 #ifndef FILTER_INTERFACE_H_
12 #define FILTER_INTERFACE_H_
13 
14 
15 
16 #ifdef __cplusplus
17 namespace HYYRobotBase
18 {
19 extern "C" {
20 #endif
21 
22 //-------------------------------滑动均值滤波----------------------
23 #define ONLINEFILTERNUM 10
24 #define MoveAverageFilter_BUF 2000
25 
26 
27 /*-------------------------------------------------------------------------*/
33 /*-------------------------------------------------------------------------*/
34 typedef struct MoveAverageFilter{
35  int buf_num;
36  double buf[MoveAverageFilter_BUF];
37  int _index;
38  int one_flag;
40 
41 /*-------------------------------------------------------------------------*/
47 /*-------------------------------------------------------------------------*/
48 typedef struct MoveAverageFilters{
50  int dof;
52 
59 extern void init_move_average_filter_online(MoveAverageFilter* maf, int buf_num);
60 
61 
62 extern double move_average_filter_online(MoveAverageFilter* maf, double value);
63 
70 extern void init_move_average_filter_onlines(MoveAverageFilters* mafs, int buf_num, int _dof);
71 
72 
73 extern void move_average_filter_onlines(MoveAverageFilters* mafs, double* value_in, double* value_out, int _dof);
74 
75 
76 
77 //-------------------------------------------------------------------卡尔曼滤波---------------------------------------------------------
78 #define MATRIX_MAX 100
79 
80 /*-------------------------------------------------------------------------*/
86 /*-------------------------------------------------------------------------*/
87 typedef struct RMATRIX{
88  double data[MATRIX_MAX][MATRIX_MAX];
89  int row;
90  int col;
92 
93 /*-------------------------------------------------------------------------*/
99 /*-------------------------------------------------------------------------*/
100 typedef struct KalmanFilter{
101  RMATRIX A,C,Q,R,P,K,I;
102  int m, n;
103  double dt;
105 
108  RMATRIX tmp, tmp1;
109 
110 
112 
124 extern void initKalmanFilter(KalmanFilter* kf,double dt, RMATRIX* A, RMATRIX* C, RMATRIX* Q, RMATRIX* R, RMATRIX* P, RMATRIX* x0);
125 
126 
134 
143 
150 
157 
171 extern void initKalmanFilter_d(KalmanFilter* kf,double dt, double* A, double* C, double* Q, double* R, double* P, double* x0, int m, int n);
172 
186 extern void initKalmanFilter_d1(KalmanFilter* kf,double dt, double** A, double** C, double** Q, double** R, double** P, double* x0, int m, int n);
187 
188 //return state(n,1)
189 extern double* KalmanFilter_update_d(KalmanFilter* kf, double* y, double* filter_state);
190 
191 //return state(n,1)
192 extern double* KalmanFilter_update1_d(KalmanFilter* kf, double* y, double* A, double* filter_state);
193 
194 //return state(n,1)
195 extern double* KalmanFilter_update1_d1(KalmanFilter* kf, double* y, double** A, double* filter_state);
196 
197 //return state(n,1)
198 extern double* getKalmanFilter_state_d(KalmanFilter* kf, double* state);
199 
200 //return out (m,1)
201 extern double* getKalmanFilter_out_d(KalmanFilter* kf, double* out);
202 
203 
204 //----------------------------------------------------数据滤波系数矩阵, 状态为位置,速度,加速度组成的向量-------------------------------------------------
205 extern double* getKalmanFilterA(double* A, double dt, int n);
206 
207 extern double* getKalmanFilterC(double* C, double dt, int m);
208 
209 extern double* getKalmanFilterQ(double* Q, double value, int n);
210 
211 extern double* getKalmanFilterR(double* R, double value, int m);
212 
213 extern double* getKalmanFilterP(double* P, double value, int n);
214 
215 
216 //-------------------------------------------------------------------IIR滤波---------------------------------------------------------
217 #define ARRAY_DIM 50
218 /*-------------------------------------------------------------------------*/
219 
224 /*-------------------------------------------------------------------------*/
225 typedef enum TIIRPassTypes {
230  iirALLPASS
232 
233 
234 typedef struct TIIRCoeff {
235  double a0[ARRAY_DIM]; double a1[ARRAY_DIM]; double a2[ARRAY_DIM]; double a3[ARRAY_DIM]; double a4[ARRAY_DIM];
236  double b0[ARRAY_DIM]; double b1[ARRAY_DIM]; double b2[ARRAY_DIM]; double b3[ARRAY_DIM]; double b4[ARRAY_DIM];
239 
240 /*-------------------------------------------------------------------------*/
246 /*-------------------------------------------------------------------------*/
247 typedef enum TFilterPoly {
256  NOT_IIR
258 
259 /*-------------------------------------------------------------------------*/
265 /*-------------------------------------------------------------------------*/
266 typedef struct TIIRFilterParams {
268  double OmegaC;
269  double BW;
270  double dBGain;
271 
274  int NumPoles;
275  double Ripple;
276  double StopBanddB;
277  double Gamma;
279 
280 
281 /*-------------------------------------------------------------------------*/
287 /*-------------------------------------------------------------------------*/
288 typedef struct TIIRFilter{
291  double RegX1[ARRAY_DIM], RegX2[ARRAY_DIM], RegY1[ARRAY_DIM], RegY2[ARRAY_DIM];
292  int flag_one;
294 
295 /*-------------------------------------------------------------------------*/
301 /*-------------------------------------------------------------------------*/
302 typedef struct TIIRFilters{
303  TIIRFilter irrfiler[10];
304  int n;
306 
307 
308 extern void initTIIRFilter(TIIRFilter* iirfiler, TIIRPassTypes types, double cornerFreq, double sampleFreq);
309 
310 extern double IIRFilter(TIIRFilter* iirfiler, double Signal);
311 
312 extern double* IIRFilterZeroPhase(TIIRFilter* iirfiler, double* Signal_in, double* Signal_out, int n);
313 
314 extern void initTIIRFilters(TIIRFilters* iirfilers, TIIRPassTypes types, double cornerFreq, double sampleFreq, int n);
315 
316 extern void IIRFilters(TIIRFilters* iirfilers, double* in, double* out);
317 
318 
319 
320 
321 #ifdef __cplusplus
322 }
323 }
324 #endif
325 
326 
327 #endif /* FILTER_INTERFACE_H_ */
TIIRFilterParams::ProtoType
TFilterPoly ProtoType
如Butterworth, Cheby等等
Definition: filter_interface.h:273
iirALLPASS
@ iirALLPASS
无限脉冲响应全通滤波
Definition: filter_interface.h:230
getKalmanFilterC
double * getKalmanFilterC(double *C, double dt, int m)
getKalmanFilter_out
RMATRIX * getKalmanFilter_out(KalmanFilter *kf)
获取卡尔曼滤波器的输出
BUTTERWORTH
@ BUTTERWORTH
低通滤波
Definition: filter_interface.h:248
IIRFilter
double IIRFilter(TIIRFilter *iirfiler, double Signal)
iirLPF
@ iirLPF
无限脉冲响应低通滤波
Definition: filter_interface.h:226
IIRFilterZeroPhase
double * IIRFilterZeroPhase(TIIRFilter *iirfiler, double *Signal_in, double *Signal_out, int n)
initTIIRFilters
void initTIIRFilters(TIIRFilters *iirfilers, TIIRPassTypes types, double cornerFreq, double sampleFreq, int n)
TIIRFilterParams::BW
double BW
带宽。无限脉冲响应滤波器的3dB带宽用于带通和陷波滤波
Definition: filter_interface.h:269
ONLINEFILTERNUM
#define ONLINEFILTERNUM
滑动均值滤波器数组长度
Definition: filter_interface.h:23
TIIRFilters::n
int n
Definition: filter_interface.h:304
TIIRFilter::IIRCoeff
TIIRCoeff IIRCoeff
Definition: filter_interface.h:290
getKalmanFilterP
double * getKalmanFilterP(double *P, double value, int n)
TIIRFilters
TIIRF数组
Definition: filter_interface.h:302
KalmanFilter_update
RMATRIX * KalmanFilter_update(KalmanFilter *kf, RMATRIX *y)
卡尔曼滤波器参数更新
TIIRFilterParams::Gamma
double Gamma
可调整高斯滤波的过渡带宽系数,-1 <= Gamma <= 1
Definition: filter_interface.h:277
RMATRIX
struct RMATRIX RMATRIX
矩阵的结构体声明
KalmanFilter::CT
RMATRIX CT
Definition: filter_interface.h:106
initTIIRFilter
void initTIIRFilter(TIIRFilter *iirfiler, TIIRPassTypes types, double cornerFreq, double sampleFreq)
MoveAverageFilters
struct MoveAverageFilters MoveAverageFilters
滑动均值滤波
move_average_filter_online
double move_average_filter_online(MoveAverageFilter *maf, double value)
TIIRFilterParams::StopBanddB
double StopBanddB
椭圆滤波和逆切比雪夫的阻带衰减(db)
Definition: filter_interface.h:276
MoveAverageFilter_BUF
#define MoveAverageFilter_BUF
滑动均值滤波的缓冲区大小
Definition: filter_interface.h:24
TIIRFilterParams::Ripple
double Ripple
椭圆滤波和切比雪夫滤波的通带波纹
Definition: filter_interface.h:275
MATRIX_MAX
#define MATRIX_MAX
矩阵最大维度
Definition: filter_interface.h:78
getKalmanFilterA
double * getKalmanFilterA(double *A, double dt, int n)
MoveAverageFilter
struct MoveAverageFilter MoveAverageFilter
滑动均值滤波
MoveAverageFilter::buf_num
int buf_num
滑动均值滤波器数组长度
Definition: filter_interface.h:35
TIIRFilter::IIRFilt
TIIRFilterParams IIRFilt
在IIRFilterCode.h中进行了定义
Definition: filter_interface.h:289
TIIRFilter
TIIRF定义
Definition: filter_interface.h:288
KalmanFilter::n
int n
矩阵尺寸
Definition: filter_interface.h:102
KalmanFilter::x_hat_new
RMATRIX x_hat_new
Definition: filter_interface.h:104
KalmanFilter::dt
double dt
Definition: filter_interface.h:103
INVERSE_CHEBY
@ INVERSE_CHEBY
Definition: filter_interface.h:253
TIIRCoeff::NumSections
int NumSections
Definition: filter_interface.h:237
BESSEL
@ BESSEL
Definition: filter_interface.h:250
KalmanFilter_update1_d1
double * KalmanFilter_update1_d1(KalmanFilter *kf, double *y, double **A, double *filter_state)
getKalmanFilter_out_d
double * getKalmanFilter_out_d(KalmanFilter *kf, double *out)
NOT_IIR
@ NOT_IIR
测试用
Definition: filter_interface.h:256
TIIRFilterParams::OmegaC
double OmegaC
截止频率。无限脉冲响应滤波器的3dB角频率用于低通和高通滤波,中心频率用于带通和陷波滤波
Definition: filter_interface.h:268
TIIRFilterParams::IIRPassType
TIIRPassTypes IIRPassType
定义滤波类型:低通,高通,等等
Definition: filter_interface.h:267
TIIRFilters
struct TIIRFilters TIIRFilters
TIIRF数组
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)
使用指定的矩阵参数来创建卡尔曼滤波器
KalmanFilter::R
RMATRIX R
Definition: filter_interface.h:101
TIIRPassTypes
TIIRPassTypes
多种无限脉冲响应滤波器
Definition: filter_interface.h:225
KalmanFilter_update1
RMATRIX * KalmanFilter_update1(KalmanFilter *kf, RMATRIX *y, RMATRIX *A)
卡尔曼滤波器参数更新
KalmanFilter_update1_d
double * KalmanFilter_update1_d(KalmanFilter *kf, double *y, double *A, double *filter_state)
TIIRFilter
struct TIIRFilter TIIRFilter
TIIRF定义
TIIRFilter::flag_one
int flag_one
Definition: filter_interface.h:292
init_move_average_filter_online
void init_move_average_filter_online(MoveAverageFilter *maf, int buf_num)
创建在线滑动均值滤波器
TIIRFilterParams
struct TIIRFilterParams TIIRFilterParams
TIIRF的参数定义
TIIRCoeff
struct TIIRCoeff TIIRCoeff
TIIRCoeff
Definition: filter_interface.h:234
KalmanFilter
卡尔曼滤波
Definition: filter_interface.h:100
getKalmanFilterR
double * getKalmanFilterR(double *R, double value, int m)
MoveAverageFilter::one_flag
int one_flag
Definition: filter_interface.h:38
ADJUSTABLE
@ ADJUSTABLE
Definition: filter_interface.h:251
MoveAverageFilters
滑动均值滤波
Definition: filter_interface.h:48
CHEBYSHEV
@ CHEBYSHEV
Definition: filter_interface.h:252
MoveAverageFilter::_index
int _index
Definition: filter_interface.h:37
MoveAverageFilters::dof
int dof
Definition: filter_interface.h:50
PAPOULIS
@ PAPOULIS
Definition: filter_interface.h:254
KalmanFilter::tmp1
RMATRIX tmp1
临时变量
Definition: filter_interface.h:108
TIIRFilterParams::dBGain
double dBGain
滤波器的增益
Definition: filter_interface.h:270
getKalmanFilter_state_d
double * getKalmanFilter_state_d(KalmanFilter *kf, double *state)
iirNOTCH
@ iirNOTCH
无限脉冲响应陷波滤波
Definition: filter_interface.h:229
GAUSSIAN
@ GAUSSIAN
低通滤波
Definition: filter_interface.h:249
RMATRIX::col
int col
Definition: filter_interface.h:90
getKalmanFilter_state
RMATRIX * getKalmanFilter_state(KalmanFilter *kf)
获取卡尔曼滤波器的状态
KalmanFilter
struct KalmanFilter KalmanFilter
卡尔曼滤波
IIRFilters
void IIRFilters(TIIRFilters *iirfilers, double *in, double *out)
RMATRIX::row
int row
Definition: filter_interface.h:89
move_average_filter_onlines
void move_average_filter_onlines(MoveAverageFilters *mafs, double *value_in, double *value_out, int _dof)
iirBPF
@ iirBPF
无限脉冲响应带通滤波
Definition: filter_interface.h:228
KalmanFilter_update_d
double * KalmanFilter_update_d(KalmanFilter *kf, double *y, double *filter_state)
ELLIPTIC
@ ELLIPTIC
Definition: filter_interface.h:255
KalmanFilter::y
RMATRIX y
Definition: filter_interface.h:107
iirHPF
@ iirHPF
无限脉冲响应高通滤波
Definition: filter_interface.h:227
TFilterPoly
TFilterPoly
一些可用的滤波器
Definition: filter_interface.h:247
TIIRFilterParams
TIIRF的参数定义
Definition: filter_interface.h:266
init_move_average_filter_onlines
void init_move_average_filter_onlines(MoveAverageFilters *mafs, int buf_num, int _dof)
创建多个在线滑动均值滤波器
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)
使用指定的矩阵参数来创建卡尔曼滤波器
RMATRIX
矩阵的结构体声明
Definition: filter_interface.h:87
ARRAY_DIM
#define ARRAY_DIM
这个参数必须大于等于2*MAX_POLE_COUNT,因为一些滤波器的多项式使用2*NumPoles进行定义
Definition: filter_interface.h:217
MoveAverageFilter
滑动均值滤波
Definition: filter_interface.h:34
TIIRFilterParams::NumPoles
int NumPoles
极点数量*‍/
Definition: filter_interface.h:274
getKalmanFilterQ
double * getKalmanFilterQ(double *Q, double value, int n)
initKalmanFilter
void initKalmanFilter(KalmanFilter *kf, double dt, RMATRIX *A, RMATRIX *C, RMATRIX *Q, RMATRIX *R, RMATRIX *P, RMATRIX *x0)
使用指定的矩阵参数来创建卡尔曼滤波器