主要内容

生成单精度MATLAB代码

这个例子展示了如何生成单精度MATLAB®代码来自双精度MATLAB代码。此示例显示了当您希望查看单精度MATLAB代码或使用验证选项时使用的单精度转换工作流。您还可以选择生成单精度C/ c++代码。

先决条件

要完成此示例,请安装以下产品:2022世界杯八强谁会赢?

创建一个文件夹并复制相关文件

  1. 在本地可写文件夹中创建一个函数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);结束结束
  2. 创建一个测试文件,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(我,:));结束绘制结果标题= {“唧唧喳喳”“步骤”“冲动”} clfi = 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脚本ex_2ndOrder_filter.m

设置单精度配置对象

创建一个单精度配置对象。指定测试文件名。使用测试文件验证单精度代码。绘制双精度码和单精度码之间的误差。其他属性使用默认值。

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代码的报告,请在命令窗口中:

  1. 滚动到生成单精度代码的一步。单击查看报告链接。

  2. MATLAB源窗格中,单击ex_2ndOrder_filter_single

代码生成报告显示用于的单精度MATLAB代码ex_2ndOrder_filter

查看潜在的数据类型问题

当你生成单精度代码时,codegen在代码生成报告中突出显示潜在的数据类型问题。如果codegen不能删除双精度操作,报告强调了导致该操作的MATLAB表达式。单击代码的见解选项卡。没有潜在的数据类型问题表明不存在双精度操作。

比较双精度变量和单精度变量

您可以看到输入的比较图x和输出y因为您选择将输入和输出记录为比较图。

可选地生成单精度C代码

如果还想生成单精度C代码,请创建用于C代码生成的代码配置对象。属性一起使用此配置对象配置选项codegen函数。例如:

  1. 创建一个用于生成C静态库的代码配置对象。

    CFG = code .config(“自由”);

  2. 生成C代码。启用代码生成报告的生成。

    codegen-double2singlescfg配置cfgex_2ndOrder_filter报告
  3. 要查看C代码生成的代码生成报告,请单击查看报告链接。

    生成的代码窗格中,单击ex_2ndOrder_filter.c

    • 双精度变量有类型浮动在C代码中。

    • 该指数整数形式。

    当你生成单精度代码时,codegen允许在代码生成报告中突出显示潜在的数据类型问题。如果codegen不能删除双精度操作,报告强调了导致该操作的MATLAB表达式。

    单击代码的见解选项卡。然后,扩大潜在的数据类型问题。没有双精度操作表明没有双精度操作。

另请参阅

||

相关的例子

更多关于

Baidu
map