В этом примере показано, как использовать умножение с плавающей запятой для обработки коррекции чистого уклона. При преобразовании типов данных с плавающей запятой в типы данных с фиксированной запятой в сгенерированном коде коррекция откоса в чистом выражении является одним из методов масштабирования типов данных с фиксированной запятой. Масштабирование типов данных с фиксированной точкой позволяет избежать условий переполнения и минимизировать ошибки квантования.
Для процессоров, которые поддерживают эффективное умножение, использование умножения с плавающей запятой для обработки коррекции чистого наклона повышает эффективность кода. Если чистая коррекция наклона имеет значение, которое не является степенью два, использование деления улучшает точность.
Примечание.В этом примере требуется лицензия Fixed-Point Designer™.
В rtwdemo_float_mul_for_net_slope_correction модели блок преобразования преобразует входной сигнал из типа данных с плавающей запятой в тип данных с фиксированной запятой. Чистая коррекция уклона имеет значение 3.
model = 'rtwdemo_float_mul_for_net_slope_correction';
open_system(model);

Создайте временную папку для процесса сборки и проверки.
currentDir = pwd; [~,cgDir] = rtwdemodir();
Создайте модель.
slbuild(model)
### Starting build procedure for: rtwdemo_float_mul_for_net_slope_correction ### Successful completion of build procedure for: rtwdemo_float_mul_for_net_slope_correction Build Summary Top model targets built: Model Action Rebuild Reason =========================================================================================================================== rtwdemo_float_mul_for_net_slope_correction Code generated and compiled Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 10.186s
В этих строках rtwdemo_float_mul_for_net_slope_correction.c код, генератор кода делит входной сигнал на 3.0F .
cfile = fullfile(cgDir,'rtwdemo_float_mul_for_net_slope_correction_ert_rtw',... 'rtwdemo_float_mul_for_net_slope_correction.c'); rtwdemodbtype(cfile,'/* Model step', '/* Model initialize', 1, 0);
/* Model step function */
void rtwdemo_float_mul_for_net_slope_correction_step(void)
{
/* Outport: '<Root>/Output' incorporates:
* DataTypeConversion: '<Root>/Data Type Conversion'
* Inport: '<Root>/Input'
*/
rtY.Output = (int16_T)(real32_T)floor((real_T)(rtU.Input / 3.0F));
}
Откройте диалоговое окно «Параметры конфигурации».
На панели Математические типы и типы данных (Math and Data Types) выберите Использовать умножение с плавающей запятой (Use floating-point multification) для обработки поправок чистого наклона. Эта оптимизация включена по умолчанию.
Кроме того, для включения оптимизации можно использовать API командной строки.
set_param(model, 'UseFloatMulNetSlope', 'on');
slbuild(model)
### Starting build procedure for: rtwdemo_float_mul_for_net_slope_correction ### Successful completion of build procedure for: rtwdemo_float_mul_for_net_slope_correction Build Summary Top model targets built: Model Action Rebuild Reason ========================================================================================================== rtwdemo_float_mul_for_net_slope_correction Code generated and compiled Generated code was out of date. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 8.6393s
В оптимизированном коде генератор кода умножает входной сигнал на обратное 3.0F , то есть 0.333333343F .
rtwdemodbtype(cfile,'/* Model step', '/* Model initialize', 1, 0);
/* Model step function */
void rtwdemo_float_mul_for_net_slope_correction_step(void)
{
/* Outport: '<Root>/Output' incorporates:
* DataTypeConversion: '<Root>/Data Type Conversion'
* Inport: '<Root>/Input'
*/
rtY.Output = (int16_T)(real32_T)floor((real_T)(rtU.Input * 0.333333343F));
}
Закройте модель и отчет о создании кода.
bdclose(model) rtwdemoclean; cd(currentDir)
Использование умножения с плавающей запятой для обработки поправок на чистый уклон