主要内容

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

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

实现一个符号检测算法

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

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

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

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

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

为了通过几个执行步骤跟踪脉冲的长度,该图表使用操作符。该操作省去了手工计数器的需要,从而简化了图表的设计。例如,条件(计数(脉冲)= = 17)保护从子状态发出的转换NewFrame.当数据脉冲是17个连续执行步骤的1。在本例中,图表转换为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  .................一个  .................................................. ...........................框架

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

另请参阅

相关的话题

Baidu
map