首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有可能解决MATLAB和Python之间的滤波器舍入误差吗?

有可能解决MATLAB和Python之间的滤波器舍入误差吗?
EN

Stack Overflow用户
提问于 2018-12-13 03:50:31
回答 1查看 93关注 0票数 1

我正在尝试将一些Matlab代码复制到Python中,目前我正在开发一个单元测试来检查等价性。在下面的代码中,我得到了E-11顺序的错误,这表明它可能是一个舍入错误。

Matlab代码:

代码语言:javascript
复制
width = 200;
x = 1:100000;
b = ones(width,1)/width;
y = filter(b, 1, x);
save('mat_data')

Python代码:

代码语言:javascript
复制
import numpy as np
from scipy.io import loadmat
from scipy import signal

def plot_fig(x, y=None):
    import matplotlib.pyplot as plt
    if y is None:
        y = x
        x = np.arange(0, len(y))
    plt.figure()
    plt.plot(x, y)
    plt.show()

def mat_data(param):
    data = loadmat('mat_data.mat')
    return np.squeeze(data[param])

y = signal.lfilter(mat_data('b'), 1, mat_data('x'), axis=0)
plot_fig(mat_data('y') - y)

我使用了loadmat函数来确保用作函数输入的数字数组之间的等价性。生成的曲线图为:

difference plot

我看到误差很小,所以可能是舍入误差,但它似乎也累积了,这让我很担心。

目前,我正在开发的应用程序对于确保两个代码(matlab和python)之间的二进制等价性至关重要,因此如果能帮助我解决这一差异,我将不胜感激。

提前谢谢你,

一个。

EN

回答 1

Stack Overflow用户

发布于 2018-12-13 06:16:00

你可以在python中尝试双精度浮点数而不是单精度浮点数。我认为这将显着减少累积舍入误差。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53750384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档