自適應濾波——線性預測(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譜之后,可以利用峰值查找等方式,進行共振峰估計。

 

參考:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM