语音识别(一):特征抽取~1.1 抽样(sampling)和量化(quantization)
1. 采樣(sampling):一個信號通過度量它在特定時刻的振幅來進行抽樣。
采樣的目的是還原出聲音的波形。在足夠密集的采樣頻率下,人聲的每個波形都能有多于兩個的采樣,這樣的采樣記錄下說話人聲音的頻率和振幅(amplitude)。
在高頻聲音波形下,每個波形可能只有2-3個采樣;而在低頻聲音波形下,每個波形可能有5-6個采樣,每個采樣寬度范圍設定好,如paInt16。這樣就可以在采樣率固定的情況下,體現出聲音波形的高低頻/音高、高低振幅/響度。
----拓展:
- 波形圖,即人說話的聲波,橫軸:時間;縱軸:振幅
- 聲譜圖,橫軸:頻度,縱軸:振幅
- 頻譜圖,橫軸:時間,縱軸:頻度
----拓展:聲波特征:頻度(frequency)和振幅(amplitude)
- 頻度(頻率),又稱為周(cycle):是1s之內完整波重復的次數,如:某段音頻在0.11s之內有28個完整的波形,那波的頻度是255hz或255周
- 振幅,表示空氣壓力變化的大小。正軸表示該時刻空氣壓力比較高,0值表示空氣壓力正常,負值表示低于空氣壓力(我也不知道他們怎么測得)
- 感知特性:音高(pitch)和響度(loudness)。音高與頻度有關的感知特性;響度是與振幅有關的感知特性
- ----[轉]負分貝:聲強小于2×10-5Pa的聲音響度的都為負分貝數了。就像開爾文溫標轉化為攝氏溫標一樣,開爾文溫標沒有負數,攝氏溫標就有負數了。例如,冬天哈爾濱室外溫度-37℃,這個負數溫度也是有溫度的,只是溫度低而已。有些人能夠聽到-10dB的聲音呢!人耳就是天生的分貝轉換器。潛水艇上的聽音器可以聽到水下100m外的一只蝦吃食物的聲音為-80dB,20英里外一個人的說話聲為-30dB。所以,負分貝的聲音是人耳聽不到的,但是,它是客觀存在的
- 注意:實際音頻中波形雖然完整連續,但他們不規則不均勻
- 幀(frame):一般為10s-30ms,通常取20ms,在極短時間內,聲音波形可以被認為是均勻的
----采樣率(sampling rate):每秒提取的樣本數目。常用的采樣率有8000hz和16000hz
- 根據奈奎斯特定理:采樣頻率不應低于聲音信號最高頻率的兩倍,這樣才能把以數字表達的聲音還原成原來的聲音。
- 即:為了精確地測量聲波,每周(每個聲波)至少需要來嗯個采樣:一個采樣用于測來嗯聲波的正側部分,一個用于測量聲波的負側部分。如果每周的樣本多于兩個,將能夠增加振幅的精確度,如果樣本少于兩個,聲波就會遺漏部分頻度
- 即,可能測量到的最大頻度的波九十那些頻度等于采樣率一般的波(因為每個波需要兩個采樣)
- 如:人類語音的頻度都低于10000hz,為了保證準確,必須有20000hz的抽樣。注意:這里的10000hz是聲波頻度,而20000hz是采樣次數頻度,這兩個雖然都是赫茲,但是別弄混了,一個是音頻完整波形重復次數,一個是采樣次數
2. 量化
量化就是用整形值存儲采樣測得的振幅值。在python~pyaudio中,有paInt8、16、32等采樣位數,8比特bit采樣能夠給出的整形采樣范圍是-128~127,16位比特能夠給出的整形范圍是-32768~32767。
在pyaudio.stream錄音采樣過程中,
采樣數sample_num=sample_rate * frame_duration_ms/1000?? ;?? 采樣字節大小/長度sample_size=sample_num * sample_width/8
采樣寬度有8位、16位、32位,如果sample_width=paInt16,每個采樣是兩個字節,160個采樣的sample_size是320,所以要注意frame_num和len(chunk),chunk = pyaudio.stream.read(frame_num)的長度。
參考:
- Daniel Jurafsky, James H. Martin, 《speech and language processing》, 馮志偉, 譯,《自然語言處理綜論》,第七章--HMM與語音識別
- https://blog.csdn.net/hh_1206/article/details/77540379
?
總結
以上是生活随笔為你收集整理的语音识别(一):特征抽取~1.1 抽样(sampling)和量化(quantization)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Adobe Auditon使用功能(一)
- 下一篇: 语音识别(二):特征抽取~1.2 mfc