海豚音

今天下午,收到这学期“信号与系统”课程学生微信发送的一个问题。他可能是在准备课程期末小轮文时,对于自己实验结果感到了惊讶。

老师,这是我处理的一段音频,我有点搞不懂这样操作下来频域图的横轴是什么,也不太像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)

▲ 一段呼麦的时频联合分布

▲ 一段呼麦的时频联合分布

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