整合フィルター処理
整合フィルター処理を使用する理由
Receiver Operating Characteristicsの結果から、検出確率は SNR の増加とともに上昇することがわかります。ホワイト ガウス ノイズ内の確定的な信号については、信号に適合するフィルターを使用することで、受信機における SNR を最大化できます。整合フィルターは、信号を時間反転し、共役化したものです。整合フィルターは因果律を満たすようにシフトされます。
整合フィルター処理のサポート
整合フィルターを実装するには、phased.MatchedFilter を使用します。
phased.MatchedFilter を使用すると、整合フィルター係数やスペクトル重み付け用ウィンドウといった整合フィルターの特性をカスタマイズできます。スペクトルの重み付けを適用する場合、カバレッジ領域と係数のサンプル レートを指定できます。また、テイラー ウィンドウ、チェビシェフ ウィンドウ、およびカイザー ウィンドウには、指定できる追加のプロパティがあります。
スペクトル重み付けによる線形 FM 波形の整合フィルター処理
この例では、スペクトルの重み付けを使用した場合と使用しなかった場合の整合フィルター処理の結果を比較します。スペクトルの重み付けは、時間領域のサイドローブを減らすために線形 FM 波形でしばしば使用されます。
持続時間 0.1 ミリ秒、スイープ帯域幅 100 kHz、パルス繰り返し周波数 5 kHz の線形 FM 波形を作成します。線形 FM パルスにノイズを付加し、ノイズを含む信号を整合フィルターを使用してフィルター処理します。この例では、スペクトル重み付けを使用する場合と使用しない場合の整合フィルターを適用します。
波形を指定します。
waveform = phased.LinearFMWaveform('PulseWidth',1e-4,'PRF',5e3,... 'SampleRate',1e6,'OutputFormat','Pulses','NumPulses',1,... 'SweepBandwidth',1e5); wav = getMatchedFilter(waveform);
スペクトル重み付けなしの整合フィルターと、テイラー ウィンドウをスペクトル重み付けに使用する整合フィルターを作成します。
mfilter = phased.MatchedFilter('Coefficients',wav); taylorfilter = phased.MatchedFilter('Coefficients',wav,... 'SpectrumWindow','Taylor');
信号を作成し、ノイズを付加します。
sig = waveform(); rng(17) x = sig + 0.5*(randn(length(sig),1) + 1j*randn(length(sig),1));
各フィルターを使用して、ノイズを含む信号を個別にフィルター処理します。
y = mfilter(x); y_taylor = taylorfilter(x);
波形の実数部とノイズ信号をプロットします。
t = linspace(0,numel(sig)/waveform.SampleRate,... waveform.SampleRate/waveform.PRF); subplot(2,1,1) plot(t,real(sig)) title('Input Signal') xlim([0 max(t)]) grid on ylabel('Amplitude') subplot(2,1,2) plot(t,real(x)) title('Input Signal + Noise') xlim([0 max(t)]) grid on xlabel('Time (sec)') ylabel('Amplitude')

2 つの整合フィルター出力の振幅をプロットします。
plot(t,abs(y),'b--') title('Matched Filter Output') xlim([0 max(t)]) grid on hold on plot(t,abs(y_taylor),'r-') ylabel('Magnitude') xlabel('Seconds') legend('No Spectrum Weighting','Taylor Window') hold off

