ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【语音分析】基于matlab线性预测系数对比 【含Matlab源码 557期】

2021-06-27 17:32:56  阅读:206  来源: 互联网

标签:subplot plot 预测 557 源码 matlab 语音 线性 LPC


一、简介

线性预测技术很早(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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有