• 语音识别(一):特征抽取~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
    天狼啸月
  • 相关阅读:
    在dubbo工程中,使用druid监控
    docker在windows下上传文件到容器
    Docker容器Tomcat部署war包
    You are using the runtime-only build of Vue where the template compiler is not available. Either pre
    Vue项目用了脚手架vue-cli3.0,会报错You are using the runtime-only build of Vue where the template compiler is not available
    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
    Github上传代码菜鸟超详细教程
    23种设计模式
    java面试
    latex输入希腊字母
  • 原文地址:https://www.cnblogs.com/yuyongsheng1990/p/9355037.html
Copyright © 2020-2023  润新知