记录一下学习数字滤波器时的碎碎念

只是卡尔曼滤波而已说的这么高级

先是基础的低通/高通滤波

模电中A=Vout/Vin

控制器看到的从来不是“真实速度”,而是经过传感器、采样、量化和滤波之后的速度估计。 估得不准,PID 再漂亮也只能围着一个不可靠的数字打转。

通带,阻带,过渡带
低通,高通,带通,带阻

放弃了我(https://www.bilibili.com/video/BV1Rh41117MT/)
(卡尔曼滤波): 666还有状态方程观测方程,还有现控
当前观测值 先验估计值(~上一次最优估计值) -> 最优估计值
卡尔曼增益

在实际开发(如无人机、两轮自平衡车、机器人)中,单靠卡尔曼滤波是不够的,通常采用组合拳:
• 上电静态校准(Static Calibration):在设备刚开机、保持绝对静止的几秒钟内,连续采集几百个陀螺仪数据求平均值,作为系统的初始零漂直接扣除。
• 硬件导热/恒温:尽量让 IMU 芯片远离发热源,或者进行软件温度补偿。
• 算法选择:
• 在算力有限的嵌入式芯片(如 STM32)上,经典的扩展卡尔曼滤波(EKF)或简化版的互补滤波(Complementary Filter)/ 互补卡尔曼更常用。
• 在现代高性能系统中,互补滤波(如马哈尼 Mahony 或马奇尼 Madgwick 算法)由于计算量小且对零漂有不错的抑制效果,有时比标准卡尔曼滤波更受欢迎。

就是因为不知道噪声,所以才用卡尔曼来修正,如果知道噪声,就不用修正啦

数据-传感器-滤波器-控制器(pid, lqr, mpc)(微机或者电脑计算)-执行单元(电机/液压系统)-机械结构

两种临界区:
硬件:

uint32_t saved = __get_PRIMASK(); // 保存原状态
__disable_irq();
// doing something
__set_PRIMASK(saved);

// 裸机任务表的任务函数内是可以用硬件临界区的

软件: (主要是线程啥啥的)

std::mutex mtx;
mtx.lock();
// doing something
mtx.unlock()

// or 
std::lock_guard<std::mutex> guard(mtx); // 作用域在当前锁所在的大括号内(RAII)
posted @ 2026-10-20 18:58  绿帽子玩家  阅读(3)  评论(0)    收藏  举报