本篇文章主要針對匹配濾波的要點及注意事項進行闡述。
匹配濾波的公式:
其中,h(t)是匹配濾波器衝激響應,s(t)是參考訊號,x(t)是目標回波訊號。
從上述公式,可得到以下結論:
1、匹配濾波是目標回波訊號與匹配濾波器衝激響應的線性卷積,而匹配濾波器的衝激響應就是參考訊號的「共軛、翻轉」。因此,匹配濾波是目標回波與參考訊號「共軛、翻轉」的線性卷積。
2、匹配濾波是回波訊號與參考訊號共軛、翻轉的線性卷積,那麼就可以通過頻域快速演算法fft實現。但是應注意的是,fft對應的是「迴圈卷積」,需滿足一定條件才能使得fft快速演算法結果與時域線性卷積結果相同,該條件將在後文介紹。
3、從公式最右側的等式可知,匹配濾波又相當於目標回波訊號與參考訊號的互相關。(由於參考訊號與目標回波訊號基本一致,有些資料中也稱為自相關。)
在matlab中,與上述三個結論分別對應的函式分別為conv、fft+ifft、xcorr。事實上,conv與xcorr在演算法上等價,只差共軛、翻轉兩個步驟。
錯誤的開啟方式:如果採用下面的程式,結果很有可能讓你很困惑!!!
clear all;
close all;
clc;
%% 引數
fs = 48e3; % 取樣頻率
tp = (21 + 1/3) * 1e-3; % 脈衝寬度
tr = 4 * tp; % 脈衝重複週期
nr = round(tr * fs);
np = round(tp * fs);
fc = 5e3; % 載波頻率
gamma = 500e3; % 調頻斜率
%% 訊號
t = (0:np - 1) / fs; % 快時間
sref = [exp(1j * 2 * pi * (fc * t + 0.5 * gamma * t.^2)), zeros(1, nr - np)]; % 參考訊號/發射訊號
st = circshift(sref, 128);
figure;
plot(abs(fftshift(fft(st))));
figure;
plot(abs(st),'r');hold on;
%% 通道
st = awgn(st, 5);
plot(abs(st),'b');hold off;
%% 匹配濾波
out1 = xcorr(st, sref);
out1 = out1(nr: end); % 前nr - 1個資料與後nr - 1個資料關於nr對稱,為了與後面長度一致,刪去前面的重複資料
% 法二:卷積(時域)
out2 = conv(st, conj(fliplr(sref)));
out2 = out2(nr: end); % 同理
% 法三:fft(頻域)
可以發現,採用上述程式時,fft方法的結果與conv方法的結果在3500-4000點時出現了不同,對於實際資料,該差距可能更明顯。我將在展示正確的**之後,解釋原因。
正確的方法:如果理解下面這段程式,你將不再困惑~
clear all;
close all;
clc;
%% 引數
fs = 48e3; % 取樣頻率
tp = (21 + 1/3) * 1e-3; % 脈衝寬度
tr = 4 * tp; % 脈衝重複週期
nr = round(tr * fs);
np = round(tp * fs);
fc = 5e3; % 載波頻率
gamma = 500e3; % 調頻斜率
%% 訊號
t = (0:np - 1) / fs; % 快時間
sref = [exp(1j * 2 * pi * (fc * t + 0.5 * gamma * t.^2)), zeros(1, nr - np)]; % 參考訊號/發射訊號
st = circshift(sref, 128);
figure;
plot(abs(fftshift(fft(st))));
figure;
plot(abs(st),'r');hold on;
%% 通道
st = awgn(st, 5);
plot(abs(st),'b');hold off;
%% 匹配濾波
out1 = xcorr(st, sref);
out1 = out1(nr: end); % 前nr - 1個資料與後nr - 1個資料關於nr對稱,為了與後面長度一致,刪去前面的重複資料
% 法二:卷積(時域)
out2 = conv(st, conj(fliplr(sref)));
out2 = out2(nr: end); % 同理
% 法三:fft(頻域)
out3 = ifft(fft(st, 2 * nr - 1) .* fft(conj(fliplr(sref)), 2 * nr - 1)); % 這裡修改啦!!!!
out3 = out3(nr:end); % 這裡修改啦!!!!
可以看到,在3500-4000點的誤差已經完全被消除掉,這是因為滿足了「迴圈卷積」等效計算「線性卷積」的條件,即fft點數n>=n1 + n2 - 1。其中,n1、n2分別為兩個訊號刪去左右兩側零值後的長度。事實上,matlab中conv函式計算的是兩個序列的線性卷積,而fft則對應序列的迴圈卷積。迴圈卷積是將有限長的序列進行週期延拓,等效為週期序列,進行卷積計算的。網路上有許多人提問:「conv與fft結果為什麼不同?」,這就是根本的原因。在滿足下面的公式時,可以無誤差地用迴圈卷積計算線性卷積:
其中,n1、n2分別為兩個訊號刪去左右兩側零值後的長度。例如,x(t) = ,那麼n1 = 3。
具體推導有時間再寫文章說明【手動狗頭】。
[1]趙志欣. 高頻外輻射源雷達新體制與訊號處理若干關鍵技術研究[d].武漢大學,2013.
《書譜》之悟道
唐代的大書法家 書法理論家孫過庭在他的不朽之作 書譜 中把學書過程分為了三個階段 初學分布,但求平正 既知平正,務追險絕 既能險絕,復歸平正。古往今來的書法實踐證明,這確是一條真理,是常說的 先走進去再走出來 由生到熟再到生的過程,是一切書法愛好者達到成功境地的必經之路。第一階段是非常重要的打基礎的...
rv player 不靠譜之rvio
最近忽然發現為動畫組寫過的乙個maya內建工具不能用了,工具的作用是使用rvio hw.exe轉換playblast出的tif序列圖,生成帶watermark的mov檔案。之前在maya2013上一直用的好好地,在2014以及2015版本都不能使用了,而且報出的錯誤也是十分怪異 這是個什麼鬼!這是個...
社群發現之譜聚類演算法的實現
譜聚類演算法實現 1 計算距離矩陣 歐氏距離,作為相似度矩陣 2 利用knn計算鄰接矩陣a 3 由鄰接矩陣計算都矩陣d和拉普拉斯矩陣l 4 標準化拉普拉斯矩陣 5 對拉普拉斯矩陣進行特徵值分解得到特徵向量 6 對特徵向量進行k means聚類 7 得到分類結果 import numpy as np ...