2012-08-08 3 views
3

현재 Scipy의 신호 처리 모듈 인 scipy.signals를 사용하여 선형 시간 불변 (LTI) 시스템을 검사합니다. 나는 시스템을 서로 연결하는 최선의 방법을 알고 싶다. 예를 들어 두 시스템을 연결하려고한다고 가정합니다.파이썬에서 선형 시스템 연결을 scipy로 사용했습니다.

from scipy import signal 

a = signal.lti([T1,0],[T1,1]) 
b = signal.lti(1,[T2,1]) 

결과 시스템을 얻으려면

cnum=signal.convolve(a.num,b.num) 
cden=signal.convolve(a.den,b.den)  
c=signal.lti(cnum,cden) 

으로이 작업을 수행 할 수 있습니다. 이 표기법은 매우 우아하지 않지만, 특히 우리가 두 개 이상의 시스템을 다루는 경우에 그렇습니다. 또한 이와 같이 두 시스템을 병렬로 연결하거나 다른 시스템을 통해 신호를 피드백하는 것은 그리 간단하지 않습니다.

파이썬 제어 시스템 라이브러리를 설치할 수는 있지만, Scipy가이 기능을 포함하지 않는다면 다소 놀랄 것입니다.

어떻게 LTI 시스템을 가장 우아하게 상호 연결할 수 있습니까?

답변

2

다른 사람이 따라 오는 경우를 대비하여이 글을 게시하십시오.

다음과 같이 신호를 직렬로 결합하는 신호 처리 기능을 개발할 수 있습니다.

import scipy.signal as signal 

def signal_processor(signals): 
    """ Must pass an iterable containing sigal.lti signals """ 
    (result, signals) = (signals[0], signals[1:]) 
    for sig in signals: 
     cnum = signal.convolve(result.num, sig.num) 
     cden = signal.convolve(result.den, sig.den) 
     result = signal.lti(cnum, cden) 
    return result 

# Can then be used as follows: 
series_signal = signal_processor([sigA, sigB, sigC]) 

이 내용을 확장하여 다른 사용 사례도 처리하도록하겠습니다.

관련 문제