【语音分析】基于matlab线性预测系数对比 【含Matlab源码 557期】
作者:互联网
一、简介
线性预测技术很早(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
标签:subplot,plot,预测,557,源码,matlab,语音,线性,LPC 来源: https://blog.51cto.com/u_15287606/2977616