编程语言
首页 > 编程语言> > 【语音分析】基于matlab语音线谱对转换【含Matlab源码 560期】

【语音分析】基于matlab语音线谱对转换【含Matlab源码 560期】

作者:互联网

一、简介

线谱对分析是一种频域参数分析方法,这种LPC方法求解的模型参数为线谱对(LSP, Line Spectrum Pair)。LSP在数学上等价于其他LPC参数,如αi。如将声道视为由P+1段声管级联而成,则LSP表示声门完全开启或完全闭合下声管的谐振频率。它也可以用于估计语音的基本特性。因为其为频域参数,因而与语音信号的谱包络的峰联系更为密切。同事LSP有良好的量化和差值特性,因而在LPC声码器中得到应用。目前,表示LPC参数最有效的方式为LSP,它的一些特性比其他系数更有吸引力。

LPC分析与格型法分析类似,也是以全极点模型为基础。线谱对分析的基本出发点是通过两个z变换P(z)和Q(z),将A(z)(误差传递函数)的P个零点映射到单位圆上,以使这些零点直接用频率w反应,而P(z)和Q(z)各提供P/2个零点频率。LSP参数的求解有代数方程式求根和DFT方法等。

二、源代码

clear all; clc; close all;

[x,fs]=wavread('C3_6_y.wav');          
x=x/max(abs(x));              % 幅值归一化
time=(0:length(x)-1)/fs;      % 求出对应的时间序列
N=200;                              % 设定帧长
M=80;                               % 设定帧移的长度  
xn=enframe(x,N,M)';           % 按照参数进行分帧
s=xn(:,100);                        % 取分帧后的笫100帧进行分析

p=12;                               % 设预测阶次
num=256;                        % 设定频谱的点数
a2 =lpc(s,p);                       % 利用信号处理工具箱中的函数lpc求预测系数a2
Hw=lpcff(a2,num-1);        % 调用lpcar2ff函数从预测系数a求出LP谱Hw
Hw_abs=abs(Hw);               % 取Hw的模值
lsf=lpctolsf(a2);                   % 调用ar2lsf函数把ar系数转换的lsf参数
P_w=lsf(1:2:end);               % 用lsf求出P和Q对应的频率,单位为弧度
Q_w=lsf(2:2:end);
P_f=P_w*fs/2/pi;              % 转换成单位为Hz
Q_f=Q_w*fs/2/pi;

subplot 211; plot(s,'k');     % 画出一帧信号的波形
title('(a)语音信号C3\_6\_y.wav的一帧波形图 ');
xlabel(['样点值' 10 ]); ylabel('幅值')    
freq=(0:num-1)*fs/512;          % 计算频域的频率序列
m=1:num;
K=length(Q_w);

ar=lsftolpc(lsf);                       % 调用lsf2ar函数把lsf转换成预测系数ar 
Hw1=lpcff(ar,num-1);            % 调用lpcar2ff函数,从预测系数ar求出LP谱Hw1
Hw1_abs=abs(Hw1);
subplot 212;                            % 把Hw和Hw1画在一个图中
hline1 = plot(freq,20*log10(Hw_abs(m)/max(Hw_abs)),'k','LineWidth',2); 
hline2 = line(freq+1,20*log10(Hw1_abs(m)/max(Hw1_abs)),...
    'LineWidth',5,'Color',[.6 .6 .6]);
set(gca,'Children',[hline1 hline2]);
axis([0 fs/2 -35 5]);
title('(b)语音信号的LPC谱和线谱对还原LPC的频谱 ');
xlabel(['频率/Hz' 10]); ylabel('幅值')    
for k=1 : K                   % 把P_f和Q_f也在图中用垂直线标出
    line([Q_f(k) Q_f(k)],[-35 5],'color','k','Linestyle','--');
    line([P_f(k) P_f(k)],[-35 5],'color','k','Linestyle','-');
end

三、运行结果

在这里插入图片描述

四、备注

版本:2014a

标签:lsf,LSP,Hw,线谱,abs,语音,LPC,源码,Hw1
来源: https://blog.51cto.com/u_15287606/2975926