Matlab中gensig函数的使用

目录

语法

说明

例子

生成方波

生成具有指定采样时间的信号

生成用于模拟多输入系统的输入


         gensig函数主要为lsim函数生成测试输入信号,从而测试单输入线性系统对特定信号的响应。

语法

[u,t] = gensig(type,tau)
[u,t] = gensig(type,tau,Tf)
[u,t] = gensig(type,tau,Tf,Ts)

        u为信号序列,t为时间序列

        type为类型,包括:sin(正弦波),square(方波),pulse(周期脉冲)

        ta为type类型的周期,tf为持续时间,ts为采样时间。

说明

        [u, t] = gensig(type, tau) 生成具有指定类型和周期的单位幅值周期信号。使用信号 u 和相应的时间向量 t 来模拟单输入动态系统的时间响应,可以使用 lsim 或 lsimplot,或使用 lsiminfo 获取响应特性。要为多输入系统创建信号,请多次调用 gensig 并将生成的 u 向量堆叠成矩阵。当使用 u 和 t 来模拟动态系统模型时,软件会将 t 解释为具有模型的 TimeUnit 属性的单位。

        [u, t] = gensig(type, tau, Tf) 生成持续时间为 Tf 的信号。t 从 0 到 Tf 以 tau/64 的增量运行。

        [u, t] = gensig(type, tau, Tf, Ts) 生成具有采样时间 Ts 的信号。t 从 0 到 Tf 以 Ts 的增量运行。要生成用于模拟离散时间模型的信号,请使用此语法并将 Ts 设置为模型的采样时间。

例子

生成方波

        生成一个周期为2秒的方波,用于模拟lsim的动态系统响应。

tau = 2;
[u,t] = gensig("square",tau);

        gensig返回信号作为向量u和相应的时间向量t。当没有指定信号的持续时间时,gensig会生成一个持续运行五个周期的信号(Tf = 5*tau)。当没有指定时间步长时,该函数默认为每个周期64个样本(Ts = tau/64)。因此,这个信号在10秒内运行,时间步长为0.03125秒。绘制这个信号。

plot(t,u)

        如图所示:

        gensig返回一个幅度为单位并从零开始的方波。可以修改u以获得幅度不同和端点不同的方波。创建一个周期为5的方波,持续运行15秒,且在-1和1之间切换数值。

tau = 5;
Tf = 15;
[u0,t] = gensig("square",tau,Tf);
u = 2*u0-1;
plot(t,u)

如图所示:

        使用 t 和 u 来模拟动态系统的响应,可以使用 lsim 命令。lsim 命令假定 t 的值采用您模拟的动态系统模型的单位(sys.TimeUnit)作为时间单位。

sys = tf(30,[1 5 30]);
lsim(sys,u,t)

如图所示:

生成具有指定采样时间的信号

        如果没有指定时间步长(采样时间),gensig将默认为每周期64个样本,即Ts = tau/64。当您想要使用lsim模拟离散时间模型时,时间步长必须等于模型的采样时间。为了生成一个适合的信号,请在gensig中提供这个采样时间。例如,生成一个正弦波,用于模拟一个采样时间为0.1秒的离散时间动态系统模型。

tau = 3;
Tf = 6;
Ts = 0.1;
[u,t] = gensig("sine",tau,Tf,Ts);

        模拟模型对生成的信号的响应。

sys = zpk([],[-0.1,-0.5],1,Ts);
lsim(sys,u,t,Ts)

如图所示:

生成用于模拟多输入系统的输入

        要使用 lsim 模拟多输入系统,需要将输入信号提供为一个矩阵,其中每列代表应用于每个输入的信号。换句话说,u(:,j) 是应用于第j个输入的信号在每个时间步的取值。要使用 gensig 生成这样的输入矩阵,需要一起创建每个输入的信号,然后将它们堆叠在一起形成一个矩阵。

        例如,创建一个用于模拟一个两输入系统的信号,将一个周期为2秒的方波注入到第一个输入,每1.5秒将脉冲注入到第二个输入。请指定持续时间和采样时间,以使这两个向量具有相同的长度,这对于将它们组合成一个矩阵是必要的。

Tf = 8;
Ts = 0.02;
[uSq,t] = gensig("square",2,Tf,Ts);
[uPu,~]  = gensig("pulse",1.5,Tf,Ts);
u = [uSq uPu];
size(u)
ans = 1×2

   401     2

        u的每行u(i,:)是应用于对应时间t(i)的输入信号(u1,u2)。

        可以组合那些长度相同但不是由gensig创建的信号。例如,假设想要模拟一个三输入系统,将uSq应用于第一个输入,uPu应用于第二个输入。还想要将一个从0开始并在最终时间Tf = 8增加到1的斜坡应用到第三个输入。确保该信号是一个与uSq和uPu具有相同长度的列向量。然后将它与其他信号组合在一起以创建输入矩阵。

uRa = linspace(0,1,401)'; 
u = [uSq uPu uRa];
size(u)
ans = 1×2

   401     3
plot(t,u)

如图所示:

        现在,可以使用u和t来模拟一个三输入模型。生成一个具有三个输入和两个输出的状态空间模型,然后模拟应用于输入的u信号对其两个输出的响应。

rng('default')
sys = rss(3,2,3);
lsim(sys,u,t)

如图所示:

参数说明

type — 周期信号的类型

要生成的周期信号类型,可以指定为以下之一:

        "sine" — 正弦波

        "square" — 方波

        "pulse" — 周期脉冲

        所有信号的幅度为单位,并且在t = 0时具有初始值0。可以使用字符向量而不是字符串来指定类型(例如,'sine')。

tau — 周期

        请使用lsim来模拟的动态系统模型的单位来指定tau。例如,如果sys.TimeUnit是'seconds',那么为了生成一个周期为30秒的用于模拟sys的信号,将tau设置为30。如果sys.TimeUnit是'minutes',那么要生成这样的信号,请将tau设置为0.5。

Tf — 持续时间

       用于模拟的信号持续时间,指定为正标量值。 输出向量t的形式为0:Ts:Tf,其中时间步长由Ts设置。当使用t与lsim一起模拟动态系统模型时,lsim将解释t的单位为模型的TimeUnit属性中指定的单位。

Ts — 时间步长

        时间步长,指定为正标量值。输出向量t的形式为0:Ts:Tf。Ts的单位打算使用lsim进行模拟的动态系统模型的TimeUnit属性中指定的单位确定。当模拟离散时间模型时,请将Ts设置为模型的采样时间Ts。

u — 生成的信号

        生成的信号,返回为列向量,其长度与t相同。信号的形状由type确定。该信号具有单位幅度,并且基线值为0。

t — 时间向量

        时间向量,返回为列向量,其形式为0:Ts:Tf。如果没有指定持续时间Tf,则gensig将使用Tf = 5*tau。如果没有指定时间步长Ts,则gensig将使用tau/64。

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值