☰
EKF多源融合导航:IMU/GPS/磁力计/气压计组合导航实践
2026/10/21 9:36:46 网站建设 项目流程

1. 项目概述:EKF在INS多源融合中的地位与目标

导航解算,尤其是无人机、自动驾驶、移动机器人、行人导航这类场景,从来不是一个传感器就能搞定的事情。我在实际工程里看到最多的组合就是:以惯性导航系统(INS)为核心骨架,用扩展卡尔曼滤波(EKF)把IMU、GPS、磁力计、气压计的数据揉在一起,做成一套连续、稳定、可用的位置速度姿态输出。这套思路不受GPS遮挡影响太深,又不像纯惯导那样几分钟就漂得没法看,最重要的是工程上完全可行,代码量和调试成本都在可控范围内。

很多人刚接触EKF的时候,第一反应是“卡尔曼滤波我懂,扩展卡尔曼就是把非线性线性化吧”。话是没错,但真到了写INS融合代码的时候,你会发现麻烦全在细节里:状态向量怎么定、IMU的输出是角速度和加速度,不是姿态和速度,怎么推成状态预测?磁力计拿到的是地磁矢量,怎么转成航向?GPS给的是经纬高,怎么进笛卡尔坐标系?气压计受天气影响那么大,怎么给它分配权重??还有传感器时间戳不同步、坐标系定义不一致、初始姿态不确定等等。这些坑不踩一遍,光看书上那几十行公式,根本写不出能上机的代码。

这个项目要解决的就是这些实际问题。它把IMU(陀螺+加速度计)、GPS、磁力计、气压计四类传感器,通过一个EKF框架完成数据融合导航解算,最终输出连续的导航参数。代码用Matlab实现,适合做这几件事的人群:一是刚接触组合导航、想理清EKF在INS里到底怎么用的学生或开发新人;二是手头有传感器数据、想要一个可复现的多源融合参考实现的工程师;三是做算法验证、需要快速对比不同观测模型和噪声参数效果的研发人员。

我后面讲的内容,不会只贴公式,也不会只放代码。我会把为什么这么设计状态量、为什么用这种观测模型、参数调的时候到底在调什么、代码跑到一半报错怎么查,这些我在实际项目中反复推敲过的东西一并讲清楚。你如果只是想要一个能跑的Matlab脚本,照着抄也能跑,但真正把它改成你自己的IMU型号、你自己的GPS输出频率、你自己的应用场景,这篇内容里讲的那些“为什么”才值钱。

2. 整体设计拆解:为什么EKF足以支撑INS多源融合

2.1 纯惯导为什么需要融合其他传感器:误差累积的本质

先想一个问题:IMU直接输出的是载体坐标系下的角速度和比力,前者是转动的快慢,后者是感受到的加速度(含重力)。要得到姿态、速度、位置,你得做积分。陀螺零偏哪怕只有0.01度每秒,一分钟积分下来姿态误差就有0.6度,半小时就是18度;加速度计零偏哪怕只有1毫克(0.01米每二次方秒),积分一分钟速度误差0.6米每秒,位置误差18米,五分钟位置误差就到了450米这个量级。这不是算法差,这是物理规律,误差随时间无条件累积。

所以要引入外部辅助信息。GPS给出绝对位置和速度,用它的更新率低但有界误差来约束惯导的高频但发散的积分误差;磁力计给出航向的绝对约束,用来消除偏航角上的长期漂移;气压计给出高度上的绝对参考,用来阻止高度通道的积分发散。四者组合起来,就是高频连续+低频绝对的关系,由EKF负责把它们在统计意义上融合成一套状态估计。

这里有个容易误解的点:融合不是简单的“切换”。不是GPS好了用GPS、GPS差了用INS,而是两者在滤波器中按照各自的噪声特性进行加权。GPS噪声大,位置误差的协方差就大,滤波器会自然偏向INS预测;INS漂移了一段时间,预测协方差膨胀,GPS到来时又会给出较大的修正量。这才是卡尔曼滤波的实质:先推一步,再量一步,按不确定度加权,让输出永远是“当前最优的线性组合”。

2.2 EKF相比线性卡尔曼滤波的区别:为什么状态方程是非线性的

