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

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

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

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

Использование 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. Axes 1 with title Input Signal contains an object of type line. Axes 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. Axes 1 with title Input Signal contains an object of type line. Axes 2 with title Matched Filter Output contains 2 objects of type line. These objects represent No Spectrum Weighting, Taylor Window.

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

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

Поместите изотропный антенный элемент в глобальный источник (0; 0; 0). Затем поместите цель с неколеблющейся RCS 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 мкс в длительность с PRF 10 кГц. Используйте один импульс для этого примера. Определите максимальную однозначную область значений для данного PRF. Используйте основное уравнение радиолокации, чтобы определить пиковую степень, необходимую для обнаружения цели. Эта цель имеет RCS 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. Axes 1 with title Received Pulse contains 2 objects of type line. Axes 2 with title With Matched Filtering contains 2 objects of type line.