Измерьте уровни интенсивности, используя возможности интенсивности

В этом руководстве показано, как измерить интенсивность сигналов с помощью пользовательского интерфейса возможностей интенсивности. Во-первых, создайте возможности интенсивности. Можно начать с примера ниже, RTI и DTI Displays in Full Radar Simulation, или можно создать свои собственные возможности. Когда этот пример запускается, окна отображения интенсивностью диапазона (RTI) и интенсивностью допплеровского времени (DTI) открываются. Это руководство посвящено отображению RTI, чтобы можно было закрыть окно DTI после завершения цикла обработки. Этот рисунок показывает отображение RTI после завершения обработки. На отображении показаны три трека.

Чтобы изучить данные, нажмите кнопку «Измерение курсора» на панели инструментов. Вы видите два курсора, каждый из которых представлен парами перекрестных волос. Для различения курсоров одна пара состоит из сплошных линий, а вторая пара состоит из штриховых линий и помечена метками 1 или 2.

Курсор 1 имеет сплошные перекрестия и перекрывает пересечение двух сигнальных линий. Курсор 2 имеет штриховые перекрестия и перекрывает область, свободную от сигналов. На Cursor Measurements панели показаны координаты курсоров во времени и области значений (маркированные X) и интенсивность в этих положениях. Cursor 1 находится в области значений 2775 метров и времени 3,6 секунды. Интенсивность сигнала в этой точке составляет 1,989e-6 Вт. Cursor 2 находится в области значений 3725 метров и времени 2,9 секунды. Интенсивность сигнала в этой точке составляет 3,327e-7 Вт. Можно переместить курсоры в любые интересующие положения и получить значения интенсивности.

RTI и DTI отображения в полной радиолокационной симуляции

Используйте phased.IntensityScope System Object(TM) для отображения выхода обнаружения симуляции радиолокационной системы. Радиолокационный сценарий содержит стационарный одноэлементный моностатический радар и три движущиеся цели.

Установите рабочие параметры радара

Установите максимальную область значений, разрешение степени области значений пика, рабочую частоту, коэффициент усиления передатчика и поперечное сечение радара-цели.

max_range = 5000;
range_res = 50;
fc = 10e9;
tx_gain = 20;
peak_power = 5500.0;

Выберите скорость распространения сигнала, чтобы быть скоростью света, и вычислите длину волны сигнала, соответствующую рабочей частоте.

c = physconst('LightSpeed');
lambda = c/fc;

Вычислите ширину полосы пропускания импульса из разрешения области значений. Установите частоту дискретизации, fs, в два раза больше ширины полосы пропускания импульса. Шумовая полоса также устанавливается на ширину полосы пропускания импульса. Радар интегрирует ряд импульсов, установленных num_pulse_int. Длительность каждого импульса является обратной шириной полосы пропускания импульса.

pulse_bw = c/(2*range_res);
pulse_length = 1/pulse_bw;
fs = 2*pulse_bw;
noise_bw = pulse_bw;
num_pulse_int = 10;

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

prf = c/(2*max_range);

Создайте системные объекты для модели

Выберите прямоугольную форму волны.

waveform = phased.RectangularWaveform('PulseWidth',pulse_length,...
    'PRF',prf,'SampleRate',fs);

Установите характеристики усилителя приемника.

amplifier = phased.ReceiverPreamp('Gain',20,'NoiseFigure',0,...
    'SampleRate',fs,'EnableInputPort',true,'SeedSource','Property',...
    'Seed',2007);
transmitter = phased.Transmitter('Gain',tx_gain,'PeakPower',peak_power,...
    'InUseOutputPort',true);

Задайте радиолокационную антенну как одну изотропную антенну.

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

Настройте моностатическую радиолокационную платформу.

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

Настройте три целевые платформы с помощью одного системного объекта.

targetplatforms = phased.Platform(...
    'InitialPosition',[2000.66 3532.63 3845.04; 0 0 0; 0 0 0], ...
    'Velocity',[150 -150 0; 0 0 0; 0 0 0]);

Создайте излучателя и коллектор Системных объектов.

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

Настройте три целевых свойства RCS.

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

Создайте Системный объект, чтобы смоделировать двухстороннее распространение свободного пространства.

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

Задайте согласованный фильтр.

