自适应滤波——线性预测(LPC)
作者:桂。
时间:2017-03-26 10:12:07
链接:http://www.cnblogs.com/xingshansi/p/6621914.html
【读书笔记05】
前言
西蒙.赫金的《自适应滤波器原理》第四版第三章,线性预测是Wiener Filter的应用,作为信号识别的特征以及信号编码的一种实现途径。本想着跳过这一章,但想着每一章多少记录一下,直到看到Kalman Filter,也就写写吧。主要包括:
1)前向线性预测原理;
2)线性预测应用实例;
内容为自己的学习笔记,如有不当之处,希望各位帮忙指出!
一、前向线性预测原理
以语音信号为例,声道模型的一种观点是:级联结构的共振峰模型。即:对于一般元音,可以用全极点模型,传输函数:
$H\left( z \right) = \frac{G}{{1 - \sum\limits_{i = 1}^p {{a_i}{z^{ - k}}} }}$
G为幅值因子,p为极点个数。
这里仅仅讨论全极点模型。对于输出$x(n)$和激励$u(n)$有差分方程:
$x\left( n \right) = \sum\limits_{i = 1}^p {{a_i}x\left( {n - i} \right) + Gu\left( n \right)}$
称系统
$\hat x\left( n \right) = \sum\limits_{i = 1}^p {{a_i}x\left( {n - i} \right)} $
为线性预测器。$\hat x\left( n \right)$是$x(n)$的估算值。$a_i$为预测系数(Linear Prediction Coefficient, LPC),$p$为对应阶数。
对应单点预测误差:
$e(n) = x(n) - \hat x\left( n \right) = x(n) - \sum\limits_{i = 1}^p {{a_i}x\left( {n - i} \right)} $
预测误差:
$\sum\limits_n {{e^2}(n)} = \sum\limits_n {{{\left[ {x(n) - \sum\limits_{i = 1}^p {{a_i}x\left( {n - i} \right)} } \right]}^2}} $
对$a_i$求偏导即可实现求解,得出的方程组通常称为Yule-Walker方程。
二、应用实例
利用预测系数估计逼近系统响应$H$,可以用该系数表征语音的特性,也可以用逼近的$H$观察声道特性,同样可以进行共振峰提取,这些都可以看作说话人的特征。
给出代码:
clear all; clc; close all;
filedir=[]; % 设置数据文件的路径
filename='a.wav'; % 设置数据文件的名称
fle=[filedir filename] % 构成路径和文件名的字符串
[x,fs]=wavread(fle); % 读入语音数据
L=240; % 帧长
p=30; % LPC的阶数
y=x(8001:8000+L); % 取一帧数据
ar=lpc(y,p); % 线性预测变换
nfft=512; % FFT变换长度
W2=nfft/2;
m=1:W2+1; % 正频率部分下标值
Y=fft(y,nfft); % 计算信号y的FFT频谱
Y1=lpcar2ff(ar,W2-1); % 计算预测系数的频谱
% 作图
subplot 311; plot(y,'k');
title('一帧语音信号的波形'); ylabel('幅值'); xlabel('(a)')
subplot 312;
plot(m,20*log10(abs(Y(m))),'k','linewidth',1.5);
line(m,20*log10(abs(Y1)),'color','r','linewidth',2)
axis([0 W2+1 -30 25]); ylabel('幅值/db');
legend('FFT频谱','LPC谱',3); xlabel(['样点' 10 '(b)'])
title('FFT频谱和LPC谱的比较 p=4'); subplot 313;
plot(m,20*log10(abs(Y(m))),'k','linewidth',1.5);
line(m,20*log10(abs(Y1)),'color','r','linewidth',2)
axis([0 W2+1 -30 25]); ylabel('幅值/db');
legend('FFT频谱','LPC谱',3); xlabel(['样点' 10 '(c)'])
title('FFT频谱和LPC谱的比较 p=30');
对应结果图:

