matlab给s-function改,通过s-function改变模块参数

做毕设时要通过判断一个输入量的大小来改变一个二阶系统的输入信号的频率,我就随便弄个正弦信号尝试,但是总说未定义变量f,求大神们帮助

程序如下

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

% 正弦波信号源

global f;

switch flag

case 0       % flag=0 初始化

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

case {1, 2,3, 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     = 0;   % 输出信号数目是0

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

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

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

sys = simsizes(sizes);

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

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

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

% 初始化函数结束

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

function ceshi(u)

global f;

if u>2

f=5;

set_param('ceshi/Sine Wave','Amplitude',num2str(f))

end

if u<2

f=10;

set_param('ceshi/Sine Wave','Amplitude',num2str(f))

end

1526109082(1).jpg

(46.27 KB, 下载次数: 1)

2018-5-12 15:14 上传

442a53943febe9465fc072b4fbe10813.gif

b2a5a3e0dcc7d508e00275fe42fce1b5.gif

模块

ed912bee46d825b037724861eb5177b0.png

1526109291(1).jpg

(80.31 KB, 下载次数: 0)

2018-5-12 15:14 上传

442a53943febe9465fc072b4fbe10813.gif

b2a5a3e0dcc7d508e00275fe42fce1b5.gif

将模块频率用f表示

d3bceca21006701694602f4dd5c4da9f.png

1526109320(1).jpg

(79.5 KB, 下载次数: 0)

2018-5-12 15:14 上传

442a53943febe9465fc072b4fbe10813.gif

b2a5a3e0dcc7d508e00275fe42fce1b5.gif

错误

e1153791fd9851fc5a98914790ae9016.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值