Симуляция тестовых сигналов для радиолокационного приемника

Этот пример показывает, как симулировать принятый сигнал радара с моностатическим импульсом для оценки области значений цели. Моностатический радар имеет передатчик, сопоставленный с приемником. Передатчик генерирует импульс, который поражает цель и выдает эхо, принятое приемником. Путем измерения местоположения эхо-сигналов во времени, мы можем оценить область значений действия цели.

Этот пример особого внимания на импульсной разработке радарных систем, который может достичь набора проекта спецификаций. В нем описаны шаги для преобразования спецификаций проекта, таких как вероятность обнаружения и разрешение области значений, в параметры радиолокационной системы, такие как степени передачи и ширина импульса. Он также моделирует окружение и цели, чтобы синтезировать принятый сигнал. Наконец, к принимаемому сигналу применяются методы обработки сигналов для обнаружения областей значений целевых значений.

Спецификации к проекту

Цель проекта этой импульсной радиолокационной системы состоит в том, чтобы обнаружить неколеблющиеся цели с радарным сечением (RCS) на по крайней мере один квадратный метр на расстоянии до 5 000 метров от радара с разрешением области значений 50 метров. Желаемый индекс эффективности является вероятностью обнаружения (Pd) 0,9 и вероятность ложного предупреждения (PFA) ниже 1e-6. Поскольку когерентное обнаружение требует информации фазы и, поэтому является более в вычислительном отношении дорогим, мы принимаем некогерентную схему обнаружения. Кроме сложения, этот пример принимает окружение свободного пространства.

pd = 0.9;            % Probability of detection
pfa = 1e-6;          % Probability of false alarm
max_range = 5000;    % Maximum unambiguous range
range_res = 50;      % Required range resolution
tgt_rcs = 1;         % Required target radar cross section

Разработка радарных систем

Нам нужно задать несколько характеристик радиолокационной системы, таких как форма волны, приемник, передатчик и антенна, используемая для излучения и сбора сигнала.

Форма волны

В этом примере мы выбираем прямоугольную форму волны. Желаемое разрешение области значений определяет полосу пропускания формы волны, которая, в случае прямоугольной формы волны, определяет ширину импульса.

Другим важным параметром импульсного сигнала является частота повторения импульса (PRF). PRF определяется максимальной однозначной областью значений.

prop_speed = physconst('LightSpeed');   % Propagation speed
pulse_bw = prop_speed/(2*range_res);    % Pulse bandwidth
pulse_width = 1/pulse_bw;               % Pulse width
prf = prop_speed/(2*max_range);         % Pulse repetition frequency
fs = 2*pulse_bw;                        % Sampling rate
waveform = phased.RectangularWaveform(...
    'PulseWidth',1/pulse_bw,...
    'PRF',prf,...
    'SampleRate',fs);

Обратите внимание, что мы устанавливаем частоту дискретизации в два раза больше, чем пропускная способность.

Характеристики шума приемника

Мы принимаем, что единственным шумом, присутствующим в приемнике, является тепловой шум, поэтому в этой симуляции нет никакого загромождения. Степень теплового шума связана с пропускной способностью приемника. Шумовая шумовая полоса приемника установлена такой же, как и шумовая полоса формы волны. Это часто происходит в реальных системах. Мы также принимаем, что приемник имеет усиление 20 дБ и рисунок шума 0 дБ.

noise_bw = pulse_bw;

receiver = phased.ReceiverPreamp(...
    'Gain',20,...
    'NoiseFigure',0,...
    'SampleRate',fs,...
    'EnableInputPort',true);

Обратите внимание, что поскольку мы моделируем моностатический радар, приемник не может быть включен, пока передатчик не будет смещен. Поэтому мы устанавливаем свойство EnableInportPort равным true, чтобы сигнал синхронизации мог быть передан от передатчика к получателю.

Передатчик

Самый критический параметр передатчика является пиковой степенью передачи. Необходимая пиковая степень связана со многими факторами, включая максимальную однозначную область значений, необходимый ОСШ в приемник и ширину импульса формы волны. Среди этих факторов необходимый ОСШ в приемнике определяется целью проекта Pd и PFA, а также схемы обнаружения, реализованной в приемнике.

