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

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

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

Спроектируйте технические требования

Цель проекта этой импульсной радиолокационной системы состоит в том, чтобы обнаружить неколеблющиеся цели с радарным сечением (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);

Обратите внимание на то, что, потому что мы моделируем моностатический радар, приемник не может быть включен, пока передатчик не выключен. Поэтому мы устанавливаем EnableInputPort свойство на 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 собирается в истину вывести состояние передатчика. Этот сигнал состояния может затем использоваться, чтобы включить приемник.

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

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

В моностатической радиолокационной системе излучатель и коллектор совместно используют ту же антенну, таким образом, мы сначала зададим антенну. Чтобы упростить проект, мы выбираем изотропную антенну. Обратите внимание на то, что антенна должна смочь работать на рабочей частоте системы (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);

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

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 м), которые могут быть достигнуты радиолокационной системой.

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

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