IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 线性预测编码(LPC)笔记 -> 正文阅读

[人工智能]线性预测编码(LPC)笔记

概念:一个语音的抽样能够用过去若干个语音抽样(模板)的线性组合来逼近。通过使实际语音抽样和线性预测抽样之间差值的平方和达到最小,能够决定唯一的一组预测系数。用于语音分析与合成,可估计许多语音基本参数:基音、共振峰、频谱、声道截面积等。

语音信号是由一个激励信号e(k)经过一个时变的全极点滤波器产生的。生成语音信号s(k)表示为:
s ( n ) = ∑ i = 1 p a i s ( n ? i ) + e ( n ) s(n)=\sum_{i=1}^pa_is(n-i)+e(n) s(n)=i=1p?ai?s(n?i)+e(n)
其中,激励信号e(n)要么是浊音语音的脉冲序列,要么是无声声音的随机噪声。P是滤波器的阶数, a i a_i ai?是滤波器的系数。LPC就是在已知s(n)的情况下获取 a i a_i ai?
s ~ ( n ) = ∑ i = 1 p a i s ( n ? i ) \widetilde{s}(n)=\sum_{i=1}^pa_is(n-i) s (n)=i=1p?ai?s(n?i)

e ( n ) = s ( n ) ? s ~ ( n ) = s ( n ) ? ∑ i = 1 p a i s ( n ? i ) e(n)=s(n)-\widetilde{s}(n)=s(n)-\sum_{i=1}^pa_is(n-i) e(n)=s(n)?s (n)=s(n)?i=1p?ai?s(n?i)

求取 a i a_i ai?最常用的一个方法就是最小化真实信号与预测信号之间的均方误差(MSE):
E = ∑ n e 2 ( n ) = ∑ n [ s ( n ) ? s ~ ( n ) ] 2 = ∑ n [ s ( n ) ? ∑ i = 1 p a i s ( n ? i ) ] 2 E=\sum_ne^2(n)=\sum_n[s(n)-\widetilde{s}(n)]^2=\sum_n[s(n)-\sum_{i=1}^pa_is(n-i)]^2 E=n?e2(n)=n?[s(n)?s (n)]2=n?[s(n)?i=1p?ai?s(n?i)]2
a i a_i ai?为多少的情况下,E可取最小值,对 a i a_i ai?求偏导:
? E ? a j = 0 , j = 1 , 2 , . . . , p \frac{\partial E}{\partial a_j}=0,\quad j=1,2,...,p ?aj??E?=0,j=1,2,...,p
可得出:
∑ n s ( n ) s ( n ? j ) = ∑ i = 1 p a i ∑ n s ( n ? i ) s ( n ? j ) \sum_ns(n)s(n-j)=\sum_{i=1}^pa_i\sum_n s(n-i)s(n-j) n?s(n)s(n?j)=i=1p?ai?n?s(n?i)s(n?j)
根据自相关函数定义Φ:
? n ( i , j ) = ∑ m s ( n ? i ) s ( n ? j ) \phi_n(i,j)=\sum_ms(n-i)s(n-j) ?n?(i,j)=m?s(n?i)s(n?j)
所以式子可写成:
? ( 0 , j ) = ∑ i = 1 p a i ? ( i , j ) j = 1 , 2 , . . . , p \phi(0,j)=\sum_{i=1}^pa_i\phi(i,j)\quad\quad j=1,2,...,p ?(0,j)=i=1p?ai??(i,j)j=1,2,...,p
该式表示p个方程构成的方程组,未知数为p个。求解该方程组,就可以得到系统的线性预测系数。

系统的最小均方误差就可以表示为:(sjb,求大佬教这步是怎么推出来的)
E = ∑ n [ s ( n ) ] 2 ? ∑ i = 1 p a i ∑ n s ( n ) s ( n ? i ) = ? n ( 0 , 0 ) ? ∑ i = 1 p a i ? n ( 0 , i ) E=\sum_n[s(n)]^2-\sum_{i=1}^pa_i\sum_n s(n)s(n-i)=\phi_n(0,0)-\sum_{i=1}^pa_i\phi_n(0,i) E=n?[s(n)]2?i=1p?ai?n?s(n)s(n?i)=?n?(0,0)?i=1p?ai??n?(0,i)

线性预测之Levinson-Durbin算法

求解这个方程组则用durbin算法进行求解。

拓普利兹矩阵

