声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4400|回复: 15

[数字信号类] simulink中怎样给出一个连续变化的输入信号

[复制链接]
发表于 2007-6-9 14:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
兄弟要做一个飞机机动飞行的仿真,中间的结构图已建立完毕,是双输入多输出系统。现在需要让输入信号1在一段时间内为一常值,此后输入信号2在一段时间为一常值,再类此交替,是要考虑时序问题,恳请各位大侠指点:'(
回复
分享到:

使用道具 举报

发表于 2007-6-9 15:13 | 显示全部楼层
用switch试试
发表于 2007-6-9 21:05 | 显示全部楼层
恐怕不能这个简单
顶多switch只是其中的一个模块
一段时间为常数,可以说是个常数,2个常数,关键是切换时间
但switch一般是通过输入信号进行判断,而不判断时间

评分

2

查看全部评分

发表于 2007-6-9 22:00 | 显示全部楼层
可以把一个时钟接到switch的条件判断出
然后把条件设为比如说:t〉10或t<10等
发表于 2007-6-10 11:33 | 显示全部楼层
但关键的问题是他要不断交替
而不是一个切换如果一个切换,step都可以了
这个主要还应该看信号发生器那个地方的模块。
 楼主| 发表于 2007-6-10 12:25 | 显示全部楼层

回复 #2 lirui0662 的帖子

先谢过这位仁兄,试了一下,确实仅凭switchi不能实现。。。:handshake
 楼主| 发表于 2007-6-10 12:26 | 显示全部楼层

回复 #5 cdwxg 的帖子

这位大哥说的是,兄弟我用最笨方法,五个step相加,合成了一个输入。。。。
发表于 2007-6-10 13:02 | 显示全部楼层
1:你先看下信号发生器那里的模块
2:你需要几个,5个step够了么?如果你一直交替,除非枚举所有时间。但这个方法是不实用的。只能为了该仿真而仿真,仿真时间变了等都不行。

但关于信号这个地方我不精通,所以只能靠你自己去查阅下这些模块。其实应该有类似的模块。
其实就是一个信号,t1时间内为1,t2时间段内为0,再过t1为1,再t2为0。。。。。
 楼主| 发表于 2007-6-10 14:41 | 显示全部楼层

回复 #8 cdwxg 的帖子

的确这样穷举是不实际的,也远非5个step能够,看来得好好研究一下发生器了!
发表于 2007-6-14 14:50 | 显示全部楼层
建议你看看重复控制的方法,相信会给你启示的!

可以用一个正反馈,在信号消失之后不断重复出现以前的信号!

[ 本帖最后由 cjclj 于 2007-6-14 14:52 编辑 ]

评分

1

查看全部评分

发表于 2007-6-21 22:46 | 显示全部楼层
S函数就ok,今天刚看了一下午S函数,深有体会啊
发表于 2007-6-22 11:17 | 显示全部楼层

S函数是比较强大的,人性化的东西,有兴趣你编写下在下面来实现看看:)
发表于 2007-6-22 12:33 | 显示全部楼层
就是实现了一个简单的1s交替一次,如果时间不一样可能会麻烦一点,可楼主又没说t1=?t2=?
function [sys,x0,str,ts] = sfuntmpl(t,x,u,flag)
switch flag,
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;
  case 1,
    sys=mdlDerivatives(t,x,u);
  case 2,
    sys=mdlUpdate(t,x,u);
  case 3,
    sys=mdlOutputs(t,x,u);
  case 4,
    sys=mdlGetTimeOfNextVarHit(t,x,u);
  case 9,
    sys=mdlTerminate(t,x,u);
  otherwise
    error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 0;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   % at least one sample time is needed
sys = simsizes(sizes);
x0  = [];
str = [];
ts  = [0 0];
function sys=mdlDerivatives(t,x,u)
sys = [];
function sys=mdlUpdate(t,x,u)
sys = [];
function sys=mdlOutputs(t,x,u)
if  mod(floor(t),2)==0
     sys = 1;
   else sys=2;
end
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 0.001;    %  Example, set the next hit to be one second later.
sys = t + sampleTime;
function sys=mdlTerminate(t,x,u)
sys = [];
2.JPG
1.JPG
发表于 2007-6-22 12:37 | 显示全部楼层
:@L 理解错了 楼主的意思了,现在明白了,就在两个输入分别加上上面的s-functiong 模块,里面程序该成交替出现的旧可以了,反而更加简单了,比在一个S里实现要简单,t1和t2不相等也没关系了

[ 本帖最后由 yf2002043227 于 2007-6-22 12:38 编辑 ]

评分

1

查看全部评分

发表于 2007-7-2 19:24 | 显示全部楼层
可以使用触发模块实现,也可以使用m文件调用simulink文件实现,输入信号在m文件里用程序控制!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-25 13:51 , Processed in 0.071073 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表