В этом примере показано, как использовать умножение с плавающей точкой, чтобы обработать сетевую наклонную коррекцию. При преобразовании типов данных с плавающей точкой в типы данных с фиксированной точкой в сгенерированном коде сетевая наклонная коррекция является одним методом масштабирующихся типов данных с фиксированной точкой. Масштабирование типов данных с фиксированной точкой избегает условий переполнения и минимизирует ошибки квантования.
Для процессоров, которые поддерживают эффективное умножение, с помощью умножения с плавающей точкой, чтобы обработать сетевую наклонную коррекцию, повышает эффективность кода. Если сетевая наклонная коррекция имеет значение, которое не является степенью двойки, использование деления улучшает точность.
Примечание: Этот пример требует лицензии Fixed-Point Designer™.
В модели rtwdemo_float_mul_for_net_slope_correction, блок Convert преобразует входной сигнал от типа данных с плавающей точкой до типа данных с фиксированной точкой. Сетевая наклонная коррекция имеет значение 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)); }
Откройте диалоговое окно Configuration Parameters.
На Математике и панели Типов данных, выберите Use умножение с плавающей точкой, чтобы обработать сетевые наклонные коррекции. Эта оптимизация включена по умолчанию.
В качестве альтернативы можно использовать 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)
Используйте умножение с плавающей точкой, чтобы обработать сетевые наклонные коррекции