这个问题与:DSP:音频处理:squart还是log来利用fft? https://stackoverflow.com/questions/20057831/dsp-audio-processing-squart-or-log-to-leverage-fft
我不知道该选择正确的算法。
Now,
Goal :
我想获取从音频文件中获得的信号的所有频率。
Context:
我使用 numpy 和 scikits.audiolab。我阅读了大量关于 dsp 主题的文章,还访问了 dspguru.com,通过网络阅读了论文和不错的博客。
我使用的代码是这样的:
import numpy as np
from scikits.audiolab import Sndfile
f = Sndfile('first.ogg', 'r')
# Sndfile instances can be queried for the audio file meta-data
fs = f.samplerate
nc = f.channels
enc = f.encoding
print(fs,nc,enc)
# Reading is straightfoward
data = f.read_frames(10)
print(data)
print(np.fft.rfft(data))
我是 DSP 新手。
我的问题
我希望能够分离信号的所有频率来比较不同的信号。
我在声音数组上使用 numpy.fft.rfft ;但现在,仅靠这个操作是不够的。那么,正确获取所有频率幅度的最佳解决方案是什么?
我看到将结果值相乘可以得到复数并将整体转换为实数。
现在该怎么办?是这样吗?
如果您需要我澄清任何事情,尽管问。
多谢 !
您说“我想获取从音频文件中获取的信号的所有频率。”但你真正想要的是频率的大小。
在你的代码中,看起来(我不懂 python)你只读取了前 10 个样本。假设您的文件是单声道的,那没问题,但您可能想查看更大的样本集,例如 1024 个样本。当然,一旦完成此操作,您将需要对下一组 N 个样本进行重复。您可能想也可能不想重叠样本集,并且您可能想应用窗口函数,但您在这里所做的只是一个好的开始。
瞌睡虫说的是真的。 fft 的输出很复杂。要找到给定频率的大小,您需要找到复数的长度或绝对值,即 sqrt( r^2 + i^2 )。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)