12、低通滤波器、陷波滤波器、FTT频率分析工具的初步探索!

前言: 在APM的官方wiki中,其实是建议大家在使用脚本快速调参之前,先对组装好的飞机进行滤波器调参,如下图所示: 就一般的应用场景(遥控器飞行、自动航点飞行)而言,其实使用滤波器的默认参数的也没啥问题。 在一些高机动、高过载的应用场景下...

前言:

在APM的官方wiki中,其实是建议大家在使用脚本快速调参之前,先对组装好的飞机进行滤波器调参,如下图所示:

就一般的应用场景(遥控器飞行、自动航点飞行)而言,其实使用滤波器的默认参数的也没啥问题。

在一些高机动、高过载的应用场景下使用时,调好滤波器的参数会有非常大的性能提升!(如用AP固件飞穿越机、或者用来做高速追踪的应用)

由于滤波器的调参步骤比较复杂,需要配置的参数很多,如果没有调好,反而适得其反!

所以,我反而将滤波器的调参先放到后面,先用快速调参让飞机先平稳起飞,建立信心,然后再深入研究低通滤波器的使用!

滤波器相关调参APM官方wiki链接在此


滤波器的类型

AP固件提供2种软件滤波器来进行噪音的滤波,他们分别是:

1)低通滤波器

2)陷波滤波器

注意:滤波肯定是会增加延迟的,并且也会增加主控芯片的计算量!但是不滤波噪音又大,所以要取舍,在保证降低噪音的同时,尽可能少添加滤波器!


软件滤波器1:陀螺仪低通滤波器

1、低通滤波器的作用:

顾名思义,通过低频信号,将高频信号滤除,只留下飞机的真实姿态信号(也就是无人机机身姿态翻滚、俯仰、偏航的动作变化频率)。

无人机可视为刚体,受自身转动惯量、电机动力响应与机械结构约束,其真实姿态机动变化的有效带宽不会超过 30Hz!这是由无人机本体物理特性决定的固有极限。

因此可以理解为:陀螺仪采集到的高于30Hz的信号都是噪音信号!


2、为什么需要低通滤波器?

其核心原因就是飞控陀螺仪采集到数据,本身就夹带着很多噪音。因为陀螺仪每秒会采样上千次姿态数据(比如 2khz/4khz/8khz),但它收到的信号里,除了飞机的真实姿态变化,还混着大量的 “垃圾噪音”;

比如电机 + 桨叶在高速转速时产生的高频震动、无人机的载荷与机体连接间的震动、陀螺仪芯片本身的电子噪音(比如电路干扰、电源纹波)!

如果飞控直接用这些原始的数据来控制飞机,飞控会误以为飞机在高频抖动,疯狂输出修正指令,导致控制震荡!高频噪声会被放大,甚至导致电机失控、炸机!


3、低通滤波器的截止频率设置参数:

INS_GYRO_FILTER = 20(默认),其含义是低于20Hz的信号通过并进入控制回路,高于20Hz的信号过滤掉!

这个20hz是非常保守的截止频率,基本上首飞能够保证80%的无人机飞行没有问题。

image.png

调大的影响:如将INS_GYRO_FILTER = 60,会让整个控制回路的延迟更低,反应灵敏,但是可能引入噪音,引发无人机抖动,或者电机咔咔响!

调小的影响:如将INS_GYRO_FILTER = 15,那么就可以滤除更多的噪音,但是相位滞后会增大 ,最终 控制响应变慢、姿态偏软、易振荡!


4、低通滤波器的截止频率的上限参考(最大也不要超过150Hz!)

INS_GYRO_FILTER 的值也会在用户进行《根据桨叶与电池电压生成初始PID参数》的时候自动生成,详情请查阅前面的文档!

从MP地面站官方的计算工具来看,有以下参考数值(飞行后再做调整,如果姿态剧烈晃动再调小!)

2.5寸 6S动力的穿越机首飞时,官方建议INS_GYRO_FILTER=134Hz; (建议先降至100)

5寸 6S动力的穿越机首飞时,官方建议INS_GYRO_FILTER=75Hz; (建议先降至60)

7寸 6S动力的穿越机首飞时,官方建议INS_GYRO_FILTER=57Hz; (建议先降至40)

更多的值大家可以自行去调试计算!

image.png

image.png

image.png


5、问题:既然无人机的姿态变化最多只有30Hz,为什么2.5寸穿越机的低通滤波的截止频率竟然可以开到134hz?

这是因为拉高低通不是为了接收更高频姿态,是为了减小滤波带来的相位滞后!提升响应速度!通常大数值的低通滤波器,需要搭配陷波滤波器使用!

