使用Chart对象对通信协议建模

此示例演示如何使用独立的Stateflow®图表对通信系统中的帧同步和符号检测组件建模。独立图表使用MATLAB®作为动作语言实现经典图表语义。您可以使用MATLAB的全部功能对图表进行编程,包括那些在Simulink®中受代码生成限制的功能。有关详细信息,请参见万博1manbetx创建作为MATLAB对象执行的状态流图.

一种符号检测算法的实现

在本例中,通信系统的输入由0和每10毫秒接收1的二进制信号组成。输入信号可以包含以下任意组合:

  • 一种770毫秒的脉冲(77个连续脉冲),用来标记数据帧的开始和结束,并确保系统同步。

  • 指示符号A的170毫秒脉冲(17个连续脉冲)。

  • 470毫秒的脉冲(47个连续的脉冲)来指示符号B。

文件SFU框架_搜索.sfx定义实现此通信协议的独立状态流程图。该图由两个并行分解的外部状态组成。这个初始化state重置本地数据的值符号在每个执行步骤开始时。这个搜索状态包含定义符号检测算法的逻辑。当此状态检测到通信协议允许的脉冲之一时,相应符号的名称存储为符号并显示在MATLAB命令窗口中。并行分解使图表能够预处理输入数据。有关详细信息,请参见状态分解.

为了通过几个执行步骤跟踪脉冲的长度,图表使用计数接线员。这个操作员不需要手动计数器,从而简化了图表的设计。例如,条件[计数(脉冲)==17]保护从子状态传出的转换新框架. 当数据脉冲是17个连续执行步骤中的一个。在这种情况下,图表将转换为可能是子状态。如果此转换后接零输入,则图表会记录符号A的接收并转换回新框架子状态。否则,图表将转换为搜索b状态[计数(脉冲)==29]再搜索29个标记符号B。

执行独立图表

在MATLAB脚本中sf_frame_测试仪,样本代码生成由多个有效脉冲和一个传输错误组成的短信号。该误差由470 ms脉冲组成,该脉冲太长而不能表示符号a,太短而不能表示符号B。

f=sf U帧搜索('脉搏',“0”);%创建图表对象发送脉冲(f,77);%帧标记发送脉冲(f,17);%一个发送脉冲(f,47);%乙发送脉冲(f,37);%传输错误发送脉冲(f,47);%乙发送脉冲(f,17);%一个发送脉冲(f,77);%帧标记删除(f);%删除图表对象
功能发送脉冲(f,n)%向图表对象f发送n个1和1个0的脉冲。
对于i=1:n步骤(f,“脉冲”,1)打印点(1)结束
打印点(0)步骤(f,“脉冲”,0)
函数printDot(x)persistent k if isempty(k)k=1;结束
如果x==0 fprintf('\n');k=1;else if k==50 fprintf('.\n');k=1;else fprintf('.');k=k+1;结束-结束

运行脚本会在MATLAB命令窗口中生成以下结果:

.................................................. ........................... 框架。。。。。。。。。。。。。。。。。A。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。B。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。错误。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。B。。。。。。。。。。。。。。。。。A、 。。。。。。。。。。。。。。。。。。。。。。。。。。。框架

另见

相关主题