如何从谱图中提取numpy数组特征?

时间:2017-08-16 08:16:20

标签: python numpy matplotlib signal-processing librosa

我用这段代码创建了一个谱图:

D = librosa.amplitude_to_db(librosa.stft(y), ref=np.max)
librosa.display.specshow(D, y_axis='linear', x_axis='time')
plt.colorbar(format='%+2.0f dB')
plt.title('Log-frequency power spectrogram')
plt.savefig('sp.png')
plt.show()

如何从此图表中提取时间数组和数据库数组? (.csv输出需要它)

1 个答案:

答案 0 :(得分:1)

您可以使用与librosa相同的函数绘制频谱图以获得沿轴的阵列。 D已经是" db数组"。

import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np

y, sr = librosa.load(librosa.util.example_audio_file())
#sr = 22050 #default sampling rate
D = librosa.amplitude_to_db(librosa.stft(y), ref=np.max)

# yaxis
n = D.shape[0]
yout = librosa.fft_frequencies(sr=sr, n_fft=1+(2 * (n - 1)) )
print yout, yout.min(), yout.max()

#xaxis
m = D.shape[1]
hop_length=512

xout = librosa.frames_to_time(np.arange(m+1), sr=sr, hop_length=hop_length)
print xout, xout.min(), xout.max()


librosa.display.specshow(D, sr=sr, hop_length=hop_length, y_axis='linear', x_axis='time')
plt.colorbar(format='%+2.0f dB')
plt.title('Log-frequency power spectrogram')
plt.savefig('sp.png')
plt.show()