经典的线性卡尔曼滤波要求状态转移和观测都是线性的,即x(k)=Ax(k-1)+Bu+w,z=Hx+v。但我们手里的状态如果是姿态、速度、位置,状态转移里包含姿态旋转矩阵,那是三角函数构成的非线性关系;而GPS观测到的经纬度和笛卡尔坐标位置之间也是投影关系,同样非线性。硬套线性卡尔曼,模型的误差会把滤波器本身搞崩——不是精度差的问题,是可能发散到NaN。

EKF的做法是:每一步在当前的估计值附近做一阶泰勒展开,也就是求雅可比矩阵,将非线性系统在当前点线性化,近似成线性模型,然后继续走标准卡尔曼的时间更新和量测更新框架。代价是,如果初始误差太大,线性化点在真值附近这个前提就失效,滤波器会发散,所以EKF对初始姿态标定和粗对准有一定要求;收益是,工程实现成熟、计算量适中、对大多数导航场景精度足够。

我个人的经验是,EKF在IMU、GPS、磁力计、气压计这个量级的融合里,精度和复杂度之间的平衡是最好的。比它更简单的互补滤波或带通加权,处理不了姿态、速度、位置三者之间的交叉耦合;比它更复杂的容积卡尔曼或粒子滤波,在这类应用里提升有限,还要面对更多的调参难题和计算开销。你不需要一上来就追求最前沿,工程上先让系统稳定工作起来,比什么都重要。

2.3 状态向量与观测向量的关系:不同类型传感器信息如何映射

这个项目采用的状态向量,通常包含姿态误差(或直接姿态四元数)、速度误差(或速度)、位置误差(或位置)、以及IMU的陀螺零偏和加速度计零偏。这样设计的核心思想是“将惯性误差和传感器误差一起估计”,因为IMU的零偏在系统中是不可直接测量的状态,但它对导航精度影响巨大,如果滤波器能把它们在线估计出来并反馈补偿,导航结果会显著改善。

观测向量方面,GPS提供位置和速度(经纬高、地速方向),磁力计提供姿态相关的航向(来自地磁矢量方向),气压计提供高度。EKF的量测更新过程,本质上是比较真实观测量和由当前状态“预测出的观测量之间的差异”,再用这个差异反推状态修正量。GPS观测方程里,经纬度通过坐标变换预测;磁力计观测方程里,当地磁参考矢量旋转到载体坐标系再来比较;气压计观测则直接映射到高度状态。这里最需要注意的是坐标系:所有方程、所有矩阵必须建立在同一个坐标系前提下(本项目用的是当地切平面坐标系ENU),否则滤波器会在不存在的误差里来回修正,很快就发散。

3. 核心公式与关键步骤:EKF在INS中必须吃透的几个环节

3.1 解算流程总览:五个方程 + 两套更新

EKF的核心公式,记住下面这套就行。预测:

状态先验估计x(k|k-1) = f(x(k-1|k-1)),即把上一时刻最优状态代入航迹推算。

误差协方差先验P(k|k-1) = F P(k-1|k-1) F转置 + Q。F是状态转移雅可比,Q是过程噪声协方差。

校正(每一类观测过来都做一次或批量做一次):

卡尔曼增益K(k) = P(k|k-1) H转置 (H P(k|k-1) H转置 + R)逆。H是观测雅可比,R是观测噪声协方差。

状态后验x(k|k) = x(k|k-1) + K(k) (z(k) - h(x(k|k-1)))。其中z是传感器实际读数,h是预测观测。

协方差更新P(k|k) = (I - K(k) H) P(k|k-1)。

反映到INS里,IMU是驱动预测的主角,频率最高,通常是100Hz到400Hz;GPS、磁力计、气压计是校正源,频率低一些,各自按自己的频率进入量测更新。Matlab代码里面,一般用一个大循环模拟时间推进,每次循环先看是否到IMU时间戳,到了就做一次预测;再看是否到GPS时间戳,到了就做一次GPS量测更新;磁力计和气压计同理。这样异步触发的方式比固定周期全部更新要贴近实际传感器输出,代码也更清晰。

3.2 状态预测:四元数还是欧拉角?IMU数据如何推状态

姿态表示选四元数,这是我从项目经验里强烈推荐的方式。理由很简单:欧拉角在俯仰接近90度时会遇到万向锁,而且在附近数值变化极快,线性化误差大;四元数没有奇异点,运算只是四元数乘法,雅可比也好推导。虽然四元数的约束(模长等于1)在标准EKF中不会被严格维持,但工程上初始化和常规运行误差下影响不大,真要出问题可以加上模长归一化或乘性误差四元数处理。

