《声纹技术 从核心算法到工程实践》读书笔记 第二章

2.1 音频

2.2 声学基础

2.2.3频谱

任意复杂的周期函数,通过傅里叶变化,都可以表示为一系列不同频率的正弦波与余弦波的和
频谱图——横轴为这些正弦波分量的频率,纵轴为这些正弦波分量的振幅

2.2.4 听觉与感知

1.基音和基频
基频是一个波形的最低频率分量,通常是由周期性波形的第一个谐波确定的频率
2.响度与声强
声音的大小——声强

功率——
P = 1 T ∫ 0 T ( f ( t ) ) 2 d t P=\frac{1}{T}\int\limits_0^T{\left( f\left( t \right) \right) ^2dt} P=T10T(f(t))2dt
声强便可以理解为单位面积的声音功率,并通过对数定义
L d B = 10 log ⁡ 10 ( P P 0 ) L_{dB}=10\log _{10}\left( \frac{P}{P_0} \right) LdB=10log10(P0P)
分贝——dB

声强也用声音所产生的声压来定义
L d B = 20 log ⁡ 10 ( P r m s P r e f ) L_{dB}=20\log _{10}\left( \frac{P_rms}{P_ref} \right) LdB=20log10(PrefPrms)
prms 是声压的均方根,pref是人耳能听到的最小声压

3.共振峰
当驱动物体振动的力的频率与物体的固有频率相等时,物体振动的振幅回答道最大值
人说话会有多个固有频率,在早期的声纹识别研究中,共振峰也常做为除了基频和声强的主要语音特征来构建声纹识别系统

2.2.5 听觉的非线性

1.人耳构造中的非线性
非线性体现在:对频率感知的非线性,以及对声强感知的非线性

2.巴克刻度
将人耳可以听见的频率范围划分成24个频率群,每个频率群由中心频率,截止频率和带宽
500hz以下接近线性,500hz以上接近对数函数
巴克刻度用于计算感知线性编码特征,使用关键频带分析

3.梅尔刻度
mel scale——melody
梅尔刻度是严格连续单调递增,任何两个不同的频率melscale也不一样
m = 2595 log ⁡ 10 ( 1 + f / 700 ) m=2595\log _{10}\left( 1+f/700 \right) m=2595log10(1+f/700)
梅尔谱是连续的,巴克是离散的

4.其他频率感知非线性变换
基于等效矩形带宽(ERB)

5.声强感知的非线性
人耳对高振幅信号的差距不如对低振幅信号的差距那么敏感
因此在音频信号处理系统中会对信号的振幅应用一个非线性函数——对数函数、幂函数

2.3 音频信号的基础概念

2.3.1 模拟音频信号

1.信号采集 ——麦克风
2.信号传输——耳机线
音频设备的接口:TS/TRS/TRRS
t=tip r=ring s=sleeve(套)
3.实践无失真音频传输

2.3.2 模拟转数字:采样与量化

由声卡完成——ADC DAC
1.采样
按照固定的频率对模拟信号的振幅进行取值——采样率

对于一个周期信号而言,要想准确地度量一个信号,则需要在每个周期进行至少两次采样;对波峰进行一次,对波谷进行一次。
每个周期采样越多,能更准确重建原始信号

定理2:给定一个采样率,我们所能重建的周期信号的频率是该采样率的一半,这个频率是奈奎斯特频率

语音信号中,大部分信息都在10000Hz以下,通常20000Hz的采样率足够保留这些信息

2.量化
将实数域的振幅转化成整数——量化
量化精度等于相邻两个整数所表示的实数的差值——如果两个实数的差距小于这个差值就被量化为同一个整数
量化的具体方法很多种,按精度分为8位量化/16/32
按量化后的整数是否有符号又划分
有符号8位 -128~0 ~127
2 8 − 1 = 128 − 1 = 127 2^{8-1}=128 -1 = 127 281=1281=127

2.3.3 音频编码

1.线性脉冲编码
直接将采样过后的振幅进行量化——脉冲编码调制(PCM)
如果量化相邻整数表示的信号的差值是恒定的,则称为线性脉冲编码
量化精度在信号的取值范围中是一致的

2.非线性脉冲编码
由于人耳对声强的感知非线性
高振幅的差距远不如对低振幅信号的差距那么敏感——对低振幅用较高的精度,而对高振幅用较低的精度

非线性脉冲编码最简单的做法便是对信号的取值进行对数变换
先对信号应用对数函数,在进行线性编码——在解码的时候也应用指数函数进行逆变换
最常用的非线性脉冲编码为μ-law变换和A-law变换

