2012-09-17 14 views
7

समय विलंब के साथ एक एलटीआई सिस्टम के हस्तांतरण समारोह में एक संख्या अवधि टर्म एक्स (-टीडी * एस) है जहां टीडी समय देरी है। मैटलैब में, कोई भी कई तरीकों से ऐसी एलटीआई प्रणाली बना सकता है (उदाहरण के लिए "एस" ऑपरेटर का उपयोग करना और घातीय शब्द को सीधे सेट करना या inputdelayoutputdelaytf ऑब्जेक्ट्स के गुणों को सेट करके।) हालांकि, मुझे ऐसा करने का कोई तरीका नहीं मिल रहा है Scipy सिग्नल एलटीआई वस्तुओं। मैंने पाइथन कंट्रोल सिस्टम लाइब्रेरी की भी जांच की, लेकिन अभी भी कोई रास्ता नहीं मिला।एससीपी में समय देरी के साथ एलटीआई सिस्टम को कैसे परिभाषित किया जाए?

मैं समय देरी के लिए पेड सन्निकटन का उपयोग नहीं करना चाहता हूं और एलटीआई सिस्टम में सटीक समय देरी निर्धारित करना चाहता हूं।

क्या कोई यह जानता है कि सिसिसी में या किसी अन्य बाहरी पायथन पुस्तकालय में इसे कैसे प्राप्त किया जाए?

उत्तर

4

मैंने जिथब में ltisys मॉड्यूल की जांच की और समय विलंब के साथ एक एलटीआई कक्षा बनाने का प्रयास किया। मुझे लगता है कि, राज्य समीकरण में इनपुट समय देरी शुरू करने के लिए सीधा होना चाहिए, अगर हम बीयू (टी) द्वारा बीयू (टी-टीडी) को प्रतिस्थापित करते हैं जहां टीडी समय देरी है। निम्नलिखित दृष्टिकोण एकल इनपुट एकल आउटपुट सिस्टम के लिए काम करता है। बग से मुक्त नहीं हो सकता है, लेकिन यह मेरे उद्देश्य को हल किया।

#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]) 

enter image description here

# compare with LTI without time delay 
y1 =lsim2(tf, u,t, X0=0) 

plot(y1[1]) 

enter image description here

#delay works 
संबंधित मुद्दे