语音信号特征处理--FbankMFCC

Posted 栋次大次

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了语音信号特征处理--FbankMFCC相关的知识,希望对你有一定的参考价值。

目录

代码地址:https://gitee.com/liangcd/speech_learning/tree/master/feature_extraction

数字信号处理基础

模拟信号转化为数字信号(ADC)

现实生活中遇到的大多数信号都是连续信号,而计算机只能处理离散信号,因此需要通过采样量化转化为数字信号。

以正弦波为例, x ( t ) = s i n ( 2 π f 0 t ) x(t)=sin(2\\pi f_0t) x(t)=sin(2πf0t),其中 f 0 f_0 f0是信号本身的频率,单位Hz。若我们对其每间隔 t s t_s ts秒进行一次采样,并使用一定范围的离散数值表示采样值,则得到采样后信号 x ( n ) = s i n ( 2 π f 0 n t s ) x(n)=sin(2\\pi f_0nt_s) x(n)=sin(2πf0nts) t s t_s ts为采样周期, f s = 1 / t s f_s=1/t_s fs=1/ts采样频率, n = 0 , 1... n=0,1... n=0,1...为离散整数序列。

问题:如果给定一个正弦波采样后的序列,可以唯一恢复出一个连续的正弦波吗?

频率混叠

不同频率的正弦波,经采样后,完全有可能出现相同的离散信号,为什么?
x ( n ) = sin ⁡ ( 2 π f 0 n t s ) = sin ⁡ ( 2 π f 0 n t s + 2 π m ) = sin ⁡ ( 2 π ( f 0 + m n t s ) n t s ) \\beginaligned & x(n)=\\sin \\left(2 \\pi f_0 n t_s\\right) \\\\ =& \\sin \\left(2 \\pi f_0 n t_s+2 \\pi m\\right) \\\\ =& \\sin \\left(2 \\pi\\left(f_0+\\fracmn t_s\\right) n t_s\\right) \\endaligned ==x(n)=sin(2πf0nts)sin(2πf0nts+2πm)sin(2π(f0+ntsm)nts)

如果 m = k n m=kn m=kn,k为整数(一般为常数),因为n为整数,m也是整数,若m=kn满足,则k必须为整数。替换以上公式为:
x ( n ) = sin ⁡ ( 2 π ( f 0 + k f s ) n t s ) \\mathrmx(\\mathrmn)=\\sin \\left(2 \\pi\\left(\\mathrmf_0+\\mathrmkf_\\mathrms\\right) \\mathrmnt_\\mathrms\\right) x(n)=sin(2π(f0+kfs)nts)

从公式可以看出原始频率 f 0 f_0 f0 f 0 + k f s f_0+kf_s f0+kfs两个信号对应的离散信号是相同的。这种现象是频率混叠,也解释了上述的问题。如何避免频率混叠?

奈奎斯特采样定理

采样频率大于信号中最大频率的两倍, f s / 2 ≥ f m a x f_s / 2 \\geq f_max fs/2fmax,即原始信号的一个周期内,至少要采样两个点,才能有效杜绝频率混叠问题。

问题:对一个采样率为16k的离散信号进行下采样,下采样到8k,为什么需要首先进行低通滤波?

根据奈奎斯特定律,采样率为16k的离散信号中可能存在频率不超过8k的信号,下采样到8k,音频中只允许存在最大频率不超过4kHz的信号,所以需要首先进行低通滤波,过滤掉超过4kHz的信号。

离散傅里叶变换

DFT将时域信号变换到频域,分析信号中频率成分,时域离散且周期的吸纳后可以进行DFT,非周期离散信号需要进行周期延拓。

DFT定义:给定一个长度为N的时域离散信号x(n),对应的离散频域序列X(m)为: X ( m ) = ∑ n = 0 N − 1 x ( n ) e − j 2 π n m / N , m = 0 , 1 , 2 , … N − 1 \\mathrmX(\\mathrmm)=\\sum_\\mathrmn=0^\\mathrmN-1 \\mathrmx(\\mathrmn) \\mathrme^-\\mathrmj 2 \\pi \\mathrmnm / \\mathrmN, \\quad \\mathrmm=0,1,2, \\ldots N-1 X(m)=n=0N1x(n)ej2πnm/N,m=0,1,2,N1。其中, m = 0 , 1 , 2... N − 1 m=0,1,2...N-1 m=0,1,2...N1为频率索引,X(m)为DFT的第m个输出。

根据欧拉公式,DFT的公式还可以为:
X ( m ) = ∑ n = 0 N − 1 x ( n ) [ cos ⁡ ( 2 π n m N ) − j sin ⁡ ( 2 π n m N ) ] \\mathrmX(\\mathrmm)=\\sum_\\mathrmn=0^\\mathrmN-1 \\mathrmx(\\mathrmn)\\left[\\cos \\left(\\frac2 \\pi \\mathrmnm\\mathrmN\\right)-\\mathrmj \\sin \\left(\\frac2 \\pi \\mathrmnm\\mathrmN\\right)\\right] X(m)=n=0N1x(n)[cos(N2πnm)jsin(N2πnm)]
DFT本质上是一个线性变换: X ⃗ = F x ⃗ \\vecX=\\boldsymbolF \\vecx X =Fx
[ X ( 0 ) X ( 1 ) X ( 2 ) ⋮ X ( N − 1 ) ] = [ 1 1 ⋯ 1 1 e − j 2 π / N ⋯ e − j 2 π ( N − 1 ) / N 1 e − j 2 π ⋅ 2 / N ⋯ e − j 2 π ⋅ 2 ( N − 1 ) / N ⋮ ⋮ ⋮ ⋮ 1 e − j 2 π ⋅ ( N − 1 ) / N ⋯ e − j 2 π ⋅ ( N − 1 ) ( N − 1 ) / N ] [ x ( 0 ) x ( 1 ) x ( 2 ) ⋮ x ( N − 1 ) ] \\left[\\beginarrayc X(0) \\\\ X(1) \\\\ X(2) \\\\ \\vdots \\\\ X(N-1) \\endarray\\right]=\\left[\\beginarraycccc 1 & 1 & \\cdots & 1 \\\\ 1 & e^-j 2 \\pi / N & \\cdots & e^-j 2 \\pi(N-1) / N \\\\ 1 & e^-j 2 \\pi \\cdot 2 / N & \\cdots & e^-j 2 \\pi \\cdot 2(N-1) / N \\\\ \\vdots & \\vdots & \\vdots & \\vdots \\\\ 1 & e^-j 2 \\pi \\cdot(N-1) / N & \\cdots & e^-j 2 \\pi \\cdot(N-1)(N-1) / N \\endarray\\right]\\left[\\beginarrayc x(0) \\\\ x(1) \\\\ x(2) \\\\ \\vdots \\\\ x(N-1) \\endarray\\right] 语音笔记:时域分析

语音信号的“短时时域”分析

(超详细)语音信号处理之特征提取

多模态特征融合:图像语音文本如何转为特征向量并进行分类

语音处理基于matlab GUI录音与音频时域+频域+倒谱+功率谱分析含Matlab源码 070期

用LabVIEW实现U3数据采集卡的时域分析信号处理