105 lines
1.8 KiB
C
105 lines
1.8 KiB
C
![]() |
/*
|
||
|
各类滤波器。
|
||
|
*/
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#include "user_math.h"
|
||
|
|
||
|
/* 二阶低通滤波器 */
|
||
|
typedef struct {
|
||
|
float cutoff_freq; /* 截止频率 */
|
||
|
|
||
|
float a1;
|
||
|
float a2;
|
||
|
|
||
|
float b0;
|
||
|
float b1;
|
||
|
float b2;
|
||
|
|
||
|
float delay_element_1;
|
||
|
float delay_element_2;
|
||
|
|
||
|
} LowPassFilter2p_t;
|
||
|
|
||
|
/* 带阻滤波器 */
|
||
|
typedef struct {
|
||
|
float notch_freq; /* 阻止频率 */
|
||
|
float bandwidth; /* 带宽 */
|
||
|
|
||
|
float a1;
|
||
|
float a2;
|
||
|
|
||
|
float b0;
|
||
|
float b1;
|
||
|
float b2;
|
||
|
float delay_element_1;
|
||
|
float delay_element_2;
|
||
|
|
||
|
} NotchFilter_t;
|
||
|
|
||
|
/**
|
||
|
* @brief 初始化滤波器
|
||
|
*
|
||
|
* @param f 滤波器
|
||
|
* @param sample_freq 采样频率
|
||
|
* @param cutoff_freq 截止频率
|
||
|
*/
|
||
|
void LowPassFilter2p_Init(LowPassFilter2p_t *f, float sample_freq,
|
||
|
float cutoff_freq);
|
||
|
|
||
|
/**
|
||
|
* @brief 施加一次滤波计算
|
||
|
*
|
||
|
* @param f 滤波器
|
||
|
* @param sample 采样的值
|
||
|
* @return float 滤波后的值
|
||
|
*/
|
||
|
float LowPassFilter2p_Apply(LowPassFilter2p_t *f, float sample);
|
||
|
|
||
|
/**
|
||
|
* @brief 重置滤波器
|
||
|
*
|
||
|
* @param f 滤波器
|
||
|
* @param sample 采样的值
|
||
|
* @return float 滤波后的值
|
||
|
*/
|
||
|
float LowPassFilter2p_Reset(LowPassFilter2p_t *f, float sample);
|
||
|
|
||
|
/**
|
||
|
* @brief 初始化滤波器
|
||
|
*
|
||
|
* @param f 滤波器
|
||
|
* @param sample_freq 采样频率
|
||
|
* @param notch_freq 中心频率
|
||
|
* @param bandwidth 带宽
|
||
|
*/
|
||
|
void NotchFilter_Init(NotchFilter_t *f, float sample_freq, float notch_freq,
|
||
|
float bandwidth);
|
||
|
|
||
|
/**
|
||
|
* @brief 施加一次滤波计算
|
||
|
*
|
||
|
* @param f 滤波器
|
||
|
* @param sample 采样的值
|
||
|
* @return float 滤波后的值
|
||
|
*/
|
||
|
float NotchFilter_Apply(NotchFilter_t *f, float sample);
|
||
|
|
||
|
/**
|
||
|
* @brief 重置滤波器
|
||
|
*
|
||
|
* @param f 滤波器
|
||
|
* @param sample 采样的值
|
||
|
* @return float 滤波后的值
|
||
|
*/
|
||
|
float NotchFilter_Reset(NotchFilter_t *f, float sample);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|