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 для получения дополнительной информации о нормализации.)

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

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

свернуть все

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

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

свернуть все

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

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

Введенный в R2017b