IMU的频率高,预测时要在两个测量时刻之间做离散化更新。角增量直接乘到四元数上,速度增量要减去重力,再旋转到导航系累加。这里有个细节:加速度计测的是比力,不是载体真正的加速度。也就是说,静置在桌面上时,加速度计读数是向上一个g(抵消重力),不是0。如果不先扣除重力项,速度积分一秒就会产生约9.8米每秒的错误速度,位置直接飞掉。这一点新手最常见的问题,我在代码里注释会特别标出来。

状态转移雅可比F的推导,推完要检查两项性质:一是单位一致性,所有状态变量的单位在同一个体系内,避免数值量级差过大影响矩阵求逆;二是收敛性,做一个静态场景仿真,如果滤波器对一个小初始偏差能收敛,说明F和H至少没有方向性错误。

3.3 量测更新:GPS的经纬高及速度观测方程

GPS通常输出经纬度和海拔、东北天速度。位置观测要先把状态里的位置误差(或位置)从当地笛卡尔坐标转换成经纬度。在ENU坐标系下,经度误差等于东向位置误差除以(地球子午圈半径乘以纬度余弦),纬度误差等于北向位置误差除以地球子午圈半径。这里北美和国内习惯用WGS84坐标,要确保GPS数据来源和坐标基准一致,否则会有系统偏差。

速度观测就比较简单,GPS输出的东北天速度直接和状态里的速度分量比较即可。需要注意,GPS速度是相对于地面的水平速度,高度方向速度通常也有输出,但噪声偏大,可以给它一个较大的R值,也可以不参与融合,看应用需求。

GPS还有一个工程问题:跳变点和粗差。城市环境下多径效应会让GPS位置突然跳变几十米,如果不做异常检测,一个跳变点就能毁掉整个滤波器。常用的方法是新息卡方检验:计算出量测新息(真实观测减预测观测),以其马氏距离判断是否超过阈值,超了就把这次观测权重视为0,直接舍弃。这个机制在导航融合里非常有用,代码建议一开始就加上。

3.4 量测更新:磁力计航向修正的坐标映射陷阱

磁力计测的是载体坐标系下的地磁分量,它本身不是直接航向。要得到航向,传统做法是先通过姿态矩阵把磁力计读数旋转到水平面,再求反正切得到磁航向。但在EKF里更推荐直接用磁力计原始矢量和地磁场参考矢量做观测,不用中间转换,因为反正切转换会引入非线性截断和象限判断问题,而且丢失了磁场强度信息,只保留方向信息。

具体做法是:知道当地地磁场矢量在当地导航系下的分量(需要查表或实测校准,包括磁偏角补偿),用当前姿态把它旋转到载体坐标系,作为预测观测。和实际磁力计读数比较,新息就隐含了姿态误差信息,再由卡尔曼增益映射到姿态状态修正量。我做过一个对比,用原始矢量观测比用反正切航向观测,在动态场景尤其是倾斜姿态下,收敛性和稳定性好很多。

磁力计的硬铁和软铁校准必须做。硬铁是传感器放大器和电路里的固定偏置,相当于读数的直流偏置,不做校准会导致航向误差随姿态变化;软铁是周围金属件对磁场的扭曲,会随方向改变比例。Matlab代码里可以先用椭球拟合校准算法离线算好三轴偏移和缩放矩阵,也可以在标定环境下旋转传感器采集够数据后算。千万别跳过这步,否则上面的滤波器设计得再漂亮,航向输出也始终不准。

3.5 量测更新:气压计高度融合的噪声特征与补偿

气压计测的是绝对气压,通过标准大气模型换算成海拔高度。但气压和海拔在很多实际环境里并不是单纯一一对应——天气变化、门窗开关、风流扰动、平台下洗气流都会影响气压,换算出来的高度可能是几十米的偏差。跟GPS高度对比时,一定要做好两种高度基准的统一:如果GPS高度用的是椭球高,气压高度用的是海拔高,两者之间差一个大地水准面差距,在高精度应用中要处理这个问题。

