2017-08-16 126 views
2

我創建了這個代碼的頻譜:如何從譜圖提取numpy陣列特徵?

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輸出)

+0

的可能的複製[檢索matplotlib圖XY數據(https://stackoverflow.com/questions/20130768/retrieve-xy-data-from-matplotlib-figure) –

回答

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() 
+0

謝謝!這個對我有用 – Timebird