对于一般情况下,常见的5/7/10寸桨叶穿越机,在第一次飞行测试时,INS_GYRO_FILTER= 40基本上问题不大,然后根据实际飞行效果进行调整!(如果发现抖动明显就降低,如果姿态平稳可以逐步提升到60)

对于25寸桨叶的无人机,MP地面站计算的INS_GYRO_FILTER= 20,其响应比较缓慢,大家可根据实际飞行后进行逐步增大!


6、低通滤波器的截止频率的原则:

  • 低通滤波器的截止频率越低,增加的延迟就越多。延迟会减缓无人机对陀螺仪数据的反应,从而减慢对控制输入的反应,最坏的情况就是让无人机变得不稳定!!!
  • 因此调试的过程中,要逐步提高低通滤波器的截止频率!既要滤波噪音的同时,又要延迟降低;(需要把握这个平衡度,既要又要)


7、低通率滤波器的截止频率如何设置?

默认INS_GYRO_FILTER = 20是非常保守的截止频率,大于24寸桨叶的无人机AP固件默认都是用的这个频率!但是对于小型机架可能会感觉反应迟缓!

INS_GYRO_FILTER的调试,是一个逐步尝试增大的过程,首次飞行的话,就先用MP地面站自动计算出来的。《根据桨叶与电池电压生成初始PID参数》然后在飞行的过程中逐步的增加!

通常对于平稳飞行的航拍机,较大的机型设置为40-60Hz即可,对于需要暴力飞行的竞速穿越机才需要设置到80-100Hz!



软件滤波器2:陀螺仪陷波滤波器

1、陷波滤波器的作用:

它是一种中心频率随电机转速动态变化的窄带滤波器,是专门为了解决无人机电机转动时的震动噪声而设计的,和低通滤波器是互补关系!

陷波滤波器它会实时跟踪电机的基频(Fundamental)和倍频(Harmonics),在这些特定频率点上,对特定频率的波峰做滤波,精准衰减震动能量.对于其他频率的信号几乎不受影响!

简单理解为在众多噪声中精准消除某个特定频率的噪声!

在AP固件中,动态陷波滤波器在调试的过程中,需要先设置好日志记录数据,然后将日志上传到在线网页工具FilterReview进行分析调试!


2、使用陷波滤波器的前提

1)飞控固件的需要支持双向Dshot,并且在刷写固件后设置相应的电调回传参数。飞控最好是H7的!有些飞控厂家是没有编译支持双向Dshot的固件,因此就无法使用转速陷波滤波器。

WFG100飞控编译有支持双向Dshot固件,详情请参阅文档《使用AM32电调时,飞控双向Dshot如何设置?》


2)必须要使用带有转速回传的电调:一般是性价比较高的AM32/BL32或者是带有转速回传的CAN电调!(AM32电调可使用物唯的W860电调

3)开启并设置与陷波滤波器相关的日志参数,也就是要采集IMU的更多原始数据。如下:

  • 通常情况下如果我们只用主IMU即可 ,因此只需要勾选IMU1

image.png


  • INS_FAST_SAMPLE= 3,此处我选择对2个IMU进行处理,大家可按需选择!

image.png


  • INS_LOG_BAT_OPT = 5,勾选此处后通过网页分析IMU的 数据才会显示滤波前和滤波后的数据,当我们把滤波器调试完毕后记得关闭!否则日志量会很大!

image.png


陀螺仪的采样速率参数INS_GYRO_RATE进行选择,如果是42688等IMU可以选到8K,如果是一般的国产IMU那么选择2K即可!

image.png





3、陷波滤波器的核心参数

通过参数INS_HNTCH_ENABLE =1 开启陷波滤波器,开启后要重启,相关的参数才会显示出来!

刷新后,相关参数才会显示出来,如下:

image.png


4、核心工作原理:

对于多旋翼无人机来说,它的最大的高频噪声来源就是电机转动时自身的震动、螺旋桨切割空气时的谐波震动,以及一些机架自身的震动!

AP固件里面的陷波滤波器就是对电机的基频、2倍频、3倍频.....一直到16倍频的特定频率进行滤波,它通过参数INS_HNTCH_HMNCS进行选择。

默认是对:电机的基频 + 2倍频进行陷波滤波!即默认INS_HNTCH_HMNCS = 3

对于大部分无人机,搭配低通滤波器,INS_HNTCH_HMNCS = 7,对电机的1 次谐波(1阶噪声)   + 2次谐波 (2阶噪声)  +  3次谐波(3阶噪声) 即可滤除干净!

image.png

