【问题标题】:numpy ifft output has much larger power than original signalnumpy ifft 输出的功率比原始信号大得多
【发布时间】:2020-07-24 03:17:05
【问题描述】:

我在使用 numpy fft 类时遇到了一个奇怪的问题。我有以下测试代码:

import numpy as np
import scipy.io.wavfile
import matplotlib.pyplot as plt  

fs, a = scipy.io.wavfile.read('test.wav')   # import audio file

spectrum = np.fft.fft(a)                    # create spectrum

b = np.real(np.fft.ifft(spectrum))          # reconstruct signal

# Print power of original and output signal
print(np.average(a**2))
print(np.average(b**2))

它输出:

1497.887578558565
4397203.934254291

正如对这些值的预期,输出比输入响亮得多。 numpy.fft.ifft 的文档说明:

“此函数计算 fft 计算的一维 n 点离散傅里叶变换的逆。换句话说,ifft(fft(a)) == a 在数值精度范围内。”

因此信号应该几乎相同。然而他们显然不是。 我在这里做错了什么?

【问题讨论】:

    标签: python-3.x numpy signal-processing fft


    【解决方案1】:

    好的,我最终自己找到了解决方案。

    问题出现是因为 wavfile.read 的输出是一个整数数组。由于某种原因,fft 函数以不同于浮点数的方式处理整数。该问题通过将 a 类型转换为 np.float64 类型来解决。

    但我仍然不太清楚为什么会发生这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 2013-01-26
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      相关资源
      最近更新 更多