1. 采样(sampling):一个信号通过度量它在特定时刻的振幅来进行抽样。
采样的目的是还原出声音的波形。在足够密集的采样频率下,人声的每个波形都能有多于两个的采样,这样的采样记录下说话人声音的频率和振幅(amplitude)。
在高频声音波形下,每个波形可能只有2-3个采样;而在低频声音波形下,每个波形可能有5-6个采样,每个采样宽度范围设定好,如paInt16。这样就可以在采样率固定的情况下,体现出声音波形的高低频/音高、高低振幅/响度。
----拓展:
- 波形图,即人说话的声波,横轴:时间;纵轴:振幅
- 声谱图,横轴:频度,纵轴:振幅
- 频谱图,横轴:时间,纵轴:频度
----拓展:声波特征:频度(frequency)和振幅(amplitude)
- 频度(频率),又称为周(cycle):是1s之内完整波重复的次数,如:某段音频在0.11s之内有28个完整的波形,那波的频度是255hz或255周
- 振幅,表示空气压力变化的大小。正轴表示该时刻空气压力比较高,0值表示空气压力正常,负值表示低于空气压力(我也不知道他们怎么测得)
- 感知特性:音高(pitch)和响度(loudness)。音高与频度有关的感知特性;响度是与振幅有关的感知特性
- 注意:实际音频中波形虽然完整连续,但他们不规则不均匀
- 帧(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