python - DSP——获取所有频率的幅度

标签 python audio numpy signal-processing fft

这个问题与: 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/

相关文章:

python - 如果总和小于 x,则删除 pandas 的 DataFrame 中的列

python - 当所述点在半径内时朝该点移动

c# - 从 base64 解码后的嘈杂音频剪辑

flash - Flash声音在大多数浏览器中不起作用

python - Python PIL 中的重叠多边形

python - Pandas dataframe groupby + apply + new column 很慢

python - 仅从 Jupyter Notebook 中获取代码

linux - 用户空间程序如何与内核模块交互?

python - 一个数字在 numpy 数组中出现了多少次

python - 查找数组中分隔对的数量