В этом примере показано, как использовать умножение с плавающей точкой, чтобы обработать сетевую наклонную коррекцию. При преобразовании типов данных с плавающей точкой в типы данных с фиксированной точкой в сгенерированном коде сетевая наклонная коррекция является одним методом масштабирующихся типов данных с фиксированной точкой. Масштабирование типов данных с фиксированной точкой избегает условий переполнения и минимизирует ошибки квантования.
Для процессоров, которые поддерживают эффективное умножение, с помощью умножения с плавающей точкой, чтобы обработать сетевую наклонную коррекцию, повышает эффективность кода. Если сетевая наклонная коррекция имеет значение, которое не является степенью двойки, использование деления улучшает точность.
Примечание: Этот пример требует лицензии 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)
Используйте умножение с плавающей точкой, чтобы обработать сетевые наклонные коррекции