您的位置:首页 > 编程语言 > MATLAB

用S-函数编写Simulink中的正弦模块

2016-07-28 16:57 369 查看
1、用S-函数实现一个正弦波信号源。要求其幅度、频率和初始相位参数可由外部设置,并将这个信号源进行封装。

S-函数程序代码如下:



function [sys,x0,str,ts] =ch2example17Sfun(t,x,u,flag,Amp,Freq,Phase) 

% 正弦波信号源

switch flag, 

    case 0       % flag=0 初始化 

       [sys,x0,str,ts]=mdlInitializeSizes; 

    case 3       % flag=3 计算输出 

       sys=mdlOutputs(t,Amp,Freq,Phase); 

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

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

otherwise % 异常处理 

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

end 

% 主函数结束 

% 子函数实现(1)初始化函数----------------------------------

function [sys,x0,str,ts] = mdlInitializeSizes  % 

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

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

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

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

sizes.NumInputs      = 0;   % 输入信号数目是0

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

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

sys = simsizes(sizes); 

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

x0  = [];           % 初始状态矩阵x0 (零状态情况) 

ts  = [0 0];        % 表示连续取样时间的仿真

% 初始化函数结束 

 

% 子函数实现(2)系统输出方程函数-----------------------------

function sys = mdlOutputs(t,Amp,Freq,Phase) 

sys = Amp*sin(2*pi*Freq*t+Phase);% 这里写入系统的输出方程矩阵形式即可

% 修改这个函数可以得到任意的波形输出

% 系统输出方程函数结束

 

 

2、在该S-函数接口中,我们使用了三个输入参数项分别作为正弦波的幅度、频率和初

位的输入,相应地在使用S-函数模块调用该函数时需要在设置对话框中的S-function 

parameters中填写这些输入参数项,然后对S-函数模块进行封装,就得到了一个子系

统和相应的参数设置对话框。完成后的系统如下图所示。最后,设置好示波器显示范

围和仿真参数就可以启动仿真实验了。










图:S-函数实现的信号源和封装结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息