exponenta event banner

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

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

Функция 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.

Связанные темы