在命令行生成单精度C代码
这个例子展示了如何从双精度MATLAB生成单精度的C代码®在命令行代码。
先决条件
完成这个示例中,安装以下产品:下载188bet金宝搏
MATLAB
MATLAB编码器™
定点设计师™
C编译器
看到金宝app支持编译器。
您可以使用
墨西哥人设置
改变默认的编译器。看到改变默认的编译器。
创建代码文件
在当地,可写的文件夹中,创建一个函数
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(我);结束结束
创建一个测试文件,
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(我,:));结束%绘制结果标题= {“唧唧喳喳”,“步骤”,“冲动”}clf为i = 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双。
生成并运行单精度墨西哥人来验证数值行为
在您生成单精度C代码、生成一个单精度墨西哥人功能,您可以使用来验证所生成的单精度代码的行为。表明你想要单精度墨西哥人代码、使用
-singleC
选择。codegen-singleCex_2ndOrder_filterarg游戏类型报告
在墨西哥人的一代,代码生成器检测单精度转换问题。在您生成C / c++代码之前,解决这些问题。本例中没有单精度转换问题。
生成的墨西哥人接受单精度和双精度输入。您可以使用相同的测试文件运行双精度MATLAB函数和单精度墨西哥人。你不需要修改测试文件调用单精度墨西哥人的功能。
运行测试文件
ex_2ndOrder_filter_test.m
。这个文件调用双精度MATLAB函数ex_2ndOrder_filter.m
。ex_2ndOrder_filter_test
测试文件运行并显示为每个输入滤波器的输出信号。
运行测试文件
ex_2ndOrder_filter_test
,替换调用双精度ex_2ndOrder_filter
函数调用单精度ex_2ndOrder_filter_mex
函数。coder.runTest (“ex_2ndOrder_filter_test”,“ex_2ndOrder_filter”)
测试文件运行并显示为每个输入滤波器的输出信号。单精度墨西哥人函数产生相同的结果为双精度MATLAB函数。
生成单精度的C代码
创建一个配置对象的代码生成一个C的静态库,动态库,或可执行文件。
cfg = coder.config (“自由”);
生成单精度C代码、电话
codegen
与-singleC
选择。使生成的代码生成报告。codegen配置cfg-singleCex_2ndOrder_filterarg游戏{类型{1}}报告
视图生成的单精度的C代码
查看代码生成C代码生成报告,单击查看报告链接。
在生成的代码窗格中,单击ex_2ndOrder_filter.c
。
双精度类型变量
浮动
在C代码。该指数
我
是一个整数。
查看潜在的数据类型问题
当你产生单精度代码、codegen
使强调潜在的数据类型问题的代码生成报告。如果codegen
不能删除一个双精度运算,这份报告强调了MATLAB表达式结果的操作。
单击代码的见解选项卡。扩大潜在的数据类型问题。没有双精度运算表明,没有双精度操作仍然存在。
另请参阅
codegen
|coder.config
|coder.getArgTypes
|coder.runTest