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