MFCC 频谱图与 Scipi 频谱图
MFCC spectrogram vs Scipi Spectrogram
我目前正在研究卷积神经网络 (CNN),并开始研究不同的频谱图:
关于 Librosa Plot (MFCC),频谱图与其他频谱图有很大不同。我看了一下 comment posted here 谈论“未详细说明”的 MFCC 频谱图。如何完成那里给出的解决方案发布的任务(Python 代码明智)?
另外,当图像通过 CNN 时,这个分辨率低的 MFCC 图会遗漏任何干扰吗?
对于执行 Python 中提到的代码 here 的任何帮助,我们将不胜感激!
这是我的 Python 频谱图比较代码,这是正在分析的 wav 文件的 location。
Python代码
# Load various imports
import os
import librosa
import librosa.display
import matplotlib.pyplot as plt
import scipy.io.wavfile
#24bit accessible version
import wavfile
plt.figure(figsize=(17, 30))
filename = 'AWCK AR AK 47 Attached.wav'
librosa_audio, librosa_sample_rate = librosa.load(filename, sr=None)
plt.subplot(4,1,1)
xmin = 0
plt.title('Original Audio - 24BIT')
fig_1 = plt.plot(librosa_audio)
sr = librosa_sample_rate
plt.subplot(4,1,2)
mfccs = librosa.feature.mfcc(y=librosa_audio, sr=librosa_sample_rate, n_mfcc=40)
librosa.display.specshow(mfccs, sr=librosa_sample_rate, x_axis='time', y_axis='hz')
plt.title('Librosa Plot')
print(mfccs.shape)
plt.subplot(4,1,3)
X = librosa.stft(librosa_audio)
Xdb = librosa.amplitude_to_db(abs(X))
librosa.display.specshow(Xdb, sr=sr, x_axis='time', y_axis='hz')
# plt.colorbar()
# maximum frequency
Fs = 96000.
samplerate, data = scipy.io.wavfile.read(filename)
plt.subplot(4,1,4)
plt.specgram(data, Fs=samplerate)
plt.title('Scipy Plot (Fs=96000)')
plt.show()
MFCC 不是频谱图(时间-频率),而是“倒谱图”(时间-倒谱)。直观地比较 MFCC 和频谱图并不容易,我也不确定它是否有用。如果您希望这样做,则通过反向 DCT 反转 MFCC 以取回 (mel) 频谱图。您可能可以为此使用 mfcc_to_mel 。
这将允许估计在 MFCC 正向转换中丢失了多少 data。但它可能无法说明有多少与您的任务相关的信息已经丢失,或者不相关的噪音减少了多少。
这需要针对您的任务和数据集进行评估。最好的方法是尝试不同的设置,并使用您关心的评估指标来评估性能。
请注意,对于应用于频谱图的典型 2D CNN,MFCC 可能不是很好的表示。那是因为 locality 已经减少:在 MFCC 域中,彼此接近的频率在垂直轴上不再彼此相邻。并且由于 2D CNN 的内核局部性有限(早期通常为 3x3 或 5x5),这会降低模型的性能。
我目前正在研究卷积神经网络 (CNN),并开始研究不同的频谱图:
关于 Librosa Plot (MFCC),频谱图与其他频谱图有很大不同。我看了一下 comment posted here 谈论“未详细说明”的 MFCC 频谱图。如何完成那里给出的解决方案发布的任务(Python 代码明智)?
另外,当图像通过 CNN 时,这个分辨率低的 MFCC 图会遗漏任何干扰吗?
对于执行 Python 中提到的代码 here 的任何帮助,我们将不胜感激!
这是我的 Python 频谱图比较代码,这是正在分析的 wav 文件的 location。
Python代码
# Load various imports
import os
import librosa
import librosa.display
import matplotlib.pyplot as plt
import scipy.io.wavfile
#24bit accessible version
import wavfile
plt.figure(figsize=(17, 30))
filename = 'AWCK AR AK 47 Attached.wav'
librosa_audio, librosa_sample_rate = librosa.load(filename, sr=None)
plt.subplot(4,1,1)
xmin = 0
plt.title('Original Audio - 24BIT')
fig_1 = plt.plot(librosa_audio)
sr = librosa_sample_rate
plt.subplot(4,1,2)
mfccs = librosa.feature.mfcc(y=librosa_audio, sr=librosa_sample_rate, n_mfcc=40)
librosa.display.specshow(mfccs, sr=librosa_sample_rate, x_axis='time', y_axis='hz')
plt.title('Librosa Plot')
print(mfccs.shape)
plt.subplot(4,1,3)
X = librosa.stft(librosa_audio)
Xdb = librosa.amplitude_to_db(abs(X))
librosa.display.specshow(Xdb, sr=sr, x_axis='time', y_axis='hz')
# plt.colorbar()
# maximum frequency
Fs = 96000.
samplerate, data = scipy.io.wavfile.read(filename)
plt.subplot(4,1,4)
plt.specgram(data, Fs=samplerate)
plt.title('Scipy Plot (Fs=96000)')
plt.show()
MFCC 不是频谱图(时间-频率),而是“倒谱图”(时间-倒谱)。直观地比较 MFCC 和频谱图并不容易,我也不确定它是否有用。如果您希望这样做,则通过反向 DCT 反转 MFCC 以取回 (mel) 频谱图。您可能可以为此使用 mfcc_to_mel 。 这将允许估计在 MFCC 正向转换中丢失了多少 data。但它可能无法说明有多少与您的任务相关的信息已经丢失,或者不相关的噪音减少了多少。 这需要针对您的任务和数据集进行评估。最好的方法是尝试不同的设置,并使用您关心的评估指标来评估性能。
请注意,对于应用于频谱图的典型 2D CNN,MFCC 可能不是很好的表示。那是因为 locality 已经减少:在 MFCC 域中,彼此接近的频率在垂直轴上不再彼此相邻。并且由于 2D CNN 的内核局部性有限(早期通常为 3x3 或 5x5),这会降低模型的性能。