语音信号线性预测(LPC)分析
程序员文章站
2022-04-30 10:23:16
...
一. 语音信号数字模型
条件:
1. 忽略鼻音/摩擦音/**音等
2. 语音信号短时不变,帧长10-30 ms(可近似为线性时不变系统)
声道的声管模型-一系列截面积不等的无损声管级联
那么语音信号的产生过程简化为:单位脉冲序列(肺部产生的气流)激励声道模型(声管)。线性预测lpc模型的本质即探究声管模型的性质(参数)。
二.线性预测模型(计算LPC系数)
1. 模型建立:
根据上面的条件,分帧后的语音信号产生可以等效为单位脉冲序列激励声道管,该过程为线性时不变系统:
写成差分方程形式:
x(n)为真实信号,加权项为预测信号,e(n)为预测误差。根据e(n)的最小均方误差(MSE)准则来计算滤波器系数ai。
MSE期望值:
求ai为多少的情况下,E可取极小值,对ai求偏导:
结果化简为:
写成自相关形式(Yule-Walker方程):
拆写加权式子,即为Toeplize矩阵:
使用Durbin算法来求解Toeplize矩阵,即可计算出滤波器系数ai。
二.MATLAB中的lpc函数
原理说这么多,MATLAB里面,一个lpc函数就能解决所有的问题,我们来看看这个函数。
[a, g] = lpc(x, p);
% [a,g] = lpc(x,p) finds the coefficients of a pth-order linear predictor (FIR filter) that predicts the current value of the real-valued time series x based on past samples.
帮助文档给出线性预测过程的差分方程为:
a = [1 a(2) … a(p+1)]
注意,这里的a(0)取值为 0,a(1)=1,使用lpc系数的时候一定要注意a(0)的取值。
三. MATLAB结果
1. 预测误差
[x,fs] = audioread('file.wav');
sound(x,fs);
n = 200; % n is the length of a frame.
p0 = 50; % p0 is the overlap length.
xx = buffer(x, n, p0);
m = 8; % (m)th frame of data.
y = x((m-1)*n+1:m*n); % select a frame of data.
p = 12; % p is the order of the AR model.
ar = lpc(y,p); % calculate the coefficients of AR model.
est_x = filter([0 -ar(2:end )],1,y); % calculate the predicted signal.
err = y - est_x; % calculate the residual signal.
画出某一帧预测残差信号的波形:
2. 预测信号
先小结一下信号处理的过程
- 分帧(Framing)
- 计算线性预测系数LPC coefficients
- 计算预测信号
- 合成语音信号 (Overlap Add)
这里,设定每帧信号样点数 n = 200, 相邻帧重叠长度 p0 = 150, 滤波器阶数p = 12。
图中,蓝色波形为真实语音信号,黑色波形为线性预测的结果。为什么预测信号的幅值比真实信号大?因为合成过程用到了重叠相加(Overlap Add), 相邻帧信号之间有3/4重叠部分。
上一篇: PHP代码审计五(代码执行漏洞)
下一篇: String对象在内存中的表现
推荐阅读
-
回归分析与预测之一元线性回归分析与预测
-
MATLAB GUI 语音信号分析系统
-
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
-
回归预测分析python数据化运营线性回归总结
-
ML:基于自定义数据集利用Logistic、梯度下降算法GD、LoR逻辑回归、Perceptron感知器、SVM支持向量机、LDA线性判别分析算法进行二分类预测(决策边界可视化)
-
语音信号线性预测(LPC)分析
-
电商销售数据与分析(3):构建指标的相关的线性模型,预测未来值,并判断模型是否有效
-
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
-
回归分析与预测之一元线性回归分析与预测
-
回归预测分析python数据化运营线性回归总结