簡體   English   中英

為什么librosa圖與matplotlib和audacity不同

[英]Why does librosa plot differ from matplotlib and audacity

我正在從文件中讀取pcm數據,然后將其繪制。 我已經注意到,情節在librosa.display.waveplot,情節和大膽之間變化。

這是代碼和圖像

%matplotlib inline
import matplotlib.pyplot as plt
import librosa.display
import numpy as np
import IPython.display as ipd
import matplotlib.pyplot as plt
import numpy, pylab

# the pcm file is 32le integer with a sampling rate of 16KHz
pcm_data = np.fromfile('someaudio.pcm', dtype=np.int32)

# the sample has the same sound as audacity
ipd.Audio(data=pcm_data, rate=16000) 

# all of these give the same resulting plot
plt.figure()
plt.subplot(3, 1, 1)
#librosa.display.waveplot(pcm_data, sr=16000)
#librosa.display.waveplot(pcm_data.astype('double'), sr=16000)
librosa.display.waveplot(pcm_data.astype('float'), max_points=None, sr=16000, max_sr=16000)

這個結果看起來像 在此處輸入圖片說明

# alternatively plot via matplotlib
pylab.plot(pcm_data)
pylab.show()

這個結果看起來像 在此處輸入圖片說明

matplotlib的結果看起來很膽大 在此處輸入圖片說明

matplotlibAudacity顯示了實際的信號樣本,顯然在記錄的后半段全部為負。

另一方面, librosa顯示了絕對信號的包絡,如其文檔中所述

繪制波形的幅度包絡線。

如果y是單聲道的,則在[-abs(y), abs(y)]之間繪制一條填充曲線。

在這種情況下, y是信號。

有效地導致沿x軸的鏡像效果,這就是librosa圖對稱的原因。 matplotlibAudacity顯然沒有這樣做。

有人可能會爭辯說, librosa的行為有效地隱藏了非對稱波形 (即,正樣本和負樣本的幅度不相似),這在野外是可能的。 soundonsound.com

這種不對稱主要是由於兩件事,第一是諧波復信號中基波分量和不同諧波分量之間的相對相位關系。 在組合具有不同相位關系的不同頻率信號時,結果通常是明顯不對稱的波形,而且波形的不對稱性也經常隨時間變化和發展。 這就是疊加復雜的相關信號時發生的情況。

也許還會有人爭辯說,不對稱性中沒有很多有用的信息,因為人類通常無法感知。

如果您認為librosa的行為是意外的或錯誤的,我建議您填寫錯誤報告,並尋求解釋。

我通過librosa論壇收到了一些答案。 這是Brian McFee的一個答案:

在Vincent發表的內容之后,librosa的波動圖未直接顯示樣本,原因有兩個:

  • 通過將點保持在比可視化所需的分辨率更高的分辨率,將會消耗內存

  • 高頻噪聲會掩蓋它。

取而代之的是,librosa的繪圖儀的工作方式與典型的DAW相似,其中音頻信號出於可視化目的而被下采樣,並且包絡線被可視化而不是信號本身。 這些步驟是通過顯示max(abs(y [i:i + k]))而不是樣本y [i],y [i + 1],... y [i + k]完成的。 下采樣窗口的長度由波形圖的參數控制。

由於上軸和下軸的信息是通過吸收來丟棄的,因此我們使用該軸來分離立體聲信號中的左右聲道(左上,右下)。 在單聲道信號中,包絡線沿y軸反射,從而產生您報告的對稱圖形。

不同的DAW在執行這些步驟時會稍有不同,一旦放大到一定范圍,可行的實現將還原為樣圖。 Matplotlib並不容易做到這一點,因此我們在這里選擇了這種折衷方案。 如果您想要樣本精確的繪圖,建議您使用pyplot.plt()。

暫無
暫無

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

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