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, который может вычислить поверхность усиления без ссылки на G S. Третий раздел использует эти значения для вычисления нормализованных переменных планирования. (См. tunableSurface для получения дополнительной информации о нормализации.)

Последний раздел вычисляет коэффициент усиления путем суммирования всех членов в полиномиальном выражении для поверхности усиления.

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

свернуть все

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

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

свернуть все

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

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

Введенный в R2017b