2017-05-28 3 views
2

なぜnum_den_to_sympy(b, a)sy.simplify(sy.expand(tf))が同じではないのですか?展開されたバージョンには追加のs ** 4が含まれており、どこから来たのかわかりません。Scipyフィルタ設計からのSymPy有理関数の構築

import numpy as np 
import sympy as sy 
from scipy.signal import * 
from IPython.display import display 

sy.init_printing() 

def num_den_to_sympy(num, den, symplify=True): 
    s = sy.Symbol('s') 
    G = sy.Poly(num, s)/sy.Poly(den, s) 
    return sy.simplify(G) if symplify else G 

b, a = iirdesign(wp=2 * np.pi * 2.5e3, ws=2 * np.pi * 4.5e3, gpass=1, gstop=26, 
         analog=True, ftype='cheby1', output='ba') 

tf = 1 
for sos in tf2sos(b, a): 
    tf *= num_den_to_sympy(sos[0:3], sos[3:6]) 

display(num_den_to_sympy(b, a)) 
display(sy.simplify(sy.expand(tf))) 

答えて

1

問題は、係数の一貫性のない順番です。 SciPyはそれらを最低から最高度まで注文します。 SymPyのPolyコンストラクタは、彼らが最高から最低まであることを想定しています。たとえば、Poly([1, 0, 0], s)はポリを使用しているときに、係数を逆にした場合、二つの結果が同一であるs**2

です。

G = sy.Poly(num[::-1], s)/sy.Poly(den[::-1], s) 
+0

ありがとうございました!閉ループ・ゲインが10 ** 16であるため、何かが間違っていなければならないと思いました。その価値が合理的かどうか知っていますか? – dvc

+0

申し訳ありませんが、私はこれらのことについて考えていません。恐らく[dsp.se]が助けになるかもしれません。 – FTP

関連する問題