Системный объект: поэтапный. IntensityScope
Пакет: поэтапный
Обновите отображение осциллографа интенсивности
step(sIS,data)
При запуске в R2016b, вместо того, чтобы использовать метод step
, чтобы выполнить операцию, заданную Системой object™, можно вызвать объект с аргументами, как будто это была функция. Например, y = step(obj,x)
и y = obj(x)
выполняют эквивалентные операции.
step(
обновляет отображение осциллографа интенсивности с новыми строками развертки от действительного сигнала, sIS
,data
)data
.
Объект выполняет инициализацию в первый раз, когда объект выполняется. Эта инициализация блокирует ненастраиваемые свойства (MATLAB) и входные спецификации, такие как размерности, сложность и тип данных входных данных. Если вы изменяете ненастраиваемое свойство или входную спецификацию, Системный объект выдает ошибку. Чтобы изменить ненастраиваемые свойства или входные параметры, необходимо сначала вызвать метод release
, чтобы разблокировать объект.
sIS
— Отображение осциллографа интенсивностиphased.IntensityScope
Отображение осциллографа интенсивности, заданное как Системный объект phased.IntensityScope
.
Пример: phased.IntensityScope
данные
Отображенные значения интенсивностиОтображенные значения интенсивности, заданные как 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 до 1 000 метров.
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
? отобразить обнаружение вывод полной симуляции радиолокационной системы. Радарный сценарий содержит стационарный одноэлементный моностатический радар и три движущихся цели.
Примечание: Этот пример запускается только в R2016b или позже. Если вы используете более ранний релиз, заменяете каждый вызов функции с эквивалентным синтаксисом step
. Например, замените myObject(x)
на step(myObject,x)
.
Установите радарные рабочие параметры
Установите вероятность обнаружения, вероятность ложного предупреждения, максимальной области значений, разрешения области значений, рабочей частоты, усиления передатчика, и предназначайтесь для радарного поперечного сечения.
pd = 0.9; pfa = 1e-6; max_range = 5000; range_res = 50; fc = 10e9; tx_gain = 20; tgt_rcs = 1;
Выберите скорость распространения сигнала, чтобы быть скоростью света и вычислить длину волны сигнала, соответствующую рабочей частоте.
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);
Вычислите степень передачи
Используйте уравнение Albersheim, чтобы вычислить ОСШ, требуемый встретить желаемой вероятности обнаружения и вероятности ложного предупреждения. Затем используйте основное уравнение радиолокации, чтобы вычислить степень, должен был достигнуть необходимого ОСШ.
snr_min = albersheim(pd, pfa, num_pulse_int); peak_power = radareqpow(lambda,max_range,snr_min,pulse_length,... 'RCS',tgt_rcs,'Gain',tx_gain);
Создание системных объектов для модели
Выберите прямоугольную форму волны.
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));
Настройте Доплеровские интервалы. Доплеровские интервалы определяются импульсной частотой повторения. Создайте Системный объект БПФ для Доплера, обрабатывающего.
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');
Запустите цикл симуляции по нескольким радарным передачам
Передайте 2 000 импульсов. Когерентно группы процесса из 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, и каждый является стационарным. Поскольку радар в начале координат, можно считать целевую скорость непосредственно из разового Доплером Окна экрана. Значения соглашаются с заданными скоростями-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]);
Настройте угловые интервалы азимута
Сигнал для каждого эха помещается в угловой интервал и два смежных интервала. Разрешение интервала является 1 степенью, и угловой промежуток от-180 до 180 градусов.
angres = 1.0; angmin = -180.0; angmax = 180.0; angscan = [angmin:angres:angmax]; na = length(angscan);
Функция усиления области значений
Задайте зависимую областью значений функцию усиления, чтобы улучшить отображение целей в больших областях значений. Функция усиления усиливает возвращенное эхо в целях визуализации только.
rangegain = @(rng)(1e12*rng^4);
Настройте средство просмотра осциллографа
Пара "имя-значение" XResolution
задает ширину каждого интервала строки развертки. XOffset
устанавливает значение самого низкого углового интервала азимута. Пара "имя-значение" TimeResolution
задает разницу во времени между строками развертки. Пара "имя-значение" 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
.
Заполните каждый целевой интервал азимута и соседние интервалы с моделируемым радарным значением интенсивности.
Вызовите метод step
phased.IntensityScope
, чтобы отобразить строку развертки.
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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.