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

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

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

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

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

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

Согласованная фильтрация линейной формы волны 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

Для просмотра документации необходимо авторизоваться на сайте