微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

FFT后如何获得原始声音?

如何解决FFT后如何获得原始声音?

我正在对我的声音应用 FFT,如下所示:

from scipy.fft import fft

samplerate,data = wavfile.read('./sound.wav')
fft_sound = fft(data)

是否有一种反转方法可以让我从 fft_sound 返回到 data

这是我所做的:

samplerate,data = wavfile.read('./StarWars3.wav')

print(data)
print(ifft(fft(data)))

但结果看起来完全不同:

[    0     0     0 ... -1502    26   414]
[ 0.00000000e+00-1.17911210e-13j -6.75789623e-13-4.22368515e-14j
  0.00000000e+00+7.03947524e-14j ... -1.50200000e+03-5.15824216e-14j
  2.60000000e+01+3.23030463e-13j  4.14000000e+02+9.36792340e-13j]

我是否正确使用了它?

解决方法

是否有一种反转方法可以让我从 fft_sound 返回到 data

是的,它叫做离散傅立叶逆变换

就像 fft 函数一样,SciPy 有一个函数;不出所料地命名为 ifft

我是否正确使用了它?

它返回一个复数值数组,其中 j 后缀表示虚部(参见 Complex numbers in pythonhttps://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex)。

正如其文档所说,

[...] ifft(fft(x)) == x 在数值精度范围内。

结果以科学记数法显示,因此看起来不同但在数字上非常接近:

  • -1502变成了-1.50200000e+03-5.15824216e-14j(实部是-1.50200000e+03,是-1502;虚部是-5.15824216e-14,非常接近于0)>

  • 26变成了2.60000000e+01+3.23030463e-13j(实部是2.60000000e+01,也就是26;虚部是3.23030463e-13,非常接近于0)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。