- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一些音频文件,我想绘制音频文件的平均频谱,例如使用 PYTHON(librosa 库)的“audacity”软件。我可以看到他们正在绘制整个音频的平均频率与振幅图。
之后,我想应用 CNN 对两类样本进行分类。寻找建议。
谢谢。
最佳答案
通常你使用librosa.display.specshow随时间绘制频谱图,而不是整个文件。事实上,作为 CNN 的输入,您可能更愿意使用 librosa.stft 生成的随时间变化的频谱图。或一些 Mel 声谱图,具体取决于您的分类目标。
例如,如果您想按流派分类,梅尔谱图可能是最合适的。如果你想找出调或和弦,你将需要一个恒定 Q 谱图 (CQT) 等。
也就是说,这里有一些代码可以回答您的问题:
import librosa
import numpy as np
import matplotlib.pyplot as plt
file = YOUR_FILE
# load the file
y, sr = librosa.load(file, sr=44100)
# short time fourier transform
# (n_fft and hop length determine frequency/time resolution)
n_fft = 2048
S = librosa.stft(y, n_fft=n_fft, hop_length=n_fft//2)
# convert to db
# (for your CNN you might want to skip this and rather ensure zero mean and unit variance)
D = librosa.amplitude_to_db(np.abs(S), ref=np.max)
# average over file
D_AVG = np.mean(D, axis=1)
plt.bar(np.arange(D_AVG.shape[0]), D_AVG)
x_ticks_positions = [n for n in range(0, n_fft // 2, n_fft // 16)]
x_ticks_labels = [str(sr / 2048 * n) + 'Hz' for n in x_ticks_positions]
plt.xticks(x_ticks_positions, x_ticks_labels)
plt.xlabel('Frequency')
plt.ylabel('dB')
plt.show()
这导致了这个输出:
关于python - 如何使用 python 绘制整个音频文件的频谱或频率与振幅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55842277/
我正在处理电话的原始电话声音和录音,我想在 .Net C# 项目中将它们标准化为特定的音量级别。 声音是原始音频字节的集合(单声道无 header 16 位签名 PCM 音频 16000Hz)。 音频
我正在尝试编写一个应监视任何传入声音的iPhone应用程序。我不确定如何获取iPhone的麦克风录制的声音并检测其频率。如果相同频率的声音重复几次,那么我需要采取一些措施。任何人都可以在这里帮助我。我
我正在尝试录制来自 MIC 的声音并绘制实时图表。我能够记录和绘制图表。问题是使用下面的代码记录的值不准确,例如……下图是我在完全没有声音时得到的。我看过使用 fft 的示例,但我不确定这对我的情况是
我是一名优秀的程序员,十分优秀!