matlab s function builder 使用
- 格式:pdf
- 大小:664.25 KB
- 文档页数:24


matlab中s-function用法
创建一个有1输入(2维),2输出(1维),3个参数,还有全局变量的s-function。
1.新建sfunction的C语言文件
打开simulink,点击User-Defined Functions里面的S-Function
Examples。这个里面有多个语言版本的模板,有C,C++,Ada,Fortran和M语言的版本,其实都大同小异,只要了解几个函数就很容易使用了。 选择C语言的版本:从S-function模块中选择C-file S-functions里面的Basic C-MEX
template。打开后,另存为自己的模块名字,如test.c。
下面我们来分析代码:
#define S_FUNCTION_NAME test//这里把文件名sfuntmpl_basic修改为test
#define S_FUNCTION_LEVEL 2
#include "simstruc.h"
//程序里面要用到的头文件在这里引用,如“math.h”等。
float global_var; //定义全局变量
static void mdlInitializeSizes(SimStruct *S)
{
//这个函数用来设置输入、输出和参数的。
ssSetNumSFcnParams(S, 3); /*设置参数个数,这里为3 */
if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) {
return;
}
; ssSetNumContStates(S, 0);//设置连续状态的个数,缺省为0 ssSetNumDiscStates(S, 0);//设置离散状态的个数,缺省为0;
if (!ssSetNumInputPorts(S, 1)) return;//设置输入变量的个数,这里为1
1
C语言环境中调用Matlab程序指南
甄梓宁 znzhen@
Matlab在计算方面功能强大、编写简单,但是要运行Matlab程序必须装有Matlab并且用户
界面也不够完善,因此除了计算的其他部分采用C等更规范完备的语言进行编写是较好的选
择。本文就对如何在C程序中调用Matlab程序作说明。
在C程序中调用Matlab程序有两大类方法。第一种是调用Matlab引擎,第二种是将m文
件打包成dll文件在C语言环境下调用。前者虽然易于实现,可以实时监控程序的运行,但
是独立性差,需要安装完整版Matlab,且每次调用都会启动MATLAB.exe进程;后者则实现
复杂,调试麻烦,但只需安装MCR(Matlab Component Runtime),耗费资源较少。关于MCR,
请见第四章的说明。至于两种方法需要在C环境中如何配置请见第五章。
而反过来若要在Matlab下调用C程序则一般使用Matlab自带的mex工具,在此不作介绍。
一、调用Matlab引擎
调用Matlab引擎可以在WIN32、MFC中使用,它的原理实际上相当于打开一个精简版
的Matlab然后往里面输命令。下面是调用Matlab中的加法程序add.m的例子。
先在Matlab的work目录下创建add.m文件并编写程序如下:
function s = add (a, b)
s = a+b;
在C程序中,首先打开精简版的Matlab:(所需头文件,引用库等见第五章)
Engine *ep = engOpen (NULL);
编译运行后,会自动打开一个命令行监控窗口,输入pwd就可以看到当前的工作目录,
于是需要先将工作目录转换至存放add.m的目录:
engEvalString (ep, ”cd ..\\..\\work”);
engEvalString是往Matlab里输命令的函数,显然我们的目标是成功运行:
engEvalString (ep, ”s=add(a,b)”);
一、S函数简介
s函数是system Function的简称,用它来写自己的simulink模块。可以用matlab、C、C++、Fortran、Ada等语言来写。用s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作,还可以操作windows API等的
二、simulink的仿真过程
simulink的仿真有两个阶段:第一个为初始化,这个阶段主要是设置一些参数,像系统的输入输出个数、状态初值、采样时间等;第二个阶段就是运行阶段,这个阶段里要进行计算输出、更新离散状态、计算连续状态等等,这个阶段需要反复运行,直至结束。
在matlab的workspace里输入edit sfuntmpl, 便打开一个matlab自己提供的s函数模板。
s函数的结构如下:
第一行:function [sys,x0,str,ts]=sfuntmpl(t,x,u,flag)
输入与输出变量的含义:t是采样时间,x是状态变量,u是输入(是做成simulink模块的输入),flag是仿真过程中的状态标志(以它来判断当前是初始化还是运行等);sys输出根据flag的不同而不同(下面将结合flag来讲sys的含义),x0是状态变量的初始值,str是保留参数,一般在初始化中将它置空就可以了,str=[],ts是一个1×2的向量,ts(1)是采样周期,ts(2)是偏移量。
switch flag, %判断flag,看当前处于哪个状态
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
flag=0表示处于初始化状态,此时用函数mdlInitializeSizes进行初始化。
在初始化状态下,sys是一个结构体,用它来设置模块的一些参数,各个参数详细说明如下
size = simsizes;%用于设置模块参数的结构体用simsizes来生成
2012年8月第24期科技视界
SCIENCE&TECHNOLOGYVISION科技视界Science&TechnologyVision
作者简介院葛熠渊1991要冤袁男袁江苏溧阳人袁本科袁通信工程专业袁研究方向为信息与通信工程遥园引言
由于目前大多数信道不适合传输基带信号袁为了使基带
信号能利用这些信道进行传输袁必须使代表信息的原始信号
经过一种变换得到另一种新信号袁这种变换就是调制遥
在数字调制中袁频移键控渊FSK冤[1]方法简单袁易于实现袁并
且解调不须恢复本地载波袁可以异步传输袁抗噪声和抗衰落
性能也较强遥因此袁FSK调制技术在通信行业得到了广泛地
应用袁并且主要适用于用于低尧中速数据传输[2]遥因此本文以
通用DSPbuilder来实现FSK调制信号发生器的设计袁并借
助MATLAB仿真工具SIMULINK进行仿真检测遥
1MATLAB和DSPBuilder的简单介绍
1.1MATLAB简介
MATLAB是矩阵实验室的简称袁主要包括MATLAB和
Simulink两大部分遥
MATLAB可以进行矩形运算尧绘制函数和数据尧实现算
法尧创建用户界面尧连接其他编程语言的程序等袁主要应用于
工程计算尧控制设计尧信号处理与通讯尧图像处理尧信号检测尧
金融建模设计与分析等领域[3]遥
Simulink是MATLAB最重要的组件之一袁它提供一个动
态系统建模尧仿真和综合分析的集成环境遥在该环境中袁无需
大量书写程序袁而只需要通过简单直观的鼠标操作袁就可构
造出复杂的系统遥Simulink[4]具有适应面广尧结构和流程清晰
及仿真精细尧贴近实际尧效率高尧灵活等优点遥1.2DSPBuilder简介
Altera可编程逻辑器件中的DSP系统设计需要高级算法
和HDL开发工具遥AlteraDSPBuilder将MATLAB和Simulink系统级设计工具的算法开发尧仿真和验证功能与
VHDL综合尧仿真和Altera开发工具整合在一起袁实现了这些
工具的集成[5]遥设计人员可以使用DSPBuilder模块迅速生成Simulink