第一范文网 - 专业文章范例文档资料分享平台

基于短时自相关函数法的基音周期检测

来源:用户分享 时间:2025/8/23 4:07:42 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

项目总结报告

—基音周期的检测

1. 项目整体框架

1.1目标

了解语音基音周期估计方法,掌握自相关法估计基音周期的原理。 1.2主要内容

本次基音周期的估算,我们选用的是短时自相关函数法,包括四个模块。

第一个模块为基音的端点检测,主要为了区分浊音和清音。第二个模块为基音检测中的带通滤波器,主要为了减少共振峰的干扰。第三个模块为短时自相关函数法做基音检测,主要为了计算出基音周期。第四个模块为平滑处理,主要为了消除偏离值点。 2. 模块一(端点检测)

2.1主要负责工作

利用能熵比法进行语音端点检测,区分语音帧的起点以及终点。 2.2具体实现方法 2.2.1实验步骤

1)取一段语音“tone4.wav”,该语音内容是“妈妈,好吗,上马,骂人”,语音长度为3.5秒,采样率Fs=8000. 进行简单的去除直流分量,然后幅值归一化,时域波形如图1所示。

2)设置好分帧参数,帧长wlen=320,帧移inc=80,调用函数y =enframe(x,wlen,inc)';

对语音信号x分帧处理。最后帧数Fn=337。

3)设置端点检测门限值T1=0.05,使用能熵比法进行端点检测。对分帧后的语音y 每一帧进行FFT运算,然后计算每一帧的能熵比值。从而计算出语音y中的语音端点。结果如图2所示。

2.2.2能熵比法

设语音信号时域波形为X(n),加窗分帧处理后得到的第i帧语音信号为Xi(m),则

FFT后表示为Xi(k),其中下标i表示为第i帧,而k表示为第k条谱线。该语音帧在频域中的短时能量为

??

2

????= Xi k ?????(??)

??=0

式中,N为FFT的长度,只去正频率部分。

而对于某一谱线k的能量谱为Yi k =Xi k ?Xi(k),则每个频率分量的归一化谱概率密

度函数定义为

???? ?? =

该语音帧的短时谱熵定义为

??/2

????(??)

/2 ????(??)??=0??

=

????(??)

??=0,1,…,???1 ????

????=? ????(??)??????????(??)

??=0

其中,只取正频率部分的谱熵,对应的能熵比表示为

????????= 1+|????/????|

2.2.3代码编写

在主程序中,执行的是[voiceseg,vosl,SF,Ef]=pitch_vad1(y,fn,T1); 而调用了以下函数

function [voiceseg,vosl,SF,Ef]=pitch_vad1(y,fn,T1,miniL) ifnargin<4, miniL=10; end

if size(y,2)~=fn, y=y'; end % 把y转换为每列数据表示一帧语音信号

wlen=size(y,1); % 取得帧长 for i=1:fn

Sp = abs(fft(y(:,i))); % FFT取幅值(:表示所有 y(:,1)表示第一列)

Sp = Sp(1:wlen/2+1); % 只取正频率部分

Esum(i) = sum(Sp.*Sp); % 计算能量值 (能量放入Esum里) prob = Sp/(sum(Sp)); % 计算概率

H(i) = -sum(prob.*log(prob+eps)); % 求谱熵值(eps表示很小的数,避免为零)(谱熵放入H里)

end

hindex=find(H<0.1);%(find返回非零元素,hindex放入,即谱熵值小于0.1的索引)

H(hindex)=max(H);%(除去元音)

Ef=sqrt(1 + abs(Esum./H)); % 计算能熵比(将每一帧的能熵比放入Ef里)

Ef=Ef/max(Ef); % 归一化

zindex=find(Ef>=T1); % 寻找Ef中大于T1的部分

zseg=findSegment(zindex); % 给出端点检测各段的信息 zsl=length(zseg); % 给出段数 j=0;

SF=zeros(1,fn);

for k=1 : zsl % 在大于T1中剔除小于miniL的部分

ifzseg(k).duration>=miniL j=j+1;

in1=zseg(k).begin; in2=zseg(k).end; voiceseg(j).begin=in1; voiceseg(j).end=in2;

voiceseg(j).duration=zseg(k).duration;

SF(in1:in2)=1; % 设置SF(有话段的SF帧为1)

end end

vosl=length(voiceseg); % 有话段的段数

2.2.4实验结果

图1 “妈妈,好吗,上马,骂人”语音的时域波形

图2图中实线代表语音起始点,虚线代表语音终点

2.2.5结果分析

基音周期是语音信号的重要参数之一,它描述了语音激励源的一个重要特征。语音的头、尾部并不能具有声带振动那样的周期性,也就是检测不到相应的基音周期。如果要进行基音周期的计算,首要的必然是检测语音端点,将有话段从整段语音中分离出来,才能开始对语音的基音周期进行计算.

利用能熵比法检测语音端点后,该语音段可分为四段,每段的起点以及终点如图二所示. 2.3总结

语音的预处理是非常关键的一环,做好这个实验的关键在于理解matlab语句的作用,录入语音信号,设定好参数,进行分帧处理,并通过能熵值的大小标比较,确定好语音信号的端点。

通过这次的检测,我了解了Matlab函数库非常的多,理解起来需要查阅很多公式以及资料,非常的耗时。做实验务必讲究认真专心,一步一个脚印的去做好每一个环节就可以了,与队友的配合以及沟通也是重要的一环,及时了解队友的情况,做好衔接。

3. 模块二(基音检测中的带通滤波器) 3.1主要负责工作

用带通滤波器减少共振峰的干扰。 3.2具体实现方法

3.2.1算法原理

在使用相关法和AMDF法的基音检测之前常用到低通滤波器和带通滤波器,其主要目的

基于短时自相关函数法的基音周期检测.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c6yi398ex1f0h1lk029t3_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top