Вы видите от результатов в Рабочих характеристиках Приемника, что вероятность обнаружения увеличивается с увеличивающимся ОСШ. Для детерминированного сигнала в белом Гауссовом шуме можно максимизировать ОСШ в приемнике при помощи фильтра, соответствующего к сигналу. Согласованный фильтр является инвертированной временем и спрягаемой версией сигнала. Согласованный фильтр смещен, чтобы быть причинным.
Используйте phased.MatchedFilter
реализовывать согласованный фильтр.
Когда вы используете phased.MatchedFilter
, можно настроить характеристики согласованного фильтра, такие как коэффициенты согласованного фильтра и окно для взвешивания спектра. Если вы применяете взвешивание спектра, можно задать содействующая частота дискретизации и зона обслуживания; у Тейлора, Чебышева, и окон Кайзера есть дополнительные свойства, которые можно задать.
Этот пример сравнивает результаты согласованной фильтрации с и без взвешивания спектра. Взвешивание спектра часто используется с линейными формами волны 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
В этом примере показано, как улучшить ОСШ путем выполнения согласованной фильтрации.
Поместите изотропный антенный элемент в глобальном начале координат (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