7. 聲音數據增強


數據集和代碼均已上傳到Github中,歡迎大家下載使用。

Github地址:https://github.com/JasonZhang156/Sound-Recognition-Tutorial

如果這個教程對您有所幫助,請不吝貢獻您的小星星Q^Q.


數據增強

這篇博客主要在音頻信號處理領域兩個基礎的數據增強方法:Time StretchPitch Shift。顧名思義,Time Stretch是在時間維度上的一個尺度變換,Pitch Shift是對音調的一個調整,而音調的高低取決於頻率,頻率越高音調越高,因此Pitch Shift可以看做是對頻率的一個尺度變換。Time Stretch 和 Pitch Shift可以通過librosa庫中的effects模塊來實現,來實現下面給出librosa庫的實現方法:

def demo_plot():
    audio = './data/esc10/audio/Dog/1-30226-A.ogg'
    y, sr = librosa.load(audio, sr=44100)
    y_ps = librosa.effects.pitch_shift(y, sr, n_steps=3)
    y_ts = librosa.effects.time_stretch(y, rate=1.2)
    plt.subplot(311)
    plt.plot(y)
    plt.title('Original waveform')
    plt.axis([0, 200000, -0.4, 0.4])
    plt.subplot(312)
    plt.plot(y_ps)
    plt.title('Pitch Shift transformed waveform')
    plt.axis([0, 200000, -0.4, 0.4])
    plt.subplot(313)
    plt.plot(y_ts)
    plt.title('Time Stretch transformed waveform')
    plt.axis([0, 200000, -0.4, 0.4])
    plt.tight_layout()
    plt.show()

demo_plot()

效果圖:

 對上圖作如下說明:

1)第一張圖爲聲音的原始波形圖,第二張圖爲經過Pitch Shift轉換後的波形圖,第三張圖爲經過Time Stretch轉換後的波形圖;

2)從第二張圖可以看出,經過Time Stretch轉換後的波形圖明顯是要向左偏移了很多。實際上,當參數rate大於1時,Time Stretch執行的是一個在時間維度上壓縮的過程,所以視覺上看來是向左偏移了;

3)比較第一張圖和第三張圖,除了聲音波形幅度的變化(聲音幅度變化是幅度譜做線性插值引起的,這裏可以不用考慮,有興趣可以去看下librosa的源碼),我們看不出其他的區別。爲了體現Pitch Shift的效果,我們提高分辨率看一下和原始波形圖的差別,

def demo_plot():
    audio = './data/esc10/audio/Dog/1-30226-A.ogg'
    y, sr = librosa.load(audio, sr=44100)
    y_ps = librosa.effects.pitch_shift(y, sr, n_steps=6)   # n_steps控制音調變化尺度
    plt.subplot(311)
    plt.plot(y)
    plt.title('Original waveform')
    plt.axis([88000, 94000, -0.4, 0.4])
    plt.subplot(312)
    plt.plot(y_ps)
    plt.title('Pitch Shift transformed waveform')
    plt.axis([88000, 94000, -0.4, 0.4])
    plt.tight_layout()
    plt.show()

demo_plot()

從上圖可以看出,經過Pitch Shift轉換後的波形明顯比原始波形的頻率更高一些(n_steps>0),也就是音調變大了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章