我希望了解用于音频分析的各种频谱图。我想将音频文件转换为10秒的块,为每个块生成频谱图,然后使用CNN模型在这些图像之上进行训练,以查看它们的好坏。
我看了线性,对数,梅尔等,并在某处阅读了基于梅尔的频谱图最适合用于此情况。但是没有适当的可验证信息。我使用了以下简单的代码来生成梅尔频谱图。
y,sr= librosa.core.load(r'C:\Users\Tej\Desktop\NoiseWork\NoiseOnly\song.wav')
S = librosa.feature.melspectrogram(y=y, sr=sr)
librosa.display.specshow(librosa.power_to_db(S, ref=np.max))
我的问题是,哪个频谱图最能代表使用CNN训练的音频文件的功能?我使用了线性,但有些音频文件的线性频谱图似乎是相同的
答案 0 :(得分:1)
对数缩放的梅尔谱图是当前与卷积神经网络一起使用的“标准”。这是2015-2018年间音频事件检测和音频场景分类文献中最常用的。
为了更恒定地改变幅度,通常应用归一化。要么是整个剪辑,要么是对窗口进行分类。通常,均值/标准差归一化工作正常。
但是从CNN的角度来看,不同光谱仪之间的差异相对较小。因此,如果两个或多个频谱图基本相同,这不太可能解决您的问题。
答案 1 :(得分:0)
要补充说明,我建议您仔细阅读A Comparison of Audio Signal Preprocessing Methods for Deep Neural Networks on Music Tagging,其中包括Keewoo Choi,GyörgyFazekas,Kyunghyun Cho和Mark Sandler。
对于他们的数据,他们在简单的STFT和质谱图之间实现了几乎相同的分类精度。因此,如果您不介意进行预处理,则质谱图显然是缩小尺寸的明显赢家。作者还发现,正如jonner所提到的,对数缩放(本质上将幅度转换为db缩放)提高了准确性。您可以使用Librosa轻松地做到这一点(使用您的代码),如下所示:
y,sr= librosa.core.load(r'C:\Users\Tej\Desktop\NoiseWork\NoiseOnly\song.wav')
S = librosa.feature.melspectrogram(y=y, sr=sr)
S_db = librosa.core.power_to_db(S)
对于db缩放后的规范化,似乎取决于您的数据命中或未命中。从上面的论文中,作者发现使用各种标准化技术对其数据几乎没有区别。
最后要提到的是一种称为“每通道能量归一化”的新方法。我建议阅读Per-Channel Energy Normalization: Why and How,作者是Vincent Lostanlen,Justin Salamon,Mark Cartwright,Brian McFee, Andrew Farnsworth,Steve Kelling和Juan Pablo Bello。不幸的是,有些参数需要根据数据进行调整,但在许多情况下似乎要好于对数声谱图。您可以像这样在Librosa中实现它:
y,sr= librosa.core.load(r'C:\Users\Tej\Desktop\NoiseWork\NoiseOnly\song.wav')
S = librosa.feature.melspectrogram(y=y, sr=sr)
S_pcen = librosa.pcen(S)
尽管,就像我提到的那样,在pcen中有一些参数需要调整!如果您有兴趣,可以通过Librosa's documentation on PCEN入门。