codegen

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

Синтаксис

Описание

пример

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