语音信号线性预测(LPC)分析
来源:互联网 发布:寂寥而莫我知也翻译 编辑:程序博客网 时间:2024/06/06 04:49
一. 语音信号数字模型
条件:
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重叠部分。
1 0
- 语音信号线性预测(LPC)分析
- 语音信号分析之重要工具: 线性预测分析
- 语音的线性预测系数(Linear Prediction Coefficient,LPC)
- 线性预测系数LPC
- 语音信号LPC谱估计
- 《语音信号处理》第六章总结——线性预测分析
- G.729A--编码--LP(线性预测)分析之LPC(线性预测系数)的计算
- 语音信号语谱图分析
- 线性回归分析及预测
- 语音识别提取LPC代码
- 多元线性回归分析预测法概述
- 语音信号之特性分析图(二)
- 【自动语音识别课程】第二课 语音信号分析
- 语音信号
- 语音信号
- 传统LPC声码器的语音模型
- 数字语音信号处理学习笔记——语音信号的短时频域分析(1)
- 数字语音信号处理学习笔记——语音信号的短时频域分析(2)
- 338. Counting Bits
- debian8.7 设备未托管
- conky 温度不显示
- conky配置
- 无法获得锁 /var/lib/dpkg/lo…
- 语音信号线性预测(LPC)分析
- debian 软件安装
- Linux 系统开机启动数字键盘
- GNU Linker Script(.lds文件)的学习
- debian 下设置Ctrl+Alt+T快捷…
- iOS开发--使用Charles(青花瓷)抓包图文详解
- Problem A. Math Encoder Google Kickstart Round B 2017
- 表单input元素关闭自动填充小tip
- JAVA学习篇--静态代理VS动态代理(转)