更多资料 www.sfmcu.com www.sf-edu.cn 盛方 第 21 页 共 45 页 SIMULINK模型具有层级结构,非常有利于建造和管理一个大型系统。为便于实现分层设计,在SIMULINK模块库的费线形子库(Nonlinear)中含有一种专用模块——子系统(Subsystem)模块,同时,SIMULINK还为子系统提供了封装(MASK)功能。
1. 子系统模块(Subsystem Block)
当一个动态模型包含许多环节时,往往把系统功能分块,每一块建立一个子系统。在设计中使用子系统,可以降低模型的复杂度,减少窗口的数目,并易于对模型进行扩充和修改。设计一个SIMULINK框图,可以采用“自顶向下”的设计方式,下构造处总体模型,再分别建立各个子系统;也可以采用“自顶向下”的设计方式,先完成每个部分底层设计,封装为子系统后,再用其搭建一个总体框图。
下面简要给出采用“自顶向下”模式设计子系统的主要步骤:
(1)在MATLAB工作窗口中键入sinmulink指令,打开SIMULINK标准模块库。从它的[File]菜单中选取[New]命令,创建新的方框图窗口。
(2)用鼠标双击SIMULINK模块库中Connections图表,打开下一级子模块库,将其中的子系统模块(Subsystem)用鼠标拖至用户新建的文件窗口中。
(3)双击子系统模块,打开一个空白的子系统窗口,按照功能要求添加模块,并用输入端口代表送入子系统的信号,输出端口代表输出信号。
2. 封装功能
具有封装功能是SIMULINK模块一个非常有用的特点。通过封装可以为子系统建立用户自定义的对话筐和图标;可以在当前图形窗口中隐藏子系统的设计内容,用简单的图标来代替子系统。另一方面,由于子系统中每个模块都有一个对话筐,进行仿真的时候,必须打开每个对话筐分别定义参数值,应用起来比较麻烦。而封装功能可以将子系统中的多个对话筐合并为一个单独的对话筐——封装对话筐,封装对话筐中的参数在仿真时被直接送入子系统的各个模块中,从而简化了用户定义仿真参数过程。同时,通过在封装对话筐中自定义的模块参数域、模块描述信息和模块帮助信息等,可以使仿真模型有一个更友好的用户界面。
4 设计仿真、分析与验证
根据前面所述的原理与总体框图,在此,我们对接入信道进行完全的仿真、分析与验证如下:
4.1 设计总体模块构造
更多资料 www.sfmcu.com www.sf-edu.cn 盛方 第 22 页 共 45 页
图 4.1.1仿真总体构图
4.1.2subsystem1内部结构
图4.1.3subsystem2内部结构
4.2 对各个模块进行分析与验证
4.2.1源中部分(subsystem1)设置、说明与分析:
在源这部分里面,我们用贝努力二进制产生器产生所需的二进制代码,所产生的码序列是服从贝努力概率分布的。为了满足设计的需要,我们同时将贝努力产生器的输出值设为[80×1]且基于帧格式的输出方式,也即:基于帧格式输出的80行和1列的矩阵。再利用CRC产生8位循环冗余检验(CRC)码,在数据尾部加入CRC码的作用有两点:第一,可以在接收时确定帧(包)是否发生了错误,第二,可以辅助确定接收的帧的数
更多资料 www.sfmcu.com www.sf-edu.cn 盛方 第 23 页 共 45 页 据速率,最终对数据速率的确定则是卷积译码器。另外,利用 Zero Pad(零填充模块)模块,在数据帧末端加入8个比特的0,其作用在于,在每帧卷积编码结束后,对卷积编码其中的移位积存器复位。由于MATLAB中的卷积编码器具有自动复位功能,因此这个零填充模块并不是必须的。但在此,我们仍然将此模块设置为插入8个尾比特零,可以使数据的速率达到我们最终的要求。模块的参数设置见下面的各图形。
模块设置如下:
4.2.1.1 Bernoulli模块设置 Bernoulli模块参数设置说明:
(1)Probability of a zero :0.5表示的是以概率0.5取值为1,以0.5的概率取值为-1;
(2)Sample time:20/1000表示的是20毫秒,设置为20ms的原因在于,4800bit/s的速率的帧长为20ms ;80是指每帧中含有80个比特数据,对于4800bit/s的速率而言,应该每帧的比特数为96个,之所以在这里设置为80,是因为在后面的CRC产生器和Zero Pad分别产生了8个冗余循环码和8个尾比特0码。因此,在这里每个比特的抽样时间为20/1000/80s.
(3)将输出数据设置为基于帧结构的方式,也即:选择Frame-based outputs的选项,原因在于,CRC码产生模块的输入必须基于帧数据结构的。
(4)每帧的数据为80比特,所以,将每帧的抽样次数设置为80,也即:Samples per frame设置为80。
4.2.1.2 CRC模块设置
更多资料 www.sfmcu.com www.sf-edu.cn 盛方 第 24 页 共 45 页 CRC模块参数设置说明:
对于反向信道的Half Rate(半速率,也即为4800bit/s)而言,Generatal CRC Generator的生成多项式为:
3478 g(x)?1?x?x?x?x?x所以对应的Generator polynomial的设置就应为:[1 1 0 1 1 0 0 1 1]
图4.2.1.3 Zero Pad模块的的设置
Zero Pad模块参数设置说明:
(1)在这里将Pad signal at设置为End是因为,我们期望在数据末尾插入8个0
尾比特。
(2)由于我们在CRC的输出为[88×1]的比特数据,也即一列的数据,所以,为了
在同一的数据后面添加8个0数据,我们在这里就将Pad along设置为:Columns. (3)在该模块的输出端,我们要求帧数据的比特数为96,也即为了在帧数据后面加
入8个0,因而将Specified number of output rows设置为96。
综合上面所述,我们将上三个模块构建为一个“源(source)”子系统,简单的封装后的图形为:
图4.2.1.4源子系统模块
更多资料 www.sfmcu.com www.sf-edu.cn 盛方 第 25 页 共 45 页 对该源内各个模块间的数据变化情况验证如下图中的波形所示:
4.2.1.5 源内部各模块的输出波形
其中,依上至下的波形分别是Bernoulli模块、CRC模块、Zero Pad模块的输出波形。
从图中,我们可以清晰的看见,第二各波形相对于第一个波形而言,增加的比特数分别为:0 0 0 1 1 0 1 0,也即刚好8个比特数,与理论中的在帧数据后面插入8个CRC冗余循环码完全的;在第三个波形中,我们同样可以看出,它相对于第二个波形而言,在末尾刚好加入了8个0比特,即:0 0 0 0 0 0 0 0。
4.2.2 对卷积编码器和重复模块的设置、说明与分析:
仿真连接方法见下面图形:
图4.2.2.1仿真连接图1
其中,使用Buffer 的原因在于:由于Subsystem1模块、卷积编码器模块、重复模块输出的数据都是基于帧的数据,而Scope示波不能观察基于帧的数据,所以,我们需要将基于帧的数据转换为适合示波器的数据来观测。通过转换,我们可以将Subsystem1模块、卷积编码器模块、重复模块的原来每次每帧同时输出分别为[96×1]、[288×1]、[576×1]的数据都改变为输出均为每次1个的数据。这样,我们就可以用示波器来观察,并验证我们的设置。 卷积编码器参数设置说明: