生成单精度MATLAB代码
这个例子展示了如何生成单精度MATLAB®代码来自双精度MATLAB代码。此示例显示了当您希望查看单精度MATLAB代码或使用验证选项时使用的单精度转换工作流。您还可以选择生成单精度C/ c++代码。
先决条件
要完成此示例,请安装以下产品:2022世界杯八强谁会赢?
创建一个文件夹并复制相关文件
在本地可写文件夹中创建一个函数
ex_2ndOrder_filter.m
。函数y = ex_2ndOrder_filter(x)% # codegen持续的z如果Isempty (z) z = 0 (2,1);结束% [b,a] =黄油(2,0.25)B = [0.0976310729378175, 0.195262145875635, 0.0976310729378175];A = [1, -0.942809041582063, 0.33333333333333333333];Y = 0(大小(x));为I = 1:长度(x) y(I) = b(1)*x(I) + z(1);Z (1) = b(2)*x(i) + Z (2) - a(2) * y(i);Z (2) = b(3)*x(i) - a(3) * y(i);结束结束
创建一个测试文件,
ex_2ndOrder_filter_test.m
,以锻炼ex_2ndOrder_filter
算法。最好的做法是为预处理和后处理创建一个单独的测试脚本,例如:
设置输入值。
调用被测试函数。
输出测试结果。
为了覆盖系统的全部预期操作范围,测试脚本运行
ex_2ndOrder_filter
函数与三个输入信号:啁啾,阶跃和脉冲。然后脚本绘制输出。% ex_2ndOrder_filter_test%定义有代表性的输入N = 256;%点数t = linspace(0,1,N);%从0到1秒的时间向量f1 = N/2;%目标啁啾频率设置为奈奎斯特X_chirp = sin(π *f1*t.^2);%线性啁啾从0到Fs/ 2hz在1秒x_step = ones(1,N);%的步骤x_impulse = 0 (1,N);%的冲动X_impulse (1) = 1;运行正在测试的函数X = [x_chirp;x_step;x_impulse];Y = 0(大小(x));为i = 1:尺寸(x, 1) y(我:)= ex_2ndOrder_filter (x(我,:));结束绘制结果标题= {“唧唧喳喳”,“步骤”,“冲动”} clf为i = 1:尺寸(x, 1)次要情节(大小(x, 1), 1, i)情节(t) x(我:),t、y(我,:))标题(标题{我})传说(“输入”,“输出”)结束包含(“时间(s)”) figure(gcf) disp(测试完成。)
类型 | 名字 | 描述 |
---|---|---|
函数代码 | ex_2ndOrder_filter.m |
MATLAB入口函数 |
测试文件 | ex_2ndOrder_filter_test.m |
测试的MATLAB脚本 |
设置单精度配置对象
创建一个单精度配置对象。指定测试文件名。使用测试文件验证单精度代码。绘制双精度码和单精度码之间的误差。其他属性使用默认值。
SCFG = code .config(“单一”);scfg。TestBenchName =“ex_2ndOrder_filter_test”;scfg。TestNumerics = true;scfg。logioforcomparisonplots = true;
生成单精度MATLAB代码
为了转换双精度MATLAB函数,ex_2ndOrder_filter
,单精度MATLAB代码,使用codegen
函数与-double2single
选择。
codegen-double2singlescfgex_2ndOrder_filter
codegen
分析双精度码。类型的输入类型,因此转换过程通过运行测试文件来推断类型ex_2ndOrder_filter
函数。转换过程为双精度变量选择单精度类型。它选择int32
对于下标变量。转换完成后,codegen
生成类型建议报告。
查看类型建议报告
类的类型建议报告,以查看转换过程为变量选择的类型ex_2ndOrder_filter
函数。点击链接ex_2ndOrder_filter_report.html
。
报告在web浏览器中打开。转换过程转换为:
双精度变量
单
。该指数
我
来int32
。转换过程将索引和维度变量强制转换为int32
。
单精度生成视图MATLAB代码
要查看生成单精度MATLAB代码的报告,请在命令窗口中:
滚动到
生成单精度代码
的一步。单击查看报告链接。在MATLAB源窗格中,单击
ex_2ndOrder_filter_single
。
代码生成报告显示用于的单精度MATLAB代码ex_2ndOrder_filter
。
查看潜在的数据类型问题
当你生成单精度代码时,codegen
在代码生成报告中突出显示潜在的数据类型问题。如果codegen
不能删除双精度操作,报告强调了导致该操作的MATLAB表达式。单击代码的见解选项卡。没有潜在的数据类型问题表明不存在双精度操作。
比较双精度变量和单精度变量
您可以看到输入的比较图x
和输出y
因为您选择将输入和输出记录为比较图。
可选地生成单精度C代码
如果还想生成单精度C代码,请创建用于C代码生成的代码配置对象。属性一起使用此配置对象配置
选项codegen
函数。例如:
创建一个用于生成C静态库的代码配置对象。
CFG = code .config(“自由”);
生成C代码。启用代码生成报告的生成。
codegen-double2singlescfg配置cfgex_2ndOrder_filter报告
要查看C代码生成的代码生成报告,请单击查看报告链接。
在生成的代码窗格中,单击
ex_2ndOrder_filter.c
。双精度变量有类型
浮动
在C代码中。该指数
我
整数形式。
当你生成单精度代码时,
codegen
允许在代码生成报告中突出显示潜在的数据类型问题。如果codegen
不能删除双精度操作,报告强调了导致该操作的MATLAB表达式。单击代码的见解选项卡。然后,扩大潜在的数据类型问题。没有双精度操作表明没有双精度操作。
另请参阅
编码器。SingleConfig
|codegen
|coder.config