Numpy ifft(fft(音频))就是噪声

Numpy ifft(fft(音频))就是噪声,numpy,fft,ifft,Numpy,Fft,Ifft,无论我只是嵌套它们(iff(fft(音频))),还是尝试逐窗口(window音频,执行fft,执行ifft,然后反转窗口,用eps替换零,然后合并样本(在管道中尝试abs) 我知道ifft仅与fft相反,具有无限精度的算法、无限多的样本等(对吗?)我使用64位浮点和44kHZ采样率。但是,我希望至少能听到原始音频 我的错误是实际的还是理论的?如果是bug,我可以给出代码。基于JoeKington的评论,我已经下载并尝试了以下内容 >>> import scipy.io.wavf

无论我只是嵌套它们(
iff(fft(音频))
),还是尝试逐窗口(
window
音频,执行
fft
,执行
ifft
,然后反转窗口,用eps替换零,然后合并样本(在管道中尝试
abs

我知道
ifft
仅与
fft
相反,具有无限精度的算法、无限多的样本等(对吗?)我使用64位浮点和44kHZ采样率。但是,我希望至少能听到原始音频


我的错误是实际的还是理论的?如果是bug,我可以给出代码。

基于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)
结果文件的播放效果与原始文件完全相同


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

理论上您是正确的。你能展示你的代码吗?这是你如何将数据编码回音频的例子吗<代码>ifft将返回复杂的浮点值。根据您使用的库的不同,它可能只是将阵列的内存缓冲区作为.wav转储到磁盘,而不会将内容重新转换回float。无论如何,这是一种产生完整垃圾作为输出的方法。。。尝试写入
ifft(fft(音频)).real
abs(ifft(fft(音频))
并查看它是否更改了我使用的任何内容
scipy.io.wavfile.write()
。我已经尝试了这两种方法,问题是获得正确的
dtype
(见下文)。我的问题是错误的演员阵容。我将“int8”改为“uint16”。因为我在添加注释(读作
.wav
)来制作和弦,所以我认为在编写输出时应该使用相同的数据类型。不。ifft和fft是相反的,宇宙又有了意义!