В этом примере показано, как использовать автономную диаграмму Stateflow ® для моделирования компонента синхронизации кадров и обнаружения символов в системе связи. Автономные диаграммы реализуют классическую семантику диаграмм с MATLAB ® в качестве языка действий. Можно запрограммировать диаграмму с помощью всех функциональных возможностей MATLAB, включая функции, ограниченные для генерации кода в Simulink ®. Дополнительные сведения см. в разделе Создание диаграмм потока состояний для выполнения в виде объектов MATLAB.
В этом примере вход в систему связи состоит из двоичного сигнала нулей и единиц, принимаемых каждые 10 миллисекунд. Входной сигнал может содержать любую комбинацию:
Импульс длиной 770 мс (77 последовательных импульсов) для обозначения начала и конца кадра данных и обеспечения синхронизации системы.
170-миллисекундный импульс (17 последовательных импульсов) для обозначения символа А.
Импульс 470 мс (47 последовательных импульсов) для обозначения символа В.
Файл sf_frame_search.sfx определяет автономную диаграмму Stateflow, которая реализует этот протокол связи. Диаграмма состоит из двух внешних состояний в параллельном разложении. Initialize состояние сбрасывает значение локальных данных symbol в начале каждого шага выполнения. Search состояние содержит логику, которая определяет алгоритм обнаружения символа. Когда это состояние обнаруживает один из импульсов, разрешенных протоколом связи, имя соответствующего символа сохраняется как symbol и отображается в окне команд MATLAB. Параллельная декомпозиция позволяет диаграмме предварительно обрабатывать входные данные. Дополнительные сведения см. в разделе Декомпозиция состояния.

Для отслеживания длительности импульса через несколько шагов выполнения диаграмма использует count оператор. Этот оператор упрощает конструкцию диаграммы, устраняя необходимость в ручном счетчике. Например, условие [count(pulse)==17] охраняет исходящий переход от подсостояния NewFrame. Это условие становится верным, когда данные pulse равен единице для 17 последовательных шагов выполнения. В этом случае диаграмма переходит к CouldBeA подсостояние. Если за этим переходом следует нулевой вход, то диаграмма регистрирует прием символа А и переходит обратно в NewFrame подсостояние. В противном случае диаграмма переходит к SearchForB состояние, из которого условие [count(pulse)==29] ищет дополнительные 29 для обозначения символа B.
В сценарии MATLAB sf_frame_tester.m, код выборки генерирует короткий сигнал, состоящий из нескольких действительных импульсов и одной ошибки передачи. Ошибка состоит из 470 мс импульса, который является слишком длинным для представления символа А и слишком коротким для представления символа В.
%% Test Symbol Detection Algorithm % Generate a short signal consisting of several valid pulses and one % transmission error. f = sf_frame_search('pulse','0'); % create chart object sendPulse(f,77); % frame marker sendPulse(f,17); % A sendPulse(f,47); % B sendPulse(f,37); % transmission error sendPulse(f,47); % B sendPulse(f,17); % A sendPulse(f,77); % frame marker delete(f); % delete chart object function sendPulse(f,n) % Send a pulse of n ones and one zero to chart object f. for i = 1:n step(f,'pulse',1); printDot(1) end printDot(0) step(f,'pulse',0); function printDot(x) persistent k if isempty(k) k = 1; end if x == 0 fprintf('\n'); k = 1; elseif k == 50 fprintf('.\n'); k = 1; else fprintf('.'); k = k+1; end end end
Выполнение сценария приводит к следующим результатам в окне команд MATLAB:
.................................................. ........................... frame ................. A ............................................... B ..................................... error ............................................... B ................. A .................................................. ........................... frame
Во время моделирования анимация диаграммы обеспечивает визуальную индикацию поведения алгоритма во время выполнения.