音频信号特征提取:语谱图、MFCC、对数梅尔谱图生成与保存
以下是Python代码实现:
import os
import librosa
import librosa.display
import numpy as np
import matplotlib.pyplot as plt
# 设置数据集路径
data_path = 'D:/论文代码/data/'
# 定义函数,用于生成语谱图、mfcc图、对数梅尔谱图
def create_spectrogram(audio_path):
# 读取音频文件
y, sr = librosa.load(audio_path, sr=44100)
# 生成语谱图
D = np.abs(librosa.stft(y))
fig, ax = plt.subplots()
img = librosa.display.specshow(librosa.amplitude_to_db(D, ref=np.max),
y_axis='log', x_axis='time', ax=ax)
fig.colorbar(img, ax=ax)
ax.set(title='语谱图')
plt.savefig(os.path.splitext(audio_path)[0] + '_spectrogram.png')
plt.close()
# 生成mfcc图
mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=20)
fig, ax = plt.subplots()
img = librosa.display.specshow(mfccs, x_axis='time', ax=ax)
fig.colorbar(img, ax=ax)
ax.set(title='MFCC')
plt.savefig(os.path.splitext(audio_path)[0] + '_mfcc.png')
plt.close()
# 生成对数梅尔谱图
S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128, fmax=8000)
log_S = librosa.amplitude_to_db(S, ref=np.max)
fig, ax = plt.subplots()
img = librosa.display.specshow(log_S, x_axis='time', y_axis='mel', ax=ax)
fig.colorbar(img, ax=ax)
ax.set(title='对数梅尔谱图')
plt.savefig(os.path.splitext(audio_path)[0] + '_mel_spec.png')
plt.close()
# 遍历数据集目录,生成语谱图、mfcc图、对数梅尔谱图
for root, dirs, files in os.walk(data_path):
for file in files:
if file.endswith('.wav'):
audio_path = os.path.join(root, file)
create_spectrogram(audio_path)
该代码会遍历数据集目录下的所有.wav文件,生成对应的语谱图、mfcc图、对数梅尔谱图,并保存在同一目录下。例如,数据集目录下有一个子目录'cat',该子目录下有一个音频文件'cat.wav',则生成的语谱图、mfcc图、对数梅尔谱图会分别保存为'cat_spectrogram.png'、'cat_mfcc.png'、'cat_mel_spec.png'。
原文地址: https://www.cveoy.top/t/topic/nMQq 著作权归作者所有。请勿转载和采集!