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