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