一阶互补滤波
void DEVICE_INFO::TX_updata(){
//使用一阶互补滤波算法
static u16 bre_i=0;
static u16 bre_ii=0;
static u16 bre_v=0;
static u16 bre_vv=0;
u16 adci,adcv;
unsigned char r_buff;
//TX电流
adci=Get_Adc_Average(ADC_CH11,10); //此处有10次平均滤波
adci=(adci*3300)/4096;
//TX_electricity=adci;
//电压
adcv=Get_Adc_Average(ADC_CH10,10);
adcv=(adcv*3300)/4096;
//TX_voltage=adcv;
//说明一下 0.92和0.08是权值 ,0.000001是处理周期,我这里处理比较快,单位是s
TX_electricity=0.92*(TX_electricity-bre_i*0.000001)+0.08*bre_ii;
TX_voltage=0.92*(TX_voltage-bre_v*0.000001)+0.08*bre_vv;
bre_ii=bre_i; //保存上次值
bre_i=adci; //保存本次值
bre_vv=bre_v;
bre_v=adcv; //保存本次值
}
一阶互补滤波是用在什么场合的? 合理设置滤波器的初始状态,以避免启动时的瞬态效应。 若数据范围大,可采用定点运算或多次移位截断。 在嵌入式系统中,代码的执行效率非常重要。可以通过优化代码结构、减少不必要的计算来提高滤波器的实时性。 偏差累积、抖动过大或响应滞后。 采样率过低会导致滤波性能下降,需根据应用场景选择合适速率。 在整数运算中,检查溢出和下溢情况,确保数值稳定性。 传感器噪声抑制:如加速度计、陀螺仪的高频噪声。
信号平滑:去除随机抖动,保留有效信号趋势。 τ 较大:滤波更平滑,动态响应慢,适合稳态场景。
τ 较小:动态响应快,但可能引入高频噪声,适合快速运动场景。 采样频率应足够高,以捕捉快速变化的信号。较高的采样频率可以提高滤波器的响应速度,但也会增加计算负担。 长时间迭代可能因浮点精度误差累积导致漂移 互补滤波是将加速度计和陀螺仪的数据进行融合,以获得更准确的角度。加速度计在静止时较为准确,而陀螺仪在动态时较为准确。 优化算法以提高计算效率,确保滤波器能够在实时系统中快速响应。
页:
[1]