Если длина состояния алгоритма зависит от входных данных алгоритма, убедитесь, что при создании файла 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: 0Pass = 0и функция выдает предупреждающее сообщение, указывающее возможную причину сбоя проверки.
Длина состояния алгоритма зависит от входного сигнала. Когда mean(input) > 0Алгоритм не имеет состояния. В противном случае алгоритм содержит состояния. При создании файла MEX входные аргументы выбирают путь кода с состояниями. При вызове анализатора многокадровый вход выбирает путь кода без состояний. Следовательно, длина состояния различна в обоих случаях, приводящих к сбою проверки.
Рекомендуется использовать входные данные, выбирающие одинаковую длину состояния при создании файла MEX и запуске анализатора.
Рекомендации см. в разделе «Советы» dspunfold.