主要内容

在命令行生成单精度C代码

这个例子展示了如何从双精度MATLAB生成单精度的C代码®在命令行代码。

先决条件

完成这个示例中,安装以下产品:下载188bet金宝搏

创建代码文件

  1. 在当地,可写的文件夹中,创建一个函数ex_2ndOrder_filter.m

    函数y = ex_2ndOrder_filter (x)% # codegen持续的z如果isempty (z) z = 0 (2, 1);结束% [b] =黄油(0.25 2,)b = (0.0976310729378175, 0.195262145875635, 0.0976310729378175);一个= (1、-0.942809041582063、0.3333333333333333);y = 0(大小(x));i = 1:长度b (x) y (i) = (1) * x(我)+ z (1);b z (1) = (2) * x(我)+ z (2) - (2) * y(我);z (2) = b (3) * x (i) - (3) * y(我);结束结束
  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 =罪(π* f1 * t ^ 2);%线性啁啾从0到f / 2赫兹在1秒x_step = 1 (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)”图(gcf) disp ()测试完成。)

确定输入参数的类型

确定输入参数的类型x,使用coder.getArgTypes运行测试文件ex_2ndOrder_filter_test.m

类型= coder.getArgTypes (“ex_2ndOrder_filter_test”,“ex_2ndOrder_filter”);

测试文件运行并显示为每个输入滤波器的输出信号。coder.getArgTypes确定的输入类型x是1 x256双。

生成并运行单精度墨西哥人来验证数值行为

  1. 在您生成单精度C代码、生成一个单精度墨西哥人功能,您可以使用来验证所生成的单精度代码的行为。表明你想要单精度墨西哥人代码、使用-singleC选择。

    codegen-singleCex_2ndOrder_filterarg游戏类型报告

    在墨西哥人的一代,代码生成器检测单精度转换问题。在您生成C / c++代码之前,解决这些问题。本例中没有单精度转换问题。

    生成的墨西哥人接受单精度和双精度输入。您可以使用相同的测试文件运行双精度MATLAB函数和单精度墨西哥人。你不需要修改测试文件调用单精度墨西哥人的功能。

  2. 运行测试文件ex_2ndOrder_filter_test.m。这个文件调用双精度MATLAB函数ex_2ndOrder_filter.m

    ex_2ndOrder_filter_test

  3. 测试文件运行并显示为每个输入滤波器的输出信号。

  4. 运行测试文件ex_2ndOrder_filter_test,替换调用双精度ex_2ndOrder_filter函数调用单精度ex_2ndOrder_filter_mex函数。

    coder.runTest (“ex_2ndOrder_filter_test”,“ex_2ndOrder_filter”)
  5. 测试文件运行并显示为每个输入滤波器的输出信号。单精度墨西哥人函数产生相同的结果为双精度MATLAB函数。

生成单精度的C代码

  1. 创建一个配置对象的代码生成一个C的静态库,动态库,或可执行文件。

    cfg = coder.config (“自由”);

  2. 生成单精度C代码、电话codegen-singleC选择。使生成的代码生成报告。

    codegen配置cfg-singleCex_2ndOrder_filterarg游戏{类型{1}}报告

视图生成的单精度的C代码

查看代码生成C代码生成报告,单击查看报告链接。

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

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

  • 该指数是一个整数。

查看潜在的数据类型问题

当你产生单精度代码、codegen使强调潜在的数据类型问题的代码生成报告。如果codegen不能删除一个双精度运算,这份报告强调了MATLAB表达式结果的操作。

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

另请参阅

|||

相关的例子

更多关于