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