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