首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ifft(fft(音频))只是噪声

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

Stack Overflow用户
提问于 2013-01-29 09:27:42
回答 1查看 3.2K关注 0票数 5

无论我只是嵌套它们(iff(fft(audio)))还是逐个窗口地尝试(window音频,做fft,做ifft,然后反转窗口,用eps替换零,然后合并样本(在管道中的各处尝试abs )),我只得到噪声。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-29 11:07:09

基于JoeKington的评论,我下载了this file,并尝试了以下方法

代码语言:javascript
复制
>>> 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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14574208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档