В этом примере показано, как использовать автономный график Stateflow ® для моделирования синхронизации кадров и компонента обнаружения символов в коммуникационной системе. Автономные диаграммы реализуют классическую семантику графика с MATLAB ® в качестве языка действий. Можно запрограммировать график, используя полную функциональность MATLAB, включая те функции, которые ограничены для генерации кода в Simulink ®. Для получения дополнительной информации смотрите Создание диаграмм Stateflow для выполнения в качестве объектов MATLAB.
В этом примере вход в коммуникационной системы состоит из двоичного сигнала нулей и таковых, принятых каждые 10 миллисекунд. Входной сигнал может содержать любую комбинацию:
Импульс 770 мс (77 последовательных таковые) для маркировки начала и конца системы координат данных и для обеспечения синхронизации системы.
Импульс 170 мс (17 последовательных таковые) для указания символа А.
Импульс 470 мс (47 последовательных таковые) для указания символа B.
Файл sf_frame_search.sfx
задает автономную диаграмму Stateflow, которая реализует этот протокол связи. График состоит из двух внешних состояний с параллельным разложением. The Initialize
состояние устанавливает значение локальных данных symbol
в начале каждого шага выполнения. The Search
состояние содержит логику, которая задает алгоритм обнаружения символов. Когда это состояние обнаруживает один из импульсов, разрешенных протоколом связи, имя соответствующего символа сохранено как symbol
и отображается в Командном Окне MATLAB. Параллельное разложение позволяет графику предварительно обработать входные данные. Для получения дополнительной информации смотрите Разложение состояний.
Чтобы отследить длину импульса через несколько шагов выполнения, график использует count
оператор. Этот оператор упрощает проект графика, устраняя необходимость в ручном счетчике. Для примера условие [count(pulse)==17]
охраняет исходящий переход от подсостояния NewFrame
. Это условие становится верным, когда данные pulse
это один для 17 последовательных шагов выполнения. В этом случае график переходит к CouldBeA
подсостояние. Если за этим переходом следует вход нуля, то график регистрирует прием символа A и переходит назад к NewFrame
подсостояние. В противном случае график переходит к SearchForB
состояние, из которого [count(pulse)==29]
условие ищет дополнительные 29 таковые, чтобы отметить символ B.
В скрипте MATLAB sf_frame_tester.m
выборочный код генерирует короткий сигнал, состоящий из нескольких действительных импульсов и одной ошибки передачи. Ошибка состоит из импульса 470 мс, который является слишком длинным, чтобы представлять символ A и слишком коротким, чтобы представлять символ B.
%% 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
Во время симуляции анимация на графике обеспечивает визуальное указание на поведение алгоритма во время выполнения.