主要内容

为什么分析器选择零状态长度?

当算法的输出不因给定算法的任何输入而改变时,分析器认为算法是无状态的,即使它包含状态。确保算法的输入对算法的输出有直接的影响。

这个函数Input_Output使用包含状态的FIR滤波器。

函数[输出]= Input_Output(输入)持续的过滤器如果isempty(Filter) Filter = dsp。FIRFilter (“分子”(1:12));结束y =过滤器(输入);输出=任何(y (:) > 0);结束

当您在这个函数上调用自动状态长度检测时,分析器检测到的最小状态长度为0

dspunfoldInput_Outputarg游戏{randn (10,1)}- s汽车- f真正的
分析MATLAB输入函数Input_Output搜索最小状态长度(这可能需要一段时间)检查无状态…创建多线程MEX文件Input_Output_mt。mexw64创建分析器文件Input_Output_analyzer

分析器检测到零状态长度,因为不管输入的值是多少,函数的输出是相同的。当分析器以零状态长度测试算法时,多线程MEX和单线程MEX的输出匹配。因此,分析器认为算法是无状态的,并将最小状态长度设置为零。

建议

为了防止分析器选择错误的状态长度,重写算法,使输入对输出立即产生影响。另外,选择以最大状态长度强调代码路径的输入。

有关最佳实践,请参阅dspunfold

相关的话题