主要内容

使用图表对象建模通信协议

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

实现一个符号检测算法

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

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

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

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

该文件sf_frame_search.sfx定义实现此通信协议的独立状态流图。图表由两个平行分解的外部状态组成。的初始化State重置本地数据的值象征在每个执行步骤的开始。的搜索State包含定义符号检测算法的逻辑。当此状态检测到通信协议允许的一个脉冲时,对应的符号名称存储为象征并显示在MATLAB命令窗口中。并行分解使图表能够预处理输入数据。有关更多信息,请参见使用状态分解定义排他和并行模式

为了通过多个执行步骤跟踪脉冲的长度,图表使用操作符。这个操作简化了图表的设计,不需要手动计数器。例如,条件(计数(脉冲)= = 17)保护从次态发出的转换NewFrame.当数据脉冲为1表示17个连续执行步骤。在本例中,图表转换为CouldBeA亚态。如果这个转换之后是零输入,那么图表注册符号A的接收并转换回NewFrame亚态。否则,图表将过渡到SearchForB状态,从哪个条件(计数(脉冲)= = 29)再搜索29个来标记符号B。

执行独立图表

在MATLAB脚本中sf_frame_tester.m,示例代码生成由几个有效脉冲和一个传输错误组成的短信号。误差由一个470毫秒的脉冲组成,该脉冲太长而不能表示符号a,又太短而不能表示符号B。

测试符号检测算法生成由几个有效脉冲和一个脉冲组成的短信号%传输错误。F = sf_frame_search(脉冲=0);%创建图表对象sendPulse (77);帧标记sendPulse (f, 17);%的sendPulse (f, 47);% BsendPulse (f, 37);%传输误差sendPulse (f, 47);% BsendPulse (f, 17);%的sendPulse (77);帧标记删除(f);删除图表对象函数sendPulse (f, n)向图表对象f发送n个1和1个0的脉冲。I =1:n步(f,脉冲=1);printDot (1)结束printDot(0)步骤(f,脉冲= 0);函数printDot (x)持续的k如果Isempty (k) k = 1;结束如果X == 0 fprintf(“\ n”);K = 1;elseifK == 50 fprintf(”。\ n”);K = 1;其他的流(“。”);K = K +1;结束结束结束

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

.................................................. ...........................框架  .................一个  ...............................................B  .....................................错误  ...............................................B  .................一个  .................................................. ...........................框架

在模拟过程中,图表动画提供了算法运行时行为的可视化指示。

另请参阅

相关的话题