在EKF里面处理气压计,我的做法是把它作为高度通道的观测,单独分配R值,并且只在气压变化相对稳定时接入。比如GPS高度有效且速度低、气压变化率不高时,继续融合气压;气压突变明显或无人机起降阶段,暂时跳过气压更新。这种基于场景的观测管理在工程中很常见,滤波器本身并不天然知道传感器哪个时刻可信,你得用逻辑帮它把关。

另外一个细节是:气压计对垂直方向的速度变化很敏感,所以它不仅修正高度,也能辅助修正天向速度。但这建立在气压计的响应延迟足够小、滤波较平滑的基础上。实际调试时,我会先用静态数据看气压计的噪声分布,确定R值数量级,再放到动态数据里微调。

4. 算法实现与工程落地:从公式到可跑的Matlab代码

4.1 代码结构规划:主循环、预测模块与更新模块

写Matlab代码时,我不推荐把所有逻辑写在一个文件里,最好拆成几个模块。我的习惯是:

main_ekf_ins.m % 主脚本:加载数据、初始化参数、循环调用 ekf_predict.m % 预测函数:输入上一状态、P、IMU增量,输出预测态与P ekf_update.m % 更新函数:根据观测类型调用不同H、R、h函数 state_init.m % 初始对准:用加速度计和磁力计求初始姿态 plot_result.m % 结果绘图和分析

主循环大概长这样:先读取传感器数据文件,假设IMU 200Hz,GPS 10Hz,磁力计50Hz,气压计50Hz。生成一个统一时间轴,从起始时间到结束时间按最小步长往前推。每个循环判断当前时刻是否有各传感器的数据点,有则调用对应处理。时间戳的处理要用线性插值对齐:比如GPS在0.05、0.15,而IMU在0.047、0.097,如果GPS在0.10来更新,IMU状态早已更新到0.10,那直接用当前状态做预测观测即可,不需要把状态回退。这是时序上最容易绕晕的地方,我的建议是:滤波器状态永远只推进到当前最小采样时刻,IMU的预测步不代表实际运行的物理时间,而是数据驱动的离散步。

初始化是整个项目成败的关键。初始姿态要先静置一段时间,取加速度计平均读数和磁力计平均读数,算出翻滚角与俯仰角、磁航向,组合成初始四元数。速度初始为零,位置初始取GPS第一帧或人为给定。注意,初始姿态误差如果大于四五度,EKF大概率发散发散。实践中我会写一个静置检测:加速度模长接近g且方差很小,才允许做初始对准。

4.2 状态向量与参数初值设定:单位、基准、噪声矩阵设定方法

这个项目的状态向量如果取15维,那就是:三维姿态误差、三维速度误差、三维位置误差、三轴陀螺零偏、三轴加速度计零偏。之所以用误差状态而不是直接状态,是因为EKF的线性化在误差附近更可靠,修正更新可以在线性框架下进行。主状态由IMU捷联积分不断推进,滤波负责估计并修正误差,再用误差修正主状态,同时置零。这种“误差状态EKF”是工程里的主流实现,比直接估计全状态更不容易发散。

过程噪声矩阵Q要按传感器噪声标定来填。陀螺噪声参数由角度随机游走决定,加速度计噪声由速度随机游走决定。一个常见问题是Q太小,滤波器过度信任IMU预测,外部观测来了也几乎不更新,结果输出就是漂移的纯惯导;Q太大,滤波器每步都被观测拉来拉去,噪声全部灌进状态,输出抖动。初值可以先按传感器手册上给的噪声密度估算,再用静态数据和动态数据各跑一遍,看状态协方差和实际误差趋势是否符合预期。协方差矩阵P的初值也有讲究,静态初始时姿态误差可能几度,GPS初始位置误差可能几十米,要对应给够初始不确定度,否则滤波器一开始就过度自信,后面永远修正不回来。

R矩阵按各传感器实测噪声标准差的平方来定。GPS位置一般设成几米的量级,速度0.1米每秒左右;磁力计各轴的噪声在零点几到几高斯之间(具体看芯片型号和校准质量);气压计高度噪声在零点几米到几米之间。这些值直接决定融合权重分配,是最需要反复调试的地方。我的调试顺序是:先只开GPS,把位置和速度调稳;再加气压计调高度;最后加磁力计调航向。一次只开一个观测,出问题了知道是谁的锅。

4.3 观测函数与雅可比矩阵的数值检查:解析推导和差分验证

