codegen

Сгенерируйте код MATLAB для настраиваемых поверхностей усиления

Синтаксис

code = codegen(GS)

Описание

пример

code = codegen(GS) генерирует код MATLAB® для настраиваемого поверхностного GS. Сгенерированный код является функцией, которая принимает скалярные значения переменных планирования и возвращает усиление с матричным знаком или со скалярным знаком, в зависимости от GS.

Примеры

свернуть все

Создайте настраиваемую поверхность, которая представляет скалярное усиление с билинейной зависимостью от двух переменных планирования. Предположим, что переменными планирования является alpha, в пределах от 0-15 градусов и V, в пределах от 300-600 м/с. Настраиваемая поверхность покрывает линейно расположенную с интервалами сетку в этом рабочем диапазоне.

[alpha,V] = ndgrid(0:3:15,300:50:600);
domain = struct('alpha',alpha,'V',V);
shapefcn = @(x,y) [x,y,x*y]; 
GS0 = tunableSurface('K',1,domain,shapefcn);

Обычно, вы используете GS0, чтобы параметризовать запланированное усиление и настроить поверхностные коэффициенты с systune. В данном примере вместо настройки, вручную устанавливает коэффициенты на ненулевые значения.

GS = setData(GS0,[100,28,40,10]);

Сгенерируйте код MATLAB, который вычисляет скалярное усиление как функцию планирования переменных.

code = codegen(GS)
code = 
    'function Gain_ = fcn(alpha_,V_)
     %#codegen
     
     % Type casting
     ZERO = zeros(1,1,'like',alpha_+V_);
     alpha_ = cast(alpha_,'like',ZERO);
     V_ = cast(V_,'like',ZERO);
     
     % Tuned gain surface coefficients
     Coeffs = cast([100 28 40 10],'like',ZERO);
     Offsets = cast([7.5 450],'like',ZERO);
     Scalings = cast([7.5 150],'like',ZERO);
     
     % Normalization 
     alpha_ = (alpha_ - Offsets(1))/Scalings(1);
     V_ = (V_ - Offsets(2))/Scalings(2);
     
     % Compute weighted sum of terms
     Y = [ alpha_ , V_ , alpha_*V_ ];
     Gain_ = Coeffs(1);
     for i=1:numel(Y)
        Gain_ = Gain_ + Coeffs(i+1) * Y(i);
     end
     '

Получившийся код является функцией, fcn, который берет две переменные планирования и возвращает скалярное усиление. Функция включает директиву %#codegen , так, чтобы это могло использоваться для дальнейшей генерации кода, такой как реализация настроенного расписания усиления в оборудовании.

Функция включает четыре раздела. Первый раздел гарантирует, что переменные планирования брошены к тому же типу. Второй раздел кодирует коэффициенты усиления и смещения и масштабирования, которые программное обеспечение извлекает от GS. Эти значения трудно закодированы в fcn, который может вычислить поверхность усиления независимо от GS. Третий раздел использует эти значения, чтобы вычислить нормированные переменные планирования. (См. tunableSurface для получения дополнительной информации о нормализации.)

Последний раздел вычисляет усиление путем подведения всех условий в многочленном выражении для поверхности усиления.

Входные параметры

свернуть все

Настраиваемая поверхность усиления, заданная как объект tunableSurface.

Выходные аргументы

свернуть все

Сгенерированный код для поверхности усиления, возвращенной как символьный массив. Код содержит функцию, Gain_ = fcn(x1_,x2_,...,xN_), который вычисляет усиление из переменных x1_,x2_,...,xN_ планирования GS. Выражение, связывающее усиление с переменными планирования, коэффициентами выражения и нормализацией переменных планирования, все взято из GS, и код может запуститься без дальнейшей ссылки на TS. Возвращенная функция включает директиву %#codegen так, чтобы это могло использоваться для дальнейшей генерации кода, такой как реализация настроенного расписания усиления в оборудовании.

Когда вы используете writeBlockValue, чтобы записать настроенные поверхностные усилением коэффициенты от интерфейса slTuner до блока MATLAB function, он использует, это сгенерировало код MATLAB.

Введенный в R2017b