【发布时间】:2012-11-19 13:36:29
【问题描述】:
我遇到了由 filter2 引起的舍入错误。 这是一个最小的代码示例:
format long
x=[ 0 0 0 0 0
64 65 72 74 72
104 111 109 106 112];
h=[ 0 0 0 0 0
0 0.500000000000000 0 0.500000000000000 0
0 0 0 0 0]
y=filter2(h,x, 'valid')
y_= x(2,2)/2 + x(2,4)/2
y__= sum(sum(x .* h))
round(y)
round(y_)
round(y__)
结果
y = 69.499999999999986
y_ = 69.500000000000000
y_ = 69.500000000000000
ans = 69
ans = 70
ans = 70
我猜这是在 fft 域(或类似的东西)中进行过滤的结果。不幸的是,这给我在验证我正在生成的 FPGA 实现的测试向量时带来了问题。
任何想法如何修复/避免此错误?
PS 我使用的是 matlab 2007b。
编辑:2007a 至 2007b Edit2:添加了 y__ 示例
【问题讨论】:
-
这不是filter2的问题,只是matlab的工作方式。它最多只能存储 14 位小数用于任何计算。
-
@Dennis:我的代码示例表明,如果我手动进行计算 (y_),我会得到正确的答案。而在 filter2 示例中我没有。那为什么不是 filter2 相关的问题呢?
-
如果我的解决方案似乎不适用,请解释为什么需要进行舍入。
-
我没有得到和你一样的结果(R2010b);我只是得到
69.5两个....你是什么版本? -
@DennisJaheruddin:嗯嗯……不。 Matlab 对任何双精度数使用 IEEE754(阅读this)。那么你从哪里获得“14 位数”的知识呢?
标签: matlab floating-point filtering