写雅可比矩阵是最容易出错的一步。我强烈建议,写完解析雅可比之后,用数值差分对照验证一遍。取当前状态附近做小扰动,分别用解析公式和差分公式计算H矩阵,比较每个元素是否一致。差分会因为状态量纲不同而需要选择合适步长,太大会被非线性偏差影响,太小会有浮点舍入误差,我习惯用sqrt(eps)乘以该状态量数量级的步长。把这一项检查写成一个函数,随手就能调用,能省掉无数个调试噩梦。

另一个常用的验证手段是把各传感器的观测残差打印出来。在正确实现和合理初值下,位置新息应该符合零均值、方差与R量级接近的正态分布;如果新息长时间有偏,说明预测或观测有一个是错的,比如坐标系没转对、状态变量单位搞错、磁力计校准没做。如果你看到新息图和R不搭,先去查坐标系,其次是查状态是否记反,再次才是调噪声参数。这个问题排查顺序,我踩过很多次,先用它检查,再跑仿真。

4.4 Matlab代码性能优化:矩阵运算、批处理与循环推进

Matlab的循环效率虽然不差,但INS融合在长数据集上如果每步都做矩阵求逆,耗时也明显。优化的思路主要有三个。第一,在EKF已经是逐点更新的前提下,把矩阵维度保持小一点:观测维度和状态维度不能盲目膨胀,GPS位置速度观测如果是6维,H矩阵就是6x15,求逆的矩阵是6x6,代价可以接受;但如果把所有观测同步在一起做一次更新,变成10维观测,求逆就是10x10,虽然运算量仍然不大,但代码复杂度和异常隔离变差,我更推荐用顺序更新的方式,每次只进一类观测。

第二,向量化:如果数据里大量静态区间,可以预先判断IMU数据点之间的状态转移矩阵是否相同,合并预测步骤;但一般工程里IMU频率恒定、状态转移矩阵每步都不同,收益有限,这个优化优先级不高。

第三,利用Matlab代码生成和C语言转换做实时仿真:如果想把Matlab验证好的算法移植到嵌入式平台,可以用Matlab Coder自动生成C代码,前提是代码里不要用动态数组、cell数组和eval这类特性。我在移植时通常把滤波器写成纯函数接口,输入是IMU增量、各观测向量和时间戳,输出是状态估计,这样生成代码非常干净,也方便后续集成到实时系统里。

5. 常见问题与调参实战:我在调试EKF INS时踩过的坑

5.1 GPS定位正常但滤波器输出发散:坐标系和单位问题排查

这是最经典的故障现象。我遇到过一次:GPS位置经纬度转笛卡尔坐标时,转完之后忘记把基准经纬度对应的初始位置减掉,导致所有GPS观测都带一个约300km的偏置。EKF的表现很直接:一开始状态被强拉到观测,然后预测协方差迅速膨胀,再经过几次更新后直接发散到NaN。排查方法其实不复杂,把静止场景下GPS观测和预测观测画在同一张图上,如果相差一个常数偏置,基本就是坐标基准的问题。

单位也要统一检查:经纬度是度还是弧度,高度是米还是英尺,速度是公里每小时还是米每秒。这些单位错误很隐蔽,特别是GPS NMEA输出里速度用节表示,如果不换算成米每秒,融合出来的速度会出现倍数关系,滤波器看起来也能跑但输出和真实值差好几倍。我的习惯是在数据加载阶段就统一转成SI单位(米、弧度、秒),并写断言检查数值范围,一劳永逸。

5.2 磁力计干扰导致航向漂移:自适应协方差策略

磁力计在城市环境或电机附近会严重受扰,导致它的新息突然变大,EKF如果还按原来的R值信任它,航向就会被拉向错误方向。解决办法是用新息协方差在线缩放R:量测新息的协方差 S = HPH转置 + R,如果实际新息平方远大于S的对角元素,说明这个观测的可信度比建模低很多,可以将R乘以一个放大系数再更新。这是最基础的自适应鲁棒化处理,实现简单又能显著提升抗干扰能力。

更极端的情况下,我见过有人把磁力计观测完全丢弃,只在GPS好和长时间内航向需要约束时才让它介入。这种开关逻辑虽然粗暴,但很有效,特别在电机大电流、金属结构多的无人机平台上。对一般移动机器人,磁力计校准好了加上异常检测即可,没必要做得太复杂。