从上图中可以看到,能够对1倍电机基础频率噪声  - 16倍基频噪声进行滤波!

1 次谐波(或叫1阶噪声):就是电机机械旋转不平衡而产生的噪音,通过电调回传的悬停平均转速➗60可以得出!(也就是电机的基频,比如本人7寸机的电机基频在135Hz左右)

2次谐波(或叫2阶噪声):2叶桨的震动频率就会明显集中在此处!

3次谐波(或叫3阶噪声):3叶桨的震动频率就会明显集中在此处!

.....

16次谐波(或叫16阶噪声)

上述这种震动峰随油门/电机转速的变化而移动,固定频率的陷波很难覆盖全油门范围,动态陷波就能专门对特定频率进行滤波,并且不影响其他频率,所以完美解决这个问题。



前面提到的电机的基频噪声,如何计算?

在2026年,带转速回传的电调非常成熟且便宜;

要有较好的陷波滤波效果,一定要使用转速回传的电调!(早期的方法是通过油门或FFT快速傅里叶变换进行电机基频确认,这个并不准)

image.png

悬停个30秒后,可以通过飞行日志获取4个电机的平均转速,如下日志所示:

本人的4个电机的平均转速 = (7738+7456+8267+8598) /4 =  8015转;本人电机的基频 = 8015转 /60  约等于 133Hz。

image.png


但其实电机的基频不需要我们自己计算,可以通过MP地面站的FFT功能获取,如下所示:(后续会详细进行讲解)

image.png



5、陷波滤波器不能随意多开!

虽说一组陷波滤波器,可以勾选1~16阶的噪声对其进行滤波! 根据AP的官方wiki介绍,启用过多的滤波器会导致 CPU 周期耗尽,并产生不可预测的结果。

在STM32H7的主控中启用3个谐波滤波(同时对1阶、2阶、3阶噪声进行滤波)是安全的。

在开启ESC 转速跟踪模式下,也就是INS_HNTCH_MODE = 3,每个电机都会获得一套完整的谐波陷波滤波器;

  • 假设机体是4旋翼,然后开启2次谐波(2阶噪声),也就是INS_HNTCH_HMNCS = 3(开启1阶+2阶噪声滤波),那么在Ardupilot软件里面就会开启4轴 * 2 = 8个陷波滤波器
  • 假设机体是8旋翼,然后开启3次谐波(2阶噪声),也就是INS_HNTCH_HMNCS = 7(开启1阶+2阶+3阶噪声滤波),那么在Ardupilot软件里面就会开启8轴 * 3 = 24个陷波滤波器

电机噪声主要就集中在1阶电机基频噪声、2阶噪声、3阶噪声!再往后的高频噪声基本上都被前面提到的低通滤波器滤掉了!

通常情况下我们对1阶噪声、2阶噪声进行滤波即可满足使用需求!对于大机架、重载、多旋翼、动平衡较差的电机或高 KV的电机,才需要开3 阶谐波滤波!



6、对每阶噪声又开启双重陷波/三重陷波叠加

前面已介绍过AP固件里面的陷波滤波器就是对电机的基频、2倍频、3倍频.....一直到16倍频的特定频率进行滤波,它通过参数INS_HNTCH_HMNCS = 3(开启1阶+2阶噪声滤波)INS_HNTCH_HMNCS = 7(开启1阶+2阶+3阶噪声滤波)进行多阶滤波!

但是针对一些对于大型飞行器,电机噪声特性较为复杂,覆盖的频率范围比单个陷波滤波器所能覆盖的范围更广;

为了解决这种,电机噪声频谱宽,单个陷波滤不干净的问题,AP固件可以通过参数INS_HNTCH_OPTS开启2重陷波叠加或者3重陷波叠加,如下图所示可勾选2重或3重。

image.png

注意:根据官方的描述,现在更建议开启3重陷波叠加,不建议开启2重!双陷波的最大衰减位于中心频率两侧,因此对于峰值非常明显的小型飞机来说,使用双陷波通常会适得其反。


可能很多朋友可能到此处还是无法理解,1阶2阶3阶滤波和这个多重滤波关系,此处再做进一步举个例子:

  • 大型无人机电机噪声中心在 150Hz,但实际分布在 125Hz-185Hz 之间,单陷波只能把 150Hz 压下去,130Hz、180Hz 的噪声还在,姿态依然会抖。

此时我们也可以通过参数INS_HNTCH_BW将带宽调大,比如可以将带宽调为左右各40HzINS_HNTCH_BW = 40 HZ去压制,但是带宽拉太宽,会误伤有用姿态信号,引入相位滞后、姿态变肉。此外带宽的也不能无限加大,最大建议只能到中心频率的1/4!