Отношение между Pd, PFA и ОСШ может быть лучше всего представлено кривому приемнику рабочих характеристик (ROC). Мы можем сгенерировать кривую, где Pd является функцией PFA для варьирования SNRs использование следующей команды

snr_db = [-inf, 0, 3, 10, 13];
rocsnr(snr_db,'SignalType','NonfluctuatingNoncoherent');

Кривые ROC показывают, что, чтобы удовлетворить целям проекта PFA = 1e-6 и Pd = 0.9, ОСШ полученного сигнала должен превысить 13 дБ. Это - довольно высокое требование и не очень практично. Чтобы сделать радиолокационную систему более выполнимой, мы можем использовать импульсный метод интегрирования, чтобы уменьшить необходимый ОСШ. Если мы принимаем решение интегрировать 10 импульсов, кривая может быть сгенерирована как

num_pulse_int = 10;
rocsnr([0 3 5],'SignalType','NonfluctuatingNoncoherent',...
    'NumPulses',num_pulse_int);

Мы видим, что необходимая степень снизилась примерно до 5 дБ. Дальнейшее уменьшение ОСШ может быть достигнуто путем интегрирования большего количества импульсов, но количество импульсов, доступных для интегрирования, обычно ограничено из-за движения цели или неоднородности окружения.

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

snr_min = albersheim(pd, pfa, num_pulse_int)
snr_min =

    4.9904

Как только мы получим необходимый ОСШ в приемнике, пиковая степень в передатчике может быть вычислена с помощью основного уравнения радиолокации. Здесь мы принимаем, что передатчик имеет коэффициент усиления 20 дБ.

Чтобы вычислить пиковую степень с помощью основного уравнения радиолокации, нам также нужно знать длину волны распространяющегося сигнала, которая связана с рабочей частотой системы. Здесь мы устанавливаем рабочую частоту 10 ГГц.

tx_gain = 20;

fc = 10e9;
lambda = prop_speed/fc;

peak_power = ((4*pi)^3*noisepow(1/pulse_width)*max_range^4*...
    db2pow(snr_min))/(db2pow(2*tx_gain)*tgt_rcs*lambda^2)
peak_power =

   5.2265e+03

Обратите внимание, что получившаяся степень составляет около 5 кВт, что очень разумно. Для сравнения, если бы мы не использовали импульсный метод интегрирования, полученная пиковая степень была бы 33 кВт, что является огромным.

Со всей этой информацией мы можем сконфигурировать передатчик.

transmitter = phased.Transmitter(...
    'Gain',tx_gain,...
    'PeakPower',peak_power,...
    'InUseOutputPort',true);

Снова, поскольку этот пример моделирует моностатическую радиолокационную систему, InUseOutputPort устанавливается на true, чтобы вывести состояние передатчика. Этот сигнал состояния может затем использоваться, чтобы включить приемник.

Излучатель и коллектор

В радиолокационной системе сигнал распространяется в виде электромагнитной волны. Поэтому сигнал должен быть излучен и собран антенной, используемой в радиолокационной системе. Здесь в картинку попадают излучатель и коллектор.

В моностатической радиолокационной системе излучатель и коллектор имеют одну и ту же антенну, поэтому сначала определим антенну. Чтобы упростить проект, выбираем изотропную антенну. Обратите внимание, что антенне нужно уметь работать на рабочей частоте системы (10 ГГц), поэтому мы устанавливаем область значений антенны на 5-15 ГГц.

Мы принимаем, что антенна является стационарной.

antenna = phased.IsotropicAntennaElement(...
    'FrequencyRange',[5e9 15e9]);

sensormotion = phased.Platform(...
    'InitialPosition',[0; 0; 0],...
    'Velocity',[0; 0; 0]);

С помощью антенны и рабочей частоты задаем и излучателя, и коллектор.

radiator = phased.Radiator(...
    'Sensor',antenna,...
    'OperatingFrequency',fc);

collector = phased.Collector(...
    'Sensor',antenna,...
    'OperatingFrequency',fc);

Это завершает строение радиолокационной системы. В следующих разделах мы определим другие сущности, такие как цель и окружения, необходимые для симуляции. Затем мы симулируем возврат сигнала и выполним обнаружение области значений на моделируемом сигнале.

