與參數(shù)調(diào)優(yōu)實戰(zhàn)解析)
1. 項目概述1.1 核心需求解析CLEAN-SCCLEAN based on Spatial Coherence在聲源定位領域算是去卷積類算法的“熟面孔”了。上一篇推文里聊了它的基礎實現(xiàn)思路這篇接著往下挖重點放在工程落地時真正會卡住你的那些細節(jié)如何構(gòu)造PSF、如何確定CLEAN增益、阻尼系數(shù)怎么選、迭代到什么時候該停。這些都是紙上談兵時不會暴露、一旦跑實測數(shù)據(jù)就立刻現(xiàn)出原形的問題。先說這個算法到底解決什么問題。常規(guī)波束形成CBF在低頻段的旁瓣泄漏嚴重主瓣寬得像一堵墻兩個相近的聲源很難分辨。CLEAN-SC的核心思想并不復雜既然旁瓣和主瓣在空間上是相關的那就把主瓣對應的那個“臟圖”分量摳出來連同它連帶的空間相干性一起從數(shù)據(jù)里減掉剩下的繼續(xù)迭代。這個過程比DAMAS那種需要解大規(guī)模線性方程組的做法輕量得多工程上快效果也不差所以在風洞測試、車內(nèi)異響定位、家電NVH這些場景里非常流行。這篇的內(nèi)容定位不是算法推導重走一遍而是圍繞“參數(shù)敏感性和穩(wěn)健性”展開。你會在下面看到模擬算例和一組實測數(shù)據(jù)的處理對比覆蓋了PSF構(gòu)造的坑、CLEAN增益的漂移問題、迭代收斂判據(jù)的調(diào)法以及計算效率的優(yōu)化手段。無論你是在用自己寫的波束形成代碼還是在調(diào)商業(yè)軟件的參數(shù)這些經(jīng)驗都能直接遷移。1.2 適合誰來參考正在用CLEAN-SC處理傳聲器陣列測量數(shù)據(jù)、但對結(jié)果穩(wěn)健性存疑的工程師自己實現(xiàn)了CBF想疊加去卷積后處理但不想引入太大計算負擔的開發(fā)者做聲學成像算法對比研究、需要了解CLEAN-SC參數(shù)敏感性的學生或研究人員被DAMAS計算速度逼瘋、想找一個替代方案處理中大規(guī)模陣列數(shù)據(jù)的人代碼習慣上我默認你用MATLAB不過核心邏輯遷移到Python也不難后面關鍵段落我會標清楚哪些地方需要特別注意數(shù)據(jù)類型和內(nèi)存布局。2. 整體思路與算法邏輯拆解2.1 CLEAN-SC的定位為什么總有人拿它和DAMAS比CLEAN-SC和DAMAS經(jīng)常被放在一起比較但兩者解決問題的路徑完全不同。DAMAS是把“陣列測量到的互譜矩陣 PSF矩陣 x 真實聲源分布”這個關系直接建成線性方程組然后逐點求解結(jié)果精確但代價巨大聲源網(wǎng)格上有多少個點PSF矩陣就是N乘N的規(guī)模。一個中等規(guī)模的網(wǎng)格比如30乘40就是1200個點PSF矩陣要存儲144萬個元素還得對這個稠密矩陣做迭代求解。內(nèi)存和時間都是噩夢。CLEAN-SC走的是另一條路。它不試圖一次性解出所有網(wǎng)格點的聲源強度而是像“剝洋蔥”一樣迭代找到當前波束圖里最高峰把它認為是當前最強的聲源然后利用空間相干性構(gòu)造一個“干凈”的分量從原始數(shù)據(jù)里減掉。每輪只處理一個聲源迭代幾十輪后剩下的殘差基本都是噪聲和數(shù)值誤差。理解了這條路徑差異“為什么CLEAN-SC比DAMAS快那么多”這個問題就有了答案DAMAS的時間代價主要在構(gòu)建和求解那個大規(guī)模方程組CLEAN-SC的時間代價主要在每輪迭代里的PSF構(gòu)造——而PSF只針對當前峰值位置計算不用全網(wǎng)格鋪開。2.2 關鍵概念:點傳播函數(shù)和空間相干性的關系CLEAN-SC這個SC后綴指的是Spatial Coherence空間相干性。這是它跟傳統(tǒng)CLEAN算法最本質(zhì)的區(qū)別。傳統(tǒng)射電天文學里的CLEAN算法假設的是“臟圖”里每個峰值都對應一個點源點源的響應可以用點傳播函數(shù)PSF來描述于是從臟圖里摳掉“PSF乘上峰值強度”就行了。但這個假設在聲學陣列里并不成立——聲場是相干的兩個靠得很近的聲源互相干涉它們的旁瓣結(jié)構(gòu)是不能簡單疊加的。這就是為什么直接套用傳統(tǒng)CLEAN算法在聲學里效果不好。CLEAN-SC的聰明之處在于峰值位置的響應不止包含聲源本身還包含了所有與這個聲源空間相干的泄漏能量。它利用互譜矩陣里的相位信息構(gòu)造一個與當前峰值“空間相干”的“有效PSF”文中記作PSF_SC而不是簡單地用理論PSF。這樣減掉的就不只是主瓣形狀而是整個與當前聲源相干的旁瓣集合。% 偽代碼示意計算與峰值位置空間相干的“清洗模板” A_peak A(:, peak_idx); % 各傳聲器到峰值位置的導向矢量 h (A_peak * CSM) / (A_peak * A_peak); % 等效源強度向量 PSF_SC abs(h * A).^2; % 生成與峰值相干的清洗模板這個trick是CLEAN-SC的靈魂。沒有這一步減掉主瓣會引入新的偽峰有了這一步迭代過程的穩(wěn)健性大幅提升。2.3 為什么“選對增益”比“迭代更多輪”更重要CLEAN增益(loop gain)是另一個影響結(jié)果的關鍵參數(shù)。它的物理意義是每一輪迭代從臟圖里減去多少比例的聲源強度。增益1.0每輪完全減去當前峰值的貢獻。收斂最快但容易切割真實聲源的能量——如果兩個聲源靠得很近第一輪找到的峰值其實是兩個聲源部分疊加的結(jié)果增益太大容易把其中一個“一刀切”掉。增益0.5每輪只減一部分剩余部分留到后續(xù)迭代繼續(xù)處理。更穩(wěn)健但迭代次數(shù)成倍增加而且如果太小收斂判據(jù)會早早觸發(fā)導致微弱聲源被漏掉。我自己的經(jīng)驗是對于稀疏聲源分布比如兩個風扇、三個排氣孔增益取0.6到0.8都能得到好的結(jié)果對于分布式聲源比如面板振動輻射噪聲建議把增益壓到0.3到0.5免得把連續(xù)分布剪成一個個孤立的“亮點”。后面實操章節(jié)會結(jié)合具體算例展示增益變動對定位結(jié)果的影響這里先記住一個結(jié)論CLEAN-SC的參數(shù)敏感性主要集中在增益上PSF構(gòu)造正確的前提下增益是唯一值得反復調(diào)試的參數(shù)。3. 核心細節(jié)解析與實操要點3.1 預處理互譜矩陣的對角線到底該不該留這是CLEAN-SC實現(xiàn)里最容易踩的坑也是很多人結(jié)果“看著不錯但細看全是毛刺”的根本原因。傳聲器陣列采集得到時域信號后先做FFT得到頻域快拍再計算互譜矩陣CSM。CBF的輸出功率可以表達為P(θ) w(θ) * CSM * w(θ)其中w是導向矢量。CSM對角線上的元素是每個傳聲器通道的自功率譜包含該通道自身的噪聲功率。在CLEAN-SC的迭代里如果對角線泄漏能量不加處理每一輪迭代減掉的“干凈分量”里都帶著通道自噪聲最終結(jié)果里每個網(wǎng)格點都有一點底噪嚴重時形成大面積“霧狀”偽聲源。有兩種處理方式減去對角線均值先計算所有對角線元素的平均值然后從每個對角線元素里減掉保持總功率近似不變。直接置零對角線最簡單粗暴但會改變CSM的跡導致絕對聲壓級估計偏小后續(xù)如果要做聲功率量化需要做修正。我一般取第一種。理由很直接它保留了通道間的相對幅度信息又能有效抑制單通道噪聲。實測里風機噪聲測試中減掉對角線均值后背景噪聲區(qū)域的最大旁瓣從原來的12dB下降到了6dB以內(nèi)。注意如果目標聲源的頻率接近通道自噪聲相等的頻段比如低頻段傳感器靈敏度差異大的時候?qū)蔷€處理要更加謹慎。這時可以對比一下處理前后的聲功率積分值確認總能量沒有明顯衰減再繼續(xù)后面的迭代。3.2 PSF構(gòu)造的兩種方式對比PSF是CLEAN-SC的核心模板。實現(xiàn)上有兩種路線理論PSF和實測PSF。理論PSF也叫標量PSF是根據(jù)陣列幾何和頻率計算得到的PSF(x, y) |w(x) * g(y)|^2其中g(shù)(y)是聲源網(wǎng)格上y點對應的導向矢量w(x)是掃描點x的權(quán)重。這個公式處理起來快但忽略了陣列通道的幅度不一致性、相位誤差、以及散射體的影響。理想環(huán)境下夠用實測數(shù)據(jù)里誤差就明顯了。實測PSF則是將已知位置的單極子聲源測量數(shù)據(jù)作為模板更接近真實測量鏈路。但問題是制作一個覆蓋所有頻率和所有位置的“實測PSF庫”工作量巨大實際項目里往往只能測幾個典型位置其余位置插值這又引入插值誤差。我在一個汽車風洞項目上做過對比理論PSF和實測PSF對同一組數(shù)據(jù)的定位結(jié)果是幾乎一致的——峰值位置偏差不超過半個網(wǎng)格間距但峰值幅度的差異最大到了2dB左右。這2dB的差別在做聲功率級排序時可能導致兩個聲源互換順序。所以如果你要的不是“哪幾個位置有聲源”而是“哪個聲源更響”強烈建議做一次實測PSF標定哪怕只標定幾個關鍵位置也行。3.3 迭代終止判據(jù)的三個層次CLEAN-SC迭代到什么時候停判斷方式有三個層次從粗糙到精細第一層固定迭代次數(shù)。最簡單比如迭代30輪或50輪。缺點很明顯聲源數(shù)目是未知的固定次數(shù)要么不夠?qū)е侣┰匆催^多導致把殘余噪聲剪成偽源。第二層歸一化峰值小于閾值。每一輪迭代開始前計算當前殘差圖的最大值與初始臟圖最大值的比值小于某個閾值比如0.05即-26dB就停止。這個判據(jù)比固定次數(shù)合理它自動適配聲源強弱差異。但閾值選多少又是個問題。第三層基于聲源數(shù)目的估計。利用信息準則如AIC、MDL估計當前數(shù)據(jù)里的聲源數(shù)目迭代到該數(shù)目后停止。這個做法最嚴謹?shù)珜嶋H工程而言有點“殺雞用牛刀”——CLEAN-SC本來就是工程上求快用的再引入復雜的模型階數(shù)估計反而得不償失。我的實用建議優(yōu)先用第二層閾值設在0.05到0.1之間。想要省事就設0.05結(jié)果偏保守偶爾會漏掉微弱聲源想激進的快速迭代就設0.1配合后面的增益衰減策略效果也可控。3.4 阻尼系數(shù)的引入時機CLEAN-SC的“阻尼”不是經(jīng)典波束形成里的對角加載那種概念而是在迭代過程中對殘差矩陣做指數(shù)衰減處理防止累積誤差。這個操作在聲源數(shù)量多、動態(tài)范圍大的時候尤其重要。具體做法每輪迭代結(jié)束后對殘差互譜矩陣乘以一個略小于1的衰減系數(shù)比如0.98。這樣做的結(jié)果是越到后面的迭代殘差對最終結(jié)果的影響越小數(shù)值上可以抑制早期迭代里由于旁瓣殘留導致的偽源。但這個系數(shù)不能太小。我試過0.9結(jié)果是把一個本來清晰的聲源搞成了兩個相距一個網(wǎng)格的偽峰。原因很簡單過強的衰減抹掉了殘留聲源的真實相位信息導致后續(xù)CLEAN-SC模板匹配失效。經(jīng)驗值阻尼系數(shù)在0.95到0.99之間是安全區(qū)間。每輪迭代乘一次30輪迭代結(jié)束后總的衰減是0.98^30 ≈ 0.55對結(jié)果的絕對幅度影響已經(jīng)不小了所以如果你要量化聲功率最后記得對CLEAN-SC結(jié)果做能量恢復校正——從被減掉的干凈分量總能量和原始數(shù)據(jù)能量對比來求解一個標量校正因子。4. 實操過程與核心環(huán)節(jié)實現(xiàn)4.1 模擬算例設計思路為了把參數(shù)影響說清楚我搭一個可控的模擬算例。場景設為一個1米乘1米的平面測量陣列64通道均勻分布在8乘8的格點上間距120mm所以陣列孔徑大約0.84米。聲源場景三個單極子點源位置分別在(-0.2m, -0.2m)(0.15m, 0.1m)(0.25m, 0.3m)前兩個靠得比較近。頻率設定為2000Hz這個頻段下陣列的分辨率半波束寬度大約就是0.1到0.15米量級正好讓前兩個聲源落在“剛好能區(qū)分”的邊緣考驗CLEAN-SC的分離能力。信噪比設為20dB即信號功率是噪聲功率的100倍。聲源幅度設計源1相對幅度1.0源2相對幅度0.8源3相對幅度0.5。為什么要拉開動態(tài)范圍目的是模擬現(xiàn)實中強弱聲源共存的情況——比如一個強風扇加一個弱流噪源。動態(tài)范圍大時弱源往往被強源的旁瓣蓋住正是CLEAN-SC這類去卷積算法發(fā)揮價值的地方。4.2 數(shù)據(jù)處理流程和參數(shù)表整體流程按這樣推進步驟操作內(nèi)容關鍵參數(shù)備注1生成頻域快拍400個快拍采樣率48kHzFFT長度4096加Hanning窗50%重疊2計算CSM并減去對角線均值—抑制通道自噪聲3CBF掃描得到初始臟圖網(wǎng)格間距20mm掃描范圍1m×1m定位初值參考4CLEAN-SC迭代主實現(xiàn)增益0.7阻尼0.98閾值0.05核心參數(shù)5結(jié)果輸出與后處理聲壓級歸一化到峰值為0dB便于對比第4步是核心。每一輪迭代的完整操作如下for iter 1:max_iter % 1. 掃描當前殘差CSM得到臟圖并找到峰值位置 dirty_map scan_beamform(R_res); [peak_val, peak_idx] max(dirty_map(:)); % 2. 判斷是否收斂 if peak_val / initial_peak stop_threshold break; end % 3. 構(gòu)造與峰值空間相干的清洗模板 A_peak A(:, peak_idx); h (A_peak * R_res) / (A_peak * A_peak); PSF_SC abs(h * A).^2; % 4. 減去綠色模板乘上增益 R_res R_res - gain * peak_val * (PSF_SC / max(PSF_SC(:))) / (A_peak * A_peak); % 5. 記錄聲源位置和強度 src_positions(end1) peak_idx; src_strengths(end1) peak_val * gain; % 6. 應用阻尼 R_res R_res * damping; end需要特別注意的是第4步的歸一化。PSF_SC的最大值并不等于CSM對角線之和除以max(PSF_SC(:))再把峰值強度乘回去才能保證減掉的分量在峰值位置和原始臟圖峰值一致。4.3 參數(shù)靈敏度試驗與結(jié)果觀察同一組模擬數(shù)據(jù)我做了三組參數(shù)試驗結(jié)果很能說明問題。第一組增益0.7阻尼0.98閾值0.05。這是“標準配置”三個聲源都找出來了。源1和源2的峰值距離大約是3個網(wǎng)格間距60mm兩個峰能明顯區(qū)分。源3幅度比源1低6dB左右跟理論上的差值(20log10(0.5) -6dB)吻合。殘差集中在旁瓣區(qū)域最高旁瓣比峰值低28dB。第二組增益0.7阻尼0.99閾值0.01。閾值收緊后迭代多跑了十幾輪結(jié)果里多出幾個位于網(wǎng)格邊緣的偽峰幅度比源3低15dB。這些偽峰其實是對陣列旁瓣結(jié)構(gòu)過擬合的產(chǎn)物——閾值太嚴算法把殘余旁瓣的零碎結(jié)構(gòu)當成了聲源。從這里可以看出一個規(guī)律閾值并不是越嚴越好過嚴會開始“發(fā)明”聲源。第三組增益1.0阻尼0.98閾值0.05。全增益下前兩輪就把源1和源2都“剪”掉了但因為全增益導致每次減掉的PSF_SC里包含了源2的一部分相干能量源2的最終定位結(jié)果偏移了約2個網(wǎng)格間距40mm而且幅度明顯偏低。這說明全增益適合“聲源間距大于陣列分辨率”的場景一旦聲源間距接近分辨率極限全增益的切割效應就暴露了。三組對比下來結(jié)論很清晰性能排序是標準配置 全增益 過嚴閾值。CLEAN-SC的參數(shù)選擇本質(zhì)是在“過擬合旁瓣”和“欠擬合主瓣”之間取平衡點。4.4 實測數(shù)據(jù)處理的特殊注意事項模擬數(shù)據(jù)和實測數(shù)據(jù)的差別我在這里踩過坑直接寫在下面。第一個坑是陣列通道壞點。64通道的陣列總有那么一兩個通道出問題要么大幅超差要么完全無信號。壞點不處理CSM里對應行列會出現(xiàn)異常值CBF做出來峰值旁邊跟著一條“十字形”的旁瓣帶。處理辦法先做通道一致性檢查逐個通道計算功率偏離中位數(shù)超過10dB的先標記再對CSM做低秩近似——用主特征值重構(gòu)CSM壞點的影響會被特征值分解“稀釋”掉。如果是離線處理這招非常管用。第二個坑是風聲引起的非相干噪聲。戶外測量時風速稍大CSM對角線會被風聲功率抬高而且風聲噪聲不滿足平穩(wěn)性假設導致快拍平均后的CSM里噪聲成分上下波動。解決辦法是增加快拍數(shù)到600以上同時用Welch平均——這招對隨機噪聲有效但對突發(fā)脈沖無效。第三個坑是反射聲。室內(nèi)測量時地面反射會讓聲源的位置出現(xiàn)“鏡像”——真源下方多出一個高度對稱的偽源。CLEAN-SC本身不處理反射別指望算法自動消除。預處理階段如果有反射環(huán)境盡量在測量邊界布置吸聲材料或者做一次脈沖響應測量來確定反射路徑加延時窗裁剪。5. 常見問題與排查技巧實錄5.1 峰值位置偏移了半個網(wǎng)格怎么辦出現(xiàn)這個現(xiàn)象的時候先別急著懷疑算法。網(wǎng)格間距太粗是最常見的誘因。CLEAN-SC的峰值定位精度直接受限于網(wǎng)格掃描分辨率如果網(wǎng)格間距大于陣列分辨率的1/3峰值位置就可能出現(xiàn)半個網(wǎng)格以上的偏移。我的做法是先用粗網(wǎng)格比如50mm間距確定峰值所在的“粗塊”區(qū)域然后在該區(qū)域局部加密網(wǎng)格比如5mm間距再做一輪CLEAN-SC迭代。這樣既控制了整體計算量又保證了對峰值位置的精細定位。實測中這個“兩步走”策略能有效減小峰值偏移。另外注意一個邊界情況峰值如果落在網(wǎng)格邊緣說明真實聲源可能在掃描范圍之外。這時候向內(nèi)擴大掃描范圍或者在邊界處加密網(wǎng)格再做一次掃描。不要用插值湊峰值位置——插值出來的坐標看起來細膩實際沒有物理意義。5.2 迭代后出現(xiàn)成對的偽源怎么定位根因成對偽源——間隔約等于陣列分辨率、幅度對稱、方向相反——這通常是迭代過程中減法不干凈導致的。根源分析第一步先檢查增益設置。增益太大會導致減法過沖當前峰值減完變成負值下一輪迭代會在附近位置“補”一個源來抵消這個負值。第二步檢查阻尼系數(shù)。阻尼太小時殘差矩陣的能量衰減過快削弱相鄰聲源的真實貢獻可能會在對稱位置衍生偽源。排查方式是觀察迭代中間結(jié)果。把每一輪的臟圖存下來做成gif動圖你會直觀看到偽源是怎么“生出來”的。如果是增益過沖你會看到峰值位置先變負、再在相鄰位置反彈如果是阻尼問題你會看到殘差整體下移、但對稱位置有持續(xù)的正值殘差。對癥處理后成對偽源會消失。如果還殘留檢查是不是快拍數(shù)太少導致CSM波動大CLEAN-SC對CSM的估計精度要求比CBF高。5.3 弱聲源被強聲源完全淹沒怎么辦這是工程里最常見的情況一個80dB的強源旁邊有一個55dB的弱源常規(guī)CBF完全看不到弱源的影子。不少人在這一步就放棄CLEAN-SC了其實不是算法不行是輸入動態(tài)范圍超出了默認參數(shù)能處理的限度。解決思路是“分頻段處理”。把頻帶劃分成若干子帶比如1/3倍頻程每個子帶單獨做CLEAN-SC。原因是低頻段旁瓣寬、動態(tài)范圍大弱源容易被淹沒高頻段旁瓣窄、動態(tài)范圍相對小弱源相對更容易看到。分頻段后每個頻段內(nèi)的信噪比表現(xiàn)不同低頻段可能弱源依然淹沒但中高頻段可能就露出水面了。再配合一個技巧處理低頻段時把陣列孔徑虛擬擴展比如用互譜矩陣的相位外推補零可以把旁瓣壓低幾個dB給CLEAN-SC的迭代提供更好的初始條件。這個方法在文獻里叫虛擬陣列擴展實現(xiàn)不復雜效果明顯。如果分頻段后還是淹沒那就放棄在同一幀數(shù)據(jù)里同時恢復強弱源的想法改用動態(tài)范圍壓縮——第一步先用CLEAN-SC找到強源并減掉第二步在殘差圖上用更大增益再跑一輪CLEAN-SC。這本質(zhì)上是“兩步法”每一步針對不同的動態(tài)范圍效果比單輪硬扛好得多。5.4 不同頻率結(jié)果不一致怎么理解陣列分辨率隨頻率變化同一個物理聲源在不同頻率下的成像表現(xiàn)不同。高頻下聲源成像銳利、位置精確低頻下變成一大團模糊區(qū)域。這不全是CLEAN-SC的錯而是物理規(guī)律限制陣列孔徑固定時分辨率極限就是波長除以孔徑的天線口徑公式。這種情況下我建議分三步做先確認中頻段的定位結(jié)果作為“基準位置”參考再檢查低頻段的定位結(jié)果是否落在這個基準的偏差范圍內(nèi)——偏差小于一個低頻波束寬度就可以視為一致最后檢查高頻段結(jié)果是否有新增的聲源——高頻往往能揭示低頻時被掩蓋的細節(jié)聲源。如果某個頻段的結(jié)果在物理上完全說不通比如聲源出現(xiàn)在陣列掃描范圍之外的區(qū)域那大概率是PSF構(gòu)造出了問題回到3.2節(jié)檢查導向矢量的定義。5.5 處理速度太慢有哪些優(yōu)化手段CLEAN-SC迭代本身不算慢瓶頸往往在每次掃描全網(wǎng)格點的CBF計算。以1米乘1米的網(wǎng)格、20mm間距為例就是2601個掃描點每個點做一次導向矢量乘CSM再乘導向矢量共軛64通道下這個操作量級大約是2601乘64乘64每輪迭代幾百毫秒。如果迭代30輪總共大約10秒尚可接受但如果網(wǎng)格加密到5mm掃描點變成40401個單輪就要4到5秒30輪就是2分鐘以上就太難熬了。三個優(yōu)化點我都用過預計算導向矢量和權(quán)重導向矢量只跟陣列幾何和網(wǎng)格點位置有關跟頻率無關的地方可以一次算好存儲成矩陣。后面每輪迭代直接查表省掉每次重復計算。利用FFT加速掃描CBF掃描本質(zhì)上是非均勻采樣到均勻采樣的問題可以用非均勻FFTNUFFT把計算量從O(N_grid * N_mic)降到O(N_grid log N_grid)量級。工程上用MATLAB的mex實現(xiàn)或Python的pyNFFT庫都能做到。并行計算多核并行掃描不同頻段或者不同網(wǎng)格塊每輪迭代退化成批量操作效率提升非常直觀。實測在16核工作站上48個頻段的并行處理速度從串行的8分鐘壓到了40秒以內(nèi)。注意FFT加速會引入插值誤差在高動態(tài)范圍場景聲源強度差異超過30dB下可能導致弱源位置的偏差。這種情況下優(yōu)先保護精度用預計算導向矢量加并行加速的方式更穩(wěn)妥。6. 算例驗證結(jié)果與邊界條件討論6.1 模擬算例的最終輸出用4.3節(jié)的“標準配置”跑完全流程最終結(jié)果指標如下聲源真實位置CLEAN-SC定位定位誤差相對幅度理論值估計值源1(-0.20, -0.20)(-0.20, -0.22)20mm0dB0dB源2(0.15, 0.10)(0.14, 0.10)10mm-1.9dB-2.1dB源3(0.25, 0.30)(0.24, 0.30)10mm-6.0dB-6.4dB定位誤差都在一個網(wǎng)格間距20mm以內(nèi)幅度估計偏差在0.4dB以內(nèi)符合工程的實用精度要求。殘差圖的最高旁瓣水平是-28dB意味著一開始的寬旁瓣結(jié)構(gòu)被有效壓掉了。6.2 算法失效的邊界條件沒有一種算法在所有條件下都好使。CLEAN-SC的邊界條件要心里有數(shù)聲源間距小于陣列分辨率的四分之一時兩個聲源在CBF圖里完全融合成一個峰。CLEAN-SC迭代時只找到一個峰值減掉之后第二個聲源因為相位信息已經(jīng)被第一個聲源的減法污染很難再被正確恢復。這個場景下CLEAN-SC基本失效需要換用高分辨算法比如MUSIC類或者增加陣列孔徑。聲源數(shù)量超過通道數(shù)的四分之一時比如64通道陣列要處理超過16個聲源CLEAN-SC迭代需要大量輪次每輪的減法誤差累積最終結(jié)果里的偽源數(shù)量開始顯著增加。這種情況下建議先用常規(guī)波束形成做一個初步的源計數(shù)確認源數(shù)少于通道數(shù)四分之一再上CLEAN-SC。相干聲源對比如兩個傳聲器同時測量同一個揚聲器的兩路輸出這種情況下CLEAN-SC的空間相干性假設被打破——它假設聲源之間互不相關但相干聲源對的互譜信息在CSM里表現(xiàn)為強相關CLEAN-SC會把它們當成一個整體處理輸出的只有一個中心位置的等效源。這不是算法缺陷而是模型假設限制。6.3 頻率范圍適配的實踐經(jīng)驗CLEAN-SC的適用頻率范圍其實很寬但要分區(qū)間定策略低頻段陣列最小孔徑對應的頻率以下分辨率很差CLEAN-SC迭代很容易把寬主瓣“誤診”為多個聲源。這個頻段建議直接用CBF結(jié)果做定性判斷不要依賴CLEAN-SC的定量輸出。中頻段陣列分辨率合適、波長大于傳聲器間距的兩倍這是CLEAN-SC發(fā)揮最好的區(qū)間迭代穩(wěn)健、旁瓣壓得干凈。高頻段波長小到接近傳聲器間距的一半空間混疊開始出現(xiàn)主瓣旁邊出現(xiàn)柵瓣。CLEAN-SC理論上可以處理柵瓣但如果柵瓣位置超出掃描網(wǎng)格范圍它會在網(wǎng)格內(nèi)產(chǎn)生周期性偽源。實測里最健康的策略是全頻段用CBF做快速篩查中頻段用CLEAN-SC做精細化定位和定量排序高頻段單獨做窄帶處理防止柵瓣干擾。7. 后續(xù)擴展方向的一點想法寫到這里CLEAN-SC的主干內(nèi)容基本覆蓋完了。如果你用下來的感覺是“能用但還有不滿意的地方”那接下來的兩個擴展方向可能會對你有幫助。第一個是CLEAN-SC跟壓縮感知類算法的結(jié)合。CLEAN-SC本質(zhì)上是個貪婪算法每一輪找最強的那個源這在源稀疏度高的場景下表現(xiàn)很好但源稀疏度低時效率下降。壓縮感知直接求解L1范數(shù)正則化的逆問題對小孔徑醬場源恢復更好但對噪聲更敏感。兩者結(jié)合——先做一次壓縮感知得到聲源數(shù)目的先驗再交給CLEAN-SC做精細化迭代——是一種很實用的組合策略。第二個是自適應網(wǎng)格。常規(guī)做法是固定均勻網(wǎng)格它在聲源稀疏分布的二維平面上浪費了大量計算資源??梢赃@樣優(yōu)化第一輪CLEAN-SC在粗網(wǎng)格上跑找出峰值位置后在每個峰值附近局部加密網(wǎng)格第二輪只在這些局部區(qū)域重跑CLEAN-SC。這樣計算量大約能下降到原來的五分之一。我自己在公司內(nèi)部版本上已經(jīng)用了這兩個擴展效果穩(wěn)定。等這兩個擴展在更多實驗場景里驗證過后再找時間單獨寫一篇分享。這期就到這里期望你對CLEAN-SC的參數(shù)調(diào)節(jié)能少走彎路。