gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:52:50 28 4
gpt4 key购买 nike

这个问题是相关的: 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com