Из результатов в рабочих характеристиках приемника видно, что вероятность обнаружения увеличивается с увеличением ОСШ. Для детерминированного сигнала в белом Гауссовом шуме можно максимизировать ОСШ в приемник с помощью фильтра, согласованного с сигналом. Согласованный фильтр является измененной во времени и сопряженной версией сигнала. Это согласованный фильтр сдвинуто, чтобы быть причинно-следственным.
Использование 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). Затем поместите цель с неколеблющейся 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 квадратный метр в максимальной однозначной области значений для рабочей частоты и усиления передатчика. ОСШ основан на желаемой скорости ложного предупреждения 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