scipy zpk2sos 给出与 Matlab zp2sos 不同的结果
scipy zpk2sos giving different result to Matlab zp2sos
谁能解释为什么这段代码在 Python 和 Matlab 中给出不同的结果?
Matlab
z = [0.97, 0.85, 0];
p = [0.97, 0.94, 0];
k = 0.2;
disp(zp2sos(z,p,k))
输出:
0.2000 -0.1700 0 1.0000 -0.9400 0
1.0000 -0.9700 0 1.0000 -0.9700 0
Python
from scipy.signal import zpk2sos
z = [0.97, 0.85, 0]
p = [0.97, 0.94, 0]
k = 0.2
print(zpk2sos(z,p,k))
输出:
[[ 0.2 0. 0. 1. 0. 0. ]
[ 1. -1.82 0.8245 1. -1.91 0.9118]]
我通过使用我在 github 上找到的这段代码解决了这个问题,它定义了一个 zpk2sos 版本,它给了我与 MATLAB zp2sos 相同的输出。您可能需要从代码中删除一些旧的过时的包,但除此之外对我来说效果很好。
https://gist.github.com/endolith/4525003/8ac88d203f874fd2b97498d50da818bbf5fac0f8
谁能解释为什么这段代码在 Python 和 Matlab 中给出不同的结果?
Matlab
z = [0.97, 0.85, 0];
p = [0.97, 0.94, 0];
k = 0.2;
disp(zp2sos(z,p,k))
输出:
0.2000 -0.1700 0 1.0000 -0.9400 0
1.0000 -0.9700 0 1.0000 -0.9700 0
Python
from scipy.signal import zpk2sos
z = [0.97, 0.85, 0]
p = [0.97, 0.94, 0]
k = 0.2
print(zpk2sos(z,p,k))
输出:
[[ 0.2 0. 0. 1. 0. 0. ]
[ 1. -1.82 0.8245 1. -1.91 0.9118]]
我通过使用我在 github 上找到的这段代码解决了这个问题,它定义了一个 zpk2sos 版本,它给了我与 MATLAB zp2sos 相同的输出。您可能需要从代码中删除一些旧的过时的包,但除此之外对我来说效果很好。
https://gist.github.com/endolith/4525003/8ac88d203f874fd2b97498d50da818bbf5fac0f8