首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >波形频率低于音符频率?

波形频率低于音符频率?
EN

Stack Overflow用户
提问于 2019-03-18 09:13:20
回答 1查看 69关注 0票数 0

我正在尝试从一个mp3文件中提取一个注释的频率,该文件包含一个合成的A3便笺样本,它应该是220 Hz。

这是我使用librosa获得的波形的一部分。

正如你所看到的,这波似乎每400个样本重复一次。因此,通过将采样率( 22050 Hz )除以400 I,可以得到波形的频率。然而,我得到55.125赫兹而不是220赫兹。我是错过了什么还是做错了什么?

编辑:下面是我使用的代码

代码语言:javascript
复制
import librosa
from matplotlib import pyplot as plt
import numpy as np
%matplotlib notebook

y, sr = librosa.load("Simple_synth/A3-saw.mp3")

plt.figure(figsize=(18,6))
plt.plot(y[2000:3000])

note_freq = sr/400

链接到音频文件:https://www.filefactory.com/file/7aqmrvq375n9/A3-saw.mp3

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-19 08:16:06

对于给定的音频示例

代码语言:javascript
复制
import librosa
from matplotlib import pyplot as plt
import numpy as np

y, sr = librosa.load("A3-saw.mp3")

计算傅里叶变换是可能的(参见how to extract frequency associated with fft values in python)

代码语言:javascript
复制
# calculate fast fourier transform
w = np.fft.fft(y)

# frequencies associated to the fourier transform
freqs = np.fft.fftfreq(len(y))

然后求出傅里叶变换的最高峰值及其频率( Hz )。

代码语言:javascript
复制
idx = np.argmax(np.abs(w))
freq = freqs[idx]
freq_in_hertz = abs(freq * sr)
print(freq_in_hertz)

54.90196078431373

在样本中也有较高的谐波,可以通过绘制更多的峰值来看到。

代码语言:javascript
复制
plt.plot(sr*freqs[0:500],abs(w[0:500]))

代码语言:javascript
复制
plt.plot(sr*freqs[0:2000],abs(w[0:2000]))

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

https://stackoverflow.com/questions/55217888

复制
相关文章

相似问题

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