Этот пример показывает, как использовать средство просмотра сценария, чтобы визуализировать театр радиолокационной системы.
Симуляция радиолокационной системы часто включает много движущихся объектов. Например, и радар и цели могут находиться в движении. Кроме того, каждый движущийся объект может иметь свои собственные ориентации, таким образом, бухгалтерия становится все более сложной когда больше игроков, присутствующих в симуляции.
Phased Array System Toolbox™ обеспечивает средство просмотра сценария, чтобы помочь визуализировать, как радары и цели перемещаются в пробел. Через средство просмотра сценария можно следовать за траекторией каждой движущейся платформы и исследовать относительное движение между радаром и целью.
В первом примере средство просмотра сценария используется, чтобы визуализировать траектории радара и цели. Примите, что радар кружится вокруг источника в на расстоянии в 3 км. Плоскость с радаром летит на уровне 250 м/с (приблизительно 560 миль в час) и делает круг приблизительно каждые 60 секунд.
v = 250; deltaPhi = 360/60; sensormotion = phased.Platform(... 'InitialPosition',[0;-3000;500],... 'VelocitySource','Input port',... 'InitialVelocity',[0;v;0]);
Цель перемещается вдоль прямой дороги со скоростью 30 м/с вдоль оси X. который составляет приблизительно 67 миль в час.
tgtmotion = phased.Platform('InitialPosition',[0;0;0],... 'Velocity',[30;0;0]);
Средство просмотра собирается обновить в каждые 0,1 секунды. Для самого простого случая луч не показывают в средстве просмотра.
tau = 0.5; sceneview = phased.ScenarioViewer('ShowBeam','None');
Следующий код моделирует и отображает радар и траектории цели.
for m = 1:tau:60 [sensorpos,sensorvel] = sensormotion(tau,... v*[cosd(m*deltaPhi);sind(m*deltaPhi);0]); [tgtpos,tgtvel] = tgtmotion(tau); sceneview(sensorpos,sensorvel,tgtpos,tgtvel); drawnow; end
Затем естественный шаг должен визуализировать радарные лучи вместе с траекториями в средстве просмотра. Следующий пример показывает, как визуализировать два радара и три цели, перемещающиеся в пробел.в частности. Первый радар имеет луч, отслеживающий первую цель.
Во-первых, установите радары и цели. Отметьте первый радар и первое целевое соответствие, что использовало в предыдущем разделе.
sensormotion = phased.Platform(... 'InitialPosition',[0 0;-3000 500;500 1], ... 'VelocitySource','Input port', ... 'InitialVelocity',[0 100;v 0;0 0], ... 'OrientationAxesOutputPort', true); tgtmotion = phased.Platform(... 'InitialPosition',[0 2000.66 3532.63;0 0 500;0 500 500],... 'Velocity',[30 120 -120; 0 0 -20; 0 0 60],... 'OrientationAxesOutputPort', true);
Чтобы правильно указать луч, средство просмотра сценария должно знать информацию об ориентации радаров и целей. Такая информация может быть получена из этих движущихся платформ путем установки свойства OrientationAxesOutputPort на истину на каждом шаге симуляции, как показано в коде выше. Чтобы передать эту информацию средству просмотра, установите свойство OrientationInputPort средства просмотра сценария на истину.
sceneview = phased.ScenarioViewer('BeamRange',[3e3 3e3],... 'BeamWidth',[5 5], ... 'ShowBeam', 'All', ... 'CameraPerspective', 'Custom', ... 'CameraPosition', [-15453.85 -19716.96 13539], ... 'CameraOrientation', [-47 -27 0]', ... 'CameraViewAngle', 11.28, ... 'OrientationInputPort', true, ... 'UpdateRate',1/tau);
Обратите внимание, что отображенный луч имеет ширину луча 5 градусов и длину 3 км. Перспектива камеры также настроена, чтобы визуализировать все траектории более ясно.
for m = 1:60 [sensorpos,sensorvel,sensoraxis] = sensormotion(tau,... [v*[cosd(m*deltaPhi);sind(m*deltaPhi);0] [100; 0; 0]]); [tgtpos,tgtvel,tgtaxis] = tgtmotion(tau); % Radar 1 tracks Target 1 [lclrng, lclang] = rangeangle(tgtpos(:,1),sensorpos(:,1),... sensoraxis(:,:,1)); % Update beam direction sceneview.BeamSteering = [lclang [0;0]]; sceneview(sensorpos,sensorvel,sensoraxis,tgtpos,tgtvel,tgtaxis); drawnow; end
Средство просмотра сценария может также быть объединено вместе с другой визуализацией, чтобы предоставить больше информации системы при симуляции. Следующий пример использует средство просмотра сценария вместе с осциллографом интенсивности времени области значений (RTI) и осциллографом Доплеровской интенсивности времени (DTI), таким образом, инженер может исследовать, совпадают ли предполагаемые области значений и уровни области значений целей с наземной истиной.
Пример использует радиолокационную систему, созданную в Разработке Основного Моностатического Импульсного Радарного примера.
load BasicMonostaticRadarExampleData.mat
Рассмотрите сцену, где существует три цели.
fc = radiator.OperatingFrequency; fs = waveform.SampleRate; c = radiator.PropagationSpeed; sensormotion = phased.Platform(... 'InitialPosition',[0; 0; 10],... 'Velocity',[0; 0; 0]); target = phased.RadarTarget(... 'MeanRCS',[1.6 2.2 1.05],... 'OperatingFrequency',fc); tgtmotion = phased.Platform(... 'InitialPosition',[2000.66 3532.63 3845.04; 0 0 0;10 10 10], ... 'Velocity',[120 -120 0; 0 0 0; 0 0 0]); channel = phased.FreeSpace(... 'SampleRate',fs,... 'TwoWayPropagation',true,... 'OperatingFrequency',fc);
Если эхо прибывает в получатель, согласованный фильтр и импульсный интегратор используются, чтобы выполнить оценку области значений.
matchingcoeff = getMatchedFilter(waveform); matchingdelay = size(matchingcoeff,1)-1; matchedfilter = phased.MatchedFilter(... 'Coefficients',matchingcoeff,... 'GainOutputPort',true); prf = waveform.PRF; fast_time_grid = unigrid(0,1/fs,1/prf,'[)'); rangeGates = c*fast_time_grid/2; lambda = c/fc; max_range = 5000; tvg = phased.TimeVaryingGain(... 'RangeLoss',2*fspl(rangeGates,lambda),... 'ReferenceLoss',2*fspl(max_range,lambda)); num_pulse_int = 10;
Поскольку является ненужным контролировать траекторию на импульсной частоте повторения, этот пример принимает, что система читает радарное измерение на уровне 20 Гц. Пример использует средство просмотра сценария, чтобы контролировать сцену и график интенсивности времени области значений (RTI), а также график Доплеровской интенсивности времени (DTI) исследовать предполагаемую область значений и значение уровня области значений.
r_update = 20; sceneview = phased.ScenarioViewer('UpdateRate',r_update,... 'Title','Monostatic Radar with Three Targets'); rtiscope = phased.IntensityScope('Name','Range-Time Intensity Scope',... 'XLabel','Range (m)', ... 'XResolution',c/(2*fs), ... 'XOffset',-(matchingdelay-1)*c/(2*fs), ... 'TimeResolution',1/r_update,'TimeSpan',5,'IntensityUnits','dB'); nfft = 128; df = prf/nfft; dtiscope = phased.IntensityScope(... 'Name','Doppler-Time Intensity Scope',... 'XLabel','Velocity (m/sec)', ... 'XResolution',dop2speed(df,lambda)/2, ... 'XOffset', dop2speed(-prf/2,lambda)/2, ... 'TimeResolution',1/r_update,'TimeSpan',5,'IntensityUnits','dB');
Следующий раздел выполняет системную симуляцию и производит визуализацию.
% Pre-allocate array for improved processing speed rxpulses = zeros(numel(rangeGates),num_pulse_int); for k = 1:100 for m = 1:num_pulse_int % Update sensor and target positions [sensorpos,sensorvel] = sensormotion(1/prf); [tgtpos,tgtvel] = tgtmotion(1/prf); % Calculate the target angles as seen by the sensor [~,tgtang] = rangeangle(tgtpos,sensorpos); % Simulate propagation of pulse in direction of targets pulse = waveform(); [txsig,txstatus] = transmitter(pulse); txsig = radiator(txsig,tgtang); txsig = channel(txsig,sensorpos,tgtpos,sensorvel,tgtvel); % Reflect pulse off of targets tgtsig = target(txsig); % Receive target returns at sensor rxsig = collector(tgtsig,tgtang); rxpulses(:,m) = receiver(rxsig,~(txstatus>0)); end rxpulses = matchedfilter(rxpulses); % Correct for matched filter delay rxpulses = buffer(... rxpulses(matchingdelay+1:end),... size(rxpulses,1)); rxpulses = tvg(rxpulses); rx_int = pulsint(rxpulses,'noncoherent'); % display RTI rtiscope(rx_int); % display DTI rx_dop = mean(fftshift(... abs(fft(rxpulses,nfft,2)),2)); dtiscope(rx_dop.'); % display scene sceneview(sensorpos,sensorvel,tgtpos,tgtvel); % perform next detection when next update is needed sensormotion(1/r_update); tgtmotion(1/r_update); end hide(dtiscope); hide(rtiscope);
hide(sceneview); show(rtiscope);
И средство просмотра сценария и RTI обновляются во время симуляции, таким образом, можно легко проверить, запускается ли симуляция как ожидалось и совпадает ли оценка области значений с наземной истиной, в то время как симуляция запускается.
hide(rtiscope); show(dtiscope);
Точно так же DTI обеспечивает оценки уровня области значений каждой цели.
Этот пример описывает различные способы визуализировать радар и траектории цели. Такая визуализация помогает обеспечить общую картину системной динамики.