因此不是上策,我们通常是希望带宽的频率越低越好,因为陷波滤波器就是要精准的将某个特定的高频频率打下!

  • 如果采用双重陷波或三重陷波叠加,它会在一个中心频率,偏移一点点生成两个相邻的陷波,叠加后带宽变宽,覆盖更大的频率范围。
  • 对于小型穿越机,通常不需要开启双重陷波/三重陷波的叠加。大型多旋翼(比如八轴、六轴)噪声峰宽,再考虑双 / 三陷波


7、对陷波滤波器的几个关键参数进行调整

image.png


针对参数 INS_HNTCH_OPTS,以下两处打勾的必选,使能所有IMU以及开启三重滤波叠加,可根据实际情况勾选,勾越多,CUP的计算量越多!(不过H7主控同时勾选4个都是没有问题的!)

image.png



8、初识IMU频谱图

如下图所示,是本人7寸穿越机、1300KV电机、4S电池、3叶桨的无人机,在首次飞行30秒左右的IMU频率图!越红的区域代表振动强度越强!

(具体怎么查看频谱图,会在后续章节详细讲解)

image.png

image.png

image.png


9、是否需要对其他倍频的噪音进行滤波?

通过下左图可以看到在除了基频135Hz有明显的红线外,几乎从400Hz到1200Hz都还有明显的红线。前面我们又说了陷波滤波器建议小于3个么,还有那么多频率的噪音怎么办?

这是因为,频谱图默认是选在Pre-filter选项中,查看的是,没有开启任何滤波器的原始数据。

查看下右图,点击Post-filter选项,查看开启低通滤波器的数据,此时就可以看到从400Hz到1200Hz震动明显被削弱,振幅都低于-50dB了,已经可接受了!

image.png


10、如何查看陷波滤波器设置的良好?

1)当调整相关参数后,并飞行后,其Post-filter的振幅低于 -50db,视为可以接收!

image.png


2)打开IMU频谱图,查看陷波滤波器是否能够稳定的追踪特定的噪音频率?

image.png


关于FFT频率分析工具

  • 上文陷波滤波器提到的所有内容,都是默认一个前提:电调能够回传电机的转速,也就是通过电机转速,来驱动陷波滤波器工作。因为转速跟噪声频率是有对应关系的!

用户可以选择陷波滤波器的动态频率跟踪模式,将参数INS_HNTCH_MODE =3 ,这样便可以实时跟踪电机的转速,做动态陷波滤波!

image.png


  • 如果用户使用的是老式的PWM电调,通常不具备转速回传的功能,那么没有电机转速回传如何做陷波滤波?就需要先使用FFT(对IMU的原始数据做快速傅里叶变换)
  • FFT它的原理是:在陀螺仪工作状态中,取512个点或1024个点的原始数据,然后利用这些数据在内部进行数学计算,从而确定噪声具体在哪个峰值、峰值在哪里 ?这种办法相比于用电机转速获取的噪声数据慢且精度较低。
  • 因此FFT更适合用来确定未知频率的噪声,比如用来探测机架的共振频率,但是它很吃CPU的频率!


  • 如果没有转速回传,那么可以用动态FFT来驱动陷波滤波器!(但建议FFT最好只是用来做机架共振处理,而不是做对电机做陷波滤波处理!),FFT具体的关键参数设置如下:

1)FFT开启:FFT_ENABLE = 1 ,默认 =0关闭,开启后重启飞控,相关FFT参数就会被刷新出来!

2)陷波滤波器的开启:INS_HNTCH_ENABLE = 1, 默认 =0关闭,开启后重启飞控,相关陷波滤波器参数就会被刷新出来!

3)陷波滤波器的动态频率跟踪模式选择:INS_HNTCH_MODE = 4 , 此处区别于有转速回传的电调,采用FFT分析的噪声数据,来驱动陷波滤波器!

4)设置FFT的最大频率:通过参数FFT_MAXHZ进行设置!FFT的最大频率(估算) = 0.8 ✖ 满电电压 ✖ 电机KV值➗ 60  

5)设置FFT的最低频率:通过参数FFT_MINHZ进行设置!FFT的最小频率(估算) =500➗ 螺旋桨直径(英寸)  

6)设置FFT的采样刻度:通过参数FFT_WINDOW_SIZE进行设置!在H7飞控,至少请将FFT_WINDOW_SIZE = 512;频率分辨率(越低越好)  =  陀螺仪采样频率 FFT_WINDOW_SIZE