Системная симуляция

Цели

Чтобы проверить способность нашего радара обнаруживать цели, мы должны сначала определить цели. Предположим, что в пространстве 3 стационарные, неколеблющиеся цели. Их положения и сечения радара приведены ниже.

tgtpos = [[2024.66;0;0],[3518.63;0;0],[3845.04;0;0]];
tgtvel = [[0;0;0],[0;0;0],[0;0;0]];
tgtmotion = phased.Platform('InitialPosition',tgtpos,'Velocity',tgtvel);

tgtrcs = [1.6 2.2 1.05];
target = phased.RadarTarget('MeanRCS',tgtrcs,'OperatingFrequency',fc);

Окружение распространения

Чтобы симулировать сигнал, нам также нужно задать канал распространения между радиолокационной системой и каждой целью.

channel = phased.FreeSpace(...
    'SampleRate',fs,...
    'TwoWayPropagation',true,...
    'OperatingFrequency',fc);

Поскольку в этом примере используется моностатическая радиолокационная система, каналы настроены на моделирование двухсторонних задержек распространения.

Синтез сигнала

Теперь мы готовы моделировать всю систему.

Синтезированный сигнал является матрицей данных с быстрым временем (временем внутри каждого импульса) вдоль каждого столбца и медленным временем (временем между импульсами) между каждой строкой. Чтобы визуализировать сигнал, полезно задать как быструю временную сетку, так и медленную временную сетку.

fast_time_grid = unigrid(0,1/fs,1/prf,'[)');
slow_time_grid = (0:num_pulse_int-1)/prf;

Следующий цикл имитирует 10 импульсов сигнала приема.

Мы устанавливаем seed для генерации шума в приемнике, чтобы мы могли воспроизводить те же результаты.

receiver.SeedSource = 'Property';
receiver.Seed = 2007;

% Pre-allocate array for improved processing speed
rxpulses = zeros(numel(fast_time_grid),num_pulse_int);

for m = 1:num_pulse_int

    % Update sensor and target positions
    [sensorpos,sensorvel] = sensormotion(1/prf);
    [tgtpos,tgtvel] = tgtmotion(1/prf);

    % Calculate the target angles as seen by the sensor
    [tgtrng,tgtang] = rangeangle(tgtpos,sensorpos);

    % Simulate propagation of pulse in direction of targets
    pulse = waveform();
    [txsig,txstatus] = transmitter(pulse);
    txsig = radiator(txsig,tgtang);
    txsig = channel(txsig,sensorpos,tgtpos,sensorvel,tgtvel);

    % Reflect pulse off of targets
    tgtsig = target(txsig);

    % Receive target returns at sensor
    rxsig = collector(tgtsig,tgtang);
    rxpulses(:,m) = receiver(rxsig,~(txstatus>0));
end

Обнаружение области значений

Порог обнаружения

Детектор сравнивает степень сигнала с заданным порогом. В радиолокационных системах порог часто выбирается так, чтобы PFA был ниже определенного уровня. В этом случае мы предполагаем, что шум является белым Гауссовым, и обнаружение некогерентно. Поскольку мы также используем 10 импульсов, чтобы выполнить интегрирование импульсов, порог степени сигнала задается как

npower = noisepow(noise_bw,receiver.NoiseFigure,...
    receiver.ReferenceTemperature);
threshold = npower * db2pow(npwgnthresh(pfa,num_pulse_int,'noncoherent'));

Строим график первых двух полученных импульсов с порогом

num_pulse_plot = 2;
helperRadarPulsePlot(rxpulses,threshold,...
    fast_time_grid,slow_time_grid,num_pulse_plot);

Порог на этих рисунках предназначен только для отображения. Обратите внимание, что второй и третий возвраты цели намного слабее, чем первый возврат, потому что они находятся дальше от радара. Поэтому степень принимаемого сигнала зависит от области значений, и порог является несправедливым к целям, расположенным в различных диапазонах значений.

Согласованный фильтр

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

matchingcoeff = getMatchedFilter(waveform);
matchedfilter = phased.MatchedFilter(...
    'Coefficients',matchingcoeff,...
    'GainOutputPort',true);
