Zm(k)=0;
fori=0:
N-1;
Zm(k)=Zm(k)+w(k+i);
end
j=j+1;
k=k+N/2;%每次移动半个窗
end
forw=1:
j
Q(w)=Zm(160*(w-1)+1)/(2*N);%短时平均过零率
end
subplot(3,1,3),plot(Q),title('短时平均过零率');
3)自相关函数
N=240
Y=wavread('C:
\Users\Administrator\Desktop\shiyan.wav');
x=x.*rectwin(240);
R=zeros(1,240);
fork=1:
240
forn=1:
240-k
R(k)=R(k)+x(n)*x(n+k);
end
end
j=1:
240;
plot(j,R);
grid;
实验二基于MATLAB分析语音信号频域特征
一、实验目的
信号的傅立叶表示在信号的分析与处理中起着重要的作用。
因为对于线性系统来说,可以很方便地确定其对正弦或复指数和的响应,所以傅立叶分析方法能完善地解决许多信号分析和处理问题。
另外,傅立叶表示使信号的某些特性变得更明显,因此,它能更深入地说明信号的各项红物理现象。
由于语音信号是随着时间变化的,通常认为,语音是一个受准周期脉冲或随机噪声源激励的线性系统的输出。
输出频谱是声道系统频率响应与激励源频谱的乘积。
声道系统的频率响应及激励源都是随时间变化的,因此一般标准的傅立叶表示虽然适用于周期及平稳随机信号的表示,但不能直接用于语音信号。
由于语音信号可以认为在短时间内,近似不变,因而可以采用短时分析法。
本实验要求掌握傅里叶分析原理,会利用已学的知识,编写程序估计短时谱、倒谱,画出语谱图,并分析实验结果,在此基础上,借助频域分析方法所求得的参数分析语音信号的基音周期或共振峰。
二、实验原理(自己补充)
1)滤波器频率响应
对特定频率的频点或该频点以外的频率进行有效滤除的电路,就是滤波器。
其功能就是得到一个特定频率或消除一个特定频率,滤波器是一种对信号有处理作用的器件或电路。
主要作用是:
让有用信号尽可能无衰减的通过,对无用信号尽可能大的。
滤波器的类型:
巴特沃斯响应(最平坦响应),贝赛尔响应,切贝雪夫响应。
滤波器冲激响应的傅里叶变换就是该滤波器的频率响应。
2)快速卷积
卷积定理指出,函数卷积的傅里叶变换是函数傅里叶变换的乘积。
即一个域中的卷积相当于另一个域中的乘积,例如时域中的卷积就对应于频域中的乘积。
其中表示f的傅里叶变换。
这一定理对拉普拉斯变换、双边拉普拉斯变换等各种傅里叶变换的变体同样成立。
在调和分析中还可以推广到在局部紧致的阿贝尔群上定义的傅里叶变换。
利用卷积定理可以简化卷积的运算量。
对于长度为n的序列,按照卷积的定义进行计算,需要做2n-1组对位乘法,其计算复杂度为;而利用傅里叶变换将序列变换到频域上后,只需要一组对位乘法,利用傅里叶变换的快速算法之后,总的计算复杂度为。
这一结果可以在快速乘法计算中得到应用。
信号的离散傅里叶变换
有限长序列的离散傅里叶变换公式为:
MATLAB函数:
fft功能是实现快速傅里叶变换,fft函数的格式为:
返回向量x的不连续fourier变换。
若
是一个N=12的有限序列,利用MATLAB计算
它的离散傅里叶变换
并画出图形,然后再对
进行离散傅里叶反变换求出
并画出其波形。
频率分辨率与DFT参数的选择
在DFT问题中,频率分辨率是指在频率轴上所得到的最小频率间隔
,即最小频率间隔反比于数据的长度N。
若在
中有两个频率分别为
和
的信号,对
用矩形窗截断时,要分辨出这两个频率,N必须满足
通过下面实验,验证上面的结论:
设一序列中含有两种频率成分,
,采样频率取为
,表示为
根据上面的结论,要区分这两种频率成分,必须满足
。
取
时,计算
的DFT
;
取
时,计算
的DFT
参考程序
1)短时谱
clear
a=wavread('shiyan.wav');
subplot(2,1,1),
plot(a);title('originalsignal');
grid
N=256;
h=hamming(N);
form=1:
N
b(m)=a(m)*h(m)
end
y=20*log(abs(fft(b)))
subplot(2,1,2)
plot(y);title('短时谱');
grid
2)语谱图
[x,fs,nbits]=wavread('shiyan..wav')
specgram(x,512,fs,100);
xlabel('时间(s)');
ylabel('频率(Hz)');
title('语谱图');
3)倒谱和复倒谱
(1)加矩形窗时的倒谱和复倒谱
clear
a=wavread('shiayn.wav',[4000,4350]);
N=300;
h=linspace(1,1,N);
form=1:
N
b(m)=a(m)*h(m);
end
c=cceps(b);
c=fftshift(c);
d=rceps(b);
d=fftshift(d);
subplot(2,1,1)
plot(d);title('加矩形窗时的倒谱')
subplot(2,1,2)
plot(c);title('加矩形窗时的复倒谱')
(2)加汉明窗时的倒谱和复倒谱
clear
a=wavread('shiyan.wav',[4000,4350]);
N=300;
h=hamming(N);
form=1:
N
b(m)=a(m)*h(m);
end
c=cceps(b);
c=fftshift(c);
d=rceps(b);
d=fftshift(d);
subplot(2,1,1)
plot(d);title('加汉明窗时的倒谱')
subplot(2,1,2)
plot(c);title('加汉明窗时的复倒')
实验三基于MATLAB的LPC分析
一、实验目的
线性预测分析是最有效的语音分析技术之一,在语音编码、语音合成、语音识别和说话人识别等语音处理领域中得到了广泛的应用。
语音线性预测的基本思想是:
一个语音信号的抽样值可以用过去若干个取样值的线性组合来逼近。
通过使实际语音抽样值与线性预测抽样值的均方误差达到最小,可以确定唯一的一组线性预测系数。
采用线性预测分析不仅能够得到语音信号的预测波形,而且能够提供一个非常好的声道模型。
如果将语音模型看作激励源通过一个线性时不变系统产生的输出,那么可以利用LP分析对声道参数进行估值,以少量低信息率的时变参数精确地描述语音波形及其频谱的性质。
此外,LP分析还能够对共振峰、功率谱等语音参数进行精确估计,LP分析得到的参数可以作为语音识别的重要参数之一。
由于语音是一种短时平稳信号,因此只能利用一段语音来估计模型参数。
此时有两种方案:
一种是将长的语音序列加窗,然后对加窗语音进行LP分析,只要限定窗的长度就可以保证分析的短时性,这种方案称为自相关法;另一种方案不对语音加窗,而是在计算均方预测误差时限制其取和区间,这样可以导出LP分析的自协方差法。
本实验要求掌握LPC原理,会利用已学的知识,编写程序估计线性预测系数以及LPC的推演参数,并能利用所求的相关参数估计语音的端点、清浊音判断、基因周期、共振峰等。
二、实验原理
LPC分析为线性时不变因果稳定系统V(z)建立一个全极点模型,并利用均方误差准则,对已知的语音信号s(n)进行模型参数估计。
如果利用P个取样值来进行预测,则称为P阶线性预测。
假设用过去P个取样值
的加权之和来预测信号当前取样值
,则预测信号
为:
(1)
其中加权系数用
表示,称为预测系数,则预测误差为:
(2)
要使预测最佳,则要使短时平均预测误差最小有:
(3)
(4)
令
(5)
最小的
可表示成:
(6)
显然,误差越接近于零,线性预测的准确度在均方误差最小的意义上为最佳,由此可以计算出预测系数。
通过LPC分析,由若干帧语音可以得到若干组LPC参数,每组参数形成一个描绘该帧语音特征的矢量,即LPC特征矢量。
由LPC特征矢量可以进一步得到很多种派生特征矢量,例如线性预测倒谱系数、线谱对特征、部分相关系数、对数面积比等等。
不同的特征矢量具有不同的特点,它们在语音编码和识别领域有着不同的应用价值。
三、实验结果
我们使用的原始语音为“shiyan”,采样频率为11000Hz,运行程序见附录。
在这里我们取第30帧进行观察,线性预测阶数为12,看到图3.1所示的原始语音帧的波形,预测语音帧波形和它们之间预测误差的波形。
图3.2为原始语音帧和预测语音帧的短时谱和LPC谱的波形
图3.1原始语音帧和预测误差的波形
图3.2原始语音帧和预测语音帧的短时谱和LPC谱的波形
图3.3原始语音和预测误差的倒谱波形
图3.4预测误差倒频谱
三、实验程序
MusicSource=wavread(‘shiyan’');
Music_source=MusicSource';
N=256;%windowlength,N=100--1000;
Hamm=hamming(N);%createHammingwindow
frame=input('请键入想要处理的帧位置=');
%originiscurrentframe
origin=Music_source(((frame-1)*(N/2)+1):
((frame-1)*(N/2)+N));
Frame=origin.*Hamm';
%
%ShortTimeFourierTransform
%
[s1,f1,t1]=specgram(MusicSource,N,N/2,N);
[Xs1,Ys1]=size(s1);
fori=1:
Xs1
FTframe1(i)=s1(i,frame);
end
N1=input('请键入预测器阶数=');%N1ispredictor'sorder
[coef,gain]=lpc(Frame,N1);%LPCanalysisusingLevinson-Durbinrecursion
est_Frame=filter([0-coef(2:
end)],1,Frame);%estimateframe(LP)
FFT_est=fft(est_Frame);
err=Frame-est_Frame;%error
%FFT_err=fft(err);
subplot(2,1,1),plot(1:
N,Frame,1:
N,est_Frame,'-r');grid;title('原始语音帧vs.预测后语音帧')
subplot(2,1,2),plot(err);grid;title('误差');
pause
fLength(1:
2*N)=[origin,zeros(1,N)];
Xm=fft(fLength,2*N);
X=Xm.*conj(Xm);
Y=fft(X,2*N);
Rk=Y(1:
N);
PART=sum(coef(2:
N1+1).*Rk(1:
N1));
G=sqrt(sum(Frame.^2)-PART);
A=(FTframe1-FFT_est(1:
length(f1')))./FTframe1;%inversefilterA(Z)
subplot(2,1,1),plot(f1',20*log(abs(FTframe1)),f1',(20*log(abs(1./A))),'-r');grid;title('短时谱');
subplot(2,1,2),plot(f1',(20*log(abs(G./A))));grid;title('LPC谱');
pause
temp=FTframe1-FFT_est(1:
length(f1'));
%notmovehigherfrequnce
pitch1=log(abs(temp));
pLength=length(pitch1);
result1=ifft(pitch1,N);
%movehigherfrequnce
pitch1((pLength-32):
pLength)=0;
result2=ifft(pitch1,N);
%directdorealcepstrumwitherr
pitch=fftshift(rceps(err));
origin_pitch=fftshift(rceps(Frame));
subplot(211),plot(origin_pitch);grid;title('原始语音帧倒谱(直接调用函数)');
subplot(212),plot(pitch);grid;title('预测误差倒谱(直接调用函数)');
pause
subplot(211),plot(1:
length(result1),fftshift(real(result1)));grid;title('预测误差倒谱(根据定义编写,没有去除高频分量)');
subplot(212),plot(1:
length(result2),fftshift(real(result2)));grid;title('预测误差倒谱(根据定义编写,去除高频分量)');
实验四基于VQ的特定人孤立词语音识别研究
一、实验目的
矢量量化(VectorQuantization)是一种极其重要的信号压缩方法,是自70年代末才发展起来的。
它广泛应用于语音编码、语音识别与合成、图象压缩等领域。
VQ在语音信号处理中占有十分重要的地位。
许多重要的研究课题中,特别是低速语音编码和语音识别的研究中,VQ都起着非常重要的作用。
量化可以分为两大类:
一类是标量量化,另一类是矢量量化。
标量量化是将取样后的信号值逐个地进行量化,而矢量量化是将若干个取样信号分成一组,即构成一个矢量,然后对此矢量一次进行量化。
当然,矢量量化压缩数据的同时也有信息的损失,但这仅取决于量化的精度。
矢量量化是标量量化的发展,可以说,凡是要用量化的地方都可以应用矢量量化。
本实验要求掌握矢量量化的原理,会利用已学的相关语音特征,构建语音特征矢量,然后利用VQ技术,编写训练VQ码表的程序,并在此基础上利用所学的语音识别技术,编程实现基于矢量量化的特定人孤立词语音识别,要注意的是识别过程中语音端点如何检测,从识别的实时性角度出发,建议能利用VC技术实现。
二、实验原理
1矢量量化
1)基本原理
矢量量化的过程是:
将语音信号波形的K个样点的每一帧,或者有K个参数的每一参数帧,构成K维空间中的一个矢量,然后对这个矢量进行量化。
通常所说的标量量化,也可以说是K=1的一维矢量量化。
矢量量化的过程与标量量化相似。
在标量量化时,在一维的零至无大值之间设置若干个量化阶梯,当某输入信号的幅度值落在某相邻的两个量化阶梯之间时,就被量化为两阶梯的中心值。
而在矢量量化时,将K维无限空间划为M个区域边界,然后将输入矢量与这些边界进行比较,并被量化为“距离”最小的区域边界的中心矢量值。
2)、失真测度
设计矢量量化器的关键是编码器的设计,而译码器的工作仅是一个简单的查表过程。
在编码的过程中,需要引入失真测度的概念。
失真是将输入信号矢量用码书的重构矢量来表征时的误差或所付出的代价。
而这种代价的统计平均值(平均失真)描述了矢量量化器的工作特性。
在矢量量化器的设计中,失真测度的选择是很重要的。
失真测度选用的合适与否,直接影响系统的性能。
要使所选择的失真测度有实际意义,必须具备以下几个条件:
在主观评价上有意义,即最小的失真应该对应与好的主观语言质量;易于处理,即在数学上易于实现,这样可以用于实际的矢量量化器的设计;平均失真存在并且可以计算。
2LBG算法
算法是由Linde,Buzo和Gray在1980年首次提出的,常称为LBG算法。
它是标量量化器中Lioyd算法的多维推广。
整个算法实际上就是反复迭代的过程,既用初始码书寻找最佳码书的迭代过程。
它由对初始码书进行迭代优化开始,一直到系统性能满足要求或者不再有明显的改进为止。
这种算法既可以用于已知信号源概率分布的场合,也可以用于未知信号源概率分布的场合,但此时要知道它的一系列输出值(称为训练序列)。
由于通常语音信号的概率分布随着各种应用场合的不同,不可能事先统计过,因而无法知道它的概率分布;3语音识别;语音识别是研究使机器能够准确地听出人的语音内容的;运用语音识别技术,人们设计了各种语音识别系统;这种系统存在的问题最少,因为单词之间有停顿,可以;不管用何种语音识别方法,主要过程由两部分组成,一;要实现上面的隐马尔可夫模型,模型的输入信号必须取;三、实验结果;就算法模型方面而言,需要有进一步的突破;就强健性方面而言.
3语音识别
语音识别是研究使机器能够准确地听出人的语音内容的问题,即准确的识别所说的语音。
语音识别是近二三十几年发展起来的新兴学科,在计算机、信息处理、通信与电子系统、自动控制等领域中有着广泛的应用。
运用语音识别