В этом руководстве показано, как измерить интенсивность сигналов с помощью пользовательского интерфейса возможностей интенсивности. Во-первых, создайте возможности интенсивности. Можно начать с примера ниже, 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 Вт. Можно переместить курсоры в любые интересующие положения и получить значения интенсивности.
Используйте 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 импульсов за раз.
Для каждого импульса:
Обновите положение и скорость радара radarplatform
Обновите целевые положения и скорости targetplatforms
Создайте импульсы одноволнового train, которая будет передана transmitter
Вычислите области значений и углы целей относительно радара
Излучайте сигналы к целям radiator
Распространите импульсы на цель и назад channels
Отражайте сигналы от целевой targets
Прием сигнала sCollector
Усильте принятый сигнал amplifier
Кубик данных формы
Для каждого набора из 10 импульсов в кубе данных:
Соответствие фильтрации каждой строки (быстрая размерность) куба данных.
Вычислите доплеровские сдвиги для каждой строки (медленно-временная размерность) куба данных.
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 м/сек.