用S函数编写Simulink模块.doc

上传人:wj 文档编号:7430867 上传时间:2023-05-11 格式:DOC 页数:6 大小:76.50KB
下载 相关 举报
用S函数编写Simulink模块.doc_第1页
第1页 / 共6页
用S函数编写Simulink模块.doc_第2页
第2页 / 共6页
用S函数编写Simulink模块.doc_第3页
第3页 / 共6页
用S函数编写Simulink模块.doc_第4页
第4页 / 共6页
用S函数编写Simulink模块.doc_第5页
第5页 / 共6页
用S函数编写Simulink模块.doc_第6页
第6页 / 共6页
亲,该文档总共6页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

用S函数编写Simulink模块.doc

《用S函数编写Simulink模块.doc》由会员分享,可在线阅读,更多相关《用S函数编写Simulink模块.doc(6页珍藏版)》请在冰点文库上搜索。

用S函数编写Simulink模块.doc

《通信系统仿真》实验报告

姓名

班级

实验室

组号

学号

实验日期

实验名称

实验四用S函数编写Simulink模块

实验成绩

教师签字

一、实验目的

1、掌握S函数的结构和标准接口

2、掌握S函数的编程方法

3、掌握用S函数编写Simulink仿真模块的方法

4、掌握S函数在Simulink仿真中的应用

二、实验原理

为了将系统数学方程与系统可视化模型联系起来,在Simulink中规定了固定的接口函数的形式,称为S函数,一切Simulink可视化模型都是基于S函数实现的。

系统可视化描述的直观性是以牺牲数学描述的简洁性为代价。

通过编写和使用S函数,用户也可以构建出采用Simulink的灵活性。

S函数可以用Matlab语言书写,也可以采用C++等语言编写。

S函数还可以进行编译,以提高执行速度。

Simulink内建的标准模块库就是用S函数编写并进行编译后形成的

三、实验内容

1、用S函数实现一个限幅器,当输入信号值小于设定的最小门限值时,输出为最小门限值;当输入信号值大于设定的最大门限值时,输出为最大门限值;如果信号值介于最小门限和最大门限之间,则直通。

写出限幅器的数学模型,对S函数实现的模块进行封装,要求能够在封装对话框中设置限幅的门限。

给出测试系统和测试仿真结果,并与Simulink基本库中的Saturation模块进行对比。

实验代码:

function[sys,x0,str,ts]=xianSfun(t,x,u,flag,max,min)

switchflag,

case0%flag=0初始化

sizes=simsizes;%获取simulink仿真变量结构

sizes.NumContStates=0;%连续系统的状态数为0

sizes.NumDiscStates=0;%离散系统的状态数为0

sizes.MumOutputs=1;%输出信号数目是1

sizes.MumInputs=1;%输入信号数目是1

sizes.DirFeedthrough=1;%该系统是直通的

sizes.NumSampleTimes=1;%这里必须为1

sys=simsizes(sizes);

str=[];%通常为空矩阵

x0=[];%初始状态矩阵x0

ts=[00];%采样时间有外部模块给出

%限幅器函数--------------------------------------

case3%flag=3计算输出

ifu>max

sys=max;

elseifu

sys=min;

else

sys=u;

end

case{1,2,4,9}%其他不做处理的flag

sys=[];

otherwise%异常处理

error(['Unhandledflag=',num2str(flag)]);

end

%主函数结束---------------------------------------

仿真模型:

运行结果:

结果说明:

输入信号为一个幅度为1V,频率为1000Hz的余弦波,设定的最小门限为-0.5,最大门限为0.5,示波器扫描周期为2ms。

先在Maltab命令窗口中输入:

Lm=-0.5;Hm=0.5;之后再运行仿真模型。

实验结论:

限幅器的作用是限幅,输入幅度为2的余弦波,通过门限为0.5和-0.5的限幅器后,幅度大于0.5和幅度小于-0.5的部分都被限制了,即不能输出。

2、用S函数实现一个绝对值模块,即输出信号是输入信号求绝对值的结果。

用这个绝对值模块对输入的调幅波进行检波,试仿真得出输出结果。

实验代码:

function[sys,x0,str,ts]=abs(t,x,u,flag)

switchflag

case0%flag=0初始化

sizes=simsizes;%获取simulink仿真变量结构

sizes.NumContStates=0;%连续系统的状态数为0

sizes.NumDiscStates=0;%离散系统的状态数为0

sizes.MumOutputs=1;%输出信号数目是1

sizes.MumInputs=1;%输入信号数目是1

sizes.DirFeedthrough=1;%该系统是直通的

sizes.NumSampleTimes=1;%这里必须为1

sys=simsizes(sizes);

str=[];%通常为空矩阵

x0=[];%初始状态矩阵x0

ts=[00];%采样时间有外部模块给出

%限幅器函数--------------------------------------

case3%flag=3计算输出

ifu>0

sys=u;

elseu<0

sys=-u;

end

case{1,2,4,9}%其他不做处理的flag

sys=[];

otherwise%异常处理

error(['Unhandledflag=',num2str(flag)]);

end

%主函数结束---------------------------------------

仿真模型:

运行结果:

结果说明:

输入信号为一个幅度为2V,频率为1000Hz的三角波,示波器扫描周期为4ms。

实验结论:

输入信号经过“绝对值模块”后,只输出幅度大于0的部分。

3、用S函数实现一个门限比较器,当输入大于设定门限则输出为指定的高电平,否则输出另一个指定的低电平。

实验代码:

function[sys,x0,str,ts]=chensimin3Sfun(t,x,u,flag,Lm,Hm,S)

%S为设定的门限,Lm、Hm分别为指定的低电平和高电平

%u表示基带信号

%size(u)%取消本句注释可观察输入信号u的矩阵维数

switchflag,

case0%flag=0初始化

sizes=simsizes;%获取SIMULINK仿真变量结构

sizes.NumContStates=0;%连续系统的状态数是0

sizes.NumDiscStates=0;%离散系统的状态数是0

sizes.NumOutputs=1;%输出信号数目是1

sizes.NumInputs=-1;%输入信号数目是自适应的

sizes.DirFeedthrough=1;%该系统是直通的

sizes.NumSampleTimes=1;%这里必须为1

sys=simsizes(sizes);

str=[];%通常为空矩阵

x0=[];%初始状态矩阵x0

ts=[-10];%采样时间由外部模块给出

case3%flag=3计算输出

ifu>S

sys=Hm;

elsesys=Lm;

end

case{1,2,4,9}%其他作不处理的flag

sys=[];%无用的flag时返回sys为空矩阵

otherwise%异常处理

error(['Unhandledflag=',num2str(flag)]);

end

仿真模型:

运行结果:

结果说明:

输入信号为一个幅度为2V,频率为1000Hz的方波,示波器扫描周期为4ms。

先在Maltab命令窗口中输入:

S=1;Lm=-1;Hm=1;之后再运行仿真模型。

实验结论:

输入信号经过“门限比较器”后,输出的幅度大小都是指定的,本实验输入的幅度只为1和-1两个指定值。

四、实验报告

通过分析实验结果可知:

某些功能的模块,可以通过代数运算模块实现,比如本次实验的“门限器”、“绝对值模块”、“门限比较器”等。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2