頻與脈沖壓縮:MATLAB雷達信號處理全解析)
不廢話直接進入正題。這段時間在整理雷達信號處理的資料又一次把線性調(diào)頻信號和脈沖壓縮在MATLAB里完整過了一遍。這個組合可以說是現(xiàn)代脈沖多普勒雷達的基石也是很多初學(xué)者從理論走向仿真的第一道門檻。標(biāo)題說“奇妙世界”一點不夸張當(dāng)你真正在代碼里看到寬脈沖發(fā)射出去、窄脈沖解算回來的那一瞬間對雷達體制的理解會上一個臺階。這篇博客我盡量把自己踩過的坑和覺得好用的套路都寫出來做一個從信號生成到匹配濾波實現(xiàn)脈沖壓縮的完整記錄。核心關(guān)鍵詞先放在這里線性調(diào)頻、匹配濾波、脈沖壓縮、時寬帶寬積、距離分辨率。整篇會圍繞這幾個概念展開用MATLAB代碼說話輔以必要的公式推導(dǎo)和參數(shù)計算。1. 為什么是線性調(diào)頻為什么需要脈沖壓縮1.1 單脈沖雷達的兩個硬指標(biāo)雷達系統(tǒng)有兩個最基礎(chǔ)的指標(biāo)最大作用距離和距離分辨率。作用距離是由發(fā)射脈沖的能量決定的通俗講就是脈沖越寬積累的能量越多回波信號就越強。而距離分辨率是由信號帶寬決定的脈沖越窄帶寬越大距離分辨率越高。問題來了常規(guī)的單載頻脈沖脈沖寬度和信號帶寬是綁定的。脈寬100微秒的方波脈沖帶寬就是約10kHz量級。想要遠距離探測就要用寬脈沖想要分辨鄰近目標(biāo)就要用窄脈沖。這兩個需求直接在單脈沖體制下矛盾了。這就是線性調(diào)頻信號存在的意義。它通過在一個較寬的脈沖內(nèi)部對頻率進行連續(xù)掃描讓寬脈沖同時擁有了大帶寬。這種信號被稱為大時寬帶寬積信號脈寬τ和帶寬B的乘積D τB遠超1。100微秒的脈寬匹配2MHz的帶寬D的值是200這就給了后續(xù)處理“舒展筋骨”的空間。1.2 匹配濾波和脈沖壓縮的本質(zhì)脈沖壓縮的核心是匹配濾波。從匹配濾波理論的角度看對一個已知波形的信號疊加白噪聲信噪比最大的線性濾波器就是信號本身的共軛鏡像反轉(zhuǎn)。換句話說匹配濾波器可以理解為一個“相關(guān)系數(shù)計算器”當(dāng)接收到的信號與發(fā)射信號波形吻合時輸出最大。但需要理清的關(guān)鍵點在于匹配濾波帶來的輸出峰值并不是直接把寬脈沖變窄而是通過頻域的相位處理把線性調(diào)頻信號內(nèi)的各頻率分量在輸出端“對齊疊加”。線性調(diào)頻信號本身是頻率隨時間線性變化的不同時刻發(fā)射的能量處于不同頻率匹配濾波的過程等于給各頻率分量加上了各自的相位補償讓它們在同一時刻達到同相疊加形成一個尖銳的窄脈沖。這個過程可以用一個生活化類比來理解一排人按順序走路彼此間距拉得很長寬脈沖走到終點時所有人都要同時到達前面的人放慢腳步等待、后面的人加速趕上相位補償最終擠成一團同時抵達終點窄脈沖。信號能量沒變但時間上的分布被壓縮了。1.3 時寬帶寬積到底在描述什么時寬帶寬積D τB雖然只是一個乘積但它直接決定了脈沖壓縮可以獲得的信噪比增益上限。在匹配濾波的脈沖壓縮后信號的峰值功率與噪聲功率比相對于壓縮前會提升D倍。也就是說發(fā)射功率不變的情況下脈沖壓縮相當(dāng)于給系統(tǒng)白送了D倍的信噪比增益。100微秒脈寬加上2MHz帶寬的D 200以dB為單位就是約23dB。這就是線性調(diào)頻信號在現(xiàn)代雷達中幾乎不可替代的根本原因。發(fā)射端用寬脈沖解決遠距離探測的能量需求接收端用匹配濾波把能量在時間上壓扁重新獲得窄脈沖的距離分辨率。初始階段做MATLAB仿真時最容易忽略的就是對這個乘積的理解。很多人只是套用了chirp函數(shù)和conv函數(shù)把圖形跑出來卻沒有真正意識到這個D值決定了系統(tǒng)性能的天花板后續(xù)的很多參數(shù)選擇也會從這里開始。2. MATLAB仿真框架的搭建思路2.1 工具選型手寫代碼與工具箱的邊界MATLAB做雷達信號仿真有兩條路線一是直接用Phased Array System Toolbox這類專用工具箱內(nèi)置了波形生成、匹配濾波、波束形成等模塊二是手寫代碼實現(xiàn)。我的建議是初期一定要手寫一遍核心流程不要只依賴工具箱。工具箱的封裝程度太高它會幫你處理掉很多細節(jié)但也會遮住數(shù)學(xué)原理。脈沖壓縮的核心操作其實就是FFT、復(fù)乘、IFFT這個流程手寫一遍比自己調(diào)用函數(shù)更能夠掌握它在做什么。比如匹配濾波的頻域?qū)崿F(xiàn)需要將接收信號與發(fā)射信號的共軛頻譜相乘再逆變換回時域。工具箱一句話就完成了但自己寫一遍能夠真正理解為什么要用共軛為什么需要翻轉(zhuǎn)頻譜。當(dāng)然工具箱也不是一無是處。在復(fù)雜場景比如陣列處理、多目標(biāo)檢測、雜波抑制下工具箱的正確性和完整性遠超手寫代碼。我的使用習(xí)慣是核心算法手寫驗證系統(tǒng)級仿真用工具箱加速。2.2 仿真參數(shù)的預(yù)設(shè)計仿真的第一步不是寫代碼而是把參數(shù)表列出來。目標(biāo)距離、目標(biāo)速度、脈沖寬度、帶寬、載頻、采樣率、脈沖重復(fù)間隔這些參數(shù)互相耦合。列成一個表格比跑到一半再改要省事得多。具體來說選擇載頻要考慮目標(biāo)RCS雷達散射截面特性和傳播損耗的頻段特性選擇帶寬要依照你所需要的距離分辨率公式是ΔR c / (2B)其中c是光速約3×10^8 m/s。如果想要10米的分辨率帶寬就需要約15MHz。選擇脈寬要綜合作用距離和多普勒模糊的考量脈寬越大單脈沖能量越高但多普勒容忍性會有所下降。以我常用的參數(shù)為例載頻10GHzX波段脈寬100微秒帶寬2MHz采樣率設(shè)為5MHz。據(jù)此計算距離分辨率大約是75米時寬帶寬積D200理論壓縮增益是23dB。采樣率的選擇考慮到線性調(diào)頻信號最高頻率偏移是±1MHz根據(jù)奈奎斯特定理采樣率至少要4MHz以上我取5MHz留出余量。這些參數(shù)都不是隨便定的。仿真過程中我建議把每個參數(shù)的選定理由寫進注釋里。出問題的時候這些注釋會大幅降低排查難度。2.3 仿真流程的主線與分支整個仿真流程的主線非常清晰生成發(fā)射信號線性調(diào)頻信號模擬目標(biāo)回波延時衰減噪聲設(shè)計匹配濾波器執(zhí)行脈沖壓縮分析壓縮前后的波形與信噪比這條主線就是本文接下來要逐步展開的內(nèi)容。每個步驟都可以擴展出多個分支比如加入多目標(biāo)、加入多普勒頻移、加窗函數(shù)抑制旁瓣等。初學(xué)階段先把主線跑通再逐步添加復(fù)雜度。3. 線性調(diào)頻信號的MATLAB實現(xiàn)3.1 從零生成LFM信號MATLAB中生成線性調(diào)頻信號可以直接用chirp函數(shù)但為了保持對信號結(jié)構(gòu)的完全掌控我更推薦自己寫代碼。一個典型的LFM基帶信號表達式為s(t) exp(jπKt2)其中K B/τ是頻率變化斜率。這里的基帶信號是復(fù)信號這就是為什么仿真中的LFM信號常常以復(fù)數(shù)形式出現(xiàn)的原因——實信號會丟失負頻率信息而復(fù)信號可以更干凈地表達頻譜結(jié)構(gòu)。下面是完整的MATLAB代碼段%% 參數(shù)定義 fc 10e9; % 載頻 10GHz B 2e6; % 帶寬 2MHz T 100e-6; % 脈沖寬度 100us fs 5e6; % 采樣率 5MHz c 3e8; % 光速 K B / T; % 調(diào)頻斜率 %% 時間軸與基帶LFM信號 N round(T * fs); % 總采樣點數(shù) t (0:N-1) / fs; % 時間序列 s_bb exp(1j * pi * K * t.^2); % 基帶LFM信號復(fù)信號每個參數(shù)的物理含義如下fc載頻做基帶仿真時只影響后續(xù)的多普勒和相參處理不直接影響LFM波形生成B帶寬決定距離分辨率和匹配濾波后的主瓣寬度T脈寬決定發(fā)射能量和時寬帶寬積fs采樣率必須在基帶包裹住B/2以上的頻率內(nèi)容c物理常數(shù)用于距離與時間的相互轉(zhuǎn)換3.2 上變頻與實信號的呈現(xiàn)基帶信號s_bb是復(fù)數(shù)但實際發(fā)射的射頻信號是實信號需要將基帶信號上變頻到載頻fcs_rf real(s_bb .* exp(1j * 2 * pi * fc * t));不過在基帶仿真中我們通常不會直接模擬載頻因為過高頻率會要求極高的采樣率導(dǎo)致數(shù)據(jù)量爆炸。10GHz的載頻如果直接仿真按奈奎斯特定理至少需要20GHz以上的采樣率一微秒的數(shù)據(jù)就有幾萬點100微秒的數(shù)據(jù)量更是天文數(shù)字。所以工程上普遍采用等效基帶仿真。這里的技巧是基帶仿真是完全線性的載頻只起搬移作用不改變信號的相對結(jié)構(gòu)因此可以在基帶層面完成所有處理最終結(jié)果乘上載頻因子即可復(fù)原射頻效果。這也解釋了為什么雷達系統(tǒng)仿真幾乎都在基帶域完成。3.3 觀察信號的時頻結(jié)構(gòu)線性調(diào)頻信號最直觀的特征就是頻率隨時間線性變化。用spectrogram函數(shù)可以清晰看到這種“斜坡”結(jié)構(gòu)spectrogram(s_bb, 128, 120, 256, fs, centered, yaxis); title(LFM基帶信號時頻圖);時頻圖上是條從零掃到2MHz的斜線。如果加漢明窗再看邊緣能量會被削弱時頻圖兩端會出現(xiàn)漸隱效果。這個現(xiàn)象在頻譜分析中很常見但初次接觸時容易誤以為加了窗信號質(zhì)量變壞了。它只是能量泄露被抑制了主瓣寬度變寬了屬于權(quán)衡取舍。4. 目標(biāo)回波模擬與接收處理4.1 目標(biāo)距離和回波延時雷達目標(biāo)回波的本質(zhì)是發(fā)射信號經(jīng)過往返延時后的衰減副本。距離R的目標(biāo)回波延時為τ_delay 2R / c系數(shù)2代表雙程路徑。如果我設(shè)置一個距雷達30公里的目標(biāo)那么回波延時就是τ_delay 2 * 30000 / 3e8 200微秒此時在走完100微秒的發(fā)射脈寬后還需要再加上200微秒的接收等待時間總仿真時長為300微秒。需要注意的是回波延時并不等于信號脈寬很多初學(xué)者會把這兩個概念搞混。要正確生成回波代碼可以這樣寫R_target 30e3; % 目標(biāo)距離 30km tau_delay 2 * R_target / c; % 回波延時 200us delay_samples round(tau_delay * fs); % 對應(yīng)的采樣點延遲 % 全仿真時長 發(fā)射脈寬 回波延時 total_T T tau_delay; N_total round(total_T * fs); t_total (0:N_total-1) / fs; rx_raw zeros(1, N_total); s_bb_full [s_bb, zeros(1, N_total - N)]; rx_raw(delay_samples1 : delay_samplesN) s_bb_full(1:N);第9行是關(guān)鍵回波信號是發(fā)射信號在時間上平移delay_samples個采樣點。這里延時后信號必須和發(fā)射信號保持內(nèi)存上的對齊才能保證后續(xù)匹配濾波的正確性。4.2 信噪比設(shè)定與噪聲注入在實際系統(tǒng)中回波到達雷達接收機時已經(jīng)極微弱。如果不添加噪聲回波信號會非常干凈信噪比無窮大這在實際雷達中不存在。因此模擬回波時需要人為加入高斯白噪聲。設(shè)定信噪比SNR_dB 10dB即回波信號功率比噪聲功率高10倍。噪聲疊加的代碼為SNR_dB 10; noise_power 10^(-SNR_dB/10); % 歸一化噪聲功率 noise sqrt(noise_power/2) * (randn(1, N_total) 1j*randn(1, N_total)); rx rx_raw noise;這里sqrt(noise_power/2)是把噪聲功率分配到實部和虛部各一半所以每部分功率為noise_power/2。這兩個隨機序列都服從均值為0、方差為0.5的實高斯分布。這個細節(jié)很容易被忽略但它直接決定了實際信噪比是否與設(shè)定相符。建議用實部和虛部分開查看的方式驗證噪聲注入是否正確而不是直接看復(fù)數(shù)向量的模值否則判斷容易出錯。4.3 多目標(biāo)與多普勒效應(yīng)單目標(biāo)場景跑通之后可以嘗試多目標(biāo)。多個目標(biāo)的回波是各自延時副本的線性疊加只需把不同延時和振幅的副本加到同一個接收信號向量里即可。代碼模式如下rx_multi zeros(1, N_total); R_targets [30e3, 30.5e3, 31.2e3]; % 多目標(biāo)距離 amp [1, 0.8, 0.5]; % 目標(biāo)回波幅度 for m 1:length(R_targets) td round(2 * R_targets(m) / c * fs); rx_multi(td1 : tdN) rx_multi(td1 : tdN) amp(m) * s_bb_full(1:N); end若目標(biāo)有徑向速度回波會產(chǎn)生多普勒頻移表現(xiàn)為基帶信號相位隨時間線性增加。多普勒頻率f_d 2 * v / λλ為載頻波長。30公里處X波段以300m/s徑向速度接近的目標(biāo)多普勒頻移大約20kHz。這個偏移相對于2MHz的帶寬是小的匹配濾波依然能夠輸出主峰但主峰位置會發(fā)生少量偏移。從失配的角度看只要多普勒頻移滿足 f_d 1/T即1/100μs 10kHz匹配濾波失配較小超出這個范圍壓縮增益會明顯下降。5. 脈沖壓縮的實現(xiàn)從時域相關(guān)到頻域快速卷積5.1 匹配濾波的兩種實現(xiàn)形式脈沖壓縮在數(shù)字域的實現(xiàn)有兩種方式時域卷積和頻域快速卷積。時域卷積本質(zhì)上是計算接收信號與發(fā)射信號鏡像反轉(zhuǎn)共軛的卷積結(jié)果也就是相關(guān)運算。對于長度為L的接收信號和長度為M的參考信號時域卷積復(fù)雜度是O(LM)量級當(dāng)序列長度為幾十萬甚至上千萬個采樣點的時候計算量是災(zāi)難性的。頻域快速卷積則利用FFT將時域卷積轉(zhuǎn)化為頻域復(fù)乘復(fù)雜度降到O(NlogN)。實現(xiàn)的核心步驟是三段式X fft(rx, N_fft); % 接收信號FFT H conj(fft(s_ref, N_fft)); % 參考信號FFT共軛 y ifft(X .* H); % 頻域相乘后IFFT回時域這里的s_ref是發(fā)射信號本地副本H的共軛操作正是匹配濾波的關(guān)鍵。由于FFT是循環(huán)卷積而線性卷積需要足夠的補零來避免柵欄效應(yīng)所以N_fft必須大于等于N_rx N_ref -1。在MATLAB中N_fft一般取2的冪次比如2^nextpow2(N_rx N_ref)。5.2 完整的脈沖壓縮代碼實測可用的完整代碼段如下N_fft 2^nextpow2(N_total N - 1); % FFT長度保證線性卷積 S_ref conj(fft(s_bb_full, N_fft)); % 匹配濾波頻域參考 RX fft(rx, N_fft); % 接收信號FFT Y RX .* S_ref; % 頻域匹配 pc_out ifft(Y); % 時域脈沖壓縮結(jié)果 pc_out pc_out(1 : N_total); % 截取有效部分這行代碼里的S_ref conj(fft(s_bb_full, N_fft))是整個脈沖壓縮的靈魂。它實現(xiàn)了匹配濾波器在頻域的構(gòu)造。注意這里用到的是s_bb_full發(fā)射信號的完整復(fù)包絡(luò)而不是某一小段。如果參考信號截取不當(dāng)哪怕差一個采樣點輸出主瓣的峰值都會很低。5.3 壓縮前后的對比與驗證脈沖壓縮完成后輸出的幅度譜峰值位置正是目標(biāo)所在的延時位置。30公里目標(biāo)的峰值應(yīng)當(dāng)在200微秒處對應(yīng)采樣點位置[~, peak_idx] max(abs(pc_out)); est_delay (peak_idx - 1) / fs; est_range est_delay * c / 2;壓縮前接收信號的信噪比很低目標(biāo)回波淹沒在噪聲里幾乎看不見壓縮后噪聲均勻分布在時間軸上而目標(biāo)能量集中到一個尖峰上峰值遠高于噪聲基底。這個現(xiàn)象就是匹配濾波增益的直觀體現(xiàn)。用如下代碼繪制前50微秒局部波形可以清晰看到主瓣figure; plot((0:N_total-1)/fs*1e6, 20*log10(abs(pc_out)/max(abs(pc_out)))); xlabel(時間 (\mus)); ylabel(歸一化幅度 (dB)); title(脈沖壓縮輸出); axis([0 50 -60 0]);主瓣的3dB寬度約為1/B 0.5微秒對應(yīng)75米的距離分辨率。壓縮前的100微秒脈寬與壓縮后的0.5微秒主瓣寬度形成了整整200倍的比值這個比值就是時寬帶寬積D。5.4 加窗旁瓣抑制匹配濾波輸出并非只有主瓣主瓣兩側(cè)還會出現(xiàn)一系列旁瓣。未加窗情況下LFM信號的壓縮輸出旁瓣電平僅有約-13.2dB。這個數(shù)值在實際雷達系統(tǒng)中是致命的——強目標(biāo)的旁瓣可能掩蓋鄰近的弱目標(biāo)。壓低旁瓣最常用的方法是在匹配濾波器前或FFT前對參考信號加窗。常見選擇有漢明窗、海寧窗、布萊克曼窗等。以漢明窗為例w hamming(N, periodic).; s_w s_bb_full .* w; S_ref_w conj(fft(s_w, N_fft)); Y_w RX .* S_ref_w; pc_w ifft(Y_w);加窗后旁瓣電平可以壓低到-40dB左右但代價是主瓣會變寬約1.5倍距離分辨率有所犧牲。這個權(quán)衡在雷達系統(tǒng)設(shè)計中非常普遍需要高分辨率就少加窗需要低旁瓣就多犧牲一點分辨率。工程上可以這樣做先不加窗觀察目標(biāo)分布再針對性地加窗優(yōu)化檢測性能。6. 常見問題與排查技巧實錄6.1 FFT點數(shù)不夠?qū)е碌臅r間混疊這個問題排在第一位是因為它非常隱蔽且直接影響結(jié)果正確性。FFT默認是循環(huán)卷積如果不補零到足夠長度時域卷積的尾部結(jié)果會折返到序列頭部產(chǎn)生時間混疊。目標(biāo)位置會出現(xiàn)峰偏移甚至出現(xiàn)虛假目標(biāo)。排查方法很簡單檢查N_fft是否大于等于N_total N - 1。如果不是直接改。調(diào)試時先用一個已知目標(biāo)距離檢測峰值位置如果計算距離與設(shè)定距離不符第一懷疑對象就是FFT長度。6.2 匹配濾波器參考信號選錯參考信號應(yīng)該使用發(fā)射信號的完整樣本很多初學(xué)者會參考接收信號截取一段來構(gòu)造匹配濾波器這是混淆了參考信號是與發(fā)射信號相關(guān)的信號這一原則。如果參考信號也是從接收信號里截取的噪聲的影響會混入濾波器設(shè)計壓縮輸出會大劣化。正確做法是在本仿真中參考信號就用s_bb_full。如果將來做實驗數(shù)據(jù)處理也應(yīng)當(dāng)用采樣的參考通道信號而不是直接從回波里提取。6.3 采樣率不足導(dǎo)致的頻譜混疊LFM信號帶寬B2MHz基帶頻譜的支撐區(qū)是[-1MHz, 1MHz]如果從零開始掃頻則是[0, 2MHz]。采樣率低于2B時會出現(xiàn)頻譜混疊匹配濾波的輸出主瓣會畸形旁瓣抬高。驗證方法對LFM信號的FFT結(jié)果做頻譜圖如果頻譜在頻帶邊緣出現(xiàn)明顯混疊說明采樣率過低了。工程經(jīng)驗是采樣率至少取2.5B~4B給濾波和后續(xù)處理留夠裕量。6.4 信噪比計算偏差噪聲注入時如果沒有正確分配實虛部功率最終信噪比會和設(shè)定不符合。比如把噪聲總功率直接給實部那么實部噪聲功率為設(shè)定值虛部沒有噪聲實際總噪聲功率被高估了3dB導(dǎo)致最終信噪比偏低3dB。排查方法計算壓縮前接收信號中目標(biāo)所在位置附近的實測信噪比用該值與設(shè)定值比較。多數(shù)情況下偏差都在噪聲建模這一步。6.5 失配目標(biāo)速度引起的匹配損失當(dāng)目標(biāo)有徑向速度時回波帶有多普勒頻移。對于LFM信號多普勒頻移造成匹配濾波輸出主瓣位置偏移和增益下降嚴(yán)重時目標(biāo)從主瓣“掉”到旁瓣里。定量來看多普勒容限約為1/T。當(dāng)多普勒頻移f_d遠小于1/T時可認為匹配濾波器近似匹配當(dāng)f_d接近1/T時輸出峰值出現(xiàn)明顯降低。這個也是為什么許多系統(tǒng)會設(shè)計多組匹配濾波器來覆蓋不同多普勒通道的原因。在MATLAB仿真中如果要模擬高速目標(biāo)推薦構(gòu)造多普勒濾波器組而不是指望單個匹配濾波器通吃。7. 實操心得與擴展方向把單目標(biāo)、單脈沖的線性調(diào)頻脈沖壓縮跑通之后后續(xù)能擴展的方向非常多。我按難度遞增列幾個我覺得實際價值比較高的加入staggered PRF脈沖串仿真研究距離/速度模糊解算把匹配濾波改為頻域的失配濾波如加窗旁瓣約束優(yōu)化把單通道變成多通道引入相控陣的波束形成做空時二維處理引入雜波模型地面雜波/海雜波研究MTI與MTD的抑制策略在脈沖壓縮前加STAP空時自適應(yīng)處理的粗暴版本先體驗效果每次做完一個擴展回過來看基礎(chǔ)匹配濾波代碼都會對它的簡潔和優(yōu)雅有更深的體會。很多人覺得雷達仿真難難在半路殺出的問題多但其實始終不離這三大塊信號、噪聲、濾波器。把這三者之間的關(guān)系理清楚了框架自然就立起來了。最后分享一個習(xí)慣所有仿真代碼保存時都把參數(shù)表以注釋塊的形式放在文件頭部并在代碼改動的關(guān)鍵行記錄日期和目的?;仡^讀半年乃至一年前的仿真代碼如果沒有這些注釋幾乎相當(dāng)于重新破解一遍。這個習(xí)慣幫我省過無數(shù)次返工的時間。這次從線性調(diào)頻到脈沖壓縮的MATLAB實現(xiàn)記錄就寫到這里。下一步我準(zhǔn)備在同樣的框架上加多普勒處理完成后如果有值得寫的東西再來分享。