3

現在、Scipy の信号処理モジュール scipy.signals を使用して、線形時不変 (LTI) システムを調べています。システムを相互に接続する最善の方法を知りたいです。たとえば、2 つのシステムを接続したいとします。

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)

結果のシステムを取得します。ただし、この表記法はあまりエレガントではありません。特に、2 つ以上のシステムを扱っている場合はそうです。また、このように 2 つのシステムを並列に接続したり、別のシステムを介して信号をフィードバックしたりすることは、それほど簡単ではありません。

python-control システム ライブラリをインストールできることがわかりましたが、Scipy に何らかの形でこの機能が含まれていない場合は、むしろ驚くでしょう。

LTI システムを最もエレガントに相互接続するにはどうすればよいですか?

4

1 に答える 1

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

これを拡張して構築し、他のユースケースも処理する方法を見ていきます。

于 2013-08-15T02:01:49.147 に答える