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

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

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

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

Используйте 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')

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

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

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

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

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

Поместите изотропный элемент антенны в глобальном начале координат (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 μs в длительности с PRF 10 кГц. Используйте один импульс в этом примере. Определите максимальную однозначную область значений для данного PRF. Используйте radareqpow функция, чтобы определить пиковую мощность, требуемую обнаружить цель. Эта цель имеет 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');
Pt = radareqpow(c/fc,maxrange,SNR,...
   waveform.PulseWidth,'RCS',target.MeanRCS,'Gain',transmitter.Gain);

Установите пиковую степень передачи на выходное значение от radareqpow.

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