Согласованная фильтрация

Причины Использования согласованной фильтрации

Вы видите от результатов в Рабочих характеристиках Приемника, что вероятность обнаружения увеличивается с увеличивающимся ОСШ. Для детерминированного сигнала в белом Гауссовом шуме можно максимизировать ОСШ в приемнике при помощи фильтра, соответствующего к сигналу. Согласованный фильтр является инвертированной временем и спрягаемой версией сигнала. Согласованный фильтр смещен, чтобы быть причинным.

Поддержка согласованной фильтрации

Используйте phased.MatchedFilter реализовывать согласованный фильтр.

Когда вы используете phased.MatchedFilter, можно настроить характеристики согласованного фильтра, такие как коэффициенты согласованного фильтра и окно для взвешивания спектра. Если вы применяете взвешивание спектра, можно задать содействующая частота дискретизации и зона обслуживания; у Тейлора, Чебышева, и окон Кайзера есть дополнительные свойства, которые можно задать.

Согласованная фильтрация линейной формы волны FM

Этот пример сравнивает результаты согласованной фильтрации с и без взвешивания спектра. Взвешивание спектра часто используется с линейными формами волны FM, чтобы уменьшать боковые лепестки во временном интервале.

Примечание: Этот пример запускается только в R2016b или позже. Если вы используете более ранний релиз, заменяете каждый вызов функции с эквивалентным step синтаксис. Например, замените myObject(x) с step(myObject,x).

Создайте линейную форму волны FM с длительностью 0,1 миллисекунд, полосой пропускания развертки 100 кГц и импульсной частотой повторения 5 кГц. Добавьте шум в линейный импульс FM и отфильтруйте сигнал с шумом с помощью согласованного фильтра. Этот пример применяет согласованный фильтр с и без взвешивания спектра.

Задайте форму волны.

waveform = phased.LinearFMWaveform('PulseWidth',1e-4,'PRF',5e3,...
    'SampleRate',1e6,'OutputFormat','Pulses','NumPulses',1,...
    'SweepBandwidth',1e5);
wav = getMatchedFilter(waveform);

Создайте согласованный фильтр без взвешивания спектра и согласованный фильтр, который использует окно Тейлора для взвешивания спектра.

filter = 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 = filter(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')

Figure contains 2 axes objects. Axes object 1 with title Input Signal contains an object of type line. Axes object 2 with title Input Signal + Noise contains an object of type line.

Постройте величины двух согласованных фильтров выходные параметры.

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

Figure contains 2 axes objects. Axes object 1 with title Input Signal contains an object of type line. Axes object 2 with title Matched Filter Output contains 2 objects of type line. These objects represent No Spectrum Weighting, Taylor Window.

Согласованная фильтрация, чтобы улучшить ОСШ для целевого обнаружения

В этом примере показано, как улучшить ОСШ путем выполнения согласованной фильтрации.

Поместите изотропный антенный элемент в глобальном начале координат (0; 0; 0). Затем поместите цель с не колеблющимся ЭПР 1 квадратного метра приблизительно в 7 км от передатчика в (5000; 5000; 10). Установите операционное (несущая) частота к 10 ГГц. Чтобы симулировать моностатический радар, установите 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);

Создайте прямоугольную импульсную форму волны 25 μs в длительности с PRF 10 кГц. Используйте один импульс для этого примера. Определите максимальную однозначную область значений для данного PRF. Используйте основное уравнение радиолокации, чтобы определить пиковую мощность, требуемую обнаружить цель. Эта цель имеет ЭПР 1 квадратного метра в максимальной однозначной области значений для передатчика рабочая частота и усиление. ОСШ основан на желаемом ложно-сигнальном уровне 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 ГГц. Создайте путь к свободному пространству для распространения импульса к и от цели. Затем создайте приемник и согласованный фильтр для прямоугольного радиоимпульса.

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);
filter = phased.MatchedFilter(...
   'Coefficients',getMatchedFilter(waveform),...
   'GainOutputPort',true);

После того, как вы создаете все объекты, которые задают вашу модель, можно распространить импульс к и от цели. Соберите эхо в приемнике и реализуйте согласованный фильтр, чтобы улучшить ОСШ.

Сгенерируйте форму волны.

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] = filter(rx_puls);

Получите групповую задержку согласованного фильтра.

Gd = length(filter.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

Figure contains 2 axes objects. Axes object 1 with title Received Pulse contains 2 objects of type line. Axes object 2 with title With Matched Filtering contains 2 objects of type line.