Системный объект: фазированный. IntensityScope
Пакет: поэтапный
Обновление отображения возможностей интенсивности
step(sIS,data)
Примечание
Начиная с R2016b, вместо использования step
метод для выполнения операции, заданной Системной object™, можно вызвать объект с аргументами, как если бы это была функция. Для примера, y = step(obj,x)
и y = obj(x)
выполнять эквивалентные операции.
step(
обновляет отображение возможностей интенсивности новыми линиями скана от реального сигнала, sIS
,data
)data
.
Примечание
Объект выполняет инициализацию при первом выполнении объекта. Эта инициализация блокирует нетронутые свойства и входные спецификации, такие как размерности, сложность и тип данных входных данных. Если вы изменяете свойство nontunable или спецификацию входа, системный объект выдает ошибку. Чтобы изменить нетронутые свойства или входы, необходимо сначала вызвать release
метод для разблокировки объекта.
sIS
- отображение возможностей интенсивностиphased.IntensityScope
Системный объектВозможности интенсивности, заданное как phased.IntensityScope
Системный объект.
Пример: phased.IntensityScope
data
- Отображенные значения интенсивностиОтображенные значения интенсивности, заданные как матрица N -by M. N количества определяет количество интервалов интенсивности в data
. Количество векторов интенсивности в M задается в данных. Каждый столбец матрицы создает отображение линии. Модули произвольные. Задайте временной интервал между векторами интенсивности, используя TimeResolution
свойство.
Пример: [5.0;5.1;5.0;4.9]
Типы данных: double
Используйте phased.IntensityScope
Системный объект? отображение интенсивности эхо-сигналов трех движущихся целей как функций области значений и времени.
Создайте радар и Системные объекты цели
Настройте начальные положения и скорости трех целей. Используйте phased.Platform
Системный объект? для моделирования движений радара и цели. Радар является стационарным, в то время как цели подвергаются постоянному движению скорости. Симуляция выполняется в течение 500 шагов с шагом 0,1 секунды, что дает общее время симуляции 50 секунд.
nsteps = 500; dt = .1; timespan = nsteps*dt; x1 = [60,0,0]'; x2 = [60,-80,40]'; x3 = [300,0,-300]'; v1 = [2,0,0]'; v2 = [10,5,6]'; v3 = [-10,2,-4]'; platform = phased.Platform([0,0,0]',[0,0,0]'); targets = phased.Platform([x1,x2,x3],[v1,v2,v3]);
Настройка интервалов диапазона
Каждый эхо-сигнал помещается в интервал областей значений. Разрешение области значений составляет 1 метр, и область значений составляет от 50 до 1000 метров.
rngres = 1.0; rngmin = 50.0; rngmax = 1000.0; rngscan = [rngmin:rngres:rngmax];
Создайте функцию усиления
Задайте зависящую от области значений функцию усиления, чтобы улучшить отображение целей на больших диапазонах. Функция усиления усиливает возвращенное эхо только в целях визуализации.
rangegain = @(rng)(1e12*rng^4);
Создайте возможности интенсивности
Настройте возможности интенсивности с помощью этих свойств.
Используйте XResolution
свойство, чтобы задать ширину каждого интервала линии скана в разрешении области значений 1 км.
Используйте XOffset
свойство установить значение интервала наименьшей области значений минимальной области значений 50 км.
Используйте TimeResolution
свойство, чтобы задать значение различия во времени линии скана равное 0,1 с.
Используйте TimeSpan
свойство, чтобы задать высоту окна отображения как временную длительность симуляции.
Используйте IntensityUnits
свойство, чтобы задать отображение модулей равным Watts
.
scope = phased.IntensityScope('Name','IntensityScope Display',... 'Title','Ranges vs. Time','XLabel','Range (m)','XResolution',rngres,... 'XOffset',rngmin,'TimeResolution',dt,'TimeSpan',timespan, ... 'IntensityUnits','Watts','Position',[100,100,800,450]);
Запуск цикла симуляции
В этом цикле перемещайте цели с постоянной скоростью, используя step
метод phased.Platform
Системный объект.
Вычислите целевые области значений с помощью rangeangle
функция.
Вычислите целевые интервалы области значений путем квантования значений области значений в целочисленных множителях rangres
.
Заполните каждый интервал целевой области значений и соседние интервалы моделируемым значением интенсивности радара.
Добавьте сигнал от каждой цели к линии скана.
Вызовите step
метод phased.IntensityScope
Системный объект для отображения линий скана.
for k = 1:nsteps xradar = platform(dt); xtgts = targets(dt); [rngs] = rangeangle(xtgts,xradar); scanline = zeros(size(rngscan)); rngindx = ceil((rngs(1) - rngmin)/rngres); scanline(rngindx + [-1:1]) = rangegain(rngs(1))/(rngs(1)^4); rngindx = ceil((rngs(2) - rngmin)/rngres); scanline(rngindx + [-1:1]) = rangegain(rngs(2))/(rngs(2)^4); rngindx = ceil((rngs(3) - rngmin)/rngres); scanline(rngindx + [-1:1]) = rangegain(rngs(3))/(rngs(3)^4); scope(scanline.'); pause(.1); end
Используйте 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 м/сек.
Используйте phased.IntensityScope
Системный объект? отображение угловых движений движущихся целей как функций времени. Каждая горизонтальная линия (скан) показывает силу радиолокационных эхо-сигналов при разных углах азимута. Пространство азимута разделено на азимутальные интервалы, и каждый интервал заполнен моделируемым значением в зависимости от положения целей.
Создайте радиолокационные и целевые Системные объекты
Настройте начальные положения и скорости трех целей. Используйте phased.Platform
Системный объект? для моделирования движений радара и цели. Радар является стационарным, в то время как цели подвергаются постоянному движению скорости. Симуляция выполняется в течение 200 шагов с интервалом 0,5 секунды, что дает общее время симуляции 100 секунд.
nsteps = 200; dt = 0.5; timespan = nsteps*dt; x1 = [60,0,0]'; x2 = [60,-80,40]'; x3 = [300,0,-300]'; x3 = [-300,0,-300]'; v1 = [2,0,0]'; v2 = [10,5,6]'; v3 = [-10,2,-4]'; radarplatform = phased.Platform([0,0,0]',[0,0,0]'); targets = phased.Platform([x1,x2,x3],[v1,v2,v3]);
Настройка интервалов Угла Azimuth
Сигнал для каждого эхо-сигнала помещается в угол интервала и два смежных интервалов. Разрешение интервала составляет 1 степень, а угол наклона составляет от -180 до 180 степени.
angres = 1.0; angmin = -180.0; angmax = 180.0; angscan = [angmin:angres:angmax]; na = length(angscan);
Функция усиления области значений
Задайте зависящую от области значений функцию усиления, чтобы улучшить отображение целей на больших диапазонах. Функция усиления усиливает возвращенное эхо только в целях визуализации.
rangegain = @(rng)(1e12*rng^4);
Настройка Средство Просмотра
The XResolution
Пара "имя-значение" задает ширину каждого интервала скана линии. The XOffset
устанавливает значение самого низкого интервала угла азимута. The TimeResolution
Пара "имя-значение" задает время различия между сканом строками. The TimeSpan
Пара "имя-значение" устанавливает высоту окна отображения. Создается скан линии с каждым вызовом step
способ. Модулями интенсивности являются модули.
scope = phased.IntensityScope( ... 'Name','IntensityScope Display',... 'Title','Azimuth vs. Time',... 'XLabel','Azimuth (deg)', ... 'XResolution',angres,'XOffset',angmin,... 'TimeResolution',dt,'TimeSpan',timespan, ... 'IntensityUnits','Watts',... 'Position',[100,100,800,450]);
Цикл обновления-отображения
В этом цикле перемещайте цели с постоянной скоростью, используя step
метод phased.Platform
Системный объект.
Вычислите целевые области значений и азимутальные углы с помощью rangeangle
функция.
Вычислите интервалы углов азимута путем квантования значений углов азимута в целочисленных множителях angres
.
Заполните каждый азимутальный интервал цели и соседние интервалы моделируемым значением интенсивности радара.
Вызовите phased.IntensityScope
step
метод для отображения линии скана.
for k = 1:nsteps xradar = radarplatform(dt); xtgts = targets(dt); [rngs,angs] = rangeangle(xtgts,xradar); scanline = zeros(size(angscan)); angindx = ceil((angs(1,1) - angmin)/angres) + 1; idx = angindx + [-1:1]; idx(idx>na)=[]; idx(idx<1)=[]; scanline(idx) = rangegain(rngs(1))/(rngs(1)^4); angindx = ceil((angs(1,2) - angmin)/angres) + 1; idx = angindx + [-1:1]; idx(idx>na)=[]; idx(idx<1)=[]; scanline(idx) = rangegain(rngs(2))/(rngs(2)^4); angindx = ceil((angs(1,3) - angmin)/angres) + 1; idx = angindx + [-1:1]; idx(idx>na)=[]; idx(idx<1)=[]; scanline(idx) = rangegain(rngs(3))/(rngs(3)^4); scope(scanline.'); pause(.1); end
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.