ifft(fft(音频))只是噪音

sam*_*lis 5 numpy fft ifft

我是否只是嵌套他们(iff(fft(audio)))或逐个窗口(window音频,做fft,做ifft,然后反转窗口,用eps替换零,然后合并样本(abs在管道中尝试这里和那里))我只得到噪音.

我知道这ifft只是fft与无限精度算术,无限多个样本等相反(对吗?)我正在使用64位浮点和44kHZ采样率.但是,我希望能够至少听到原始音频.

我的错误是实践还是理论?我可以给代码,如果它是一个错误.

Jai*_*ime 6

在JoeKington的评论的基础上,我已经下载了这个文件,并尝试了以下内容

>>> import scipy.io.wavfile
>>> rate, data = scipy.io.wavfile.read('wahoo.wav')
>>> data
array([134, 134, 134, ..., 124, 124, 124], dtype=uint8)
>>> data_bis = np.fft.ifft(np.fft.fft(data))
>>> data_bis
array([ 134. +6.68519934e-14j,  134. -4.57982480e-14j,
        134. -1.78967708e-14j, ...,  124. -2.09835513e-14j,
        124. -1.61750469e-14j,  124. -2.14867343e-14j])
>>> data_bis = data_bis.astype('uint8')
C:\Users\Jaime y Eva\Desktop\stack_exchange.py:1: ComplexWarning: Casting complex values to real discards the imaginary part
  # -*- coding: utf-8 -*-
>>> data_bis
array([134, 133, 133, ..., 123, 123, 123], dtype=uint8)
>>> scipy.io.wavfile.write('wahoo_bis.wav', rate, data_bis)
Run Code Online (Sandbox Code Playgroud)

生成的文件与原始文件完全相同.

因此,将返回复数值转换为实数只是问题的一半(并且您可能希望使用np.abs而不是data.real像上面隐式执行的代码那样),然后您还需要将浮点数重新uint设置为适当位的s-深度.