力辨識(shí)的Observer法:從EKF狀態(tài)空間建模到工程避坑)
簡介基于Observer狀態(tài)觀測器法實(shí)現(xiàn)的氣動(dòng)力辨識(shí)程序聚焦航空航天與飛行控制領(lǐng)域面向需要從飛行器動(dòng)態(tài)行為中估計(jì)升力、阻力、側(cè)向力等難以直接測量參數(shù)的研究者或工程師解決氣動(dòng)模型建立與參數(shù)辨識(shí)難題。資源為ZIP格式壓縮包僅含1個(gè).m源文件大小約2KB代碼精簡但覆蓋完整流程從線性化氣動(dòng)力模型與狀態(tài)方程建立到Observer增益矩陣設(shè)計(jì)、參數(shù)迭代更新及結(jié)果可視化展示核心算法一目了然。目前已有171人學(xué)習(xí)適合對現(xiàn)代控制理論中的狀態(tài)估計(jì)、Lyapunov穩(wěn)定性方法以及MATLAB數(shù)值計(jì)算有一定基礎(chǔ)希望復(fù)現(xiàn)或擴(kuò)展氣動(dòng)力辨識(shí)算法的使用者。程序依據(jù)穩(wěn)定性判據(jù)選取增益可配合飛行實(shí)測數(shù)據(jù)位置、速度、加速度不斷修正估計(jì)值辨識(shí)結(jié)果可用于飛行控制系統(tǒng)反饋設(shè)計(jì)同時(shí)包含去噪、濾波等預(yù)處理環(huán)節(jié)為后續(xù)自適應(yīng)辨識(shí)與氣動(dòng)性能分析提供了可運(yùn)行、易修改的起點(diǎn)。1. 為什么氣動(dòng)力辨識(shí)繞不開Observer法從mine_observer這個(gè)程序標(biāo)題說起氣動(dòng)力辨識(shí)本質(zhì)上是從飛行試驗(yàn)的時(shí)間序列里反算氣動(dòng)導(dǎo)數(shù)。傳統(tǒng)做法是把整段數(shù)據(jù)交給最小二乘一次擬合出俯仰力矩導(dǎo)數(shù)、升力斜率這些系數(shù)而Observer法標(biāo)題里拼成observor實(shí)際是observer的變體寫法走的是另一條路——把未知?dú)鈩?dòng)系數(shù)擴(kuò)充為狀態(tài)讓卡爾曼濾波在每一個(gè)采樣點(diǎn)用模型預(yù)測和實(shí)測殘差去修正它們參數(shù)軌跡是隨時(shí)間逐步收斂出來的而不是一次性算出來的。mine_observer是一個(gè)作者自研的氣動(dòng)力辨識(shí)程序這類自研程序最大的價(jià)值不是替代風(fēng)洞實(shí)驗(yàn)而是在面對動(dòng)壓變化劇烈、數(shù)據(jù)段短、非平穩(wěn)的實(shí)測數(shù)據(jù)時(shí)依然能給出帶置信度的參數(shù)估計(jì)過程。下文會(huì)從一個(gè)簡化縱向短周期模型入手把狀態(tài)空間建模、EKF實(shí)現(xiàn)、參數(shù)整定和典型翻車場景一次說透。內(nèi)容適合剛接觸飛行力學(xué)辨識(shí)的工程師和學(xué)生也適合對最小二乘結(jié)果不放心、想用第二種方法做交叉驗(yàn)證的熟手。你會(huì)看到Observer法并不神秘但它的成敗更多取決于模型結(jié)構(gòu)和激勵(lì)信號(hào)而不是濾波器本身。2. 先把模型寫對Observer法辨識(shí)氣動(dòng)導(dǎo)數(shù)的狀態(tài)空間基礎(chǔ)2.1 從縱向短周期方程說起哪些導(dǎo)數(shù)該進(jìn)狀態(tài)向量要做Observer法辨識(shí)第一步不是寫代碼而是把飛機(jī)的運(yùn)動(dòng)方程改造成“狀態(tài)-參數(shù)聯(lián)合系統(tǒng)”。以固定翼縱向短周期近似為例小擾動(dòng)線性化后的力與力矩方程可以寫成α? q Z_α / V · α Z_δe / V · δeq? M_α · α M_q · q M_δe · δe這里α是迎角q是俯仰角速率δe是升降舵偏角V是飛行速度。Z_α、M_α這些量帶量綱分別是Z方向氣動(dòng)導(dǎo)數(shù)對質(zhì)量和速度的合成以及俯仰力矩導(dǎo)數(shù)對轉(zhuǎn)動(dòng)慣量的合成。實(shí)際換算關(guān)系是M_α q?Sc C_mα / I_yZ_α -q?S C_Lα / m符號(hào)約定以你手頭教材為準(zhǔn)。程序里不必每次都展開這些物理量但必須保證單位統(tǒng)一角度全部換弧度速度用m/s時(shí)間用秒。Observer法的核心做法是把K個(gè)待辨識(shí)參數(shù)并入狀態(tài)向量。例如取x [α, q, Z_α, M_α, M_q, M_δe]?前兩個(gè)是運(yùn)動(dòng)狀態(tài)后四個(gè)是被辨識(shí)參數(shù)。參數(shù)在建模時(shí)被視為“隨機(jī)游走”當(dāng)前步參數(shù)等于上一步參數(shù)加一個(gè)小擾動(dòng)。擴(kuò)維后的系統(tǒng)寫成x? f(x, δe)其中參數(shù)分量對應(yīng)的導(dǎo)數(shù)為0運(yùn)動(dòng)狀態(tài)分量則依賴參數(shù)本身。這個(gè)系統(tǒng)非線性程度不高但有一個(gè)重要特征參數(shù)對輸出α、q的靈敏度隨時(shí)間變化。濾波算法正是利用這種靈敏度把預(yù)測殘差投影到參數(shù)方向上去修正估計(jì)值。選哪些參數(shù)進(jìn)狀態(tài)向量是這一步最容易出問題的地方。常見做法是只納入當(dāng)前模態(tài)下激勵(lì)充分的導(dǎo)數(shù)縱向短周期對C_Lα、C_mα、C_mq、C_mδe敏感阻力系數(shù)、側(cè)向靜導(dǎo)數(shù)在這個(gè)模態(tài)下幾乎不被激勵(lì)。硬塞進(jìn)狀態(tài)向量可觀測性矩陣會(huì)出現(xiàn)近似的零奇異值雅可比矩陣數(shù)值上能求逆但濾波結(jié)果會(huì)表現(xiàn)為參數(shù)漂移或者幾個(gè)參數(shù)互相補(bǔ)償。我一般會(huì)先跑一次最小二乘或偽逆看每個(gè)參數(shù)的估計(jì)方差方差數(shù)量級(jí)差超過兩個(gè)數(shù)量級(jí)的參數(shù)就固定住只留敏感項(xiàng)進(jìn)Observer法。2.2 三種Observer結(jié)構(gòu)對比龍伯格、EKF和滑模觀測器Observer法在氣動(dòng)力辨識(shí)里并不專指某一種濾波器。工程上常見的有三類先看對比表結(jié)構(gòu)模型要求噪聲假設(shè)計(jì)算量辨識(shí)特點(diǎn)龍伯格觀測器線性定常不需要明確Q/R最小極點(diǎn)配置整定收斂速度對量測噪聲敏感擴(kuò)展卡爾曼濾波EKF可微分非線性需要過程噪聲Q、量測噪聲R中狀態(tài)與參數(shù)聯(lián)合估計(jì)工程最常見滑模觀測器不確定非線性不需要中大對建模誤差魯棒但抖振會(huì)污染參數(shù)軌跡龍伯格觀測器適合數(shù)據(jù)干凈、模型已經(jīng)線性化好的場景。把參數(shù)也當(dāng)作狀態(tài)時(shí)系統(tǒng)矩陣變成時(shí)變非線性此時(shí)EKF是更通用的選擇。EKF每一步做兩件事用當(dāng)前估計(jì)的模型做一步預(yù)測然后用實(shí)測輸出與預(yù)測輸出的差值乘以卡爾曼增益修正所有狀態(tài)。這里的殘差innovation本身就是辨識(shí)質(zhì)量的天然監(jiān)控指標(biāo)后面第5章會(huì)用到這一點(diǎn)?;S^測器在氣動(dòng)力辨識(shí)中的案例不太多。它不需要精確的概率統(tǒng)計(jì)模型但切換增益帶來的抖振會(huì)直接進(jìn)入?yún)?shù)估計(jì)值最后畫出來的參數(shù)軌跡像一條毛邊很大的帶子難以收斂到干凈數(shù)值。如果建模誤差本身很小不建議第一個(gè)版本上滑模等EKF跑通、確認(rèn)殘差主要是噪聲而非模型誤差時(shí)再考慮用滑模做魯棒性對比。這是階段性的取舍不是一上來就把所有工具鋪開。2.3 可觀測性與持久激勵(lì)為什么有的參數(shù)咋調(diào)都不收斂把參數(shù)擴(kuò)進(jìn)狀態(tài)后第一個(gè)要回答的問題是這套“狀態(tài)參數(shù)”系統(tǒng)可觀測嗎線性時(shí)變系統(tǒng)可以構(gòu)造Gramian矩陣來檢查但工程上更直接的手段是看參數(shù)對輸出靈敏度的數(shù)值。以M_α為例參數(shù)通過方程q? … M_α · α影響q而q又被直接測量M_α的可見性取決于α的時(shí)變程度如果升降舵激勵(lì)信號(hào)讓α始終在平衡點(diǎn)附近小幅度波動(dòng)參數(shù)方向的靈敏度幅值會(huì)很低濾波器幾乎得不到關(guān)于M_α的信息。這不是算法問題是信息不足。所以激勵(lì)信號(hào)設(shè)計(jì)和Observer法辨識(shí)本身同等重要。常見信號(hào)有兩種3211多級(jí)階躍和線性掃頻。3211信號(hào)波形簡單、易于復(fù)現(xiàn)缺點(diǎn)是頻帶集中在特定頻段掃頻信號(hào)能更均勻地覆蓋頻帶但幅度控制不好容易飛出線性區(qū)域。我一般建議先跑一段仿真閉環(huán)用同一組信號(hào)對比EKF收斂效果再?zèng)Q定實(shí)測方案。一個(gè)很常見的坑用自然擾動(dòng)數(shù)據(jù)做辨識(shí)輸入功率譜密度太窄最后EKF輸出的M_α和M_q交替上升、結(jié)果完全失真。這不是Observer法玄學(xué)而是持久激勵(lì)persistently exciting條件未滿足。判定方法很簡單把歸一化信息矩陣的特征值算出來最大與最小特征值比值超過幾個(gè)數(shù)量級(jí)就說明激勵(lì)不夠需要重新設(shè)計(jì)信號(hào)。這一節(jié)沒有代碼但它是后面所有程序參數(shù)能否有意義的前提。3. 把程序跑起來EKF型Observer法的代碼實(shí)現(xiàn)與參數(shù)設(shè)置3.1 輸入數(shù)據(jù)長什么樣試飛時(shí)間序列的組織與預(yù)處理mine_observer這類程序的輸入通常是一個(gè)四列文本時(shí)間t、迎角α、俯仰角速率q、升降舵偏角δe。先看前幾十行確認(rèn)沒有缺失值和跳變。迎角傳感器容易被氣流擾動(dòng)污染尖峰要去掉但不要平滑過頭——過度平滑會(huì)壓縮高頻信息而高頻恰好包含了短周期氣動(dòng)力矩的辨識(shí)成分。我一般用3點(diǎn)中值濾波配合輕度低通低通截止頻率取激勵(lì)信號(hào)最高頻率的5倍以上。采樣率方面短周期模態(tài)頻率通常在1~10 rad/s量級(jí)飛機(jī)不同差異很大以自己模型的短周期自然頻率為準(zhǔn)建議采樣率至少為該頻率的20倍100Hz是常見起步值。如果原始數(shù)據(jù)只有20HzEKF在參數(shù)更新上會(huì)顯得粘滯寧愿做升采樣加濾波也不要直接跑否則每一步預(yù)測誤差被積分放大后參數(shù)軌跡會(huì)出現(xiàn)鋸齒。注意單位換算是數(shù)據(jù)預(yù)處理里最容易翻車的一環(huán)。迎角若存的是角度deg而運(yùn)動(dòng)方程用的是弧度M_α估計(jì)值會(huì)整體偏差約57.3倍。老程序里這類單位混用幾乎是最常見的“神秘bug”。我的習(xí)慣是在代碼開頭顯式聲明所有物理量單位用注釋寫清楚并把轉(zhuǎn)換后的數(shù)據(jù)畫一張快速預(yù)覽圖確認(rèn)量級(jí)合理再進(jìn)辨識(shí)。這一步做得越細(xì)后面排錯(cuò)的時(shí)間越短。3.2 一個(gè)可直接運(yùn)行的EKF辨識(shí)核心代碼與逐段說明先用一組已知真值生成模擬數(shù)據(jù)用來驗(yàn)證Observer法程序本身沒有邏輯錯(cuò)誤。模擬系統(tǒng)就用2.1節(jié)的狀態(tài)方程疊加高斯量測噪聲import numpy as np dt 0.01 t np.arange(0, 20.0, dt) N len(t) # 升降舵激勵(lì)掃描頻率從0.2Hz到2.0Hz疊加一個(gè)小階躍 de_cmd (0.12 * np.sin(2 * np.pi * (0.2 (2.0 - 0.2) * t / (2 * 20.0)) * t) 0.03 * (t 15.0)) # 模擬真實(shí)飛機(jī)短周期狀態(tài)方程真值參數(shù) V 70.0 Za_true -22.4 Ma_true -4.5 Mq_true -1.8 Mde_true -12.0 alpha np.zeros(N) q np.zeros(N) for k in range(N - 1): dalpha q[k] (Za_true / V) * alpha[k] dq Ma_true * alpha[k] Mq_true * q[k] Mde_true * de_cmd[k] alpha[k 1] alpha[k] dalpha * dt q[k 1] q[k] dq * dt # 加量測噪聲alpha約0.1degq約0.5deg/s alpha_meas alpha np.random.normal(0, 0.1 * np.pi / 180, N) q_meas q np.random.normal(0, 0.5 * np.pi / 180, N)代碼邏輯說明模擬數(shù)據(jù)用歐拉法積分積分步長與采樣間隔相同。這里的Z_δe項(xiàng)被刻意省略模擬系統(tǒng)和后面EKF使用的模型結(jié)構(gòu)一致避免“模型結(jié)構(gòu)誤差”干擾對程序本身的驗(yàn)證。如果你想驗(yàn)證算法對模型誤差的魯棒性可以在這一步另加一項(xiàng)Z_δe·δe的影響觀察辨識(shí)結(jié)果如何偏移那是4.x節(jié)討論的問題。下面是EKF核心實(shí)現(xiàn)。狀態(tài)向量為x [α, q, Z_α, M_α, M_q, M_δe]?參數(shù)用隨機(jī)游走建模# 連續(xù)時(shí)間狀態(tài)方程參數(shù)分量的導(dǎo)數(shù)為0 def f_dyn(x, de, V): alpha, q x[0], x[1] Za, Ma, Mq, Mde x[2], x[3], x[4], x[5] dalpha q (Za / V) * alpha dq Ma * alpha Mq * q Mde * de return np.array([dalpha, dq, 0.0, 0.0, 0.0, 0.0]) # 歐拉離散后對x的雅可比F I A * dt def jacobian_F(x, de, V, dt): alpha, q x[0], x[1] Za x[2] A np.array([ [Za / V, 1.0, alpha / V, 0.0, 0.0, 0.0], [x[3], x[4], 0.0, alpha, q, de], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], ]) return np.eye(6) A * dt # 觀測矩陣觀測量是alpha和q def H_obs(): H np.zeros((2, 6)) H[0, 0] 1.0 H[1, 1] 1.0 return H def ekf_step(x, P, de, y, dt, V, Q, R): F jacobian_F(x, de, V, dt) x_pred x f_dyn(x, de, V) * dt P_pred F P F.T Q H H_obs() S H P_pred H.T R K P_pred H.T np.linalg.inv(S) y_pred np.array([x_pred[0], x_pred[1]]) innov y - y_pred x_new x_pred K innov P_new (np.eye(6) - K H) P_pred return x_new, P_new, innov def run_ekf(t, alpha_meas, q_meas, de_cmd, dt, V, x0, P0, Q, R): x np.array(x0, dtypefloat) P np.array(P0, dtypefloat) traj [] innovs [] for k in range(len(t)): y np.array([alpha_meas[k], q_meas[k]]) x, P, innov ekf_step(x, P, de_cmd[k], y, dt, V, Q, R) traj.append(x.copy()) innovs.append(innov.copy()) return np.array(traj), np.array(innovs)代碼邏輯說明f_dyn返回的是連續(xù)時(shí)間導(dǎo)數(shù)歐拉預(yù)測用x f_dyn·dt一步完成參數(shù)分量導(dǎo)數(shù)寫0它們只靠Q中對應(yīng)元素提供隨機(jī)游走能力。雅可比矩陣中的第二行?q?/?M_α α、?q?/?M_q q、?q?/?M_δe δe這三項(xiàng)是參數(shù)方向靈敏度在雅可比矩陣?yán)锏膶?shí)體。如果手寫雅可比與數(shù)值差分對不上P矩陣很快會(huì)發(fā)散成NaN第4章會(huì)專門討論。run_ekf里每個(gè)采樣點(diǎn)調(diào)用一次ekf_step內(nèi)部順序是預(yù)測-算增益-更新。返回的traj是N行六列的數(shù)組每一行是當(dāng)前時(shí)刻的狀態(tài)加參數(shù)估計(jì)可以直接畫出來看參數(shù)隨時(shí)間的收斂過程。innovs數(shù)組務(wù)必保留后面做殘差白噪聲檢驗(yàn)要靠它。3.3 三個(gè)必須人工干預(yù)的參數(shù)Q、R與P0EKF不是完全自動(dòng)的工具有三個(gè)參數(shù)基本靠人工調(diào)節(jié)這也是大家常說的“玄學(xué)區(qū)”參數(shù)作用起始設(shè)定調(diào)參方向Q中狀態(tài)部分(α, q)容忍模型誤差與狀態(tài)突變1e-4 ~ 1e-3殘差低頻偏大則增大Q中參數(shù)部分(Za, Ma, ...)決定參數(shù)跟蹤速度1e-8 ~ 1e-6參數(shù)收斂太慢增大抖動(dòng)過大減小R量測噪聲對應(yīng)傳感器噪聲方差α: (0.1°→rad)2q: (0.5°/s→rad/s)2按傳感器手冊取一般不亂動(dòng)P0初始協(xié)方差初始估計(jì)的不確定度狀態(tài)部分1e-4參數(shù)部分取初值平方的10倍參數(shù)初值不確定就再放大10倍Q參數(shù)部分的設(shè)計(jì)核心是一個(gè)矛盾給得太大參數(shù)會(huì)被每條殘差拽著走軌跡高頻抖動(dòng)給得太小參數(shù)慢吞吞20秒數(shù)據(jù)可能只走了一半。快速起步辦法是先給中等量級(jí)1e-7看軌跡如果前5秒就猛烈震蕩降兩個(gè)數(shù)量級(jí)如果20秒還沒平升一個(gè)數(shù)量級(jí)。相比QR盡量信任傳感器手冊不要為了視覺美觀去壓R一旦R給得遠(yuǎn)小于真實(shí)噪聲濾波器會(huì)對殘差過度反應(yīng)參數(shù)軌跡一樣會(huì)抖動(dòng)。初值P0與x0的關(guān)系也容易踩坑。x0里的參數(shù)若給一個(gè)偏離真值較多的初值比如M_α初值給0P0對應(yīng)位置必須設(shè)置足夠大讓濾波器自信地修改它若P0給得太小濾波器認(rèn)為初值很可信參數(shù)只會(huì)緩慢移動(dòng)。常見做法是讓P0參數(shù)對角線取初值平方的10倍這就給了濾波器充分的“后悔藥”空間。4. 避坑與排查Observer法辨識(shí)結(jié)果“看起來對”但靠不住的時(shí)刻4.1 現(xiàn)象參數(shù)收斂但數(shù)值和已知數(shù)據(jù)系統(tǒng)性偏大這是最麻痹人的情況——參數(shù)軌跡都平了曲線光滑你以為成功了但對比氣動(dòng)數(shù)據(jù)發(fā)現(xiàn)M_α普遍偏大20%。原因多半不是濾波器錯(cuò)了而是配平點(diǎn)沒找準(zhǔn)。氣動(dòng)力辨識(shí)用的小擾動(dòng)方程是在某個(gè)平衡狀態(tài)附近線性化的如果數(shù)據(jù)段實(shí)際上帶一個(gè)穩(wěn)態(tài)舵偏或非零的俯仰角加速度模型里沒體現(xiàn)這個(gè)偏置M_α就要吸收這部分效應(yīng)。解決先用數(shù)據(jù)末段做平均估計(jì)穩(wěn)態(tài)α、q、δe把狀態(tài)和輸入都減去配平值再跑EKF或者在模型里加一個(gè)常數(shù)偏置項(xiàng)一起辨識(shí)看它是否顯著不為零。偏置項(xiàng)顯著時(shí)優(yōu)先修正配平。4.2 現(xiàn)象某個(gè)參數(shù)長時(shí)間漂移永遠(yuǎn)不給穩(wěn)定值最常見的是M_q這類時(shí)間尺度與運(yùn)動(dòng)模態(tài)相近、又容易被其他參數(shù)補(bǔ)償?shù)牧?。原因是狀態(tài)擴(kuò)維后兩個(gè)參數(shù)對同一條輸出軌跡有近似相同的貢獻(xiàn)信息矩陣近似奇異濾波器無法獨(dú)立分離它們。解決分三步先把參數(shù)軌跡和運(yùn)動(dòng)狀態(tài)軌跡畫在同一張圖觀察參數(shù)漂移是否與α或q的長期趨勢相關(guān)再做敏感性分析逐一固定某個(gè)參數(shù)、讓其余參數(shù)辨識(shí)比較殘差平方和找出那個(gè)“被掩蓋”的參數(shù)最后補(bǔ)充包含更豐富頻帶的激勵(lì)數(shù)據(jù)。這里要記住Observer法和最小二乘一樣受制于信息量不要指望算法能創(chuàng)造數(shù)據(jù)里不存在的信息。4.3 現(xiàn)象協(xié)方差矩陣在某一刻變成NaN這個(gè)現(xiàn)象幾乎總能追溯到雅可比矩陣寫錯(cuò)。我遇到過的一種典型錯(cuò)誤狀態(tài)方程里q? M_α·α M_q·q M_δe·δe被寫成q? M_α·α M_q·q M_δe忘了乘δe于是?q?/?M_δe變成了0而狀態(tài)里又有M_δe這一維濾波器認(rèn)為這個(gè)參數(shù)毫無可見性P中對應(yīng)行會(huì)在幾百步內(nèi)被數(shù)值誤差打崩。解決寫一個(gè)腳本對jacobian_F做中心差分校驗(yàn)比較解析F與數(shù)值F的每個(gè)元素容差取1e-6。另一個(gè)常見誘因是Q或R非正定比如對角線出現(xiàn)負(fù)數(shù)或者零加上浮點(diǎn)精度問題進(jìn)主循環(huán)前檢查所有特征值大于零。4.4 現(xiàn)象仿真數(shù)據(jù)能收斂實(shí)測數(shù)據(jù)一上來就發(fā)散仿真的輸出是“干凈”的因?yàn)槟P秃蜑V波器里的模型完全一致實(shí)測數(shù)據(jù)攜帶結(jié)構(gòu)誤差——?dú)鈩?dòng)滯后、彈性模態(tài)、傳感器安裝角偏差全落在模型外面。Observer法里這些誤差都會(huì)表現(xiàn)為innovation。發(fā)散前一般有先兆innovation不再圍繞零均值波動(dòng)而是出現(xiàn)緩慢變化的長周期分量或方差隨時(shí)間增大。解決路徑先看一段殘差殘差低頻成分大說明建模階次或配平有問題回去補(bǔ)模型結(jié)構(gòu)殘差是高頻尖峰則檢查傳感器延遲與數(shù)據(jù)對齊特別是升降舵指令與響應(yīng)對齊差一兩個(gè)采樣周期就可能導(dǎo)致發(fā)散最后才考慮調(diào)Q。不要一上來就亂調(diào)Q/R先把數(shù)據(jù)質(zhì)量和模型結(jié)構(gòu)理順。5. 驗(yàn)證與進(jìn)階交叉驗(yàn)證、殘差檢驗(yàn)和UKF擴(kuò)展的方向跑通EKF不是終點(diǎn)沒有驗(yàn)證的辨識(shí)結(jié)果沒有說服力。最有效的驗(yàn)證是數(shù)據(jù)分段交叉驗(yàn)證把數(shù)據(jù)切成兩段前60%用Observer法辨識(shí)出參數(shù)后40%用辨識(shí)出的模型做開環(huán)仿真從后段的初始狀態(tài)開始遞推比較仿真與實(shí)測的α、q誤差。如果后段預(yù)測誤差隨時(shí)間快速增長說明模型在其他數(shù)據(jù)段上不可靠多半是過擬合了前段數(shù)據(jù)的噪聲。這個(gè)驗(yàn)證把“參數(shù)看起來收斂”升級(jí)為“模型真的能預(yù)測新數(shù)據(jù)”這才是氣動(dòng)力辨識(shí)的目的。第二個(gè)檢驗(yàn)是殘差白噪聲檢驗(yàn)。把innov序列畫出來并做自相關(guān)理想情況下除零階滯后外自相關(guān)系數(shù)會(huì)落在±1.96/√N(yùn)的置信帶內(nèi)。如果自相關(guān)系數(shù)在某個(gè)滯后處顯著越界說明殘差里還有模型結(jié)構(gòu)成分比如被忽略的彈性模態(tài)或輸入延遲。這一步在代碼里只有幾行卻能幫你區(qū)分“噪聲大”和“模型錯(cuò)了”——前者可以接受后者必須回頭改模型。如果模型非線性較強(qiáng)比如大迎角下的非定常氣動(dòng)力EKF的線性化誤差會(huì)累積??梢园杨A(yù)測步換成無跡變換寫成UKF參數(shù)部分的隨機(jī)游走建模不變只改狀態(tài)分布的傳播方式。另一個(gè)方向是平方根濾波用協(xié)方差的Cholesky因子替換P避免P矩陣非對稱或負(fù)定對長數(shù)據(jù)段的數(shù)值穩(wěn)定性提升明顯。還可以對比遞推最小二乘與Observer法的結(jié)果兩者在數(shù)據(jù)充分時(shí)應(yīng)接近若差異大多半是模型結(jié)構(gòu)或激勵(lì)的問題而非算法本身的問題。我自己用Observer法最深的體會(huì)是不要一開始就追求復(fù)雜算法先用EKF把數(shù)據(jù)和模型的故事講通。曾經(jīng)我為一組高頻抖動(dòng)數(shù)據(jù)忙了一周最后發(fā)現(xiàn)是迎角傳感器安裝角偏差了1.2°數(shù)據(jù)對齊處理后的結(jié)果好得驚人。辨識(shí)程序里代碼只是骨架真正值錢的是你對氣動(dòng)、測量和概率模型的層層校準(zhǔn)。把第4章的四個(gè)坑記在心里再用交叉驗(yàn)證堵住最后一道懷疑這條路會(huì)順很多。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取