把Φ变成拓普利兹矩阵R,即第(i,j)个元素为R[i-j]:
∑ i = 1 p a i R [ ∣ i ? j ∣ ] = R [ j ] , 1 ≤ j ≤ p \sum_{i=1}^pa_iR[|i-j|]=R[j],\quad 1\leq j\leq p i=1p?ai?R[i?j]=R[j],1jp
方程的矩阵形式为:
R a = r Ra=r Ra=r
a和r分别是元素为 a i a_i ai?和r[i]=R[i]的列向量。

上式中方程组可做如下变换:
R [ j ] ? ∑ i = 1 p a i R [ ∣ i ? j ∣ ] = 0 , j = 1 , 2 , . . . , p R[j]-\sum_{i=1}^p a_i R[|i-j|]=0,j=1,2,...,p R[j]?i=1p?ai?R[i?j]=0,j=1,2,...,p

写成矩阵形式为:

[ R [ 1 ] R [ 0 ] R [ 1 ] ? R [ p ? 1 ] R [ 2 ] R [ 1 ] R [ 0 ] ? R [ p ? 2 ] ? ? ? ? ? R [ p ] R [ p ? 1 ] R [ p ? 2 ] ? R [ 0 ] ] [ 1 ? α 1 ( p ) ? α 2 ( p ) ? ? α p ( p ) ] = [ 0 0 ? 0 ] \begin{bmatrix} R[1] & R[0] & R[1] & \cdots & R[p-1]\\ R[2] & R[1] & R[0] & \cdots & R[p-2]\\ \vdots & \vdots & \vdots & \cdots & \vdots\\ R[p] & R[p-1] & R[p-2] &\cdots & R[0] \end{bmatrix} \begin{bmatrix} 1\\ -\alpha_1^{(p)}\\ -\alpha_2^{(p)}\\ \vdots\\ -\alpha_p^{(p)}\\ \end{bmatrix}= \begin{bmatrix} 0\\ 0\\ \vdots\\ 0 \end{bmatrix} ??????R[1]R[2]?R[p]?R[0]R[1]?R[p?1]?R[1]R[0]?R[p?2]??????R[p?1]R[p?2]?R[0]????????????????1?α1(p)??α2(p)???αp(p)???????????=??????00?0???????

而根据最小均方误差公式,对于一个p阶最佳预测器,其最小均方预测误差为:

R [ 0 ] ? ∑ i = 1 p a i R [ i ] = ε ( p ) R[0]-\sum_{i=1}^pa_iR[i]=\varepsilon^{(p)} R[0]?i=1p?ai?R[i]=ε(p)

写成矩阵的形式为:

[ R [ 0 ] R [ 1 ] R [ 2 ] ? R [ p ] ] [ 1 ? α 1 ( p ) ? α 2 ( p ) ? ? α p ( p ) ] = [ ε ( p ) ] \begin{bmatrix} R[0] & R[1] & R[2] & \cdots & R[p]\\ \end{bmatrix} \begin{bmatrix} 1\\ -\alpha_1^{(p)}\\ -\alpha_2^{(p)}\\ \vdots\\ -\alpha_p^{(p)}\\ \end{bmatrix}= \begin{bmatrix} \varepsilon^{(p)}\\ \end{bmatrix} [R[0]?R[1]?R[2]???R[p]?]?????????1?α1(p)??α2(p)???αp(p)???????????=[ε(p)?]

再把上面两个矩阵合在一起,写成一个p+1个方程方程组满足p各未知预测器系数和对应的未知均方预测误差 ε p ε^p εp,新的矩阵方程为

[ R [ 0 ] R [ 1 ] R [ 2 ] ? R [ p ] R [ 1 ] R [ 0 ] R [ 1 ] ? R [ p ? 1 ] R [ 2 ] R [ 1 ] R [ 0 ] ? R [ p ? 2 ] ? ? ? ? ? R [ p ] R [ p ? 1 ] R [ p ? 2 ] ? R [ 0 ] ] [ 1 ? α 1 ( p ) ? α 2 ( p ) ? ? α p ( p ) ] = [ ε ( p ) 0 0 ? 0 ] \begin{bmatrix} R[0] & R[1] & R[2] & \cdots & R[p] \\ R[1] & R[0] & R[1] & \cdots & R[p-1]\\ R[2] & R[1] & R[0] & \cdots & R[p-2]\\ \vdots & \vdots & \vdots & \cdots & \vdots\\ R[p] & R[p-1] & R[p-2] &\cdots & R[0] \end{bmatrix} \begin{bmatrix} 1\\ -\alpha_1^{(p)}\\ -\alpha_2^{(p)}\\ \vdots\\ -\alpha_p^{(p)}\\ \end{bmatrix}= \begin{bmatrix} \varepsilon^{(p)}\\ 0\\ 0\\ \vdots\\ 0 \end{bmatrix} ????????R[0]R[1]R[2]?R[p]?R[1]R[0]R[1]?R[p?1]?R[2]R[1]R[0]?R[p?2]???????R[p]R[p?1]R[p?2]?R[0]??????????????????1?α1(p)??α2(p)???αp(p)???????????=????????ε(p)00?0?????????

