現(xiàn))
簡(jiǎn)介逆合成孔徑雷達(dá)ISAR成像過(guò)程中相位誤差常常導(dǎo)致圖像散焦PGA懲罰函數(shù)梯度自聚焦算法是消除這一問(wèn)題的有效技術(shù)。該MATLAB代碼面向雷達(dá)信號(hào)處理領(lǐng)域的研究人員與工程師提供一份可直接運(yùn)行的PGA自聚焦實(shí)現(xiàn)適用于目標(biāo)特征提取、成像質(zhì)量改善等典型應(yīng)用場(chǎng)景。壓縮包內(nèi)共1個(gè)文件為.m格式的源碼體積僅1KB結(jié)構(gòu)輕量便于閱讀與調(diào)試。目前已有1025人學(xué)習(xí)下載在相關(guān)學(xué)習(xí)者中擁有一定參考價(jià)值。代碼完整覆蓋了參數(shù)初始化、圖像質(zhì)量指標(biāo)梯度計(jì)算、相位校正因子迭代更新以及收斂判斷等關(guān)鍵環(huán)節(jié)使用者能夠根據(jù)實(shí)際系統(tǒng)性能需要自行調(diào)整迭代次數(shù)和步長(zhǎng)并通過(guò)對(duì)比不同參數(shù)下的聚焦結(jié)果加深對(duì)算法行為的理解。通過(guò)研讀這份代碼讀者不僅可以掌握PGA算法的實(shí)現(xiàn)細(xì)節(jié)還能將其核心邏輯遷移到自己的ISAR數(shù)據(jù)處理流程中最終獲得散焦校正后的高分辨率雷達(dá)圖像。1. PGA 自聚焦為什么 ISAR 圖像總是差最后一口氣做 ISAR 成像的工程師大多有過(guò)這種體驗(yàn)數(shù)據(jù)采集時(shí)信號(hào)強(qiáng)度夠、信噪比也漂亮距離壓縮后的回波看著干干凈凈一排方位向 FFT 出來(lái)圖像卻是糊的。問(wèn)題常常不在前端硬件而在回波的相位歷史里混入了未知的相位誤差。PGAPhase Gradient Autofocus相位梯度自聚焦就是業(yè)內(nèi)最常用、也最值得先試的一類自聚焦算法它不依賴外部參考點(diǎn)從場(chǎng)景自身強(qiáng)散射點(diǎn)的相位梯度出發(fā)把相位誤差逐輪迭代消除。這篇文章從 PGA 的估計(jì)原理講到最小實(shí)現(xiàn)、參數(shù)設(shè)置和真實(shí) ISAR 流程里的組合方式最后給出用模擬數(shù)據(jù)驗(yàn)證聚焦效果的套路適合正在做 ISAR 運(yùn)動(dòng)補(bǔ)償和成像質(zhì)量?jī)?yōu)化的讀者。2. 相位誤差藏在回波的哪里PGA 的估計(jì)對(duì)象與依據(jù)2.1 非空變相位誤差I(lǐng)SAR 散焦的真正來(lái)源ISAR 成像利用目標(biāo)與雷達(dá)視線之間的相對(duì)旋轉(zhuǎn)形成合成孔徑方位向高分辨依賴回波在脈沖間的相干積累。理想情況下每個(gè)脈沖之間的相位差只由目標(biāo)散射點(diǎn)的幾何位置決定做一次方位向 FFT 就能得到清晰圖像。實(shí)際情況遠(yuǎn)沒(méi)有這么理想平臺(tái)運(yùn)動(dòng)測(cè)量誤差、目標(biāo)變速機(jī)動(dòng)、大氣折射起伏、本振相位漂移都會(huì)給每個(gè)脈沖疊加一個(gè)額外的相位擾動(dòng)。這個(gè)擾動(dòng)隨慢時(shí)間變化卻對(duì)所有距離單元基本相同就是所謂的非空變相位誤差也是 PGA 最擅長(zhǎng)對(duì)付的對(duì)象。如果誤差隨距離單元變化比如目標(biāo)存在大角度轉(zhuǎn)動(dòng)時(shí)不同距離單元的越分辨單元徙動(dòng)程度不同那就屬于空變相位誤差單靠 PGA 處理不了。很多新手把 PGA 當(dāng)成“萬(wàn)能對(duì)焦”遇到距離對(duì)齊沒(méi)做好、包絡(luò)彎曲嚴(yán)重的實(shí)測(cè)數(shù)據(jù)也直接往上套結(jié)果迭代半天圖像更散。先分清誤差特性再選算法比糾結(jié)參數(shù)更值得投入時(shí)間。2.2 圖像域與慢時(shí)間域相位歷史的兩副面孔距離壓縮后的數(shù)據(jù)是二維復(fù)矩陣一維是距離單元一維是方位慢時(shí)間脈沖。對(duì)慢時(shí)間維做 FFT 得到的圖像域是雷達(dá)工程師最熟悉的呈現(xiàn)方式但相位誤差的估計(jì)偏偏不能直接在圖像域做。原因很簡(jiǎn)單一個(gè)散射點(diǎn)在圖像域的能量彌散開(kāi)來(lái)峰值位置疊加了旁瓣和鄰近散射點(diǎn)的干擾直接取相位得到的是混合相位不是獨(dú)立的誤差相位。PGA 的做法是在兩個(gè)域之間反復(fù)切換。粗成像后在圖像域用窗把強(qiáng)散射點(diǎn)孤立出來(lái)排除旁瓣干擾把加窗后的數(shù)據(jù)變回慢時(shí)間域此時(shí)每個(gè)距離單元的信號(hào)近似等價(jià)于一個(gè)孤立點(diǎn)目標(biāo)的相位歷史可以安全地做相位差分估計(jì)。這就像先用手在圖像上遮住無(wú)關(guān)區(qū)域再回到時(shí)間域測(cè)相位。兩副面孔缺一不可不加窗直接測(cè)時(shí)域相位會(huì)被多散射點(diǎn)干涉污染不加回時(shí)域又拿不到相位梯度信息。2.3 為什么估梯度而不是估絕對(duì)值直接從單個(gè)距離單元的相位歷史估計(jì)絕對(duì)相位誤差最容易翻車。路線上有兩個(gè)障礙一是目標(biāo)散射結(jié)構(gòu)本身自帶相位比如強(qiáng)點(diǎn)的位置多普勒相位與誤差相位混疊二是噪聲和旁瓣疊加后單點(diǎn)相位測(cè)量方差極大。PGA 繞開(kāi)絕對(duì)值改做相鄰脈沖間的相位差分。對(duì)同一個(gè)散射點(diǎn)相鄰脈沖的理想差分只由該點(diǎn)的多普勒頻率決定是常數(shù)誤差的差分則隨誤差類型變化。強(qiáng)點(diǎn)加窗后把差分結(jié)果跨距離單元累加可以大幅壓低噪聲和雜波的影響最后積分得到完整相位誤差。相位差分還有一個(gè)隱藏好處免去了解纏繞的麻煩。絕對(duì)相位動(dòng)輒跨多個(gè)周期積分前必須逐點(diǎn)解纏繞解錯(cuò)一個(gè)點(diǎn)整條相位鏈都崩而相鄰脈沖的相位差落在主值區(qū)間內(nèi)取 angle 就直接得到。這種“估梯度再積分”的思路后來(lái)被很多改進(jìn)算法繼承理解了它再去看加權(quán) PGA、分塊 PGA 都會(huì)輕松很多。3. 從回波到聚焦PGA 最小實(shí)現(xiàn)與四個(gè)關(guān)鍵參數(shù)3.1 PGA 四步循環(huán)選點(diǎn)、加窗、差分、積分標(biāo)準(zhǔn) PGA 的每一次迭代都可以壓縮成四步。第一步是強(qiáng)散射點(diǎn)選擇對(duì)每個(gè)距離單元找方位向幅度最大的位置作為候選強(qiáng)點(diǎn)并按信雜比門限篩選場(chǎng)景里真正的強(qiáng)點(diǎn)越多估計(jì)方差越小。第二步是加窗把每個(gè)強(qiáng)點(diǎn)的峰值通過(guò)循環(huán)移位挪到圖像域中心用矩形窗截取主瓣附近的樣本窗外置零這一步?jīng)Q定了估計(jì)的“隔離度”。第三步是相位梯度估計(jì)把加窗后的圖像域數(shù)據(jù)做逆 FFT 回到慢時(shí)間域?qū)ο噜徝}沖做共軛相乘把所有距離單元的乘積累加取相位得到逐脈沖相位差分。第四步是積分與校正對(duì)差分累加得到相位誤差去掉整體線性相位趨勢(shì)那部分對(duì)應(yīng)圖像平移不屬于散焦誤差然后用它校正原始數(shù)據(jù)重新成像收縮窗寬進(jìn)入下一輪。四步循環(huán)跑 5 到 10 輪窗寬從幾十個(gè)單元逐輪收縮到幾個(gè)單元。前期窗寬大能收集到足夠的信號(hào)能量用于初步估計(jì)后期窗寬小把鄰近干擾點(diǎn)隔離干凈讓估計(jì)精度逐步提高。收斂后圖像熵顯著下降方位向旁瓣被壓低強(qiáng)點(diǎn)主瓣變尖銳。整個(gè)流程不依賴任何外部參考點(diǎn)這正是 PGA 在 ISAR 自聚焦里地位穩(wěn)固的原因。3.2 最小實(shí)現(xiàn)一份可運(yùn)行的 PGA 核心代碼下面給出一份可直接運(yùn)行的核心實(shí)現(xiàn)基于 NumPy 完成不需要額外依賴。代碼保留標(biāo)準(zhǔn)流程并在窗外相位處理上做了一點(diǎn)工程保護(hù)適合先跑通再改。import numpy as np def pga(data, n_iter8, win_init64, win_min3, shrink0.6, strong_thresh_db10, n_strong_max30, tol0.01): 標(biāo)準(zhǔn) PGA 自聚焦實(shí)現(xiàn) data: 距離壓縮后的二維復(fù)矩陣, shape(n_range, n_pulse) 返回: phi(相位誤差向量), data_corr(校正后數(shù)據(jù)) n_range, n_pulse data.shape phi np.zeros(n_pulse) data_corr data.copy() for it in range(n_iter): # 方位向 FFT 到圖像域 img np.fft.fftshift(np.fft.fft(data_corr, axis1), axes1) # 1. 強(qiáng)散射點(diǎn)選擇峰值相對(duì)中值幅度超過(guò)門限 peak np.abs(img).max(axis1) noise np.median(np.abs(img), axis1) 1e-12 ratio_db 20 * np.log10(peak / noise) candidates np.where(ratio_db strong_thresh_db)[0] if len(candidates) n_strong_max: order np.argsort(peak[candidates])[::-1] candidates candidates[order[:n_strong_max]] if len(candidates) 0: break # 2. 當(dāng)前迭代窗寬逐輪收縮 w max(int(win_init * (shrink ** it)), win_min) w min(w, n_pulse) half w // 2 center n_pulse // 2 # 3. 循環(huán)移位 加窗 IFFT 回慢時(shí)間域 g_list [] for r in candidates: idx_max np.argmax(np.abs(img[r])) shifted np.roll(img[r], center - idx_max) mask np.zeros(n_pulse) mask[center - half: center half] 1.0 g np.fft.ifft(shifted * mask) g_list.append(g) G np.stack(g_list) # shape(n_sel, n_pulse) # 4. 相鄰脈沖共軛相乘并跨距離單元累加 grad np.zeros(n_pulse, dtypecomplex) grad[:-1] np.sum(G[:, 1:] * np.conj(G[:, :-1]), axis0) # 窗外差分置零避免低信雜比區(qū)噪聲主導(dǎo)相位 valid np.zeros(n_pulse, dtypebool) valid[center - half: center half - 1] True grad[~valid] 0.0 # 5. 取相位差分累加積分得到相位誤差 delta np.angle(grad) cum np.cumsum(delta) cum np.unwrap(cum) # 6. 去除線性相位趨勢(shì)對(duì)應(yīng)圖像整體平移不能作為誤差補(bǔ)償 t_all np.arange(n_pulse) - center mask_fit valid (np.abs(grad) 1e-6) if mask_fit.sum() 2: k, b np.polyfit(t_all[mask_fit], cum[mask_fit], 1) phi_est cum - (k * t_all b) else: phi_est cum # 7. 只更新窗內(nèi)有可靠估計(jì)的相位窗外沿用上一輪結(jié)果 phi_new phi.copy() phi_new[mask_fit] phi_est[mask_fit] # 8. 收斂判斷 if np.max(np.abs(phi_new - phi)) tol: phi phi_new break phi phi_new # 9. 用原始數(shù)據(jù)重新校正避免誤差逐輪累積 data_corr data * np.exp(-1j * phi) return phi, data_corr代碼里有兩個(gè)值得留意的設(shè)計(jì)。第一校正時(shí)每次都用原始數(shù)據(jù)乘相位補(bǔ)償而不是在上一輪校正結(jié)果上繼續(xù)乘這樣可以防止估計(jì)誤差逐輪累積是一線實(shí)現(xiàn)里常踩的坑。第二相位誤差更新只作用在窗內(nèi)可靠段窗外沿用上一輪值這是對(duì)邊緣噪聲的一種工程抑制代價(jià)是窗寬收縮速度不能太快否則窗外長(zhǎng)時(shí)間得不到更新。參數(shù)說(shuō)明win_init控制初始窗寬一般取 64 或主瓣寬度的 4 到 8 倍物理解釋是初始隔離度低但能量收集多適合粗估。shrink是窗寬收縮率0.5 到 0.7 之間常見(jiàn)取 0.6 是速度和精度的折中。win_min最小窗寬建議 3太小會(huì)丟掉主瓣有效樣本。strong_thresh_db是強(qiáng)點(diǎn)門限10 dB 起步實(shí)測(cè)數(shù)據(jù)雜波重時(shí)提到 15 到 20。tol是相鄰兩輪相位誤差的最大變化量單位弧度0.01 已經(jīng)相當(dāng)嚴(yán)格。3.3 必調(diào)參數(shù)窗寬、收縮率、迭代次數(shù)與收斂門限參數(shù)推薦范圍典型值說(shuō)明win_init32~12864初始窗寬太大包含鄰近散射點(diǎn)干擾太小梯度信噪比不足shrink0.5~0.70.6窗寬逐輪收縮率決定隔離度提升速度win_min3~53最小窗寬低于主瓣寬度會(huì)損失有效信號(hào)n_iter5~108迭代輪數(shù)多數(shù)場(chǎng)景 8 輪內(nèi)收斂strong_thresh_db10~2010強(qiáng)點(diǎn)信雜比門限實(shí)測(cè)數(shù)據(jù)建議提高tol0.005~0.050.01相位誤差變化收斂門限單位弧度調(diào)參時(shí)先固定迭代次數(shù)和門限只調(diào)窗寬序列是最快的路徑。很多場(chǎng)景下把win_init從 64 降到 32迭代輪數(shù)能省兩輪但強(qiáng)點(diǎn)密集時(shí)容易在初期就引入旁瓣干擾。反過(guò)來(lái)shrink取 0.7 會(huì)讓窗寬收縮太慢浪費(fèi)迭代取 0.5 又可能讓窗內(nèi)樣本在后期過(guò)少相位梯度方差變大。我一般先跑一輪打印每輪實(shí)際窗寬確認(rèn)最后一輪窗寬在 3 到 5再微調(diào)shrink。4. 接進(jìn)真實(shí) ISAR 流程前處理、分塊與組合策略4.1 距離對(duì)齊是前提PGA 不背的鍋PGA 的輸入是距離壓縮后的復(fù)數(shù)據(jù)但有一個(gè)隱含前提所有脈沖的距離包絡(luò)要對(duì)齊。如果目標(biāo)距離走動(dòng)沒(méi)消除同一散射點(diǎn)在不同脈沖里落到不同距離單元它的相位歷史就被包絡(luò)移動(dòng)的線性相位污染PGA 會(huì)把這種平移誤判成相位誤差校正結(jié)果越弄越糟。常見(jiàn)做法是先做包絡(luò)對(duì)齊相關(guān)法、最小熵法、全局距離對(duì)齊都可以然后再進(jìn)入 PGA 環(huán)節(jié)。工程上我習(xí)慣把“距離對(duì)齊 初相校正”稱為粗補(bǔ)償把 PGA 稱為精補(bǔ)償。粗補(bǔ)償解決的是包絡(luò)位置和多普勒中心偏移精補(bǔ)償解決的是殘余相位起伏。兩者順序不能顛倒也不能互相替代。曾經(jīng)有一次實(shí)測(cè)數(shù)據(jù)拿到手項(xiàng)目組直接跑 PGA圖像熵怎么也不降后來(lái)檢查發(fā)現(xiàn)距離向包絡(luò)有十幾個(gè)距離單元的漂移把包絡(luò)對(duì)齊補(bǔ)上之后PGA 兩輪就收斂了。這個(gè)鍋確實(shí)不該 PGA 背。4.2 弱散射點(diǎn)場(chǎng)景分塊 PGA 與局部估計(jì)實(shí)測(cè)中不是每個(gè)場(chǎng)景都有理想的強(qiáng)散射點(diǎn)。海面艦船、復(fù)雜地面目標(biāo)這類擴(kuò)展目標(biāo)方位向剖面上可能找不到幾個(gè)超過(guò) 15 dB 的孤立點(diǎn)。這時(shí)候全局 PGA 的梯度估計(jì)被大量弱散射點(diǎn)主導(dǎo)相位差分接近隨機(jī)迭代容易發(fā)散。常見(jiàn)的做法是把距離向分成若干塊每塊獨(dú)立選強(qiáng)點(diǎn)、獨(dú)立估計(jì)相位誤差再做塊間相位拼接。分塊 PGA 的塊寬沒(méi)有固定標(biāo)準(zhǔn)通常按距離向單元數(shù)的八分之一到四分之一切分每塊至少保留 16 個(gè)距離單元否則統(tǒng)計(jì)量不足。塊間拼接時(shí)兩塊重疊區(qū)域各用自己的估計(jì)結(jié)果做加權(quán)平均減少相位跳變。如果分塊后仍然找不到強(qiáng)點(diǎn)退一步用幅度加權(quán) PGA所有距離單元都參與梯度累加但權(quán)重與峰值幅度掛鉤弱點(diǎn)的貢獻(xiàn)被壓低。實(shí)際效果介于全局 PGA 和理想強(qiáng)點(diǎn)場(chǎng)景之間是實(shí)測(cè)數(shù)據(jù)里性價(jià)比很高的過(guò)渡方案。4.3 運(yùn)動(dòng)補(bǔ)償?shù)慕M合順序先粗后精一套我在模擬和實(shí)測(cè)中反復(fù)驗(yàn)證過(guò)的 ISAR 處理順序是距離壓縮 → 包絡(luò)對(duì)齊 → 初相校正 → 傳統(tǒng)成像 → PGA 精補(bǔ)償 → 二次成像。初相校正用來(lái)消除整體多普勒偏移如果不做PGA 估計(jì)出的相位誤差里會(huì)混入一個(gè)大的線性分量雖然后續(xù)有去趨勢(shì)步驟兜底但會(huì)浪費(fèi)迭代輪數(shù)。PGA 放在粗補(bǔ)償之后是為了讓輸入相位誤差盡量只有高頻起伏成分這部分正是 PGA 的強(qiáng)項(xiàng)。如果 PGA 收斂后圖像仍有散焦先不要急著增加迭代輪數(shù)回頭檢查兩個(gè)地方一是殘余相位誤差是否距離空變?nèi)绻切枰镁嚯x分塊或針對(duì)非均勻轉(zhuǎn)動(dòng)的成像算法二是強(qiáng)散射點(diǎn)門限是否太低雜波被當(dāng)成了強(qiáng)點(diǎn)。PGA 在整套流程里負(fù)責(zé)最后一段精補(bǔ)償前面基礎(chǔ)沒(méi)打好它救不回來(lái)。5. 避坑與排查PGA 常見(jiàn)失效模式的定位手冊(cè)5.1 現(xiàn)象一迭代 20 輪仍在漂移現(xiàn)象迭代輪數(shù)已經(jīng)超過(guò) 10相位誤差每次更新都還有明顯變化圖像熵下降但遲遲不收斂。 原因窗寬收縮太慢或根本沒(méi)有收縮強(qiáng)散射點(diǎn)鄰近的其他散射結(jié)構(gòu)一直留在窗內(nèi)梯度估計(jì)每次都被相同的干擾項(xiàng)拉動(dòng)。 解決檢查每輪實(shí)際窗寬打印值確認(rèn)它從win_init一路降到win_min。把shrink從 0.6 調(diào)到 0.5或者直接給固定窗寬序列比如[64, 32, 16, 8, 4]每輪強(qiáng)制更新。5.2 現(xiàn)象二越迭代越糊現(xiàn)象圖像整體在方位向移動(dòng)主瓣越來(lái)越靠近圖像中心但聚焦質(zhì)量反而下降強(qiáng)點(diǎn)周圍出現(xiàn)拖尾。 原因循環(huán)移位操作帶入的線性相位被積分進(jìn)了相位誤差校正時(shí)把目標(biāo)本身的方位位置信息也補(bǔ)償?shù)袅恕?解決確認(rèn)在積分后做了線性去趨勢(shì)用np.polyfit擬合相位誤差的線性分量并減掉。注意循環(huán)移位必須在圖像域完成不要在慢時(shí)間域直接按索引挪動(dòng)數(shù)據(jù)否則會(huì)引入額外線性相位。5.3 現(xiàn)象三強(qiáng)點(diǎn)貢獻(xiàn)被噪聲淹沒(méi)現(xiàn)象相位梯度估計(jì)看起來(lái)是隨機(jī)噪聲迭代幾輪之后相位誤差完全沒(méi)有規(guī)律圖像比校正前更亂。 原因強(qiáng)點(diǎn)門限設(shè)太低大量弱距離單元參與了梯度累加。這些單元的相位由噪聲主導(dǎo)累加后把強(qiáng)點(diǎn)的真實(shí)梯度信號(hào)淹沒(méi)了。 解決把strong_thresh_db從 10 提高到 15 甚至 20同時(shí)檢查參與估計(jì)的距離單元數(shù)是否超過(guò)n_strong_max上限。還可以打印每個(gè)距離單元的信雜比看看候選強(qiáng)點(diǎn)是否真的“強(qiáng)”。5.4 現(xiàn)象四出現(xiàn)相位跳變現(xiàn)象校正后的相位誤差沿脈沖軸有明顯跳躍圖像上出現(xiàn)重影對(duì)應(yīng)同一目標(biāo)在方位向分裂成兩個(gè)峰。 原因差分相位積分后沒(méi)有正確解纏繞或者把窗內(nèi)估計(jì)的相位誤差直接覆蓋到全孔徑窗外相位沒(méi)有過(guò)渡銜接。 解決積分時(shí)改用復(fù)數(shù)累加再取相位例如np.angle(np.cumsum(np.exp(1j * delta)))比直接對(duì)角度數(shù)組做 cumsum 更穩(wěn)。更新相位誤差時(shí)只覆蓋窗內(nèi)可靠段窗外沿用上一輪值過(guò)渡區(qū)域做三到五個(gè)點(diǎn)的平滑。5.5 現(xiàn)象五輸入用了幅度數(shù)據(jù)現(xiàn)象PGA 完全沒(méi)有效果相位誤差估計(jì)接近全零圖像沒(méi)有任何變化。 原因把復(fù)數(shù)回波取模后輸入 PGA。幅度數(shù)據(jù)的相位信息已經(jīng)丟失相位梯度自聚焦自然無(wú)從談起。 解決確認(rèn)輸入是距離壓縮后的復(fù)數(shù)矩陣數(shù)據(jù)類型為 complex64 或 complex128并且校正/成像鏈路中一直沒(méi)有丟失虛部。6. 進(jìn)階驗(yàn)證用模擬目標(biāo)量化聚焦與收斂6.1 模擬散焦注入驗(yàn)證算法的正確性在動(dòng)實(shí)測(cè)數(shù)據(jù)之前先做一組模擬驗(yàn)證能省掉大量排查時(shí)間。構(gòu)造幾個(gè)點(diǎn)目標(biāo)回波注入已知相位誤差跑完 PGA 再對(duì)比修正前后的相位譜和圖像熵可以確認(rèn)算法實(shí)現(xiàn)是否正確。下面是一段完整的驗(yàn)證腳本骨架。rng np.random.default_rng(42) n_range, n_pulse 128, 128 data np.zeros((n_range, n_pulse), dtypecomplex) # 圖像域放置三個(gè)點(diǎn)目標(biāo)轉(zhuǎn)換到慢時(shí)間域 points [(30, 10, 1.0), (80, 35, 0.8), (110, 60, 0.6)] for r0, fd, amp in points: n np.arange(n_pulse) data[r0, :] amp * np.exp(1j * 2 * np.pi * fd * n / n_pulse) # 注入相位誤差正弦 隨機(jī)游走模擬平臺(tái)振動(dòng)和殘余運(yùn)動(dòng)誤差 n np.arange(n_pulse) phase_err 0.8 * np.sin(2 * np.pi * 3 * n / n_pulse) phase_err 0.15 * np.cumsum(rng.normal(0, 0.05, n_pulse)) data * np.exp(1j * phase_err) data rng.normal(0, 0.05, data.shape) 1j * rng.normal(0, 0.05, data.shape) # 調(diào)用 PGA phi_est, data_corr pga(data, n_iter8) # 校正前后圖像 img_before np.fft.fftshift(np.fft.fft(data, axis1), axes1) img_after np.fft.fftshift(np.fft.fft(data_corr, axis1), axes1) def image_entropy(img): p np.abs(img) ** 2 p p / p.sum() return -np.sum(p * np.log(p 1e-12)) print(entropy before/after:, image_entropy(img_before), image_entropy(img_after))這段模擬刻意設(shè)成高信噪比、已知誤差的干凈場(chǎng)景目的是驗(yàn)證鏈路本身是否正確。正常實(shí)現(xiàn)下圖像熵會(huì)明顯下降比如從 5.x 降到 4.x具體數(shù)字跟點(diǎn)目標(biāo)數(shù)量和噪聲功率有關(guān)。如果熵不降先回第 3 章檢查win_init和shrink大概率是窗寬序列設(shè)置問(wèn)題。6.2 用圖像熵和對(duì)比度做收斂量化PGA 調(diào)參不能靠肉眼。實(shí)測(cè)數(shù)據(jù)里我習(xí)慣同時(shí)看三個(gè)量圖像熵、對(duì)比度和相位誤差最大變化量。圖像熵反映整體聚焦程度熵越低聚焦越好對(duì)比度用圖像矩陣的標(biāo)準(zhǔn)差除以均值計(jì)算對(duì)比度越高說(shuō)明強(qiáng)點(diǎn)越突出相位誤差最大變化量則是收斂判斷的直接依據(jù)。三者配合使用才能在參數(shù)調(diào)整時(shí)判斷是變好了還是只是“看起來(lái)更干凈”。形成一套固定習(xí)慣之后PGA 就不再是玄學(xué)拿到新數(shù)據(jù)先跑模擬注入驗(yàn)證代碼確認(rèn)實(shí)現(xiàn)沒(méi)問(wèn)題再上實(shí)測(cè)數(shù)據(jù)打印每輪窗寬和相位誤差變化量最后用熵和對(duì)比度量化前后差異。遇到散焦先排查輸入是否復(fù)數(shù)、距離是否對(duì)齊再去動(dòng)參數(shù)。這套流程幫我處理過(guò)不少實(shí)測(cè)數(shù)據(jù)大多數(shù)散焦問(wèn)題都能穩(wěn)定收斂希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取