Смоделируйте коммуникационный протокол при помощи объектов диаграммы

В этом примере показано, как использовать автономную диаграмму Stateflow®, чтобы смоделировать компонент синхронизации системы координат и обнаружения символа в системе связи. Автономные диаграммы реализуют классическую семантику графика с MATLAB® как язык действия. Можно программировать график при помощи полной функциональности MATLAB, включая те функции, которые ограничиваются для генерации кода в Simulink®. Для получения дополнительной информации смотрите, Создают диаграммы Stateflow для Выполнения как Объекты MATLAB.

Реализуйте алгоритм обнаружения символа

В этом примере вход к системе связи состоит из двоичного сигнала нулей, и единицы получили каждые 10 миллисекунд. Входной сигнал может содержать любую комбинацию:

  • Импульс на 770 мс (77 последовательных единиц), чтобы отметить начало и конец системы координат данных и гарантировать системную синхронизацию.

  • Импульс на 170 мс (17 последовательных единиц), чтобы указать на символ A.

  • Импульс на 470 мс (47 последовательных единиц), чтобы указать на символ B.

Файл sf_frame_search.sfx задает автономную диаграмму Stateflow, которая реализует этот протокол связи. График состоит из двух внешних состояний в параллельном разложении. Initialize утвердите сбрасывает значение локальных данных symbol в начале каждого шага выполнения. Search состояние содержит логику, которая задает алгоритм обнаружения символа. Когда это состояние обнаруживает один из импульсов, позволенных протоколом связи, имя соответствующего символа хранится как symbol и отображенный в Окне Команды MATLAB. Параллельное разложение позволяет графику предварительно обработать входные данные. Для получения дополнительной информации смотрите Разложение состояния.

Чтобы отследить длину импульса через несколько шагов выполнения, график использует count оператор. Этот оператор упрощает проект графика путем избавления от необходимости ручной счетчик. Например, условие [count(pulse)==17] охраняет исходящий переход от NewFrame подсостояния. Это условие становится верным когда данные pulse один для 17 последовательных шагов выполнения. В этом случае, переходы графика к CouldBeA подсостояние. Если этот переход сопровождается входом нуля, то график указывает прием символа A и переходы назад к NewFrame подсостояние. В противном случае, переходы графика к SearchForB состояние, от который условие [count(pulse)==29] поиски еще 29 единиц, чтобы отметить символ B.

Выполните автономную диаграмму

В sf_frame_tester.m скрипта MATLAB, пример кода генерирует короткий сигнал, состоящий из нескольких допустимых импульсов и одной ошибки передачи. Ошибка состоит из импульса на 470 мс, который является слишком длинным, чтобы представлять символ A и слишком короткий, чтобы представлять символ B.

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

Смотрите также

Похожие темы