Когда вывод алгоритма не изменяется ни для какого входа, данного алгоритму, анализатор считает алгоритм не сохраняющим состояние, даже если это содержит состояния. Убедитесь, что входные параметры к алгоритму имеют мгновенный эффект на вывод алгоритма.
Функциональный 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. Поэтому анализатор считает алгоритм не сохраняющим состояние и обнуляет минимальную длину состояния.
Чтобы препятствовать тому, чтобы анализатор выбрал неправильную длину состояния, перепишите свой алгоритм так, чтобы входные параметры имели мгновенный эффект на вывод. Кроме того, выберите входные параметры, которые подчеркивают путь выполнения кода с максимальной длиной состояния.
Для лучшых практик смотрите раздел 'Tips' dspunfold
.