如何提高fft处理的准确性?

时间:2016-05-17 05:04:20

标签: python numpy fft floating-accuracy

我没有完成在线数字信号处理课程 做我现在正在尝试的可选编程任务 课程结束后。 提供了几个测试输入以及预期输出。 我的问题是,对于所有测试用例,我的输出数字与 预期值恰好高达几个小数位。 之后他们不匹配! 对于第一个值,例如:

9.065305906994007046e+01
I get:
9.065305906729875574e+01

最后一次(第257次):

1.717718363464842923e+01
I get:
1.717715652594918652e+01

列表开头的对应关系是小数点后9位。 在列表的末尾,它可以减少到5个位置。 我尝试过不同版本的fft实现 没有改善。它看起来如此接近,以至于我必须有一个累积的错误技巧? 这是我使用的函数(python,numpy,scipy)。:

    def scaled_fft_db(x):
        # a) a 512-point Hann window - weigh the input data.
        N = x.size
        window = numpy.hanning(N)
        xx = x*window
        # b) Compute the DFT of the weighed input - normalized
        A = numpy.fft(xx)/N
        # c) Return the first 257 values of the normalized spectrum
        XX = abs(A[:257])
        # take the magnitude in dBs and
        # normalize so that the maximum value is 96dB.
        X = 20*numpy.log10(XX)
        X = X + (96 - max(X))
        return X

请提出任何建议。

0 个答案:

没有答案