上式中构造出的(p+1)x(p+1)阶矩阵也是拓普利兹矩阵。该方程组用Levinson-Durbin算法递归求解。该算法通过在每次迭代中顺序地结合一个新的相关值来实现,并且根据新的相关值和已获得的预测器就能解出下一个高一阶的预测器。

对于任意阶数i,上式中的方程组都可以以矩阵形式表示:
R i α i = e i R^i\alpha^i=e^i Riαi=ei
我们希望第i阶的解是如何由第i-1阶的解导出的。换而言之是给定 α ( i ? 1 ) α^{(i-1)} α(i?1),即 R ( i ? 1 ) α ( i ? 1 ) = e ( i ? 1 ) R^{(i-1)}α^{(i-1)}=e^{(i-1)} R(i?1)α(i?1)=e(i?1)的解,求出 R ( i ) α ( i ) = e ( i ) R^{(i)}α^{(i)}=e^{(i)} R(i)α(i)=e(i)的解。

durbin算法

步骤:

1、先将矩阵方程 R ( i ? 1 ) α ( i ? 1 ) = e ( i ? 1 ) R^{(i-1)}α^{(i-1)}=e^{(i-1)} R(i?1)α(i?1)=e(i?1)的扩展形式写为:

[ R [ 0 ] R [ 1 ] R [ 2 ] ? R [ i ? 1 ] R [ 1 ] R [ 0 ] R [ 1 ] ? R [ i ? 2 ] R [ 2 ] R [ 1 ] R [ 0 ] ? R [ i ? 3 ] ? ? ? ? ? R [ i ? 1 ] R [ i ? 2 ] R [ i ? 3 ] ? R [ 0 ] ] [ 1 ? α 1 ( i ? 1 ) ? α 2 ( i ? 1 ) ? ? α i ? 1 ( i ? 1 ) ] = [ ε ( i ? 1 ) 0 0 ? 0 ] \begin{bmatrix} R[0] & R[1] & R[2] & \cdots & R[i-1] \\ R[1] & R[0] & R[1] & \cdots & R[i-2]\\ R[2] & R[1] & R[0] & \cdots & R[i-3]\\ \vdots & \vdots & \vdots & \cdots & \vdots\\ R[i-1] & R[i-2] & R[i-3] &\cdots & R[0] \end{bmatrix} \begin{bmatrix} 1\\ -\alpha_1^{(i-1)}\\ -\alpha_2^{(i-1)}\\ \vdots\\ -\alpha_{i-1}^{(i-1)}\\ \end{bmatrix}= \begin{bmatrix} \varepsilon^{(i-1)}\\ 0\\ 0\\ \vdots\\ 0\\ \end{bmatrix} ????????R[0]R[1]R[2]?R[i?1]?R[1]R[0]R[1]?R[i?2]?R[2]R[1]R[0]?R[i?3]???????R[i?1]R[i?2]R[i?3]?R[0]??????????????????1?α1(i?1)??α2(i?1)???αi?1(i?1)???????????=????????ε(i?1)00?0?????????
2、将数0附加到向量 a ( i ? 1 ) a^{(i-1)} a(i?1)中,并与矩阵 R ( i ) R^{(i)} R(i)相乘,这时得到新的一组i+1个方程:
[ R [ 0 ] R [ 1 ] R [ 2 ] ? R [ i ] R [ 1 ] R [ 0 ] R [ 1 ] ? R [ i ? 1 ] R [ 2 ] R [ 1 ] R [ 0 ] ? R [ i ? 2 ] ? ? ? ? ? R [ i ? 1 ] R [ i ? 2 ] R [ i ? 3 ] ? R [ 1 ] R [ i ] R [ i ? 1 ] R [ i ? 2 ] ? R [ 0 ] ] [ 1 ? α 1 ( i ? 1 ) ? α 2 ( i ? 1 ) ? ? α i ? 1 ( i ? 1 ) 0 ] = [ ε ( i ? 1 ) 0 0 ? 0 γ ( i ? 1 ) ] \begin{bmatrix} R[0] & R[1] & R[2] & \cdots & R[i] \\ R[1] & R[0] & R[1] & \cdots & R[i-1]\\ R[2] & R[1] & R[0] & \cdots & R[i-2]\\ \vdots & \vdots & \vdots & \cdots & \vdots\\ R[i-1] & R[i-2] & R[i-3] &\cdots & R[1]\\ R[i] & R[i-1] & R[i-2] &\cdots & R[0] \end{bmatrix} \begin{bmatrix} 1\\ -\alpha_1^{(i-1)}\\ -\alpha_2^{(i-1)}\\ \vdots\\ -\alpha_{i-1}^{(i-1)}\\ 0 \end{bmatrix}= \begin{bmatrix} \varepsilon^{(i-1)}\\ 0\\ 0\\ \vdots\\ 0\\ \gamma^{(i-1)} \end{bmatrix} ??????????R[0]R[1]R[2]?R[i?1]R[i]?R[1]R[0]R[1]?R[i?2]R[i?1]?R[2]R[1]R[0]?R[i?3]R[i?2]????????R[i]R[i?1]R[i?2]?R[1]R[0]??????????????????????1?α1(i?1)??α2(i?1)???αi?1(i?1)?0????????????=??????????ε(i?1)00?0γ(i?1)???????????
上式成立的条件是:
γ ( i ? 1 ) = R [ i ] ? ∑ j = 1 i ? 1 α j ( i ? 1 ) R [ i ? j ] \gamma^{(i-1)}=R[i]-\sum_{j=1}^{i-1}\alpha_j^{(i-1)}R[i-j] γ(i?1)=R[i]?j=1i?1?αj(i?1)?R[i?j]
3、根据拓普利兹矩阵 R ( i ) R^{(i)} R(i)的对称性,方程组可以以相反顺序写出(第一个方程写在最后面,最后一个方程写在最前面,以此类推),可得:
[ R [ 0 ] R [ 1 ] R [ 2 ] ? R [ i ] R [ 1 ] R [ 0 ] R [ 1 ] ? R [ i ? 1 ] R [ 2 ] R [ 1 ] R [ 0 ] ? R [ i ? 2 ] ? ? ? ? ? R [ i ? 1 ] R [ i ? 2 ] R [ i ? 3 ] ? R [ 1 ] R [ i ] R [ i ? 1 ] R [ i ? 2 ] ? R [ 0 ] ] [ 0 ? α i ? 1 ( i ? 1 ) ? α i ? 2 ( i ? 1 ) ? ? α 1 ( i ? 1 ) 1 ] = [ γ ( i ? 1 ) 0 0 ? 0 ε ( i ? 1 ) ] \begin{bmatrix} R[0] & R[1] & R[2] & \cdots & R[i] \\ R[1] & R[0] & R[1] & \cdots & R[i-1]\\ R[2] & R[1] & R[0] & \cdots & R[i-2]\\ \vdots & \vdots & \vdots & \cdots & \vdots\\ R[i-1] & R[i-2] & R[i-3] &\cdots & R[1]\\ R[i] & R[i-1] & R[i-2] &\cdots & R[0] \end{bmatrix} \begin{bmatrix} 0\\ -\alpha_{i-1}^{(i-1)}\\ -\alpha_{i-2}^{(i-1)}\\ \vdots\\ -\alpha_{1}^{(i-1)}\\ 1\\ \end{bmatrix}= \begin{bmatrix} \gamma^{(i-1)}\\ 0\\ 0\\ \vdots\\ 0\\ \varepsilon^{(i-1)}\\ \end{bmatrix} ??????????R[0]R[1]R[2]?R[i?1]R[i]?R[1]R[0]R[1]?R[i?2]R[i?1]?R[2]R[1]R[0]?R[i?3]R[i?2]????????R[i]R[i?1]R[i?2]?R[1]R[0]??????????????????????0?αi?1(i?1)??αi?2(i?1)???α1(i?1)?1????????????=??????????γ(i?1)00?0ε(i?1)???????????
4、将2和3两步中的公式合并可得
R i ? [ [ 1 ? α 1 ( i ? 1 ) ? α 2 ( i ? 1 ) ? ? α i ? 1 ( i ? 1 ) 0 ] ? k i [ 0 ? α i ? 1 ( i ? 1 ) ? α i ? 2 ( i ? 1 ) ? ? α 1 ( i ? 1 ) 1 ] ] = [ [ ε ( i ? 1 ) 0 0 ? 0 γ ( i ? 1 ) ] ? k i [ γ ( i ? 1 ) 0 0 ? 0 ε ( i ? 1 ) ] ] R^i· \begin{bmatrix} \begin{bmatrix} 1\\ -\alpha_1^{(i-1)}\\ -\alpha_2^{(i-1)}\\ \vdots\\ -\alpha_{i-1}^{(i-1)}\\ 0 \end{bmatrix} -k_i \begin{bmatrix} 0\\ -\alpha_{i-1}^{(i-1)}\\ -\alpha_{i-2}^{(i-1)}\\ \vdots\\ -\alpha_{1}^{(i-1)}\\ 1\\ \end{bmatrix} \end{bmatrix}= \begin{bmatrix} \begin{bmatrix} \varepsilon^{(i-1)}\\ 0\\ 0\\ \vdots\\ 0\\ \gamma^{(i-1)} \end{bmatrix} -k_i \begin{bmatrix} \gamma^{(i-1)}\\ 0\\ 0\\ \vdots\\ 0\\ \varepsilon^{(i-1)}\\ \end{bmatrix} \end{bmatrix} Ri???????????????????????1?α1(i?1)??α2(i?1)???αi?1(i?1)?0?????????????ki????????????0?αi?1(i?1)??αi?2(i?1)???α1(i?1)?1????????????????????????=????????????????????ε(i?1)00?0γ(i?1)????????????ki???????????γ(i?1)00?0ε(i?1)??????????????????????
该式逼近了表达式 R ( i ) α ( i ) = e ( i ) R^{(i)}α^{(i)}=e^{(i)} R(i)α(i)=e(i),然后选择 γ ( i ? 1 ) γ^{(i-1)} γ(i?1)使方程右边的向量只有一个非零元素,此时新参数 k i k_i ki?必须为:
k i = γ ( i ? 1 ) ε i ? 1 = R [ i ] ? ∑ j = 1 i ? 1 α j ( i ? 1 ) R [ i ? j ] ε i ? 1 k_i=\frac{\gamma^{(i-1)}}{\varepsilon^{i-1}}=\frac{R[i]-\sum_{j=1}^{i-1}\alpha_j^{(i-1)} R[i-j]}{\varepsilon^{i-1}} ki?=εi?1γ(i?1)?=εi?1R[i]?j=1i?1?αj(i?1)?R[i?j]?
这样就确保方程右边的向量的最后一个元素为0,则此时第一个元素为:
ε i = ε i ? 1 ? k i γ ( i ? 1 ) = ε i ? 1 ( 1 ? k i 2 ) \varepsilon^i=\varepsilon^{i-1}-k_i\gamma^{(i-1)}=\varepsilon^{i-1}(1-k_i^2) εi=εi?1?ki?γ(i?1)=εi?1(1?ki2?)
5、选好 γ ( i ? 1 ) γ^{(i-1)} γ(i?1)后,第i阶的预测系数向量为:
α i ( i ) = k i \alpha_i^{(i)}=k_i αi(i)?=ki?
6、可得系数更新方程组为
α j ( i ) = α i ( i ? 1 ) ? k i α i ? j ( i ? 1 ) , j = 1 , 2 , ? ? , i ? 1 \alpha_j^{(i)}=\alpha_i^{(i-1)}-k_i\alpha_{i-j}^{(i-1)},j=1,2,\cdots,i-1 αj(i)?=αi(i?1)??ki?αi?j(i?1)?,j=1,2,?,i?1

α i ( i ) = k i \alpha_i^{(i)}=k_i αi(i)?=ki?

因此,对于某个特定的阶数p,最佳预测系数为:
α j = α i ( i ) = k i , j = 1 , 2 , ? ? , p \alpha_j=\alpha_i^{(i)}=k_i,j=1,2,\cdots,p αj?=αi(i)?=ki?,j=1,2,?,p
最终伪代码:

请添加图片描述

matlab实现

用到lpc函数:

a=lpc(x,n);

这里x为一帧语音信号,n为计算LPC参数的阶数。通常x为240点或256点的数据,n取10-12。

博主表示还是似懂非懂的,略难受。

希望有大牛推荐推荐书籍入个门。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:08:28  更:2021-09-18 10:10:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 14:45:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码