语音指人类发出的声音,其频率集中在1000Hz左右,范围为30-3000Hz 语法有结构,语音也有一定的结构,包含有丰富的信息, 同时也有一定的随机性/边界,存在岐义/模糊的地方 其中音频信号,能听到的声音频率范围为20Hz~20KHz
模拟信号
模拟信号是指 连续时间和连续幅度 变化的信号,例如模拟语音信号。 模拟信号的特点是信号的幅度、频率或相位随着时间的变化而变化, 因此可以用来传输连续的信息。 但是,模拟信号容易受到 噪声和干扰 的影响,从而导致信号 失真和变形。 此外,模拟信号的 存储和传输 也比较困难,因为它们需要保持连续性。
在模拟信号的处理中,需要注意以下几点: 1. 噪声和干扰的抑制: 由于模拟信号容易受到 噪声和干扰 的影响,因此需要对这些干扰进行抑制。 常用的方法包括 滤波、放大和抽样 等。 2. 信号的放大: 由于模拟信号的幅度会随着时间的变化而变化,因 此需要对信号进行放大,以保证其在传输过程中不会 失真或变形。 3. 信号的调制和解调: 在模拟通信系统中,通常需要对信号进行调制和解调, 以便将其转换为适合传输的形式,并在接收端将其还原为原始信号
数字信号
数字信号是指离散时间、离散幅度的信号,例如数字音频和视频信号。 数字信号的特点是信号的状态只有两种,即高电平和低电平,因此可以用来传输二进制数据。 数字信号具有抗干扰能力强、传输可靠、易于存储和处理等优点。 但是,数字信号需要经过采样、量化和平滑等处理过程,因此会导致一定的 失真和噪声。
在数字信号的处理中,需要注意以下几点: 1. 采样和量化: 在将模拟信号转换为数字信号时,需要进行采样和量化处理。 采样是指将连续时间信号转换为离散时间信号, 而量化是指将连续幅度信号转换为离散幅度信号。 采样和量化的精度决定了数字信号的质量。 2. 平滑处理: 由于数字信号在采样和量化过程中会产生一定的 失真和噪声,因此需要进行平滑处理。 平滑处理是指对数字信号进行加工处理,以减小失真和噪声的影响。 常用的平滑处理方法包括低通滤波、插值和预测等。 3. 编码和解码: 在数字通信系统中,通常需要对数字信号进行编码和解码处理。 编码是指将二进制数据转换为数字信号,而解码是指将数字信号还原为原始的二进制数据。 编码和解码的处理过程需要遵循一定的协议和标准。
失真
采样率大概是音频的两倍的音频,不失真, 音频信号频率范围为 20-20KHz ,所以48KHz的频率不失真
波形文件:数字信号
声波 --> 空气传播 --> 麦克风接收 : 将空气的压力波动 由传感器转换为 电压信号 ,也就是模拟语音信号 持续传递过来的电压信号,在时间轴上展开后是一段高低起伏的波状图形, 采样: 每秒采集一定的数据点来代表这个波形曲线,比如每秒采16000个点, 每个点的y值对应电压的大小,x值对应记录的时刻, 每秒采样点数为采样率,其单位为Hz 量化: 存储声音是为了播放,播放由外部设备的驱动实现, 外部设备处理的是二进制数据,所以需要将0.1,0.2,0.5 这样的电压数据转化为二进制, 将电压分段,比如,分四段的话,可以用11,10,01,00 表示 3,2,1,0, 因为使用了两位二进制来表示,所以此时量化位数为2, 量化位数通常为4,8,16,32, 每秒音频占用字节数=每秒的样本个数(采样率)×量化位数 比如量化位数为16,那么每个样本点都是以16位二进制表示, 一个二进制是0或1,在文件中占一个字节的长度, 2的16方=65536,即将电压分为65536个小格格, 采样率48KHz时,大约2个样本点分散到3个小格中, 换句话讲,大概率每个样本点对应着一个不同的数值
比如下面的这个音频: ffmpeg -i ./1281.wav Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, mono, s16, 768 kb/s PCM编码,48kHz,量化位数16,48k*16=768kb/s mono:单声道 s16是ffmpeg中的一个单位,除了s16还有U8(无符号整型8bit)、S32(整型32bit)、FLT(单精度浮点类型)、DBL(双精度浮点类型)、S64(整型64bit) 二进制编码 把量化结果,即单个声道的样本,以二进制的码字进行存储 其中有两种存放方式: 整形:Two's complement code; 浮点类型:Floating point encoding code。 大多数格式的PCM样本数据使用整形来存放,而在对一些对精度要求高的应用方面,则使用浮点型来表示PCM 样本数据。
帧frame
将一定数量的样本点(比如128个)组成一个块, 将一定数量的块(比如960、1024、2048、4096等)组成一帧,代表一个声音单元 以双声道为例,分左声道右声道,用L/R表示,那么一帧的格式有下面两种: 交错(interleaved):LRLRLR,一个左声道的块后面跟一个右声道的块 平面(planar):LLLRRR,一个声道存放完毕后再放另外一个声道 FFmpeg中 AVFrame 结构体中的 nb_samples: 一帧中单个声道的音频样本数量。 //number of audio samples (per channel) described by this frame int nb_samples;
语音信号/音频文件
后续称这样的信号为 语音信号,对应的计算机上的文件后缀通常有: .wav .mp4 ... 语音信号,存储到计算机上的音频文件,实际上就是一串连续的数据, 文件格式不同,它的头格式不同, 数据部分就是一个列表,在时间与原声对应
频率即特征
振幅:声音大小,声波最高位置偏离中心的距离 频率:说话的内容 气流流过 气管,嗓子,口腔,口形(比如 啊 嘴巴张的较圆,艾 嘴巴扁平), 每流过一个地方,气流就会形成不同的振动,可简单理解为产生一个频率的声波, 声波从口形出来后,就是多个频率的复合音,只有一个频率叫纯音 一个单词/字 对应的声波 有多个频率,这些频率就是音频的特征 音频,由电子设置播放,如果感觉声音小,可以调节一下音量, 这音量对应振幅,所以振幅在AI学习时,远没有频率重要
波的合成
y = sin(x) y = sin(2x) 这两种频率的波进行合成 y = sin(x) + sin(2x) 形成的新波形会多出2个弯折,这让波形显得不怎么规整 from matplotlib import pyplot as plt import numpy as np x=np.arange(20,step=0.1) y = np.sin(x) plt.plot(x,y) y = np.sin(2*x) plt.plot(x,y) y =np.sin(5*x)+ np.sin(2*x) + np.sin(x) plt.plot(x,y)
波的分解
将合成的波(不规整的波)分解成一系列 y=asin(bx + c) 的和 合成是精准的,分解是模糊的/近似的
语音时域信号
y = 语音信号(time) x轴是时间 y轴是语音信号 这样的图为 语音的时域信号
语音频谱
将声波分解成多个单频的信号 x轴是时间 y轴是频率 这样的图为 频谱 一个单词的发音为一个时间片 该时间片内有多个不同频率的波形 会看到一段段条纹,因此也叫 频谱
语音数字信号特征
从原来的声波数字化存储之后,其信号也带有原语音的特征 提取特征的维度主要有两个: 1. 不同发音对应的数字信号的区别 2. 发音在序列中的含义
时域特征
不同发音对应的数字信号 形状高低起伏的相对比例, 峰值 情况较复杂,基于此类的方法已不是主流
频谱特征
将一个复合声波分解成多个音频波 MFCC,GMM构建的特征空间中,不同的发音处于不同的位置, 这相当于将不同内容的发音区分开了 机器学习处理序列的算法有HMM
音频相关知识:声道、采样率、采样位数、样本格式、比特率 ffmpeg 计算每帧有多少个样本