【发布时间】:2019-03-21 00:10:41
【问题描述】:
我想将这段 MATLAB 代码翻译成 Python,我想我做的一切都是正确的,即使我没有得到相同的结果。
MATLAB 脚本:
n=2 %Filter_Order
Wn=[0.4 0.6] %# Normalized cutoff frequencies
[b,a] = butter(n,Wn,'bandpass') % Transfer function coefficients of the filter
Python 脚本:
import numpy as np
from scipy import signal
n=2 #Filter_Order
Wn=np.array([0.4,0.6]) # Normalized cutoff frequencies
b, a = signal.butter(n, Wn, btype='band') #Transfer function coefficients of the filter
a MATLAB 中的系数:1, -5.55e-16, 1.14, -1.66e-16, 0.41
a Python 中的系数:1, -2.77e-16, 1.14, -1.94e-16, 0.41
这可能只是精度问题,因为两个不同的值(第二个和第四个)都在10^(-16)的顺序上?!
另一方面,b 系数是相同的。
【问题讨论】:
-
您使用不同的编程语言和不同的算法实现会得到不同的结果?我的意思是,它们如此接近真是太神奇了。
-
“这可能只是精度问题,因为两个不同的值(第二个和第四个)都在 10^(-16) 的数量级上?!” 是的。
-
顺便说一句,1e-16 本质上是 0。