Matched filter

208 ビュー (過去 30 日間)
vsee
vsee 2011 年 4 月 1 日
コメント済み: Charles Sutherland 2022 年 3 月 23 日
How can I write a mtached filter in Matlab? I have the filter design and signal processing tool boxes.

回答 (5 件)

Honglei Chen
Honglei Chen 2011 年 4 月 1 日
If you have a signal, x, then the matched filter's coefficients is given by time reverse of x, i.e., x(end:-1:1). If your signal is complex, you also need to to use complex conjugate. You can then use it just as an FIR filter. For example,
>> x = ones(10,1);
>> b = x(end:-1:1);
>> y = filter(b,1,x);
  5 件のコメント
Mustahsan Ali Khan Khanzada Rajput
Mustahsan Ali Khan Khanzada Rajput 2017 年 1 月 12 日
How to apply matched filter if the signal is complex?
Honglei Chen
Honglei Chen 2017 年 1 月 12 日
It's the same, use the filter function. The only difference is when you come up with the filtering coefficient, you need to add a conjugate, like
b = conj(x(end:-1:1))
HTH

サインインしてコメントする。


Andrew Newell
Andrew Newell 2011 年 4 月 1 日
Check out MATLAB Simulations for Radar Systems Design from the File Exchange.

Mathuranathan Viswanathan
Mathuranathan Viswanathan 2013 年 4 月 13 日
Hi You can try the model given here
Regards Mathuranathan

Bhaskar
Bhaskar 2011 年 4 月 15 日
To elaborate on Honglei's answer. If the signal you are trying to design a matched filter for, is x, then --
>> b = x(end-1:1);
>> y = filter(b,1,x);
You should already have x.
  1 件のコメント
mmm ssss
mmm ssss 2012 年 1 月 9 日
how can implement the same filter on image ?
how i should represent x.

サインインしてコメントする。


Nicole Bienert
Nicole Bienert 2020 年 1 月 7 日
The built in xcorr function can be used - you just need to normalize by fs and square the output. See below for an ideallized example:
%Purpose: Demonstrate how to match filter correctly
BW=3.84e6;
fs = 50*BW; %sample rate
T= 1/fs; %sample period
fc = 330e6; %center freq
chirpLen=0.075; %chirp length
A=3; %amplitude of voltage signal (normally unknown)
Ar=2; %amplitude of reference voltage signal (normally unknown)
%create the signal withought noise and zero padded on either side (zero
%padding not necessary because xcorr does that, I'm just demonstrating that
%signals don't need to be the same length.)
sig=[zeros(1,ceil(chirpLen*fs)),A*chirp(t,0,t(end),BW),zeros(1,ceil(chirpLen*fs))];
%create the reference chirp
ref_chirp=Ar*chirp(t,0,t(end),BW);
t=[0:T:(length(ref_chirp)-1)*T];
%normalize reference chirp: The reference chirp needs to have energy of 1
%so that it doesn't bias the output of the match filter. A filter shouldn't
%be applying gain to the signal or changing the units. The signal is in
%volts, so we divide by the square root of the energy to normalize it.
%If you know the signal's amplitude (for CW or FMCW):
energy=Ar^2/2*chirpLen;
%If you don't know the signal's amplitude, integrate to find energy (if it is noiseless):
%energy=trapz(t,ref_chirp.^2)
ref_chirp=ref_chirp/sqrt(energy);
% perform match filtering
[R,lags] = xcorr(sig,ref_chirp); %signals don't need to be the same length
%R is the sum of each data sample as the signals are shifted past
%eachother, so to make the numerical integration correct, you need to
%multiply by dx which is T in this case. Then to get the filtered voltage
%signal in units of energy, you need to square it.
R=(abs(R*T)).^2; %absolute value only necessary if signals are complex
% take only positive side
R = R(lags>=0);
lags=lags(lags>=0);
[matchFiltPeak,index]=max(R);
figure()
plot(lags*T,R)
xlim([index-250 index+250]*T)
display(['Energy in signal was: ',num2str(A.^2/2*chirpLen)])
display(['which is the same as the peak of the match filter: ',num2str(matchFiltPeak)])
  7 件のコメント
Walter Roberson
Walter Roberson 2022 年 1 月 5 日
code not working, t is undefined and later circular reference to refchirp
Charles Sutherland
Charles Sutherland 2022 年 3 月 23 日
This worked for me:
Change
t=[0:T:(length(ref_chirp)-1)*T];
to
t=[0:T:((chirpLen*fs)-1)*T];
and then move it to -
BW=3.84e6;
fs = 50*BW; %sample rate
T= 1/fs; %sample period
fc = 330e6; %center freq
chirpLen=0.075; %chirp length
A=3; %amplitude of voltage signal (normally unknown)
Ar=2; %amplitude of reference voltage signal (normally unknown)
t=[0:T:((chirpLen*fs)-1)*T];
Worked for me anyway...
Cheers

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMatched Filter and Ambiguity Function についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by