Python 从Scipy滤波器设计构造辛有理函数

Python 从Scipy滤波器设计构造辛有理函数,python,filter,scipy,signal-processing,sympy,Python,Filter,Scipy,Signal Processing,Sympy,为什么num\u den\u to\u sympy(b,a)和sy.simplify(sy.expand(tf))不一样?扩展版包含一个额外的s**4,我不知道它来自哪里 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=Tr

为什么
num\u den\u to\u sympy(b,a)
sy.simplify(sy.expand(tf))
不一样?扩展版包含一个额外的s**4,我不知道它来自哪里

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

问题是系数的顺序不一致。SciPy从最低到最高顺序排列。Symphy的
Poly
构造函数期望它们从高到低:例如,
Poly([1,0,0],s)
s**2

如果在使用多边形时反转系数,则两个结果相同

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

谢谢我想一定是别的什么地方出了问题,因为闭环增益是10*16,这似乎太大了(我对电子不太了解)。你知道这个值是否合理吗?对不起,我不知道这些东西。也许你能帮上忙。