Из результатов в окне Рабочие характеристики приемника видно, что вероятность обнаружения увеличивается с увеличением 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')

Постройте график значений двух согласованных выходов фильтра.
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

В этом примере показано, как улучшить 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
