Потоковые и ускоренные Системные симуляции

Phased Array System Toolbox™ может использоваться, чтобы смоделировать сквозную систему фазированных решеток - сгенерировать переданную форму волны, симулировать возврат цели, а затем обработать принятый сигнал, чтобы обнаружить цель. Это показано в примерах: Симуляция тестовых сигналов для радарного приемника и проект формы волны для улучшения эффективности области значений существующей системы. В этом примере показано, как симулировать такую систему в потоковом режиме, чтобы вы могли запускать симуляцию в течение длительного времени и наблюдать динамику системы.

Область Setup

Сначала настройте радиолокационную систему с некоторыми базовыми параметрами. Вся радиолокационная система аналогична той, которая показана в проекте для улучшения эффективности области значений существующей системы.

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 импульсов, чтобы проверить ваш код, вы, возможно, захотите запустить 1000 импульсов. Когда вы запускаете симуляцию в интерпретированном режиме 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. Если визуализация не является критической для вашей симуляции, то можно удалить их для дальнейшего улучшения скорости.

Ниже приводятся несколько компромиссов, которые следует учитывать при принятии этого подхода:

  1. Возможность визуализации в сгенерированном коде очень ограничена по сравнению с тем, что доступно в MATLAB. Если вам нужно сохранить визуализацию в симуляции, используйте coder.extrinsic трюк; но это замедляет симуляцию.

  2. Сгенерированный код не допускает динамических изменений типа и размера переменной по сравнению с оригинальным кодом MATLAB. Сгенерированный код часто оптимизируется для конкретного типа и размера переменной; поэтому любое изменение типа и размера переменной, которое может быть вызвано, например, изменением PRF, требует перекомпиляции.

  3. Преимущество скорости симуляции становится более важным, когда время симуляции MATLAB велико. Если симуляция MATLAB закончится за несколько секунд, вы не получите много, сгенерировав код из исходной симуляции MATLAB. Как упоминалось в предыдущей пуле, часто приходится перекомпилировать код при изменении параметров. Поэтому может быть лучше сначала использовать симуляцию MATLAB, чтобы идентифицировать соответствующие значения параметров, а затем использовать сгенерированный код, чтобы запустить длинные симуляции.

Сводные данные

Этот пример показывает, как выполнить симуляцию радиолокационной системы в потоковом режиме. Также показано, как генерация кода может использоваться для ускорения симуляции. Компромисс между использованием сгенерированного кода и кода MATLAB обсуждается в конце.

Для просмотра документации необходимо авторизоваться на сайте