编程语言
首页 > 编程语言> > 【语音分析】基于matlab线性预测系数对比 【含Matlab源码 557期】

【语音分析】基于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
完整代码或代写加1564658423

标签:subplot,plot,预测,557,源码,matlab,语音,线性,LPC
来源: https://www.cnblogs.com/homeofmatlab/p/14941208.html