μ-law
F ( x ) = sgn ( x ) ln ⁡ ( 1 + μ ∣ x ∣ ) ln ⁡ ( 1 + μ ) F\left( x \right) =\text{sgn}\left( x \right) \frac{\ln \left( 1+\mu |x| \right)}{\ln \left( 1+\mu \right)} F(x)=sgn(x)ln(1+μ)ln(1+μx)
8位 μ=255

A-law
KaTeX parse error: Expected & or \\ or \cr or \end at end of input: …|\leqslant 1\\
A被称为压缩系数,A=87.6

3.自适应脉冲编码
对信号采用固定的量化方案,假设一段音频前面的音高很高而后面的音量很低,在音量低的部分则不能得到足够的量化精度
自适应编码(adaptive PCM)将信号在时间轴上分割成很多段,对每一段估算其短时能量,然后将这一段信号除以其短时能量进行正则化,在进行标准的PCM量化
代价:需要额外地存储信号在短时片段内的短时能量

正则化是为了调整信号的幅度范围,使其适应于系统的处理能力或编码器的要求。在这种情况下,将每个小段的信号除以对应的短时能量,实际上是将信号归一化到相对统一的幅度水平上。这有助于确保在进行标准的 PCM 量化时,每个小段都能够充分利用量化器的动态范围,从而提高编码效率。

4.差分脉冲编码与自适应差分脉冲编码
考虑到语音信号的相邻采样值之间的差值通常会远小于采样值本身,另一种方法是对这些差值进行量化编码——差分脉冲编码
差分脉冲编码最简单的形式是将x[n]表示为前一个采样值和二者之间的差值的和
x [ n ] = x [ n − 1 ] + e [ n ] x[n] = x[n-1]+e[n] x[n]=x[n1]+e[n]
这样我们只需要对e【n】进行量化编码,e【n】的动态范围远小于x[n]的动态范围,因此可以用很低的编码速率对e【n】进行编码

将某一时刻的采样值表示为之前时刻采样值的线性组合,这类方法叫做——线性预测编码

x [ n ] = x ~ [ n ] + e [ n ] = ∑ i = 1 p a i x [ n − i ] + e [ n ] x\left[ n \right] =\tilde{x}\left[ n \right] +e\left[ n \right] =\sum_{i=1}^p{a_ix\left[ n-i \right] +e\left[ n \right]} x[n]=x~[n]+e[n]=i=1paix[ni]+e[n]
xhat[n]为前p个信号值预测x[n]的预测值,p为预测结束,ai为预测系数
预测阶数p越高,预测误差e[n]越小,越能够用更小的编码速率对e【n】进行编码

类似自适应脉冲编码的思想,我们不必要对整段信号采用同一组预测系数,我们可以将信号分割为很多短时片段,在每个片段中自适应地估算一组最佳的预测系数,是这段信号的预测误差最小,以进一步降低编码速率。

此外我们对e【n】进行量化时,也可以采用自适应的量化技术
结合这两种做法,我们将这种编码称为“自适应差分脉冲编码”

5.频域编码方法
在时域直接进行波形编码

子带编码——将信号分割成若干个不同的频带分量,再对每个子频带分量分别进行编码。采用不同的编码速率对不同的子频带进行编码
自适应变换域编码——先对语音信号进行正交变换,然后对变换系数进行量化编码,从而实现更低的编码速率
其中最常用的就是离散余弦变换

2.3.4 音频文件格式

1.wav
不能超过4GB
wav文件再表头后第一个区块记录了音频的信息,第二个区块才是真正的音频数据
第一个区块内包含编码格式,声道数量,采样率,传输速率,采样值大小,每声道的采样精度
16位采样精度的线性脉冲编码则是wav文件最常用的编码格式
wav文件可以包含多个声道的信息。对于线性脉冲编码的多声道数据,采样数据按照时间先后进行交叉存储
2.其他格式比较
MP3:有损压缩,复杂技术,根据心理声学原理来丢弃部分音频信息从而减小文件
FLAC:无损压缩编码比线性脉冲编码高效,也不丢失音频信息

2.4 从信号到特征:短时分析

2.4.1 传统特征分析的不足

全局特征只有当信号十分平稳的时候才有意义。如果信号本身是周期信号,其局部特征不随时间变化而变化,那么全局特征便等价于局部特征。但是大部分信号都是不平稳的,所以需要从局部提取特征,可以近似得认为信号时平稳的——这一点就是音频信号特征分析的基础:短时分析技术

2.4.2分帧

帧:对于语音信号,我们一样可以将采样信号在时间轴上分割为很多短小的片段
分帧:将密集的采样信号分割成教委系数的信号帧的过程
分帧中两个最重要的参数就是:帧本身的长度和帧与帧之间的间隔。
在业界比较常见的分帧设置:25ms的帧长度,10ms的帧间隔

