海豚音

今天下午,收到這學期“信號與系統”課程學生微信發送的一個問題。他可能是在準備課程期末小輪文時,對於自己實驗結果感到了驚訝。

老師,這是我處理的一段音頻,我有點搞不懂這樣操作下來頻域圖的橫軸是什麼,也不太像Hz呀?
那我這樣處理繪圖的時候就應該已經讓橫軸是Hz了吧? 爲什麼頻率會有好幾千的,這段就是我錄了個“1、2”

▲ 微信提問:對於FFT的結果該如何解釋?

▲ 微信提問:對於FFT的結果該如何解釋?

他對於自己採樣得到的語音進行快速傅里葉變換(FFT),然後顯示出信號的雙邊頻譜。一般情況下,人發出的聲音在300~3400Hz,所以變換出來的頻率出現幾千赫茲沒有毛病。

聽完我的解釋,他迴應道:

啊? 是這樣啊, 我以爲人的聲音就最高几百。 謝謝老師。

雖然我們天天說話,天天聽別人說話,如果不是有意測量,的確我們會忽視一個問題,那就是我們的嘴巴發出的聲音究竟能有多高。這也就是那位同學感到驚詫的地方,他原以爲人的聲音只有幾百赫茲。

當然,不是爲了特殊的效果,人的聲調不會太高。在歌唱中引入高頻,超高音則會起到神奇的效果。這其中數俄羅斯流行樂男歌手維塔斯(Vitas)的那海豚音最爲令人着迷。2000年維塔斯在克里姆林宮因演唱《歌劇2》而引起俄羅斯歌壇的轟動,從此被稱爲“海豚音王子”。


那麼,維塔斯的海豚音究竟有多高呢?在他的演唱中,他會輕而易舉唱到D6,對應着2349Hz。下面顯示了他的歌唱音頻的波形以及對應的頻譜。可以清晰看到其中大約在2350處以及二次諧波(4700Hz)的峯值變化。

下面是將聲音的頻譜隨着時間的變化生成對應的時頻聯合分佈,反映了在歌唱過程中音調的轉換起伏。
▲ Vitas海豚音的時頻聯合分佈

▲ Vitas海豚音的時頻聯合分佈

在歌唱中,還有一種奇特的高音演唱方法,就是我國蒙古族流行的“呼麥”。一個歌手純粹用自己的發聲器官,在同一時間裏唱出兩個聲部。呼麥聲部關係的基本結構爲一個持續低音和它上面流動的旋律相結合。又可以分爲“泛音呼麥”、“震音呼麥”、“複合呼麥”等

▲ 呼麥演唱

▲ 呼麥演唱

下面是一段呼麥歌曲的波形和對應的頻譜。注意,其中所有的頻率分量均來自於人聲音。可以看到其中的頻率分量更加的豐富,最高頻率分量都超過了5000Hz。

import wave
waveid = 4
#------------------------------------------------------------
filename = tspgetdopfile(waveid)
printf(filename)
wf = wave.open(filename, 'rb')
waveparams = wf.getparams()
totalframes = waveparams.nframes
fs = waveparams.framerate
wavedata = wf.readframes(totalframes)
wavearray = frombuffer(wavedata, dtype=int16)[0::2]

plt.specgram(wavearray, Fs=fs, NFFT=1024, noverlap=1000)

▲ 一段呼麥的時頻聯合分佈

▲ 一段呼麥的時頻聯合分佈

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