exponenta event banner

Моделирование потоковой и ускоренной системы

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

Настройка моделирования

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

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

Если моделирование выполняется слишком медленно, его можно ускорить с помощью Coder™ MATLAB. Кодер MATLAB может генерировать скомпилированный код MATLAB ®, что значительно повышает скорость обработки. В этом примере кодер MATLAB генерирует функцию helperRadarStreamRun_mex из функции helperRadarStreamRun. Используемая команда показана ниже:

codegen helperRadarStreamRun.m

При вызове версии mex повышается скорость моделирования.

tic;
helperRadarStreamRun_mex;
time_compiled = toc
time_compiled =

    0.7795

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

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

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

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

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

Резюме

В этом примере показано, как выполнять моделирование радиолокационной системы в потоковом режиме. Здесь также показано, как можно использовать генерацию кода для ускорения моделирования. В конце рассматривается компромисс между использованием сгенерированного кода и кода MATLAB.