Phased Array System Toolbox™ может использоваться, чтобы смоделировать сквозную систему фазированной решетки - генерируют переданную форму волны, симулируют целевой возврат, и затем обрабатывают полученный сигнал обнаружить цель. Это показывают в примерах: Симуляция Тестовых сигналов для Радарного Проекта Приемника и Формы волны, чтобы Улучшать Производительность Области значений Существующей Системы. В этом примере показано, как симулировать такую систему в потоковом режиме, таким образом, можно запускать симуляцию в течение долгого времени и наблюдать системную динамику.
Во-первых, настройте радиолокационную систему с некоторыми основными параметрами. Целая радиолокационная система похожа на один показанный в Проекте Формы волны, чтобы Улучшать Производительность Области значений Существующего Системного примера.
fs = 6e6; bw = 3e6; c = 3e8; fc = 10e9; prf = 18750; num_pulse_int = 10; [waveform,transmitter,radiator,collector,receiver,sensormotion,... target,tgtmotion,channel,matchedfilter,tvg,threshold] = ... helperRadarStreamExampleSystemSetup(fs,bw,prf,fc,c);
Затем запустите симуляцию для 100 импульсов. Во время этой симуляции четыре осциллографа времени используются, чтобы наблюдать сигналы на различных этапах. Первые три осциллографа отображают переданный сигнал, полученный сигнал, и постсогласованный фильтр и настроенный усилением сигнал для 10 импульсов. Несмотря на то, что переданный сигнал является мощной последовательностью импульсов, определите объем 2, показывает намного более слабый полученный сигнал из-за потери распространения. Этот сигнал не может быть обнаружен с помощью предварительно установленного порога обнаружения. Даже после согласованной фильтрации и компенсации усиления, это все еще сложно, чтобы обнаружить все три цели.
% pre-allocation fast_time_grid = 0:1/fs:1/prf-1/fs; num_pulse_samples = numel(fast_time_grid); rx_pulses = complex(zeros(num_pulse_samples,num_pulse_int)); mf_pulses = complex(zeros(num_pulse_samples,num_pulse_int)); detect_pulse = zeros(num_pulse_samples,1); % simulation loop for m = 1:10*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 [tgtrng,tgtang] = rangeangle(tgtpos,sensorpos); % Simulate propagation of pulse in direction of targets pulse = waveform(); [pulse,txstatus] = transmitter(pulse); txsig = radiator(pulse,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); nn = mod(m-1,num_pulse_int)+1; rx_pulses(:,nn) = receiver(rxsig,~(txstatus>0)); % Detection processing mf_pulses(:,nn) = matchedfilter(rx_pulses(:,nn)); mf_pulses(:,nn) = tvg(mf_pulses(:,nn)); % Perform pulse integration every 'num_pulse_int' pulses if nn == num_pulse_int detect_pulse = pulsint(mf_pulses,'noncoherent'); end helperRadarStreamDisplay(pulse,abs(rx_pulses(:,nn)),... abs(mf_pulses(:,nn)),detect_pulse,... sqrt(threshold)*ones(num_pulse_samples,1)); end
Поскольку радиолокационные системы требуют интенсивной обработки, скорость симуляции является главным беспокойством. После того, как вы запустили 100 импульсов, чтобы проверить ваш код, можно хотеть запустить 1 000 импульсов. Когда вы запускаете симуляцию в интерпретированном режиме MATLAB, можно измерить прошедшее время с помощью:
tic; helperRadarStreamRun; time_interpreted = toc
time_interpreted = 3.4775
Если симуляция является слишком медленной, можно ускорить ее использование MATLAB Coder™. MATLAB Coder может сгенерировать, скомпилировал код MATLAB®, приводящий к существенному улучшению в обработке скорости. В этом примере MATLAB Coder генерирует функцию helperRadarStreamRun_mex от функции helperRadarStreamRun. Используемую команду показывают ниже:
codegen helperRadarStreamRun.m
Когда mex версия вызывается, скорость симуляции улучшена.
tic; helperRadarStreamRun_mex; time_compiled = toc
time_compiled = 0.7795
Улучшение ускорения зависит от нескольких факторов, таких как скорость ЦП машины и доступная память, но обычно увеличивается 3-4 раза. Обратите внимание на то, что визуализация данных с помощью осциллографов не ускорена MATLAB Coder и все еще обработана интерпретатором MATLAB. Если визуализация не очень важна для вашей симуляции, то можно удалить их для дальнейшего улучшения скорости.
Ниже несколько компромиссов, чтобы рассмотреть при принятии этого подхода:
Возможность визуализации в сгенерированном коде очень ограничена по сравнению с тем, что доступно в MATLAB. Если необходимо сохранить визуализацию в симуляции, используйте coder.extrinsic
прием; но это замедляет симуляцию.
Сгенерированный код не позволяет динамические изменения типа переменной и размера по сравнению с оригинальным кодом MATLAB. Сгенерированный код часто оптимизируется для конкретного типа переменной и размера; поэтому, любое изменение в типе переменной и размере, который может быть вызван, например, изменением в PRF, требует перекомпилировать.
Преимущество скорости симуляции становится более важным, когда время симуляции MATLAB длинно. Если симуляция MATLAB заканчивается через несколько секунд, вы не получаете много путем генерации кода от исходной симуляции MATLAB. Как упомянуто в предыдущем маркере, часто необходимо перекомпилировать код, когда параметры изменяются. Поэтому может быть лучше сначала использовать симуляцию MATLAB, чтобы идентифицировать соответствующие значения параметров и затем использовать сгенерированный код, чтобы запустить долгие симуляции.
В этом примере показано, как выполнить симуляцию радиолокационной системы в потоковом режиме. Это также показывает, как генерация кода может использоваться, чтобы ускорить симуляцию. Компромисс между использованием сгенерированного кода и кодом MATLAB обсужден в конце.