Системный объект: поэтапный. 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
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 до 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
Создайте импульсы одной волны, обучаются, чтобы быть переданным 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
.
Заполните каждый целевой интервал азимута и соседние интервалы с симулированным радарным значением интенсивности.
Вызовите 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.