MFcoef = getMatchedFilter(waveform);
filter = phased.MatchedFilter('Coefficients',MFcoef,'GainOutputPort',true);

Создайте области значений и допплеровские интервалы

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

fast_time = unigrid(0,1/fs,1/prf,'[)');
range_bins = c*fast_time/2;

Чтобы компенсировать потери области значений, создайте изменяющийся во времени коэффициент усиления Системный объект?.

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

Установите доплеровские интервалы. Доплеровские интервалы определяются частотой повторения импульсов. Создайте объект FFT System для Доплеровской обработки.

DopplerFFTbins = 32;
DopplerRes = prf/DopplerFFTbins;
fft = dsp.FFT('FFTLengthSource','Property',...
    'FFTLength',DopplerFFTbins);

Создайте кубик данных

Настройте уменьшенный кубик данных. Обычно кубик данных имеет быстрые и медленные размерности и количество датчиков. Поскольку кубик данных имеет только один датчик, он двумерный.

rx_pulses = zeros(numel(fast_time),num_pulse_int);

Создайте системные объекты IntensityScope

Создайте два IntensityScope Системные объекты, один для Доплеровской интенсивности времени и другой для диапазонной интенсивности времени.

dtiscope = phased.IntensityScope('Name','Doppler-Time Display',...
    'XLabel','Velocity (m/sec)', ...
    'XResolution',dop2speed(DopplerRes,c/fc)/2, ...
    'XOffset',dop2speed(-prf/2,c/fc)/2,...
    'TimeResolution',0.05,'TimeSpan',5,'IntensityUnits','Mag');
rtiscope = phased.IntensityScope('Name','Range-Time Display',...
    'XLabel','Range (m)', ...
    'XResolution',c/(2*fs), ...
    'TimeResolution',0.05,'TimeSpan',5,'IntensityUnits','Mag');

Запуск цикла симуляции по нескольким радиолокационным передачам

Передайте 2000 импульсов. Когерентно обрабатывайте группы по 10 импульсов за раз.

Для каждого импульса:

  1. Обновите положение и скорость радара radarplatform

  2. Обновите целевые положения и скорости targetplatforms

  3. Создайте импульсы одноволнового train, которая будет передана transmitter

  4. Вычислите области значений и углы целей относительно радара

  5. Излучайте сигналы к целям radiator

  6. Распространите импульсы на цель и назад channels

  7. Отражайте сигналы от целевой targets

  8. Прием сигнала sCollector

  9. Усильте принятый сигнал amplifier

  10. Кубик данных формы

Для каждого набора из 10 импульсов в кубе данных:

  1. Соответствие фильтрации каждой строки (быстрая размерность) куба данных.

  2. Вычислите доплеровские сдвиги для каждой строки (медленно-временная размерность) куба данных.

pri = 1/prf;
nsteps = 200;
for k = 1:nsteps
    for m = 1:num_pulse_int
        [ant_pos,ant_vel] = radarplatform(pri);
        [tgt_pos,tgt_vel] = targetplatforms(pri);
        sig = waveform();
        [s,tx_status] = transmitter(sig);
        [~,tgt_ang] = rangeangle(tgt_pos,ant_pos);
        tsig = radiator(s,tgt_ang);
        tsig = channels(tsig,ant_pos,tgt_pos,ant_vel,tgt_vel);
        rsig = targets(tsig);
        rsig = collector(rsig,tgt_ang);
        rx_pulses(:,m) = amplifier(rsig,~(tx_status>0));
    end

    rx_pulses = filter(rx_pulses);
    MFdelay = size(MFcoef,1) - 1;
    rx_pulses = buffer(rx_pulses((MFdelay + 1):end), size(rx_pulses,1));
    rx_pulses = gain(rx_pulses);
    range = pulsint(rx_pulses,'noncoherent');
    rtiscope(range);
    dshift = fft(rx_pulses.');
    dshift = fftshift(abs(dshift),1);
    dtiscope(mean(dshift,2));
    radarplatform(.05);
    targetplatforms(.05);
end

Все цели лежат на оси X. Две цели движутся по оси X, одна - стационарная. Поскольку радар находится в источнике, можно считать скорость цели непосредственно из окна Doppler-Time Display. Значения согласуются с заданными скоростями -150, 150 и 0 м/сек.