可以看出,信号的频谱由慢变化分量调制高频信号,对应时域就是卷积,而声道模型对应卷积的$h(n)$,p选择过小估计不准,选择过大容易过拟合,这么看来lpc说是预测其实本质也是拟合的问题,同样有Over-fitting. 得到LPC谱之后,可以利用峰值查找等方式,进行共振峰估计。
参考:
- Simon Haykin 《Adaptive Filter Theory Fourth Edition》.
- 宋知用:《MATLAB在语音信号分析和合成中的应用》.
自适应滤波——线性预测(LPC)的更多相关文章
- 自适应滤波:最小均方误差滤波器(LMS、NLMS)
作者:桂. 时间:2017-04-02 08:08:31 链接:http://www.cnblogs.com/xingshansi/p/6658203.html 声明:欢迎被转载,不过记得注明出处哦 ...
- 自适应滤波:维纳滤波器——FIR及IIR设计
作者:桂. 时间:2017-03-23 06:28:45 链接:http://www.cnblogs.com/xingshansi/p/6603263.html [读书笔记02] 前言 仍然是西蒙. ...
- 自适应滤波:维纳滤波器——GSC算法及语音增强
作者:桂. 时间:2017-03-26 06:06:44 链接:http://www.cnblogs.com/xingshansi/p/6621185.html 声明:欢迎被转载,不过记得注明出处哦 ...
- 自适应滤波:维纳滤波器——LCMV及MVDR实现
作者:桂. 时间:2017-03-24 06:52:36 链接:http://www.cnblogs.com/xingshansi/p/6609317.html 声明:欢迎被转载,不过记得注明出处哦 ...
- 自适应滤波原理及simulink
- 自适应滤波:奇异值分解SVD
作者:桂. 时间:2017-04-03 19:41:26 链接:http://www.cnblogs.com/xingshansi/p/6661230.html 声明:欢迎被转载,不过记得注明出处哦 ...
- 七中滤波方法测试matlab实现
http://blog.163.com/xiaheng0804@126/blog/static/1205282120132129471816/ 创建两个混合信号,便于更好测试滤波器效果.同时用七中滤波 ...
- 自适应滤波器(Adaptive Filter)
======= Wikipedia的解释 ======= 自适应滤波器是能够根据输入信号自动调整性能进行数字信号处理的数字滤波器.作为对比,非自适应滤波器有静态的滤波器系数,这些静态系数一起组成传递函 ...
- Wellner 自适应阈值二值化算法
参考文档: Adaptive Thresholding for the DigitalDesk.pdf Adaptive Thresholding Using the Integral I ...
随机推荐
- JS打开摄像头并截图上传
直入正题,JS打开摄像头并截图上传至后端的一个完整步骤 1. 打开摄像头主要用到getUserMedia方法,然后将获取到的媒体流置入video标签 2. 截取图片主要用到canvas绘图,使用dra ...
- find查找命令
find # 格式 find [路径] [参数] [表达式] -exec 指令 {} \ ; -{} 代表find找到的文件 -\ 禁止转意 : 表示本行指令结束 # find /sbin -type ...
- 用phpcms如何将静态页面制作成企业网站,头部加尾部
首先,先要准备好这个静态网页的源文件,如图 bs里面是一些css和js的文件,img则是放图片的,文件中的index是网页的首页 运行一下,看看 是这样的 然后打开phpcms文件,上篇博客中有提到, ...
- Javascript 闭包与高阶函数 ( 二 )
在上一篇 Javascript 闭包与高阶函数 ( 一 )中介绍了两个闭包的作用. 两位大佬留言指点,下来我会再研究闭包的实现原理和Javascript 函数式编程 . 今天接到头条 HR 的邮件,真 ...
- 不启动VS2013,直接打开帮助文档的方法
在使用VS2013做开发的时候,当我们需要查询一个知识点时,直接按"F1"键就可以打开配套的帮助文档.如果在没有打开VS2013的情况想查看它的帮助文档,我们应该怎么办呢?我们能否 ...
- Linux实战教学笔记17:精简shell基础
第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...
- ASP.NET Core MVC上传、导入、导出知多少
前言 本君已成夜猫子,本节我们来讲讲ASP.NET Core MVC中的上传,这两天才研究批量导入功能,本节顺便简单搞搞导入.导出,等博主弄妥当了再来和大家一并分享. .NET Core MVC上传 ...
- Sleeping会话导致阻塞原理(下)
背景 最近给客户做优化时,有几个客户都存在.SLEEPING 会话中开启了事务,导致的大量阻塞,从而产生严重的性能问题.虽然在之前的文章我分享了Sleeping会话导致阻塞原理(上) .说明了什么是S ...
- Android学习总结(一)——Activity的基本概念与Activity的生命周期
一.Activity的基本概念 Activity是Android的四大组件之一,它是一种可以包含用户界面的组件,主要用于和用户进行交互,比如打电话,照相,发送邮件,或者显示一个地图!Activity用 ...
- perl 正则表达式之漫游
废话不多说了,直奔主题~ 一.简单模式进行匹配 将模式写在一对//中即可,匹配对象是$_ 元字符:圆括号() 进行模式分组 点号 . 能匹配任意一个字符,除换行符(\n)以 ...