基于MATLAB 的语音信号的基音周期检测
摘要:MATLAB 是一种科学计算软件,专门以矩阵的形式处理数据。MATLAB 将要性能的数值计算和可视化集成在一起,并提供了大量的内置函数,从而被广泛的应用于科学计算、控制系统和信息处理等领域的分析、仿真和设计工作。
MATLAB 在信号与系统中的应用主要包括符号运算和数值计算仿真分析。由于信号与系统课程的许多内容都是基于公式演算,而MATLAB 借助符号数学工具箱提供的符号运算功能,基本满足设计需要。例如:解微分方程、傅里叶正反变换、拉普拉斯正反变换和Z 正反变换等。MATLAB 在信号与系统中的另一主要应用是数值计算与仿真分析,主要包括函数波形绘制、函数运算、冲击响应仿真分析、信号的时域分析、信号的频谱分析、系统的S 域分析和零极点图绘制等内容。
本次课程设计为语音信号的基音周期检测,采集语音信号,对语音信号进行处理,区分清音浊音,并通过对采样值进行滤波、分帧、求短时自相关函数,得到浊音的基音周期。
关键字:清音、浊音、基音周期、基音检测、自相关函数
目录
1 概述 ............................................................................................ 1
2 AMDF算法原理及实现 ............................................................ 1
2.1 AMDF算法源程序 ........................................................... 2
3 ACF算法原理及实现 ................................................................ 4
3.1 用短时平均能量进行清/浊音的判断.............................. 4
3.2 自相关函数基音检测的原理 . .......................................... 6
3.3 算法实现及相关程序 . ...................................................... 6
3.3.1 带通滤波 . ................................................................. 7
3.3.2 取样与分帧 . ............................................................. 7
3.3.3 短时能量分析 . ......................................................... 8
3.3.4 自相关函数分析 . ................................................... 11
4 总结与心得体会 . ..................................................................... 13
参考文献 . ..................................................................................... 13
1 概述
基音周期检测也称为基频检测(Pitch Detection) ,它的目标是找出和声带振动频率完全一致的基音周期变化轨迹曲线, 或者是尽量相吻合的轨迹曲线。基音周期检测在语音信号的各个处理领域中, 如语音分析与合成、有调语音的辨意、低速率语音压缩编码、说话人识别等都是至关重要的, 它的准确性及实时性对系统起着非常关键的作用, 影响着整个系统的性能。
浊音信号的周期称为基音周期, 它是声带振动频率的倒数, 基音周期的估计称为基音检测。基音检测是语音处理中的一项重要技术之一, 它在有调语音的辨意、低速率语音编码、说话人识别等方面起着非常关键的作用; 但在实现过程中, 由于声门激励波形不是一个完全的周期脉冲串, 而且声道的影响很难去除、基音周期的定位困难、背景噪声的强烈影响等一系列因素, 基音检测面临着很大的困难。而自相关基因检测算法是一种基于语音时域分析理论的较好的算法。
本文在对AMDF 、ACF 基音检测算法基本原理进行分析的基础上, 对此算法进行了深入的探讨, 针对以往研究中存在的问题加以改进, 给出了一种方便、快捷的检测方案。综合考虑了检测准确度和检测速率两方面的因素, 然后通过对一段具体的语音信号进行处理, 较准确地得到浊音语音信号的基音周期。
2 AMDF算法原理及实现
语音信号{s(n))的短时平均幅度差函数(AMDF)定义为:
其中,w(m)是窗函数,尺是信号的平均值,因为语音信号的浊音段具有周期性,假设基音周期为p ,则在浊音段,
出现谷点,谷点间的距离即为基音周期。
与短时自相关函数一样,对周期性的浊音语音,也呈现与 在k=p,2p ,3p …将浊音语音周期相一致的周期特性,不过不同的是在周期的各个 的计算同 整数倍点上具有谷值特性而不是峰值特性,因而通过
样可以确定基音周期。而对于清音信号,
利用却没有这种周期特性。 的这种特性,可以判定一段语音是浊音还是清音,并估计
出浊音语音的基音周期。由于计算函数只需要加、减和取绝对值运算, 运算量较之短时自相关函数大大下降。同时,函数在基音周期点的谷 值比自相关函数的峰值更加尖锐,因此错判率相对较小,稳健性更高。 但是当语音信号的幅度快速变化时,函数的谷值深度会减小,从而影 响基音估计的精度。
2.1 AMDF算法源程序
AMDF 波形图如图2-1所示。
y=wavread(C:\Documents and Settings\Administrator\桌面\yejianglong '.wav');
y1=b(3500:6000);
N=320;%选择的窗长,加N=320的矩形窗
A=[];
for k=1:320
sum=0;
for m=1:N
sum=sum+abs(y1(m)-y1(m+k-1));%计算自相关
end
A(k)=sum;
end
s=y(3500:10000);
figure(1)
subplot(211)
plot(s)
xlabel('样点')
ylabel('幅度')
axis([0,2500,-1,1]);
subplot(212)
plot(A)
xlabel('延时k')
ylabel('AMDF')
axis([0,400,0,200]);
图2-1 AMDF波形图
由图2-1 AMDF波形图可知:平均幅度差函数在基音周期处表现为谷值,这些谷值之间的间隔的平均值就是所要求得的基音周期。输入语音帧的平均幅度差函数的最小值发生在第l 点,其值为O ,我们可以设置一定的门限,得到低于此门限的局部最低点(不包含第1点) 。从图中, 我们可以得到谷点的样本值分别为70、140、210,其间隔平均值为70。因此对应的基音频率为:Fs /(70一1)=Fs/69=37000/69=536,这和采用自相关法的检测结果完全相同。
3 ACF算法原理及实现
3.1 用短时平均能量进行清/浊音的判断
语音信号{ x ( n) } 的某帧信号的短时平均能量En 的定义为:
式中,w ( n) 为窗函数; N 为窗长。令h( n) = w2 ( n) ,
则有
由此表明, 窗口加权短时平均能量En 相当于将“语音平方”信号通过一个单位函数响应为h( n) 的线性滤波器的输出。试验统计发现, 语音浊音段的短时平均能量远远大于清音段的短时平均能量。因此, 短时平均能量En 的计算给出了区分清音段与浊音段的依据, 即En (浊) > En (清) 。根据En 由高到低的跳变可定出浊音变为清音语音的时刻, En 由低向高的跳变可定出清音变为浊音语音的时刻; 而只有浊音才有基音周期, 清音的基音周期为零。故清浊音判断是基音检测的第一步。
该算法中窗口选择汉明窗, 其定义为:
选择汉明窗的理由是窗函数的选取原则为窗函数截取后的x ( n) 尽量是中间大两头小的光滑函数, 冲激响应对应的滤波器具有低通特性。从汉明窗的构成及频率响应特性上看, 汉明窗具有这种特性, 而矩形窗及汉宁窗则稍逊之。汉明窗虽然主瓣最高(带宽大) ,但旁瓣最低(通带外的衰减大) , 可以有效地克服泄露现象, 具有更好的低通特性。故选择汉明窗而不选择别的窗函数, 能使短时平均能量En 更能反映语音信号的幅度变化。
3.2 自相关函数基音检测的原理
对于离散的数字语音信号序列x ( n) ,自相关函数定义如下:
式中, k 为信号的延迟点数。对于随机性信号序列或周期性信号序列, 自相关函数定义为:
自相关函数具有以下的性质:如果序列x ( n) 具有周期Np ,则其自相关函数也是同周期的周期函数。即:x ( n) = x ( n + N p );则:R( k) = R ( k + N p ) 。
清音信号没有周期性, 它的自相关函数也没有周期, R( k) 会随着k 的增大迅速衰减。浊音信号具有准周期性, 它的自相关函数R ( k) 具有与{ x ( m) } 相同的周期。自相关法基音检测正是利用R ( k) 的这一性质对语音信号进行基音检测的。
3.3 算法实现及相关程序
通过对自相关基音检测原理的分析, 考虑到检测准确度和检测速率2 方面的因素, 提出了算法实现方案, 并对算法进行了Matlab 编程实现。算法包含6个功能模块: 带通滤波、取样、分帧、短时能量分析、相关运算、基音检测。框图如图3-1所示。
图3-1 基因检测框图
3.3.1 带通滤波
该研究以采样频率为8kHz 、精度为16 比特的wav 文件作为声源, 以网络录音机录制自己的一段语音。因为语音信号包含非常丰富的谐波分量, 基音频率最低可达80Hz , 最高可达500Hz , 但基音频率大多数分布在100~200Hz 之间 。因此, 浊音信号可能含有三四十次谐波分量, 而其基波分量往往不是最强的分量。语音信号的第一共振峰通常在300~1000Hz 范围内, 即基音的2~8 次谐波成分比基波分量还要强。为了提高检测的准确度, 算法中引入了一个60~500Hz 带通滤波模块滤除语音帧的高次谐波分量。该算法中用音效编辑软件Cooledit 提供的功能直接滤波, 方便快速, 它在保持语音信息的前提下, 可以大大减少谐波成分。
3.3.2 取样与分帧
取样模块从以采样频率为8kHz 的语音信号中截取Lengt h (样点数) 长个样点值, 一般取样点数为帧长的整数倍即可, 程序中取了18000 个样点数进行分析。分帧模块主要完成将取样模块中获得的语音样值点分为若干个语音帧, 算法中分析帧长30ms , 即每帧长为240 个样点。然后用短时平均能量判断出浊音帧, 再对浊音帧进行自相关计算, 最后进行基音周期检测。
3.3.3 短时能量分析
原始信号及其频谱波形如图3-2所示。
图3-2 原始信号及其频谱波形
%原始信号
[y,fs,nbits]=wavread (' C:\Documents and Settings\Administrator\桌面\yejianglong.wav' );
%把语音信号进行加载入Matlab 仿真软件平台中
sound(y,fs,nbits); %回放语音信号
n = length (y) ; %求出语音信号的长度
Y=fft(y,n); %快速傅里叶变换
subplot(2,1,1);plot(y);title(' 原始信号波形' );
grid;
subplot(2,1,2);plot(abs(Y));title(' 原始信号频谱' );
grid;
短时能量的函数由以下程序实现, 短时能量曲线如图3-3所示。
图3-3 短时能量曲线
%经滤波后波形
N=240
y=WAVREAD(' C:\Documents and Settings\Administrator\桌\yejianglong.wav') ,
[1 18000]);
L=length(y)%30秒,每秒8000个点,一共240000个点
面
LL=length(y)/N %一共 1000帧
%短时能量
figure(1)
F1 = enframe(y,200);
eng = sum(F1.^2);
plot(eng);xlabel(' 帧' );ylabel(' 短时平均能量' );title(' 短时能量' )
%短时平均幅度Mn=sum(abs(Y))/N
figure(2)
F2 = enframe(y,200);
eng = sum(abs(F2));
plot(eng);xlabel(' 帧' );ylabel(' 短时平均幅度' );title(' 短时平均幅度' ); 短时平均幅度函数曲线如图3-4
所示。
图3-4 短时平均幅度曲线
%分帧函数
function f=enframe(x,win,inc)
nx=length(x(:));
len = win;
if (nargin
inc = len;
end
nf = fix((nx-len+inc)/inc);
f=zeros(nf,len);
indf= inc*(0:(nf-1)).';
inds = (1:len);
f(:) = x(indf(:,ones(1,len))+inds(ones(nf,1),:));
f = f';
3.3.4 自相关函数分析
从图3-3可以看出En 值大的对应于浊音段, 而En 值小的对应于清音段。由此可以大致判断浊音变为清音或清音变为浊音的时刻。浊音段的自相关函数由以下程序实现, 得到波形图如图3-5所示。
%短时自相关函数
[y,fs,N]=wavread (' C:\Documents and Settings\Administrator\桌面\yejianglong.wav' );
F = enframe(y,200);
f5 = F(:,5);
out8=autocorr(f8);
subplot(2,1,1);plot(f8);xlabel(' 样点' );title(' 浊音帧波形图' );
subplot(2,1,2);plot(out8);xlabel(' 延时' );title(' 浊音帧短时自’);
图3-5浊音段自相关函数
从图3-5可以看出, 第一个峰值的位置约出现在15 的滞后点上。因为浊音语音的自相关函数具有一定的周期性, 在相隔一定的取样后, 自相关函数达到最大值。浊音语音的周期可用自相关函数中的第一个峰值的位置来估算。试验表明, 滤波处理后的信号只含有第一共振峰以下的基波和谐波分量, 明显改善了检测效果。由此估计出这段浊音的基音频率是1000/ (0.125 ×15) = 533Hz 或(1/ 533) s = 1.88ms左右的基音周期。
从画出的图形中间可以看出,没有加滤波器的声音信号处理后共振峰的影响很大。但是加一个60~600Hz的带通滤波器,利用滤波后的信号进行基因估计,这样可除去大部分共振峰的影响,自相关函数和短时平均幅度差函数具有更尖锐地峰值,有利于判决地准确性。
4 总结与心得体会
一周的MATLAB 课程设计就要结束了,通过这次设计,我深刻体会到在信号处理方面我的严重不足,MATLAB 的应用也相当生疏。
在设计过程中,很多东西都看不懂,对原理也一塌糊涂。搜的一些材料也没有发挥他们的作用。有些公式原理看懂了可程序又不行了,看不出每一步的作用及实现的功能。这种种困难让我这次课程设计很郁闷,大学生活马上就结束了,可一次课程设计就有很多问题没解决,这让我很恐惧。
设计中遇到的问题通过老师的讲解以及与同学的交流也解决了一部分,总的来说在这次设计中我还是学到了一些知识。比如,浊音与清音的区分,滤波与否对自相关函数曲线的影响。也许天气的原因,在设计过程中心情很烦躁,浪费了很多时间,这对学习的影响是很严重的,我会时时注意。
此时此刻,即有独立完成设计的喜悦又有对自己不足的担忧。马上就要毕业了,在校学习的机会也不多了,我会在余下的时间里努力学习,改正自己的缺点,弥补自己的不足。争取一年后能以优秀的成绩毕业。
参考文献
[1] 赵力著,语音信号处理(第2版)[M],机械工业出版社,2010.
[2] 胡航著,语音信号处理(第四版)[M],哈尔滨工业大学出版社,2009.
[3] 张雄伟等著,现代语音处理技术及应用[M],机械工业出版社,2009.
基于MATLAB 的语音信号的基音周期检测
摘要:MATLAB 是一种科学计算软件,专门以矩阵的形式处理数据。MATLAB 将要性能的数值计算和可视化集成在一起,并提供了大量的内置函数,从而被广泛的应用于科学计算、控制系统和信息处理等领域的分析、仿真和设计工作。
MATLAB 在信号与系统中的应用主要包括符号运算和数值计算仿真分析。由于信号与系统课程的许多内容都是基于公式演算,而MATLAB 借助符号数学工具箱提供的符号运算功能,基本满足设计需要。例如:解微分方程、傅里叶正反变换、拉普拉斯正反变换和Z 正反变换等。MATLAB 在信号与系统中的另一主要应用是数值计算与仿真分析,主要包括函数波形绘制、函数运算、冲击响应仿真分析、信号的时域分析、信号的频谱分析、系统的S 域分析和零极点图绘制等内容。
本次课程设计为语音信号的基音周期检测,采集语音信号,对语音信号进行处理,区分清音浊音,并通过对采样值进行滤波、分帧、求短时自相关函数,得到浊音的基音周期。
关键字:清音、浊音、基音周期、基音检测、自相关函数
目录
1 概述 ............................................................................................ 1
2 AMDF算法原理及实现 ............................................................ 1
2.1 AMDF算法源程序 ........................................................... 2
3 ACF算法原理及实现 ................................................................ 4
3.1 用短时平均能量进行清/浊音的判断.............................. 4
3.2 自相关函数基音检测的原理 . .......................................... 6
3.3 算法实现及相关程序 . ...................................................... 6
3.3.1 带通滤波 . ................................................................. 7
3.3.2 取样与分帧 . ............................................................. 7
3.3.3 短时能量分析 . ......................................................... 8
3.3.4 自相关函数分析 . ................................................... 11
4 总结与心得体会 . ..................................................................... 13
参考文献 . ..................................................................................... 13
1 概述
基音周期检测也称为基频检测(Pitch Detection) ,它的目标是找出和声带振动频率完全一致的基音周期变化轨迹曲线, 或者是尽量相吻合的轨迹曲线。基音周期检测在语音信号的各个处理领域中, 如语音分析与合成、有调语音的辨意、低速率语音压缩编码、说话人识别等都是至关重要的, 它的准确性及实时性对系统起着非常关键的作用, 影响着整个系统的性能。
浊音信号的周期称为基音周期, 它是声带振动频率的倒数, 基音周期的估计称为基音检测。基音检测是语音处理中的一项重要技术之一, 它在有调语音的辨意、低速率语音编码、说话人识别等方面起着非常关键的作用; 但在实现过程中, 由于声门激励波形不是一个完全的周期脉冲串, 而且声道的影响很难去除、基音周期的定位困难、背景噪声的强烈影响等一系列因素, 基音检测面临着很大的困难。而自相关基因检测算法是一种基于语音时域分析理论的较好的算法。
本文在对AMDF 、ACF 基音检测算法基本原理进行分析的基础上, 对此算法进行了深入的探讨, 针对以往研究中存在的问题加以改进, 给出了一种方便、快捷的检测方案。综合考虑了检测准确度和检测速率两方面的因素, 然后通过对一段具体的语音信号进行处理, 较准确地得到浊音语音信号的基音周期。
2 AMDF算法原理及实现
语音信号{s(n))的短时平均幅度差函数(AMDF)定义为:
其中,w(m)是窗函数,尺是信号的平均值,因为语音信号的浊音段具有周期性,假设基音周期为p ,则在浊音段,
出现谷点,谷点间的距离即为基音周期。
与短时自相关函数一样,对周期性的浊音语音,也呈现与 在k=p,2p ,3p …将浊音语音周期相一致的周期特性,不过不同的是在周期的各个 的计算同 整数倍点上具有谷值特性而不是峰值特性,因而通过
样可以确定基音周期。而对于清音信号,
利用却没有这种周期特性。 的这种特性,可以判定一段语音是浊音还是清音,并估计
出浊音语音的基音周期。由于计算函数只需要加、减和取绝对值运算, 运算量较之短时自相关函数大大下降。同时,函数在基音周期点的谷 值比自相关函数的峰值更加尖锐,因此错判率相对较小,稳健性更高。 但是当语音信号的幅度快速变化时,函数的谷值深度会减小,从而影 响基音估计的精度。
2.1 AMDF算法源程序
AMDF 波形图如图2-1所示。
y=wavread(C:\Documents and Settings\Administrator\桌面\yejianglong '.wav');
y1=b(3500:6000);
N=320;%选择的窗长,加N=320的矩形窗
A=[];
for k=1:320
sum=0;
for m=1:N
sum=sum+abs(y1(m)-y1(m+k-1));%计算自相关
end
A(k)=sum;
end
s=y(3500:10000);
figure(1)
subplot(211)
plot(s)
xlabel('样点')
ylabel('幅度')
axis([0,2500,-1,1]);
subplot(212)
plot(A)
xlabel('延时k')
ylabel('AMDF')
axis([0,400,0,200]);
图2-1 AMDF波形图
由图2-1 AMDF波形图可知:平均幅度差函数在基音周期处表现为谷值,这些谷值之间的间隔的平均值就是所要求得的基音周期。输入语音帧的平均幅度差函数的最小值发生在第l 点,其值为O ,我们可以设置一定的门限,得到低于此门限的局部最低点(不包含第1点) 。从图中, 我们可以得到谷点的样本值分别为70、140、210,其间隔平均值为70。因此对应的基音频率为:Fs /(70一1)=Fs/69=37000/69=536,这和采用自相关法的检测结果完全相同。
3 ACF算法原理及实现
3.1 用短时平均能量进行清/浊音的判断
语音信号{ x ( n) } 的某帧信号的短时平均能量En 的定义为:
式中,w ( n) 为窗函数; N 为窗长。令h( n) = w2 ( n) ,
则有
由此表明, 窗口加权短时平均能量En 相当于将“语音平方”信号通过一个单位函数响应为h( n) 的线性滤波器的输出。试验统计发现, 语音浊音段的短时平均能量远远大于清音段的短时平均能量。因此, 短时平均能量En 的计算给出了区分清音段与浊音段的依据, 即En (浊) > En (清) 。根据En 由高到低的跳变可定出浊音变为清音语音的时刻, En 由低向高的跳变可定出清音变为浊音语音的时刻; 而只有浊音才有基音周期, 清音的基音周期为零。故清浊音判断是基音检测的第一步。
该算法中窗口选择汉明窗, 其定义为:
选择汉明窗的理由是窗函数的选取原则为窗函数截取后的x ( n) 尽量是中间大两头小的光滑函数, 冲激响应对应的滤波器具有低通特性。从汉明窗的构成及频率响应特性上看, 汉明窗具有这种特性, 而矩形窗及汉宁窗则稍逊之。汉明窗虽然主瓣最高(带宽大) ,但旁瓣最低(通带外的衰减大) , 可以有效地克服泄露现象, 具有更好的低通特性。故选择汉明窗而不选择别的窗函数, 能使短时平均能量En 更能反映语音信号的幅度变化。
3.2 自相关函数基音检测的原理
对于离散的数字语音信号序列x ( n) ,自相关函数定义如下:
式中, k 为信号的延迟点数。对于随机性信号序列或周期性信号序列, 自相关函数定义为:
自相关函数具有以下的性质:如果序列x ( n) 具有周期Np ,则其自相关函数也是同周期的周期函数。即:x ( n) = x ( n + N p );则:R( k) = R ( k + N p ) 。
清音信号没有周期性, 它的自相关函数也没有周期, R( k) 会随着k 的增大迅速衰减。浊音信号具有准周期性, 它的自相关函数R ( k) 具有与{ x ( m) } 相同的周期。自相关法基音检测正是利用R ( k) 的这一性质对语音信号进行基音检测的。
3.3 算法实现及相关程序
通过对自相关基音检测原理的分析, 考虑到检测准确度和检测速率2 方面的因素, 提出了算法实现方案, 并对算法进行了Matlab 编程实现。算法包含6个功能模块: 带通滤波、取样、分帧、短时能量分析、相关运算、基音检测。框图如图3-1所示。
图3-1 基因检测框图
3.3.1 带通滤波
该研究以采样频率为8kHz 、精度为16 比特的wav 文件作为声源, 以网络录音机录制自己的一段语音。因为语音信号包含非常丰富的谐波分量, 基音频率最低可达80Hz , 最高可达500Hz , 但基音频率大多数分布在100~200Hz 之间 。因此, 浊音信号可能含有三四十次谐波分量, 而其基波分量往往不是最强的分量。语音信号的第一共振峰通常在300~1000Hz 范围内, 即基音的2~8 次谐波成分比基波分量还要强。为了提高检测的准确度, 算法中引入了一个60~500Hz 带通滤波模块滤除语音帧的高次谐波分量。该算法中用音效编辑软件Cooledit 提供的功能直接滤波, 方便快速, 它在保持语音信息的前提下, 可以大大减少谐波成分。
3.3.2 取样与分帧
取样模块从以采样频率为8kHz 的语音信号中截取Lengt h (样点数) 长个样点值, 一般取样点数为帧长的整数倍即可, 程序中取了18000 个样点数进行分析。分帧模块主要完成将取样模块中获得的语音样值点分为若干个语音帧, 算法中分析帧长30ms , 即每帧长为240 个样点。然后用短时平均能量判断出浊音帧, 再对浊音帧进行自相关计算, 最后进行基音周期检测。
3.3.3 短时能量分析
原始信号及其频谱波形如图3-2所示。
图3-2 原始信号及其频谱波形
%原始信号
[y,fs,nbits]=wavread (' C:\Documents and Settings\Administrator\桌面\yejianglong.wav' );
%把语音信号进行加载入Matlab 仿真软件平台中
sound(y,fs,nbits); %回放语音信号
n = length (y) ; %求出语音信号的长度
Y=fft(y,n); %快速傅里叶变换
subplot(2,1,1);plot(y);title(' 原始信号波形' );
grid;
subplot(2,1,2);plot(abs(Y));title(' 原始信号频谱' );
grid;
短时能量的函数由以下程序实现, 短时能量曲线如图3-3所示。
图3-3 短时能量曲线
%经滤波后波形
N=240
y=WAVREAD(' C:\Documents and Settings\Administrator\桌\yejianglong.wav') ,
[1 18000]);
L=length(y)%30秒,每秒8000个点,一共240000个点
面
LL=length(y)/N %一共 1000帧
%短时能量
figure(1)
F1 = enframe(y,200);
eng = sum(F1.^2);
plot(eng);xlabel(' 帧' );ylabel(' 短时平均能量' );title(' 短时能量' )
%短时平均幅度Mn=sum(abs(Y))/N
figure(2)
F2 = enframe(y,200);
eng = sum(abs(F2));
plot(eng);xlabel(' 帧' );ylabel(' 短时平均幅度' );title(' 短时平均幅度' ); 短时平均幅度函数曲线如图3-4
所示。
图3-4 短时平均幅度曲线
%分帧函数
function f=enframe(x,win,inc)
nx=length(x(:));
len = win;
if (nargin
inc = len;
end
nf = fix((nx-len+inc)/inc);
f=zeros(nf,len);
indf= inc*(0:(nf-1)).';
inds = (1:len);
f(:) = x(indf(:,ones(1,len))+inds(ones(nf,1),:));
f = f';
3.3.4 自相关函数分析
从图3-3可以看出En 值大的对应于浊音段, 而En 值小的对应于清音段。由此可以大致判断浊音变为清音或清音变为浊音的时刻。浊音段的自相关函数由以下程序实现, 得到波形图如图3-5所示。
%短时自相关函数
[y,fs,N]=wavread (' C:\Documents and Settings\Administrator\桌面\yejianglong.wav' );
F = enframe(y,200);
f5 = F(:,5);
out8=autocorr(f8);
subplot(2,1,1);plot(f8);xlabel(' 样点' );title(' 浊音帧波形图' );
subplot(2,1,2);plot(out8);xlabel(' 延时' );title(' 浊音帧短时自’);
图3-5浊音段自相关函数
从图3-5可以看出, 第一个峰值的位置约出现在15 的滞后点上。因为浊音语音的自相关函数具有一定的周期性, 在相隔一定的取样后, 自相关函数达到最大值。浊音语音的周期可用自相关函数中的第一个峰值的位置来估算。试验表明, 滤波处理后的信号只含有第一共振峰以下的基波和谐波分量, 明显改善了检测效果。由此估计出这段浊音的基音频率是1000/ (0.125 ×15) = 533Hz 或(1/ 533) s = 1.88ms左右的基音周期。
从画出的图形中间可以看出,没有加滤波器的声音信号处理后共振峰的影响很大。但是加一个60~600Hz的带通滤波器,利用滤波后的信号进行基因估计,这样可除去大部分共振峰的影响,自相关函数和短时平均幅度差函数具有更尖锐地峰值,有利于判决地准确性。
4 总结与心得体会
一周的MATLAB 课程设计就要结束了,通过这次设计,我深刻体会到在信号处理方面我的严重不足,MATLAB 的应用也相当生疏。
在设计过程中,很多东西都看不懂,对原理也一塌糊涂。搜的一些材料也没有发挥他们的作用。有些公式原理看懂了可程序又不行了,看不出每一步的作用及实现的功能。这种种困难让我这次课程设计很郁闷,大学生活马上就结束了,可一次课程设计就有很多问题没解决,这让我很恐惧。
设计中遇到的问题通过老师的讲解以及与同学的交流也解决了一部分,总的来说在这次设计中我还是学到了一些知识。比如,浊音与清音的区分,滤波与否对自相关函数曲线的影响。也许天气的原因,在设计过程中心情很烦躁,浪费了很多时间,这对学习的影响是很严重的,我会时时注意。
此时此刻,即有独立完成设计的喜悦又有对自己不足的担忧。马上就要毕业了,在校学习的机会也不多了,我会在余下的时间里努力学习,改正自己的缺点,弥补自己的不足。争取一年后能以优秀的成绩毕业。
参考文献
[1] 赵力著,语音信号处理(第2版)[M],机械工业出版社,2010.
[2] 胡航著,语音信号处理(第四版)[M],哈尔滨工业大学出版社,2009.
[3] 张雄伟等著,现代语音处理技术及应用[M],机械工业出版社,2009.