线性预测技术很早(1967年)就已经被应用与语音处理领域,基本概念是:一个语音的采样值可以通过过去若干语音采样值的线性组合来逼近(最小均方误差),能够决定唯一的一组预测系数,而这个预测系数就是题目中的LPC,可以当作是该语音的一个特征。
1.优势
线性预测最重要的优势在于其可以较为精确的估计语音的参数,而这些极少的参数可以正确的表现语音信号的时域和频域特性。
2.基本原理
线性预测分析的基本原理是把信号用一个模型来表示,即将信号看作某一个模型(系统)的输出,这样就可以用该模型的参数来描述信号。
假设模型的输入为u(n),输出为x(n),模型传递函数为H(z),则求模型的参数则可用传递函数的方法来求解,即:
3.求解方法
% 线性预测系数对比 clear all; clc; close all; [x,fs]=wavread('C3_5_y.wav'); % 读入语音数据 L=240; % 帧长 y=x(8001:8000+L); % 取一帧数据 p=12; % LPC的阶数 ar1=lpc(y,p); % MATLAB自带函数进行线性预测变换 ar2=lpc_coeff(y,p); % 编写的函数进行线性预测变换 est_x1=filter([0 -ar1(2:end)],1,y); % 用LPC求预测估算值 est_x2=filter([0 -ar2(2:end)],1,y); % 用编写函数求预测估算值 err1=y-est_x1; % LPC的预测误差 err2=y-est_x2; % 编写函数的预测误差 subplot 321; plot(x,'k'); axis tight; title('(a)元音/a/波形'); ylabel('幅值') subplot 322; plot(y,'k'); xlim([0 L]); title('(b)一帧数据'); ylabel('幅值') subplot 323; plot(est_x1,'k'); xlim([0 L]); title('(c)LPC预测值'); ylabel('幅值') subplot 324; plot(est_x2,'k'); xlim([0 L]); title('(d)lpc\_coeff预测值'); ylabel('幅值') subplot 325; plot(err1,'k'); xlim([0 L]); title('(e)LPC预测误差'); ylabel('幅值'); xlabel('样点') % 编程比较LPC预测系数的复频谱与FFT频谱 clear all; clc; close all; [x,fs]=wavread('C3_5_y.wav'); % 读入语音数据 L=240; % 帧长 p=12; % 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=lpcff(ar,W2); % 计算预测系数的频谱 % 编程比较LPCC clear all; clc; close all; [x,fs]=wavread('C3_5_y.wav'); % 读入语音数据 L=240; % 帧长 p=12; % LPC的阶数 y=x(8001:8000+L); % 取一帧数据 ar=lpc(y,p); % 线性预测变换 lpcc1=lpc_lpccm(ar,p,p); lpcc2=rceps(ar); subplot 211; plot(lpcc1(1:2:end),'k'); title('(a)线性预测系数求LPCC'); ylabel('幅值'); xlabel(['样点' ]) subplot 212; plot(lpcc2(1:p/2),'k');
版本:2014a
完整代码或代写加1564658423