[rxpulses, mfgain] = matchedfilter(rxpulses);

Согласованный фильтр вводит внутреннюю задержку фильтра, так что местоположения пика (максимальной выходной выборки ОСШ) больше не совпадают с истинными целевыми местоположениями. Чтобы компенсировать эту задержку, в этом примере мы переместим выход согласованного фильтра вперед и дополним нули в конце. Обратите внимание, что в реальных системах, потому что данные собираются постоянно, ее действительно нет конца.

matchingdelay = size(matchingcoeff,1)-1;
rxpulses = buffer(rxpulses(matchingdelay+1:end),size(rxpulses,1));

Затем порог увеличивается за счет усиления обработки согласованного фильтра.

threshold = threshold * db2pow(mfgain);

Следующий график показывает те же два импульса после их прохождения через согласованный фильтр.

helperRadarPulsePlot(rxpulses,threshold,...
    fast_time_grid,slow_time_grid,num_pulse_plot);

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

Чтобы компенсировать зависящие от области значений потери, мы сначала вычисляем элементы области значений, соответствующие каждой выборке сигнала, а затем вычисляем потери при распространении в свободном пространстве, соответствующие каждой матрице области значений. Как только эта информация получена, мы применяем изменяющийся во времени коэффициент усиления к полученному импульсу так, чтобы возвраты были как бы из одной и той же опорной области значений (максимального обнаруживаемой области значений).

range_gates = prop_speed*fast_time_grid/2;

tvg = phased.TimeVaryingGain(...
    'RangeLoss',2*fspl(range_gates,lambda),...
    'ReferenceLoss',2*fspl(max_range,lambda));

rxpulses = tvg(rxpulses);

Теперь постройте график тех же двух импульсов после нормализации области значений

helperRadarPulsePlot(rxpulses,threshold,...
    fast_time_grid,slow_time_grid,num_pulse_plot);

Операция изменения коэффициента усиления приводит к образованию наклона в шумовом полу. Однако целевой возврат теперь не зависит от области значений. Теперь постоянный порог может использоваться для обнаружения во всем обнаруживаемой области значений.

Заметьте, что на данном этапе порог выше максимального уровня степени, содержащегося в каждом импульсе. Поэтому на данном этапе пока ничего не обнаружить. Нам нужно выполнить импульсное интегрирование, чтобы гарантировать, что степень возвращенных эхо-сигналов от целей может превысить порог, оставляя шумовой пол ниже бара. Это ожидается, поскольку это импульсное интегрирование, которое позволяет нам использовать более низкую степень последовательность импульсов.

Некогерентное интегрирование

Мы можем дополнительно улучшить ОСШ, некогерентно интегрируя (видео интегрирование) принятые импульсы.

rxpulses = pulsint(rxpulses,'noncoherent');

helperRadarPulsePlot(rxpulses,threshold,...
    fast_time_grid,slow_time_grid,1);

После этапа интегрирования видео данные готовы к заключительному этапу обнаружения. На рисунке видно, что все три эха от целей выше порога, и поэтому могут быть обнаружены.

Обнаружение области значений

Наконец, обнаружение порога выполняется на интегрированных импульсах. Схема обнаружения идентифицирует peaks и затем переводит их положения в области значений целей.

[~,range_detect] = findpeaks(rxpulses,'MinPeakHeight',sqrt(threshold));

Истинные области значений и обнаруженные области значений целей показаны ниже:

true_range = round(tgtrng)
range_estimates = round(range_gates(range_detect))
true_range =

        2025        3519        3845


range_estimates =

        2025        3525        3850

Обратите внимание, что эти оценки области значений точны только до разрешения области значений (50 м), которое может быть достигнуто радиолокационной системой.

Сводные данные

В этом примере мы разработали радиолокационную систему, основанную на наборе заданных целей эффективности. Из этих целей эффективности было вычислено много расчётных параметров радиолокационной системы. Пример также показал, как использовать разработанный радар для выполнения задачи обнаружения области значений. В этом примере радар использовал прямоугольную форму волны. Заинтересованные читатели могут обратиться к Проекту Waveform, чтобы улучшить Область значений Эффективности существующей системы для примера, используя ЛЧМ сигнал.