主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

使用平面近似调整查找表数据

查找表是常用的模块,用于近似函数的行为。此示例展示如何利用 Simulink® Design Verifier™ 的平面近似法来调整查找表数据。要调整查找表的值,请执行以下两步过程:

1.将一维和二维查找表的实例转换为使用平面计算(一维或二维)的表示形式,您可以在其中配置平面的参数以实现可调性。

2.从生成的平面参数中分析相应的查找表数据。

您可以使用 Simulink® Coverage™ 来确定查找表的覆盖率,方法是验证在分析过程中是否解决了断点指定的平面中的所有网格点。

打开原始模型

此示例使用了两个预配置模型:sldvexTableParamTune 是原始模型,sldvexTableParamTuneReplace 是使用平面近似的模型。

打开 sldvexTableParamTune 模型。

open_system('sldvexTableParamTune');

sldv_model_table_param_tune.png

该模型包含一个二维查找表模块,其输出始终为 0。

lookup_table_block2d.png

分析原始模型

二维查找表中的值会阻止某些测试用例在测试生成分析期间成功完成。

要执行测试生成分析,请按照以下步骤操作:

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 目标。

results_summary_2d_analysis.png

关闭模型。

bdclose('all');

使用平面表替换打开变换模型

打开 sldvexTableParamTuneReplace 模型。该模型使用简单的线性方程而不是查找表,您可以使用 Simulink Design Verifier 调整其参数。

open_system("sldvexTableParamTuneReplace");

sldv_model_planar_approximations.png

sldvexTableParamTuneReplace 模型中,planarApprox 模块取代了 sldvexTableParamTune 模型中的 2-D Lookup Table 模块。

打开 planarApprox 模块。该模块包含三个标量参数,您可以使用 Simulink Design Verifier 分析生成这些参数:tableParam_k1tableParam_k2tableParam_off.

open_system("sldvexTableParamTuneReplace/planarApprox");

planar_approximations.png

要查看这些参数,请在“配置参数”窗口中导航到参数和变体 >参数表。

parameter_configurations.png

分析转换后的模型

要对转换后的模型执行测试生成分析,请在 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

测试生成分析正常完成并产生满足所有测试条件的输入和参数值。结果摘要窗口显示所有目标均已满足。

testgen_analysis_planar_approximation.png

每个测试用例包含平面近似模块的线性参数的值。

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=tableParam_k1*X+tableParam_k2*Y+tableParam_off,

其中 z 是查找表的结果。

three_dimensional_plot.png

使用 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 模型的决策覆盖率很广。

coverage_report_param_table.png