exponenta event banner

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

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

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

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

Использовать phased.MatchedFilter для реализации согласованного фильтра.

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

Согласованная фильтрация линейного ЧМ-сигнала

В этом примере сравниваются результаты согласованной фильтрации с взвешиванием спектра и без него. Взвешивание спектра часто используется с линейными ЧМ-колебаниями для уменьшения боковых лент во временной области.

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

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

Укажите форму сигнала.

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.

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

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

Разместите изотропный антенный элемент в глобальном начале координат (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 квадратный метр в максимальном однозначном диапазоне для рабочей частоты и коэффициента усиления передатчика. 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 ГГц. Создайте путь свободного пространства для распространения импульса на цель и от цели. Затем создайте приемник и согласованный фильтр для прямоугольной формы сигнала.

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);

После создания всех объектов, определяющих модель, можно распространить импульс на цель и от нее. Сбор эхо-сигнала в приемнике и реализация согласованного фильтра для улучшения 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] = 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.