Почему анализатор выбирает нулевую длину состояния?

Когда выход алгоритма не меняется для какого-либо входа, заданного алгоритму, анализатор рассматривает алгоритм без состояния, даже если он содержит состояния. Убедитесь, что входы в алгоритм оказывают немедленный эффект на выход алгоритма.

Функция Input_Output использует конечную импульсную характеристику, который содержит состояния.

function [output] = Input_Output(input)

persistent Filter
if isempty(Filter)
   Filter = dsp.FIRFilter('Numerator', (1:12));
end

y = Filter(input);

output = any(y(:)>0);

end

Когда вы вызываете автоматическое обнаружение длины состояния этой функции, анализатор обнаруживает минимальную длину состояния 0.

dspunfold Input_Output -args {randn(10,1)} -s auto -f true
Analyzing input MATLAB function Input_Output
Creating single-threaded MEX file Input_Output_st.mexw64
Searching for minimal state length (this might take a while)
Checking stateless ... Sufficient
Minimal state length is 0
Creating multi-threaded MEX file Input_Output_mt.mexw64
Creating analyzer file Input_Output_analyzer

Анализатор обнаруживает нулевую длину состояния, потому что выход функции одинаковый независимо от значения входа. Когда анализатор проверяет алгоритм с нулевой длиной состояния, выходы многопоточного MEX и однопоточного MEX совпадают. Поэтому анализатор рассматривает алгоритм без гражданства и устанавливает минимальную длину состояния в нуль.

Рекомендация

Чтобы предотвратить выбор анализатором неправильной длины состояния, перепишите алгоритм так, чтобы входы оказали немедленный эффект на выход. Кроме того, выберите входы, которые подчеркивают путь кода с максимальной длиной состояния.

Лучшие практики см. в разделе 'Советы' dspunfold.

Похожие темы