这个问题与: DSP : audio processing : squart or log to leverage fft?
我不知道该选择正确的算法。
现在,
目标:
我想获取从音频文件中获得的信号的所有频率。
上下文:
我使用 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 )。
关于python - DSP——获取所有频率的幅度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20078794/