2.4.3 窗函数处理

傅里叶变换是对整个时间轴的信号进行变换,我们在分帧的过程中,相当于只保留了当前帧所覆盖的部分信号,而在帧起点和帧终点前后的信号都设为0,起点终点有着位置上的高度不连续性。

如果对这样的信号直接进行傅里叶变换,就会有吉布尔斯的现象,在不连续点处产生高频分量,导致傅里叶变换后的频谱出现局部峰值。
此外由于周期信号在分帧过程被截断,又会导致频谱在整个频带中发生拖尾现象,成为“频谱泄露”

在语音信号领域,常用的窗函数是“汉明窗”、“汉宁窗”

2.4.4 帧叠加与帧采样

对于语音识别系统来说,我们将每一帧的信息单独输入模型效果不如将连续四帧特征同时输入模型。因为连续多帧特征组合一起后能够对单帧周围的上下文信息有一个更好的描述
我们发现,对于声纹识别系统来说,2帧的上下文已经足够
将相邻的帧特征拼接起来一起合成一个新的帧的做法,称为帧叠加。同时部署多个应用时,可以令所有的应用采用相同的分帧,加窗和特征提取模块,再令每个应用单独的帧叠加策略,这样做可以大大减小开销

帧采样:为了不使计算开销过大,在运行模型的时候,可以有规律的跳过一些帧来减小计算量——下采样
在这里插入图片描述
第一帧直接与该帧本身进行重复拼接。这是一种常见的做法,保证边界条件下帧的数值变化的连续性

2.5 常用的音频特征

从这些音频帧中提取出固定维度的特征向量,再对这些特征进行帧叠加和帧采样,从而得到最终的特征帧。这些特征帧将作为机器学习算法的输入,被用来完成高级任务

2.5.1 时域特征

1.短时能量与短时平均幅值
E x = ∑ n = 0 N − 1 ( x [ n ] ) 2 M x = ∑ n = 0 N − 1 ∣ x [ n ] ∣ E_x=\sum_{n=0}^{N-1}{\left( x\left[ n \right] \right) ^2} \\ M_x=\sum_{n=0}^{N-1}{|x\left[ n \right] |} Ex=n=0N1(x[n])2Mx=n=0N1x[n]
2.短时过零率
反映信号穿过零值的次数
Z x = 1 2 ∑ n = 1 N − 1 ∣ sgn ( x [ n ] ) − sgn ( x [ n − 1 ] ) ∣ Z_x=\frac{1}{2}\sum_{n=1}^{N-1}{|\text{sgn}\left( x\left[ n \right] \right) -\text{sgn}\left( x\left[ n-1 \right] \right) |} Zx=21n=1N1sgn(x[n])sgn(x[n1])

3.短时自相关系数
将短时信号延迟K个采样后,再计算其与信号本身的相关性,便得到短时自相关函数
R x ( k ) = ∑ n = 0 N − 1 − k x [ n ] ⋅ x [ n + k ] R_x\left( k \right) =\sum_{n=0}^{N-1-k}{x\left[ n \right] \cdot x\left[ n+k \right]} Rx(k)=n=0N1kx[n]x[n+k]
根据一组k的值而产生的一组特征

4.短时平均幅度差函数
将短时信号延迟K个采样后,再计算其与信号的差值。都包含了信号的周期特征并根据不同的k值都可以得到一组特征
γ x ( k ) = ∑ n = 0 N − 1 − k ∣ x [ n ] − x [ n + k ] ∣ \gamma _x\left( k \right) =\sum_{n=0}^{N-1-k}{|x\left[ n \right] -x\left[ n+k \right]}| γx(k)=n=0N1kx[n]x[n+k]

5.线性预测编码与线性预测倒谱系数
线性预测编码的思路是,信号在某一时刻的采样值,可以由前面若干时刻的采样值的线性组合来预测——自回归
对于分帧、加窗处理后的短时信号x[n],0<= n <= N-1,而言,一个p阶的线性预测编码可以表示为
x [ n ] = x ~ [ n ] + e [ n ] = ∑ i = 1 p a i x [ n − i ] + e [ n ] x\left[ n \right] =\tilde{x}\left[ n \right] +e\left[ n \right] =\sum_{i=1}^p{a_ix\left[ n-i \right] +e\left[ n \right]} x[n]=x~[n]+e[n]=i=1paix[ni]+e[n]
a[]是该音频帧的一组特征
在这里插入图片描述

2.5.2 从时域到频域:傅里叶变换

