簡體   English   中英

Librosa - 音頻頻譜圖/頻率分檔到頻譜

[英]Librosa - Audio Spectrogram/Frequency Bins to Spectrum

我已經閱讀了幾天,但一直沒有找到解決方案......我能夠使用以下方法構建 Librosa 頻譜圖並提取幅度/頻率數據:

audio, sr = librosa.load('short_piano melody_keyCmin_110bpm.wav', sr = 22500)
spectrum = librosa.stft(audio, n_fft=2048, window=scipy.signal.windows.hamming)
D = librosa.amplitude_to_db(np.abs(spectrum), ref=np.max)
n = D.shape[0]
Nfft = 1+2*(n-1)
freq_bins = librosa.fft_frequencies(sr=sr, n_fft=Nfft)

但是,我無法將 D 和 freq_bins 中的數據轉換回頻譜。 一旦我能夠做到這一點,我就可以將新頻譜轉換為 .wav 文件並收聽我重建的音頻......任何建議將不勝感激。 謝謝你。

當我正確回答您的問題時,您想根據幅度值重建實/虛頻譜。 為此,您將需要相位組件,然后是所有簡單的復數運算。 你應該知道STFT的output是復數數組,幅值是每個數的絕對值,相位是每個數的角度

這是一個時域信號轉換為幅度/相位並返回而不修改它的示例:

% get the complex valued spectrum from a sample
spectrum = librosa.stft(audio, n_fft=2048,window=scipy.signal.windows.hamming) 

# get magnitude and phase from the complex numbers
magnitude = np.abs(spectrum)
phase = np.angle(spectrum)

# reconstruct real/imaginary parts from magnitude and phase
spectrum = magnitude * np.exp(1j*phase)

# transform back to time-domain

在您的情況下,您當然應該首先將分貝值轉換回幅度值。 即使沒有使用 librosa 的經驗,我敢肯定還有一個 function 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM