exponenta event banner

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

Если длина состояния алгоритма зависит от входных данных алгоритма, убедитесь, что при создании файла MEX и запуске анализатора используются входные данные, выбирающие одинаковую длину состояния. В противном случае анализатор не выполняет проверку.

Алгоритм в функции FIR_Mean не имеет состояний, когда mean(input) > 0, и имеет заявления об обратном.

function [ Output ] = FIR_Mean( input )

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

 if (mean(input) > 0)
     % stateless
     Output = mean(input);
 else
     % this path contains states
    yFilt = Filter(input);
   Output = mean(yFilt);
 end
 end

При вызове функции автоматического определения длины состояния анализатор обнаруживает длину состояния, равную 14 образцы.

dspunfold FIR_Mean -args {randn(10,1)} -s auto -f true
Analyzing input MATLAB function FIR_Mean
Creating single-threaded MEX file FIR_Mean_st.mexw64
Searching for minimal state length (this might take a while)
Checking stateless ... Insufficient
Checking 10 ... Insufficient
Checking Infinite ... Sufficient
Checking 20 ... Sufficient
Checking 15 ... Sufficient
Checking 12 ... Insufficient
Checking 13 ... Insufficient
Checking 14 ... Sufficient
Minimal state length is 14
Creating multi-threaded MEX file FIR_Mean_mt.mexw64
Creating analyzer file FIR_Mean_analyzer

Запустите функцию анализатора. Используйте вход с четырьмя различными кадрами. Проверьте, совпадают ли выходные результаты.

FIR_Mean_analyzer(randn(10*4,1))
Analyzing multi-threaded MEX file FIR_Mean_mt.mexw64  ... 
Latency = 8 frames
Speedup = 0.5x
Warning: The output results of the multi-threaded MEX file FIR_Mean_mt.mexw64 do not match 
the output results of the single-threaded MEX file FIR_Mean_st.mexw64. Check that you 
provided the correct state length value to the dspunfold function when you generated the 
multi-threaded MEX file FIR_Mean_mt.mexw64. For best practices and possible solutions to 
this problem, see the 'Tips' section in the dspunfold function reference page. 
> In coder.internal.warning (line 8)
  In FIR_Mean_analyzer 

ans = 

    Latency: 8
    Speedup: 0.5040
       Pass: 0

Pass = 0и функция выдает предупреждающее сообщение, указывающее возможную причину сбоя проверки.

Причина сбоя проверки

Длина состояния алгоритма зависит от входного сигнала. Когда mean(input) > 0Алгоритм не имеет состояния. В противном случае алгоритм содержит состояния. При создании файла MEX входные аргументы выбирают путь кода с состояниями. При вызове анализатора многокадровый вход выбирает путь кода без состояний. Следовательно, длина состояния различна в обоих случаях, приводящих к сбою проверки.

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

Рекомендуется использовать входные данные, выбирающие одинаковую длину состояния при создании файла MEX и запуске анализатора.

Рекомендации см. в разделе «Советы» dspunfold.

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