В этом примере показов, как симулировать загромождение на графическом модуле обработки (GPU) или через генерацию кода (MEX) вместо интерпретатора MATLAB. Пример применяет алгоритм выборки матричной инверсии (SMI), один из популярных методов пространственно-временной адаптивной обработки (STAP), к сигналу, полученному воздушным радаром с 6-элементным равномерным линейным массивом (ULA). Пример фокусируется на сравнении эффективности симуляции загромождения между графическим процессором, генерацией кода и интерпретатором MATLAB. Заинтересованные читатели могут найти детали симуляции и алгоритма в примере Введение в пространственно-временную адаптивную обработку.
Полная функциональность этого примера требует Parallel Computing Toolbox™ и MATLAB Coder™.
Инженерам радиолокационных систем часто нужно моделировать возврат загромождения к тестовым алгоритмам обработки сигналов, таким как алгоритмы STAP. Однако генерация высокой точности возврата загромождения включает в себя много шагов и, следовательно, часто является вычислительно дорогим. Для примера constantGammaClutter моделирует загромождение с помощью следующих шагов:
Разделите всю местность на небольшие загроможденные закрашенные фигуры. Размер закрашенной фигуры зависит от диапазона закрашенной фигуры азимута и разрешения области значений.
Для каждой закрашенной фигуры вычислите его соответствующие параметры, такие как случайный возврат, угол выпаса и коэффициент усиления антенной решетки.
Объедините возвраты от всех закрашенных фигур загромождения, чтобы сгенерировать общий возврат загромождения.
Количество загроможденных закрашенных фигур зависит от покрытия местности, но обычно оно находится в области значений от тысяч до миллионов. В сложение все вышеперечисленные шаги должны быть выполнены для каждого импульса (при условии, что используется импульсный радар). Поэтому симуляция загромождения часто является высоким полюсом в системной симуляции.
Чтобы улучшить скорость симуляции загромождения, можно воспользоваться параллельными вычислениями. Обратите внимание, что возврат загромождения от более поздних импульсов может зависеть от сигнала, сгенерированного в более ранних импульсах, поэтому некоторые параллельные решения, предлагаемые MATLAB, такие как parfor
, не всегда применяются. Однако, поскольку расчет в каждой закрашенной фигуре не зависит от расчетов в других закрашенных фигурах, оно подходит для ускорения графический процессор.
Если у вас есть поддерживаемый графический процессор и вы имеете доступ к Parallel Computing Toolbox, то вы можете воспользоваться преимуществами GPU в генерации возврата загромождения при помощи gpuConstantGammaClutter
вместо c onstantGammaClutter
. В большинстве случаев использование gpuConstantGammaClutter
Системный объект является единственным изменением, которое необходимо внести.
Если у вас есть доступ к MATLAB Coder, можно также ускорить симуляцию загромождения, сгенерировав код С для c onstantGammaClutter
, скомпилировав его и запустив скомпилированную версию. При запуске в режиме генерации кода этот пример компилирует stapclutter с помощью команды codegen:
codegen('stapclutter','-args',... {coder.Constant(maxRange),... coder.Constant(patchAzSpan)});
Все значения свойств c onstantGammaClutter
должны быть переданы как постоянные значения. Команда codegen сгенерирует файл MEX, stapclutter_mex, который будет вызываться в цикле.
Чтобы сравнить эффективность симуляции загромождения между интерпретатором MATLAB, генерацией кода и графическим процессором, запустите следующий графический интерфейс пользователя путем ввода stapcpugpu
в командной строке MATLAB. Запущенный графический интерфейс пользователя показан на следующем рисунке:
Левая сторона графический интерфейс пользователя содержит четыре графика, показывающие необработанный принятый сигнал, ответ угла-Допплера принятого сигнала, обработанный сигнал и ответ угла-Допплера весов обработки STAP. Снова, детали можно найти в примере Введение в пространственно-временную адаптивную обработку. На правой стороне графический интерфейс пользователя вы контролируете количество закрашенных фигур загромождения путем изменения диапазона закрашенной фигуры загромождения в азимутальном направлении (в степенях) и максимальной области значений загромождения (в км). Затем можно нажать кнопку Start, чтобы запустить симуляцию, которая моделирует 5 когерентных интервалов обработки (CPI), где каждый CPI содержит 10 импульсов. Обработанный сигнал и ответы угла-Допплера обновляются один раз в ИПЦ.
В следующем разделе показано время для различных запусков симуляции. В этих симуляциях каждый импульс состоит из 200 выборок области значений с разрешением области значений 50 м. Комбинации диапазона закрашенной фигуры загромождения и максимального диапазона загромождений приводят к различному количеству общих закрашенных фигур загромождения. Например, диапазон закрашенных фигур загромождения 10 степеней и максимальная область значений загромождений 5 км подразумевает 3600 закрашенные фигуры загромождения. Симуляции выполняются на следующих строениях системы:
CPU: Xeon X5650, 2,66 ГГц, 24 ГБ памяти
Графический процессор: Tesla C2075, память 6 ГБ
Результаты синхронизации показаны на следующем рисунке.
helperCPUGPUResultPlot
Из рисунка видно, что в целом графический процессор улучшает скорость симуляции в десятки раз, иногда даже в сто раз. Два интересных наблюдения:
Когда количество закрашенных фигур загромождения невелико, пока данные могут помещаться в память графический процессор, эффективность графический процессор практически постоянна. То же самое не верно для интерпретатора MATLAB.
Когда количество закрашенных фигур загромождения становится большим, данные больше не могут помещаться в память графический процессор. Поэтому скорость, обеспечиваемая графическим процессором по интерпретатору MATLAB, начинает уменьшаться. Однако для почти десяти миллионов загроможденных закрашенных фигур графический процессор по-прежнему обеспечивает ускорение более чем в 50 раз.
Улучшение скорости симуляции из-за генерации кода меньше, чем улучшение скорости графический процессор, но все еще значительно. Генерация кода для constantGammaClutter
предварительно вычисляет собранный загромождитель как массив постоянных значений. Для большего количества патчей загромождения размер массива становится слишком большим, что уменьшает улучшение скорости из-за накладных расходов на управление памятью. Генерация кода требует доступа к MATLAB Coder, но не требует специального оборудования.
Несмотря на то, что симуляция, используемое в этом примере, вычисляет миллионы закрашенных фигур загромождения, полученный кубик данных имеет размер 200x6x10, указывающий только 200 выборок области значений в каждом импульсе, 6 каналов и 10 импульсов. Этот кубик данных является маленьким по сравнению с реальными проблемами. Этот пример выбирает эти параметры, чтобы показать преимущества, которые вы можете получить от использования графический процессор или генерации кода, при этом гарантируя, что пример запускается в течение разумного времени в интерпретаторе MATLAB. Некоторые симуляции с большим размером куба данных дают следующие результаты:
45-кратное ускорение с использованием графический процессор для симуляции, которое генерирует 50 импульсов для ULA с 50 элементами с 5000 выборкой области значений в каждом импульсе, то есть куба данных 5000x50x50. Разрешение области значений 10 м. Радар охватывает общий азимут 60 степеней, по 1 степени на каждой закрашенной фигуре загромождения. Максимальная область значений загромождения составляет 50 км. Общее количество загроможденных закрашенных фигур составляет 305 000.
60-кратное ускорение с использованием графический процессор для симуляции, подобной вышеописанной, за исключением охвата азимутом в 180 градусов и максимальной дальности загромождения, равной области значений горизонта (около 130 км). В этом случае общее количество закрашенных фигур составляет 2 356 801.
Этот пример сравнивает эффективность, достигнутые путем симуляции возврата загромождения с помощью интерпретатора MATLAB, графического процессора или генерации кода. Результат показывает, что графический процессор и генерация кода предлагают большие скорости улучшения по сравнению с интерпретатором MATLAB.