自适应滤波——线性预测(LPC)
作者:桂。
时间:2017-03-26 10:12:07
链接:http://www.cnblogs.com/xingshansi/p/6621914.html
【读书笔记05】
前言
西蒙.赫金的《自适应滤波器原理》第四版第三章,线性预测是Wiener Filter的应用,作为信号识别的特征以及信号编码的一种实现途径。本想着跳过这一章,但想着每一章多少记录一下,直到看到Kalman Filter,也就写写吧。主要包括:
1)前向线性预测原理;
2)线性预测应用实例;
内容为自己的学习笔记,如有不当之处,希望各位帮忙指出!
一、前向线性预测原理
以语音信号为例,声道模型的一种观点是:级联结构的共振峰模型。即:对于一般元音,可以用全极点模型,传输函数:
H(z)=G1−p∑i=1aiz−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观察声道特性,同样可以进行共振峰提取,这些都可以看作说话人的特征。
给出代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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在语音信号分析和合成中的应用》.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述