1.傅里叶分析大家族

在这里插入图片描述
2.离散傅里叶变换
在音频信号处理中,我们通常对经过分帧、加窗处理后的离散采样信号进行分析,而这时的信号帧属于有限离散信号,因此通常使用离散傅里叶变换(DFT)
x ^ [ k ] = ∑ n = 0 N − 1 exp ( − i 2 π N n k ) ⋅ x [ n ] \hat{x}\left[ k \right] =\sum_{n=0}^{N-1}{\text{exp} \left( -i\frac{2\pi}{N}nk \right)}\cdot x\left[ n \right] x^[k]=n=0N1exp(iN2πnk)x[n]

得到是 x ^ \hat{x} x^的复数谱
对频谱取幅值,得到N个频谱幅度特征——频谱幅值特征算是最简单频谱 特征
有时用 x ^ = F x \hat{x}=\mathcal{F} x x^=Fx

3.快速傅里叶算法
FFT是一种以(NlogN)的时间复杂度计算出离散傅里叶变换的算法。
在语音信号领域,在进行频谱分析后,我们总是使用快速傅里叶变换来计算频谱,值得注意是快速傅里叶变换的实现要求信号为长度为2的整数次幂,N不适合整数次幂就在信号后补零

假如我们的信号采样率为16000Hz,分帧后每帧长度为25ms,每个音频帧包含400个采样值,在后补112个零,使长度称为512.因为有加窗处理不会担心又不连续性

4.动手实践STFT

import scipy.io.wavfile as wav
import scipy.signal
import matplotlib.pyplot as plt
import numpy as np
# Provide the complete path to the WAV file
rate, data = wav.read("D:/1aPythonDataset/ScipyandFFT/data/duke.wav")

f, t, Zxx = scipy.signal.stft(
    data, fs=rate, window="hann", nperseg=256, noverlap=240,
    nfft=None, detrend=False, return_onesided=True,
    boundary='zeros', padded=True, axis=-1
)
"""
fs = 采样率,nperseg 一帧的采样个数 
return_onesided=True 输入信号是实数,每帧得到的离散傅里叶变换是对称的只取一边
"""
# 绘制音频波形的振幅
plt.figure(figsize=(12, 4))
plt.subplot(2, 1, 1)
plt.plot(np.arange(len(data)) / rate, data)
plt.title('Audio Waveform')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')

# 绘制STFT的相位
plt.subplot(2, 1, 2)
plt.pcolormesh(t, f, np.angle(Zxx), shading='auto')
plt.title('Phase of STFT')
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.colorbar(label='Phase (radians)')

plt.tight_layout()
plt.show()

2.5.3 频谱、倒谱、时频谱和功率谱

将一段信号进行离散傅里叶变换后,将频率作为横轴,幅度作为纵轴,得到的图像成为频谱
倒谱:将频谱的对数作为信号,进行傅里叶变换后得到新的频谱——其横轴被称为到频率
倒谱的好处,将时域的卷积运算变为倒谱域的加法运算
时频谱:信号进过短时傅里叶变换后,得到以时间为横轴、频率为纵轴、颜色或灰度表示幅度的图像
有时我们将频谱或时频谱的幅值替换成幅值的平方,并称之为功率谱(power spectrum)与功率谱密度不同

功率谱密度(Power Spectral Density,简称 PSD)是信号在频率域上的表征,表示信号在不同频率上的功率分布情况。它是傅里叶变换的平方模的期望值,通常用于分析信号的频率成分和能量分布。

2.5.4 感知线性预测

perceptual linear prediction PLP
对人耳的听觉感知出色建模
后续改进特征:基于带通滤波和均值消减的RASTA-PLP特征

2.5.5 梅尔倒谱系数

(1)对音频信号进行预加重处理,降低部分高频能量
(2)对预加重处理后的信号进行分帧、加窗处理——汉明窗
(3)对每一帧信号进行FFT,得到频谱
(4)将频谱通过一组按照梅尔刻度设计好的三角形滤波器组,得到带通滤波后的结果
(5)用对数函数校正人耳对于声强的非线性
(6)通过逆离散傅里叶变换计算倒谱
(7)前一步得到了12个倒谱系数,在增加一个该帧的能量,得到13个特征。通过相邻帧计算这13个特征的一阶差分与二阶差分,最终得到39个特征,这39个特征就是最终的MFCC特征

2.5.6功率正则化倒谱系数——似乎我可以借鉴一下

PNCC 用于替代PLP和MFCC
PNCC的新颖处在于增加了短期和中期处理,通过计算一段时间内的功率来抑制背景中的激励信号。这种做法被称为不对称噪声抑制

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值