如果陀螺仪的采样频率能够开到1K/2K,请将FFT_WINDOW_SIZE = 1024(1K采样率下)  或   2048(2K采样率下)


FFT用法1: 机架共振处理

(不是每台飞机都有机架的共振频率,只有确定有机架共振频率后,才需要去处理!  机架的 共振频率是一个明显不同于电机基频率的峰值,也不是基频的倍数!)

假设我们的电调可以回传转速,并且已配置好了通过电机转速驱动陷波滤波器!

此时我们可以使用FFT来驱动第二组陷波滤波器,因为第一组的陷波滤波器由电机转速驱动。

1)FFT开启:FFT_ENABLE = 1 ,默认 =0关闭,开启后重启飞控,相关FFT参数就会被刷新出来!

2)陷波滤波器的开启:INS_HNTC2_ENABLE = 1, 默认 =0关闭,开启后重启飞控,相关陷波滤波器参数就会被刷新出来!

3)陷波滤波器2的动态频率跟踪模式选择:INS_HNTC2_MODE = 4 , 陷波滤波器1已配置为转速驱动!

4)设置FFT的最大频率:通过参数FFT_MAXHZ进行设置!FFT的最大频率 应该稍大于机架的共振频率

5)设置FFT的最低频率:通过参数FFT_MINHZ进行设置!FFT的最小频率 应该稍小于机架的共振频率

6)设置FFT的多帧结果去做平均,FFT_NUM_FRAMES = 0 ~ 3,默认是 = 0,不做平均!平均后的噪声、跳变会大幅减少,频率更稳!代价则是多帧平均 后 反应变慢。

FFT_NUM_FRAMES = n,就是用n次的数据去做平均!默认  =0 适合油门快速变化的穿越机,1~3适合大部分悬停居多的无人机,设置为4  ~ 5适合大型机,再高就不建议了 !

7)设置FFT的采样刻度:通过参数FFT_WINDOW_SIZE进行设置!在H7飞控,至少请将FFT_WINDOW_SIZE = 512;频率分辨率(越低越好)  =  陀螺仪采样频率 FFT_WINDOW_SIZE

8)FFT_OPTIONS = 1

9)INS_HNTC2_FREQ = FFT_MINHZ

10) INS_HNTC2_BW=INS_HNTC2_FREQ / 2(根据实际情况再/3或/4)
11)
INS_HNTC2_REF = 1

12) INS_HNTC2_FM_RAT = 1

13) INS_HNTC2_HMNCS = 1

14)INS_HNTC2_OPTS = 0机架共振一般无需开启多源;如果发现共振还有多个不同的频率,那么还可以开启多源,即INS_HNTC2_OPTS = 2



FFT用法2: 在没有电调回传的情况下,使用FFT驱动陷波滤波器1

1)FFT开启:FFT_ENABLE = 1 ,默认 =0关闭,开启后重启飞控,相关FFT参数就会被刷新出来!

2)陷波滤波器的开启:INS_HNTCH_ENABLE = 1, 默认 =0关闭,开启后重启飞控,相关陷波滤波器参数就会被刷新出来!

3)陷波滤波器的动态频率跟踪模式选择:INS_HNTCH_MODE = 4 , 此处区别于有转速回传的电调,采用FFT分析的噪声数据,来驱动陷波滤波器!

4)设置FFT的最大频率:通过参数FFT_MAXHZ进行设置!FFT的最大频率(估算) = (0.8 ✖ 满电电压 ✖ 电机KV值)➗ 60  

5)设置FFT的最低频率:通过参数FFT_MINHZ进行设置,首次起飞时FFT的最小频率  = 500➗ 螺旋桨直径(英寸);当飞行1个架次后通过日志查看从0推油门时,电机的噪音以什么频率开始出现!  

6)FFT_NUM_FRAMES = 0

7)FFT_OPTIONS = 1

8)设置FFT的采样刻度:通过参数FFT_WINDOW_SIZE进行设置!在H7飞控,至少请将FFT_WINDOW_SIZE = 512;频率分辨率(越低越好)  =  陀螺仪采样频率 FFT_WINDOW_SIZE

如果陀螺仪的采样频率能够开到1K,请将FFT_WINDOW_SIZE = 1024

如果陀螺仪的采样频率能够开到2K,请将FFT_WINDOW_SIZE = 2048


9)INS_HNTCH_FREQ = FFT_MINHZ

10) INS_HNTCH_BW=INS_HNTCH_FREQ / 2 (根据实际情况再/3或/4)
11)
INS_HNTCH_REF = 1

12) INS_HNTCH_FM_RAT = 1

13) INS_HNTCH_HMNCS = 7







相关文档