我是靠谱客的博主 清新花瓣,最近开发中收集的这篇文章主要介绍传递函数延迟 matlab,如何在Scipy中定义具有时间延迟的LTI系统?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我检查了github上的ltisys模块,并试图创建一个有时间延迟的LTI类.我认为,如果我们用BU(t-Td)代替BU(t),其中Td是时间延迟,那么在状态方程中引入输入时间延迟应该是直截了当的.

以下方法适用于单输入单输出系统.也许不是没有错误,但它解决了我的目的.

#Inherit the parent LTI class to create LTI class with time delay

class ltidelay(lti):

def __init__(self,inputdelay,*args,**kwargs):

super(ltidelay,self).__init__(*args,**kwargs)

self.d =inputdelay

#define a method to simulate LTI with time delay . just copied lsim2 and made 2 changes. 1. passed the delay from the `ltidelay` object and 2. modified the state equation.

def lsim3(system , U=None, T=None,X0=None, **kwargs):

if isinstance(system,lti):

sys = system

else:

sys = lti(*system)

delay = sys.d

if X0 is None:

X0 = zeros(sys.B.shape[0],sys.A.dtype)

if T is None:

T = linspace(0,10,101)

T = atleast_1d(T)

if len(T.shape) != 1:

raise ValueError("T must be a rank1 array")

if U is not None:

U = atleast_1d(U)

if len(U.shape)==1:

U=U.reshape(-1,1)

sU = U.shape

if sU[0] != len(T):

raise ValueError("U must have the same number of rows as elements in T")

if sU[1] != sys.inputs:

raise ValueError("The number of inputs in U is not compatible")

ufunc = interpolate.interp1d(T, U, kind ='linear',axis =0,bounds_error =False)

def fprime(x,t,sys,ufunc):

return dot(sys.A,x)+squeeze(dot(sys.B,nan_to_num(ufunc([t-delay]))))

xout = odeint(fprime,X0,T,args=(sys,ufunc),**kwargs)

yout = dot(sys.C,transpose(xout))

else:

def fprime(x,t,sys):

return dot(sys.A,x)

xout = odeint(fprime,X0,T,args=(sys,),**kwargs)

yout = dot(sys.C, transpose(xout))

return T , squeeze(transpose(yout)),xout

#create an LTI system with delay 10

tf = ltidelay(10,2,[4,1])

#create a step signal and time vector to simulate the LTI and check

u = linspace(0,0,100)

u[50:100] = 1

t = linspace(1,100,100)

#check the simulation

y = lsim3(tf,u,t,X0 =0)

plot(y[1])

# compare with LTI without time delay

y1 =lsim2(tf, u,t, X0=0)

plot(y1[1])

#delay works

最后

以上就是清新花瓣为你收集整理的传递函数延迟 matlab,如何在Scipy中定义具有时间延迟的LTI系统?的全部内容,希望文章能够帮你解决传递函数延迟 matlab,如何在Scipy中定义具有时间延迟的LTI系统?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部