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

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

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

Этот пример показывает, как использовать автономную диаграмму Stateflow, чтобы смоделировать компонент синхронизации кадра и обнаружения символа в системе связи. Вход к системе состоит из двоичного сигнала нулей, и единицы получили каждые 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:
sf_frame_Tester
..................................................
...........................
frame
.................
A
...............................................
B
.....................................
error
...............................................
B
.................
A..................................................
...........................
frame

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

Похожие темы