目录
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。