5.3 高度通道持续偏移:气压计与GPS高度基准协调

气压计高度跟GPS高度在长时间里差了几十米,这个问题我遇到过好几次。原因基本两类:一类是坐标基准不同,气压计给的是海拔高,GPS给的是椭球高,两者差一个大地水准面差距,不同地区能达到几十米,要查当地差距并补偿;另一类是气压计本身零位漂移和天气因素,用气压高度做长期参考通常不稳,但做短期修正是可以的。如果滤波器想用气压做长期高度约束,建议同时把气压补偿项也放进状态进行估计,这样滤波器能自动吸收天气和零位导致的慢变误差。把这一项去掉,仅做短期高度修正也能工作,但长期精度会差。

调高度通道的R值时,可以先做一组静置实验:在地面放置半小时,看气压高度的标准差,用这个值作为R的基准。动态测试时它的表现会和静态有差别,再按经验放大三五倍。

5.4 滤波器跑得不错但轻微漂移:过程噪声和状态反馈的相互作用

滤波器长时间运行,位置输出不爆但缓慢漂移,大概率是零偏估计不足或反馈补偿不及时。比如陀螺零偏估计为0.01度每秒,剩余误差依然存在,但反馈如果不做,误差继续积到姿态里;如果做了反馈,姿态误差保持在零偏附近的小范围内不会累积。加速度计零偏同理。所以代码里一定要有“估计出零偏→反馈到IMU原始读数”这一步,只估计不反馈等于只跑了一个开环补偿,效果差很远。

我这里分享一个调试技巧:把零偏估计曲线打出来,看它是否收敛到某个稳定值,以及它的时间常数。如果收敛太快,Q里的零偏噪声项可能太大,滤波器把零偏估计也跟着观测噪声抖动;收敛太慢,则零偏长期停留在错误值。用好Q里相应对角线上的值,你就能控制零偏估计的带宽,这是组合导航里一个很细腻但效果显著的调参点。

5.5 常见问题速查表

现象可能原因处理建议
滤波器直接NaNP发散或状态有线性问题检查初始P、Q量级,检查雅可比是否数值无界,检查数据是否有NaN
GPS更新后位置跳变GPS粗差未检测增加新息卡方异常检测,或给GPS更大R
航向长期不准磁力计未校准或受软铁干扰做椭球拟合校准,或降低磁力计R权重
高度缓慢偏移气压计基准和GPS基准不一致统一高程基准,或把高度补偿纳入状态估计
速度抖动明显速度观测噪声或Q过小增大观测速度R,或检查反馈补偿是否到位
静态时位置漂移快加速度计零偏反馈不足检查加速度计零偏是否在状态中估计并补偿
姿态在俯仰角大时乱跳四元数约束丢失或非线性太强检查姿态更新离散化,必要时使用误差状态EKF

6. 项目扩展与深度建议:EKF融合还能做什么方向

做完了这个IMU、GPS、磁力计、气压计的EKF融合项目,你再回头看组合导航这个领域,会发现这套框架是一个很通用的骨架。最简单的扩展是换传感器型号:不同IMU的噪声参数不同、输出频率不同,你只需要把标定参数和噪声建模改掉,状态机和观测模型几乎不用动。又比如加入轮式里程计,那就在预测和观测之间加一个轮速约束,实际上就是把一个非完整约束方程写成伪观测放进EKF。再比如做视觉惯性里程计VIO,前端视觉输出的位姿通过位姿观测模型融进同样的滤波器框架,状态量可以扩展出视觉尺度因子和重力方向参数。

从我在项目里的经验看,理解好误差状态EKF以后,你其实已经掌握了一套标准的“状态估计+多传感器融合”方法论,不管是做自动驾驶、机器人还是惯性测量设备,都能复用。学习路线方面,我的建议是先把本项目的每个矩阵、每个函数在纸上推一遍,然后改数据、改场景做实验,最后再考虑C移植或加入其他传感器。代码能跑通只说明你复现了,能解释清楚每一步为什么这么写,才算真正掌握了。

如果你手头正好有一套自己的传感器数据,不妨把数据读进这个框架,然后再想想哪些参数该调大、哪些该调小,相信我,跑通一遍和调崩溃几遍的收获完全不在一个级别。滤波器这个东西,每次踩坑都是一次真正的理解。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询