ターゲット検出のための SNR 向上を目的とした整合フィルター処理
この例では、整合フィルター処理を実行して SNR を向上させる方法を示します。
等方性アンテナ素子をグローバル原点 (0;0;0) に配置します。次に、無変動 RCS が 1 平方メートルのターゲットを、送信機から約 7 km 離れた位置 (5000;5000;10) に配置します。動作 (搬送波) 周波数を 10 GHz に設定します。モノスタティック レーダーをシミュレーションするために、送信機の InUseOutputPort プロパティを true に設定します。送信機からターゲットまでのレンジと角度を計算します。
antenna = phased.IsotropicAntennaElement('FrequencyRange',[5e9 15e9]); transmitter = phased.Transmitter('Gain',20,'InUseOutputPort',true); fc = 10e9; target = phased.RadarTarget('Model','Nonfluctuating',... 'MeanRCS',1,'OperatingFrequency',fc); txloc = [0;0;0]; tgtloc = [5000;5000;10]; transmitterplatform = phased.Platform('InitialPosition',txloc); targetplatform = phased.Platform('InitialPosition',tgtloc); [tgtrng,tgtang] = rangeangle(targetplatform.InitialPosition,... transmitterplatform.InitialPosition);
PRF 10 kHz、持続時間 25 μs の矩形パルス波形を作成します。この例では、単一のパルスを使用します。与えられた PRF の最大明瞭レンジを決定します。レーダー方程式を使用して、ターゲットを検出するために必要なピーク電力を決定します。このターゲットの RCS は、送信機の動作周波数とゲインの最大明瞭レンジにおいて 1 平方メートルです。SNR は、非コヒーレント検出器の目的の偽警報率 1e-6 に基づいています。
waveform = phased.RectangularWaveform('PulseWidth',25e-6,... 'OutputFormat','Pulses','PRF',10e3,'NumPulses',1); c = physconst('LightSpeed'); maxrange = c/(2*waveform.PRF); SNR = npwgnthresh(1e-6,1,'noncoherent'); lambda = physconst('LightSpeed')/target.OperatingFrequency; Ts = 290; dbterms = db2pow(SNR - 2*transmitter.Gain); Pt = (4*pi)^3*physconst('Boltzmann')*Ts/waveform.PulseWidth/target.MeanRCS/(lambda^2)*maxrange^4*dbterms;
ピーク送信電力をレーダー方程式からの出力値に設定します。
transmitter.PeakPower = Pt;
10 GHz で動作する radiator オブジェクトと collector オブジェクトを作成します。ターゲットへのパルス伝搬およびターゲットからのパルス伝搬のための自由空間パスを作成します。次に、矩形波形用の受信機と整合フィルターを作成します。
radiator = phased.Radiator('PropagationSpeed',c,... 'OperatingFrequency',fc,'Sensor',antenna); channel = phased.FreeSpace('PropagationSpeed',c,... 'OperatingFrequency',fc,'TwoWayPropagation',false); collector = phased.Collector('PropagationSpeed',c,... 'OperatingFrequency',fc,'Sensor',antenna); receiver = phased.ReceiverPreamp('NoiseFigure',0,... 'EnableInputPort',true,'SeedSource','Property','Seed',2e3); mfilter = phased.MatchedFilter(... 'Coefficients',getMatchedFilter(waveform),... 'GainOutputPort',true);
モデルを定義するすべてのオブジェクトを作成したら、ターゲットとの間でパルスを双方向に伝搬できます。受信機でエコーを収集し、整合フィルターを実装して SNR を向上させます。
波形を生成します。
wf = waveform();
波形を送信します。
[wf,txstatus] = transmitter(wf);
ターゲットに向けてパルスを放射します。
wf = radiator(wf,tgtang);
ターゲットに向かってパルスを伝搬させます。
wf = channel(wf,txloc,tgtloc,[0;0;0],[0;0;0]);
ターゲットで反射させます。
wf = target(wf);
送信機に戻る方向へパルスを伝搬させます。
wf = channel(wf,tgtloc,txloc,[0;0;0],[0;0;0]);
エコーを収集します。
wf = collector(wf,tgtang);
ターゲット エコーを受信します。
rx_puls = receiver(wf,~txstatus); [mf_puls,mfgain] = mfilter(rx_puls);
整合フィルターの群遅延を取得します。
Gd = length(mfilter.Coefficients)-1;
群遅延は一定です。
整合フィルターの出力をシフトします。
mf_puls=[mf_puls(Gd+1:end); mf_puls(1:Gd)]; subplot(2,1,1) t = unigrid(0,1e-6,1e-4,'[)'); rangegates = c.*t; rangegates = rangegates/2; plot(rangegates,abs(rx_puls)) title('Received Pulse') ylabel('Amplitude') hold on plot([tgtrng, tgtrng], [0 max(abs(rx_puls))],'r') subplot(2,1,2) plot(rangegates,abs(mf_puls)) title('With Matched Filtering') xlabel('Meters') ylabel('Amplitude') hold on plot([tgtrng, tgtrng], [0 max(abs(mf_puls))],'r') hold off
