使用平面近似调整查找表数据
查找表是常用的模块,用于近似函数的行为。此示例展示如何利用 Simulink® Design Verifier™ 的平面近似法来调整查找表数据。要调整查找表的值,请执行以下两步过程:
1.将一维和二维查找表的实例转换为使用平面计算(一维或二维)的表示形式,您可以在其中配置平面的参数以实现可调性。
2.从生成的平面参数中分析相应的查找表数据。
您可以使用 Simulink® Coverage™ 来确定查找表的覆盖率,方法是验证在分析过程中是否解决了断点指定的平面中的所有网格点。
打开原始模型
此示例使用了两个预配置模型:sldvexTableParamTune
是原始模型,sldvexTableParamTuneReplace
是使用平面近似的模型。
打开 sldvexTableParamTune
模型。
open_system('sldvexTableParamTune');
该模型包含一个二维查找表模块,其输出始终为 0。
分析原始模型
二维查找表中的值会阻止某些测试用例在测试生成分析期间成功完成。
要执行测试生成分析,请按照以下步骤操作:
1.在 App 选项卡上的模型验证、确认和测试下,点击 Design Verifier。
2.在 Design Verifier 选项卡上,点击生成测试。 或者,使用 sldvrun
函数来 运行分析。
sldvrun('sldvexTableParamTune');
01-Feb-2025 15:03:47 Checking compatibility for test generation: model 'sldvexTableParamTune' Compiling model...done Building model representation...done 01-Feb-2025 15:03:59 'sldvexTableParamTune' is compatible for test generation with Simulink Design Verifier. Generating tests using model representation from 01-Feb-2025 15:03:59... Generating output files: 01-Feb-2025 15:04:16 Results generation completed. Data file: /tmp/Bdoc25a_2864802_2157426/tpc9794f42/sldv-ex32482295/sldv_output/sldvexTableParamTune/sldvexTableParamTune_sldvdata.mat
sldvloadresults('sldvexTableParamTune')
ans = logical
1
分析完成后,结果摘要窗口将显示四个 unsatisfied
目标。
关闭模型。
bdclose('all');
使用平面表替换打开变换模型
打开 sldvexTableParamTuneReplace
模型。该模型使用简单的线性方程而不是查找表,您可以使用 Simulink Design Verifier 调整其参数。
open_system("sldvexTableParamTuneReplace");
在 sldvexTableParamTuneReplace
模型中,planarApprox
模块取代了 sldvexTableParamTune
模型中的 2-D Lookup Table 模块。
打开 planarApprox
模块。该模块包含三个标量参数,您可以使用 Simulink Design Verifier 分析生成这些参数:tableParam_k1
、tableParam_k2
和 tableParam_off.
open_system("sldvexTableParamTuneReplace/planarApprox");
要查看这些参数,请在“配置参数”窗口中导航到参数和变体 >参数表。
分析转换后的模型
要对转换后的模型执行测试生成分析,请在 Design Verifier 选项卡上点击生成测试。 或者,使用 sldvrun
函数。
[status, fileNames] = sldvrun("sldvexTableParamTuneReplace");
01-Feb-2025 15:04:22 Checking compatibility for test generation: model 'sldvexTableParamTuneReplace' Compiling model...done Building model representation...done 01-Feb-2025 15:04:27 'sldvexTableParamTuneReplace' is compatible for test generation with Simulink Design Verifier. Generating tests using model representation from 01-Feb-2025 15:04:27... Generating output files: 01-Feb-2025 15:04:40 Results generation completed. Data file: /tmp/Bdoc25a_2864802_2157426/tpc9794f42/sldv-ex32482295/sldv_output/sldvexTableParamTuneReplace/sldvexTableParamTuneReplace_sldvdata.mat
测试生成分析正常完成并产生满足所有测试条件的输入和参数值。结果摘要窗口显示所有目标均已满足。
每个测试用例包含平面近似模块的线性参数的值。
load(fileNames.DataFile) sldvData.TestCases(1).paramValues(1)
ans = struct with fields:
name: 'tableParam_k1'
value: -3.3210
noEffect: 0
type: 'Parameter'
sourceType: 'base workspace'
source: 'base workspace'
sldvData.TestCases(1).paramValues(2)
ans = struct with fields:
name: 'tableParam_k2'
value: 5.9365
noEffect: 0
type: 'Parameter'
sourceType: 'base workspace'
source: 'base workspace'
sldvData.TestCases(1).paramValues(3)
ans = struct with fields:
name: 'tableParam_off'
value: -6.4012
noEffect: 0
type: 'Parameter'
sourceType: 'base workspace'
source: 'base workspace'
根据平面参数计算查找表值
Simulink Design Verifier 为每个测试用例生成参数值,每组参数值都是一个平面,您可以在线性方程的三维图(x、y 和 z 轴)中将其可视化
,
其中 z 是查找表的结果。
使用 Simulink Design Verifier 生成的平面参数将参数值替换为表断点数组,从而生成表输出的等效矩阵。
tableParam_k1 = sldvData.TestCases(1).paramValues(1).value; tableParam_k2 = sldvData.TestCases(1).paramValues(2).value; tableParam_off = sldvData.TestCases(1).paramValues(3).value; u1Break = [0:500:3000]; u2Break = [0:0.1:1.1]; tableParam = (tableParam_k1 * u1Break' * ones(1,12)) + (tableParam_k2 * ones(7,1) * u2Break) + tableParam_off
tableParam = 7×12
103 ×
-0.0064 -0.0058 -0.0052 -0.0046 -0.0040 -0.0034 -0.0028 -0.0022 -0.0017 -0.0011 -0.0005 0.0001
-1.6669 -1.6663 -1.6657 -1.6651 -1.6645 -1.6639 -1.6633 -1.6627 -1.6622 -1.6616 -1.6610 -1.6604
-3.3274 -3.3268 -3.3262 -3.3256 -3.3250 -3.3244 -3.3238 -3.3232 -3.3227 -3.3221 -3.3215 -3.3209
-4.9879 -4.9873 -4.9867 -4.9861 -4.9855 -4.9849 -4.9843 -4.9837 -4.9832 -4.9826 -4.9820 -4.9814
-6.6484 -6.6478 -6.6472 -6.6466 -6.6460 -6.6454 -6.6448 -6.6442 -6.6437 -6.6431 -6.6425 -6.6419
-8.3089 -8.3083 -8.3077 -8.3071 -8.3065 -8.3059 -8.3053 -8.3047 -8.3042 -8.3036 -8.3030 -8.3024
-9.9694 -9.9688 -9.9682 -9.9676 -9.9670 -9.9664 -9.9658 -9.9652 -9.9647 -9.9641 -9.9635 -9.9629
此示例包含函数文件 expand_planar_table_params.m
。您可以嵌入此计算数据,它会转换 Simulink Design Verifier 输出数据。
包推断数据
编辑 expand_planar_table_params.m
函数文件以包含有关表参数断点的信息。将结果保存在 newSldvData.
中
tableInfo.VarName = 'tableParam'; tableInfo.Breakpoints = {[0:500:3000], [0:0.1:1.1]}; newSldvData = expand_planar_table_params(sldvData, tableInfo); sldvData = newSldvData; save('table_param_tune_inferdata.mat','sldvData');
关闭所有模型。
bdclose('all');
在原始模型上运行包含查找表值的测试用例
通过使用查找表值运行测试用例,对 sldvexTableParamTune
模型执行测试生成分析。
open_system('sldvexTableParamTune') opts = sldvruntestopts; opts.coverageEnabled = true; opts.fastRestart = false; assignin('base','opts',opts); [out,covData] = evalin('base','sldvruntest(''sldvexTableParamTune'',''table_param_tune_inferdata.mat'', opts)')
out = 1x2 Simulink.SimulationOutput array
covData = ... cvdata version: (R2025a) id: 0 type: DERIVED_DATA test: [] rootID: 617 checksum: [1x1 struct] modelinfo: [1x1 struct] startTime: 01-Feb-2025 15:04:44 stopTime: 01-Feb-2025 15:04:45 intervalStartTime: intervalStopTime: filter: simMode: Normal
验证覆盖率
根据结果生成覆盖率报告以确认完全覆盖率。
cvhtml('table_param_tune_alltests.html',covData);
报告摘要表明 sldvexTableParamTune
模型的决策覆盖率很广。