自相关函数法基音周期提取(matlab版)
Matlab中的时间序列特征提取技术详解
Matlab中的时间序列特征提取技术详解时间序列是现实世界中各种现象的变化规律的抽象表示。
对于重要的时间序列数据分析任务,如预测、分类和异常检测,时间序列特征提取是一个关键的步骤。
在Matlab中,我们可以利用丰富的工具箱和函数来提取各种特征。
本文将详细介绍一些常用的时间序列特征提取技术和相应的Matlab函数。
一、基本统计特征时间序列的基本统计特征是最简单也是最直观的特征。
通过计算序列的平均值、方差、标准差、最大值、最小值等指标,我们可以获取关于序列整体分布和变异性的信息。
在Matlab中,我们可以使用mean、var、std、max和min等函数轻松计算这些特征。
二、自相关特征自相关特征可以反映时间序列的自相关性。
自相关函数描述了序列在不同时刻之间的相关关系,可以帮助我们分析序列的周期性和趋势性。
在Matlab中,我们可以使用xcorr函数计算序列的自相关函数,并进一步提取出相关系数的特征。
三、频域特征频域特征可以展示时间序列的频谱特性。
通过将时间序列转换到频域,我们可以探索序列中不同频率分量的贡献。
常见的频域特征包括功率谱密度、能量谱密度和频率特征等。
在Matlab中,我们可以使用pwelch函数计算信号的功率谱密度,并借助fft函数获取频率域特征。
四、小波变换特征小波变换是一种时频分析方法,可以将时间序列分解为不同尺度和频率的子序列。
通过计算小波变换后的子序列的能量特征,我们可以描述序列在不同频率范围内的振幅变化情况。
在Matlab中,我们可以使用cwt和dwt函数进行小波变换,并提取相应的特征。
五、奇异值分解特征奇异值分解(Singular Value Decomposition,SVD)是一种常用的线性代数方法,可用于时间序列的特征提取。
SVD将时间序列矩阵分解为三个矩阵的乘积,其中一个矩阵包含了序列的特征信息。
通过选取适当的奇异值,我们可以获取序列的关键特征。
在Matlab中,我们可以使用svd函数进行奇异值分解,并选择适当的奇异值来提取特征。
《语音信号处理》实验2-基音周期估计
华南理工大学《语音信号处理》实验报告实验名称:基音周期估计姓名:学号:班级:10级电信5班日期:2013年5 月15日1.实验目的本次试验的目的是通过matlab编程,验证课本中基音周期估计的方法,本实验采用的方法是自相关法。
2. 实验原理1、基音周期基音是发浊音时声带震动所引起的周期性,而基音周期是指声带震动频率的倒数。
基音周期是语音信号的重要的参数之一,它描述语音激励源的一个重要特征,基音周期信息在多个领域有着广泛的应用,如语音识别、说话人识别、语音分析与综合以及低码率语音编码,发音系统疾病诊断、听觉残障者的语音指导等。
因为汉语是一种有调语言,基音的变化模式称为声调,它携带着非常重要的具有辨意作用的信息,有区别意义的功能,所以,基音的提取和估计对汉语更是一个十分重要的问题。
由于人的声道的易变性及其声道持征的因人而异,而基音周期的范围又很宽,而同—个人在不同情态下发音的基音周期也不同,加之基音周期还受到单词发音音调的影响,因而基音周期的精确检测实际上是一件比较困难的事情。
基音提取的主要困难反映在:①声门激励信号并不是一个完全周期的序列,在语音的头、尾部并不具有声带振动那样的周期性,有些清音和浊音的过渡帧是很难准确地判断是周期性还是非周期性的。
②声道共振峰有时会严重影响激励信号的谐波结构,所以,从语音信号中直接取出仅和声带振动有关的激励信号的信息并不容易。
③语音信号本身是准周期性的(即音调是有变化的),而且其波形的峰值点或过零点受共振峰的结构、噪声等的影响。
④基音周期变化范围大,从老年男性的50Hz到儿童和女性的450Hz,接近三个倍频程,给基音检测带来了一定的困难。
由于这些困难,所以迄今为止尚未找到一个完善的方法可以对于各类人群(包括男、女、儿童及不向语种)、各类应用领域和各种环境条件情况下都能获得满意的检测结果。
尽管基音检测有许多困难,但因为它的重要性,基音的检测提取一直是一个研究的课题,为此提出了各种各样的基音检测算法,如自相关函数(ACF)法、峰值提取算法(PPA)、平均幅度差函数(AMDF)法、并行处理技术、倒谱法、SIFT、谱图法、小波法等等。
matlab 自相关法
matlab 自相关法Matlab自相关法是一种常用的信号处理方法,在信号处理、统计分析等领域具有广泛的应用。
本文将介绍Matlab自相关法的基本原理、算法实现及其在实际应用中的应用案例。
一、Matlab自相关法的基本原理自相关法是一种基于信号的统计分析方法,用于研究信号的相关性和周期性。
在Matlab中,自相关函数可以通过调用相关函数实现。
自相关函数定义如下:Rxx(tau) = E(x(t)x(t+tau))其中,x(t)为原始信号,tau为时间延迟。
二、Matlab自相关法的算法实现1. 读取信号数据需要将待分析的信号数据读入到Matlab中,可以通过load函数或者importdata函数实现。
2. 计算自相关函数利用Matlab的相关函数,可以方便地计算自相关函数。
具体的调用方法为:Rxx = xcorr(x)其中,x为原始信号数据。
3. 绘制自相关函数图像通过调用plot函数,可以将自相关函数的结果以图像的形式展示出来。
可以设置横轴为时间延迟tau,纵轴为自相关函数的值Rxx。
三、Matlab自相关法的应用案例1. 信号分析自相关法可以用于信号的分析,比如检测信号中的周期性成分。
通过计算自相关函数,可以得到信号的周期性特征。
2. 语音识别在语音识别领域,自相关法被广泛应用。
利用自相关函数可以提取语音信号中的共振峰信息,从而实现语音识别。
3. 图像处理在图像处理中,自相关法可以用于图像的模板匹配。
通过计算图像的自相关函数,可以实现图像的特征匹配和目标检测。
四、总结本文介绍了Matlab自相关法的基本原理、算法实现及其在实际应用中的应用案例。
通过使用Matlab自相关函数,可以方便地进行信号分析、语音识别和图像处理等任务。
希望本文对读者理解和应用Matlab自相关法有所帮助。
基音周期提取1-原理说明
基⾳周期提取1-原理说明Matlab 基⾳周期提取1-原理说明
先看语⾳“0”的整体波形:
图1
再选其中的两个局部:
图2
图3
以上三幅图为语⾳“0”以8KHz采样的波形。
可以看出,汉语语⾳具有⾮常明显的**准周期特性**。
相邻的两个周期的波形基本⼀致,随时间推移,波形规律性的**逐渐**改变。
基⾳周期提取的常⽤⽅法参数有:**短时⾃相关**、短时平均幅度差、线性预测倒谱、⼩波⾃相关函数、三电平削波的互相关函数等[2]。
这⾥对便于理解的短时⾃相关法说明如下,直接引⽤参考⽂献内容。
图4(参考⽂献[3])
公式通俗理解:
式3.13中,R(k)等于原序列x中,由负⽆穷到正⽆穷,所有间隔为k的两个样点,相乘后求和。
式3.14中,R(k)等于原序列x中,由负⽆穷到正⽆穷,所有间隔为k的两个样点,相乘后求和,再除以求和的项数,即相隔为k的样点乘积的平均值。
图5(参考⽂献[3])
参考⽂献:
1、《实⽤语⾳识别基础》王炳锡屈丹彭煊等,国防⼯业出版社 2005
2、《MATLAB在语⾳信号分析和合成中的应⽤》宋知⽤,北京航空航天⼤学出版社 2013
3、《数字语⾳处理及MATLAB仿真》张雪英,电⼦⼯业出版社 2010
4、⽹络资源。
praat提取基频 算法
Praat是一款用于语音分析的软件,它可以提取语音信号中的各种特征,包括基频。
基频是指语音信号中声带的振动频率,通常用f表示。
提取基频的方法主要有两种:自相关法(Autocorrelation)和共振峰法(Resonance peaks)。
自相关法的基本原理是通过计算语音信号的自相关函数,找到自相关函数在某个特定频率上的峰值,这个峰值对应的频率就是基频。
具体步骤如下:
1. 获取语音信号,将其离散化,得到一个时间序列数据。
2. 计算语音信号的自相关函数,得到一系列的相关性数据。
3. 在这些相关性数据中,找到一个峰值,这个峰值对应的频率就是基频。
共振峰法是通过寻找语音信号的共振峰来提取基频。
共振峰是语音信号中一系列特定频率的峰值,这些峰值反映了声带振动的特性。
提取共振峰的方法通常包括滤波、傅里叶变换等步骤。
通过寻找共振峰,可以确定基频。
除了以上两种方法,还有一些其他的算法也可以用于提取基频,例如小波变换法、短时傅里叶变换法等。
这些算法通常需要更高级的数学知识和计算机技术,但是对于一些特殊的应用场景,这些算法可能更加有效。
总的来说,提取基频的方法有很多种,每种方法都有其特点和适用范围。
在实际应用中,需要根据具体的情况和需求选择合适的方法。
同时,需要注意基频提取的准确性和稳定性,可以通过多次试验和校正来提高准确性和稳定性。
自相关函数法基音周期提取(matlab版)
自相关函数法基音周期提取(matlab版)function nmax=find_maxn(r)%maxn,为峰值最大的nzer=find(r==0); %找第一个零点如果存在jiaocha=0; %找第一近零点ii=1;while (jiaocha<=0)if(r(ii)>0 && r(ii+1)<0 && (ii+1)<length(r))< p=""> jiaocha=ii;endii=ii+1;if ii==length(r) %没有找到符合要求的点jiaocha=1;endendif length(zer)>0 %检查是否存在零点if zer(1)endendr(1:jiaocha)=0; %祛除影响maxn=max(r); %找最大值temp=find(r==maxn);%返回第一个最大值nmax=temp(1);function jiyinzhouqi(filename,shift)%短时自相关分析%filename语音文件*.wav%zhouqi基音周期shift=10;[signal,fs]=wavread('f:/mywork/1.wav');shift=round(fs*shift); %帧移n1=fix(fs*0.97)+1; %分析起点970ms,帧长30msn2=fix(fs*1)+1;ii=1;for ii=1:(length(signal)-n1)/shift %分析次数if n2<length(signal)< p="">data=signal(n1:n2);N=n2-n1+1;R=zeros(1,N); %基音周期(n)多次分析数组for k=1:N-1for jj=1:N-kR(k)=R(k)+data(jj)*data(jj+k);endendvalue(ii)=find_maxn(R); %调用基音周期(n)分析函数n1=n1+shift; %移动帧n2=n2+shift;endend%figure(3)%plot(R);%axis([0,1000 -300 300])figure(1)stem(value);axis([0 length(value) 0 1000])len =length(value); %基音周期(n)多次分析数组长度aver=mean(value);index=find(abs((value-aver))>aver/5);value(index)=0; %去除大野点的影响len=len-length(index);for jj=1:3:len/3 %中值平滑,滑动窗口宽度3,精度为中值1/4(剔除野点)average=(value(jj)+value(jj+1)+value(jj+2))/3;for kk=1:3if abs((value(jj-1+kk))-average)>average/4value(jj-1+kk)=0; %将野点置零,同时数组长度减一len=len-1;endendendfigure(2)stem(value);axis([0 length(value) 0 max(value)])Tp=sum(value)/len/fs %求基音周期(Tp)</length(signal)<></length(r))<>。
基于MATLAB的语音信号的基音周期检测
基于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) ,它的目标是找出和声带振动频率完全一致的基音周期变化轨迹曲线,或者是尽量相吻合的轨迹曲线。
基音周期检测在语音信号的各个处理领域中,如语音分析与合成、有调语音的辨意、低速率语音压缩编码、说话人识别等都是至关重要的,它的准确性及实时性对系统起着非常关键的作用,影响着整个系统的性能。
MATLAB自相关编写及周期函数分析
MATLAB自相关编写及周期函数分析自相关是一种描述信号之间相似性的统计方法,主要用于分析时间序列数据。
在MATLAB中,可以使用`xcorr`函数来计算自相关。
周期函数是一种以固定时间间隔重复的函数,可以通过分析函数的振幅、相位和频率来研究其周期性。
下面我将介绍如何在MATLAB中编写自相关程序,并进行周期函数的分析。
首先,我们来编写一个自相关的程序。
考虑一个包含2个正弦波的信号,我们可以使用`sin`函数生成这个信号。
程序的步骤如下:1.定义一个时间向量t,表示信号的采样时间点。
例如,可以设置t 从0到10,采样间隔为0.01```t=0:0.01:10;```2. 定义两个正弦波信号,分别表示频率为2Hz和5Hz的信号。
可以使用`sin`函数生成这些信号。
```x1 = sin(2*pi*2*t);x2 = sin(2*pi*5*t);```3.将这两个信号相加,得到包含两个正弦波的信号。
```x=x1+x2;```4. 使用`xcorr`函数计算信号的自相关。
```[R, lags] = xcorr(x);```其中,`R`表示自相关系数,`lags`表示时间延迟。
接下来,我们将进行周期函数的分析。
考虑一个三角波函数,其周期为T,可以使用以下方式来表示:```t=0:0.01:10;T=2;f = sawtooth(2*pi/T*t);plot(t, f);```这段代码中,`sawtooth`函数用于生成三角波形,`plot`函数用于绘制信号。
为了了解周期函数的频域特性,我们可以使用傅里叶变换来获得其频谱。
在MATLAB中,可以使用`fft`函数进行快速傅里叶变换,并使用`abs`函数取绝对值得到频谱幅值。
代码如下:```Fs=100;%采样率N = length(f); % 信号长度frequencies = 0:Fs/N:Fs/2; % 频率向量transformed = fft(f); % 快速傅里叶变换amplitude = abs(transformed(1:N/2+1)); % 幅值谱plot(frequencies, amplitude);```这段代码中,`Fs`表示采样率,`N`表示信号长度,`frequencies`表示频率向量,`transformed`表示傅里叶变换结果,`amplitude`表示频谱幅值。
实验二语音信号的基音周期提取最终报告
实验二语音信号的基音周期提取一、实验目的1、熟练运用MATLAB软件的运用,学习通过MATLAB软件编程来进行语音信号的基因周期提取。
2、掌握语音信号的基音周期提取的方法,实现其中一种基频提取方法。
3、学会用自相关法进行语音信号的基因检测.二、实验仪器设备及软件HP D538、MATLAB三、实验原理浊音信号的自相关函数在基因周期的整数倍位置上出现峰值,而清音的自相关函数没有明显的峰值出现。
因此检测自相关函数是否有峰值就可以判断是清音还是浊音,而峰-峰值之间对应的就是基音周期。
影响从自相关函数中正确提取基音周期的最主要原因是声道响应。
当基音的周期性和共振峰的周期性混在一起时,被检测出来的峰值可能会偏离原来峰值的真实位置。
另外,在某些浊音中,第一共振频率可能会等于或低于基音频率.此时,如果其幅度很高,它就可能在自相关函数中产生一个峰值,而该峰值又可以同基音频率的峰值相比拟。
1、自相关函数对于离散的语音信号x(n),它的自相关函数定义为:R(k)=Σx(n)x(n-k),如果信号x(n))具有周期性,那么它的自相关函数也具有周期性,而且周期与信号x(n)的周期性相同。
自相关函数提供了一种获取周期信号周期的方法。
在周期信号周期的整数倍上,它的自相关函数可以达到最大值,因此可以不考虑起始时间,而从自相关函数的第一个最大值的位置估计出信号的基音周期,这使自相关函数成为信号基音周期估计的一种工具.2、短时自相关函数语音信号是非平稳的信号,所以对信号的处理都使用短时自相关函数。
短时自相关函数是在信号的第N 个样本点附近用短时窗截取一段信号,做自相关计算所得的结果Rm(k)=Σx(n)x(n-k)式中,n表示窗函数是从第n点开始加入。
3、算法通过对自相关基音检测原理的分析,考虑到检测准确度和检测速率2方面的因素,提出了算法实现方案,并对算法进行了Matlab编程实现。
算法包含6个功能模块:带通滤波、取样、分帧、短时能量分析、相关运算、基音检测。
基于MATLAB的自相关函数基音检测的优化
系统软件与软件工程本栏目责任编辑:谢媛媛Computer Knowledge and Technology 电脑知识与技术第5卷第36期(2009年12月)基于MATLAB 的自相关函数基音检测的优化王丽(青海师范大学物理系语音与图像研究室,青海西宁810008)摘要:基音是语音信号的一个重要参数,它是指发浊音时声带振动所引起的周期性。
基音的提取是语音处理中的重要任务。
目前对基音的检测方法有很多,典型的就有自相关法,AMDF (短时平均幅度差)法,倒谱法等等。
这里介绍一种自相关和倒谱相结合的算法,较传统的自相关法有一定的改进和优化。
关键词:自相关;倒谱;三电平中心削波中图分类号:TP391文献标识码:A 文章编号:1009-3044(2009)36-10611-02The Autocorrelation Function based on MATLAB Optimization of Pitch DetectionWANG Li(Qinghai Normal University Physics Department Pronunciation and Image Laboratory,Xi'ning 810008,China)Abstract:Pitch is an important parameter of speech signals,which is when the hair dullness caused by the cyclical nature of vocal fold vi -bration.Pitch extraction is an important task of speech processing.Currently there are a lot of pitch detection methods,typically there is self-correlation method,AMDF (short-time average magnitude difference)method,cepstrum,etc.Here are a self-correlation and cep -strum combination of algorithms,the more traditional autocorrelation have some improvements.Key words:autocorrelation;cepstrum;the three-level center clipping基音是语音信号处理中的一个非常重要的参数。
matlab 基频提取
matlab 基频提取Matlab是一种强大的数学软件,被广泛应用于科学计算、数据分析等领域。
在信号处理领域,基频提取是一个重要的任务,它可以帮助我们分析音频信号中的基本频率成分。
本文将介绍基频提取在Matlab中的应用方法。
我们需要明确什么是基频。
在音频信号中,基频即为最低频率的成分,也是声音的主要音高。
基频提取的目标就是从音频信号中准确地找到基频值。
在Matlab中,有多种方法可以实现基频提取。
其中,最常用的方法是基于自相关函数的算法。
自相关函数可以描述信号与其自身延迟后的版本之间的相关性。
基于自相关函数的基频提取算法主要包括自相关法、差值自相关法和短时自相关法。
我们来介绍自相关法。
该方法的基本思想是计算音频信号与其自身延迟后的版本之间的相似度。
具体步骤如下:1. 首先,将音频信号进行分帧处理,将长时间的信号拆分成多个短时段的小片段。
2. 对每个小片段进行自相关计算,得到自相关函数。
3. 在自相关函数中,寻找第一个极大值点,其对应的延迟就是基频周期。
4. 计算基频值,即音频信号的采样率除以基频周期。
另一种常用的方法是差值自相关法。
该方法的基本思想是计算音频信号与其自身延迟后的版本之间的差异度。
具体步骤如下:1. 同样地,对音频信号进行分帧处理,得到多个小片段。
2. 对每个小片段进行差值自相关计算,得到差值自相关函数。
3. 在差值自相关函数中,寻找第一个零交叉点,其对应的延迟就是基频周期。
4. 计算基频值,即音频信号的采样率除以基频周期。
我们来介绍短时自相关法。
该方法的基本思想是将音频信号分成多个短时段,分别计算每个短时段的基频值,然后通过插值等方法得到整个音频信号的基频值。
具体步骤如下:1. 将音频信号进行分帧处理,得到多个小片段。
2. 对每个小片段进行自相关计算,得到短时自相关函数。
3. 在短时自相关函数中,寻找第一个极大值点,其对应的延迟就是该短时段的基频周期。
4. 根据短时段的基频周期,通过插值等方法得到整个音频信号的基频值。
基音周期检测ACF算法及MATLAB仿真
语音信号 ( ) n 的某帧信号的短时平均能量 的 定义为 :
收稿 日期 : 1 2 0—1 0 2—2 5
自相关 函数中产生一个 峰值 , 而当该 峰值又可以 同基 音频率的峰值相 比拟时 , 从而会 给基音值检测带来误
.
8 . 6
E = [ m x + ] ( ) ( m) =∑ ( ) m
一
就被称为一“ 。 帧” 一般要采用交叠分段 的方法 , 这是 为了使帧与帧之间平滑过渡 , 保持其连续性。前一帧
段具体的语音信号进行滤波、 采样、 分帧、 求短时 自
窗口长度的选择非常重要 , 窗长过短会使得分析窗内
相关函数 , 较准确地得到浊音语音信号的基音周期。
2 基 于 自相关 函数 的基音周 期 检测原 理
变化轨迹 曲线 , 或者是尽量相吻合 的轨迹 曲线。因为 它的重要性 , 基音的检测提取一直是一个研究 的课题。 为此提出了各种各样的基音检测算法 , 自相关 函数 如
工频的干扰 ; 高端截止频率设 为 90 z 0H 既可除去大部
能保留其一二次谐波。 2 2 分帧 .
分共振峰影响 , 又可 以当基音最高频率为 40 z 5 H 时仍
6 — 0 H 的带通滤波器对语音信号进行滤波 , 0 90 z 并利
用滤波后的 自相关函数来进行基音估计。将滤波器低
端截止频率设为 6 H , 0 z这是 因为可 以抑制 5 H 电源 0z
基音周期检测也称为基频检测 ( ihD t tn , P c e co ) t ei 它的目标是找出和声带振动频率完全一致 的基音周期
.
() 1
tm 0m 其 值 o ) ,:它 ( i
f ,m= 1 0一( 一1 Ⅳ )
MATLAB自相关编写及周期函数分析
MATLAB自相关编写及周期函数分析自相关是一种用于分析时间序列数据的方法,可以帮助我们了解序列中不同时间点之间的相关性。
在MATLAB中,可以使用内置函数`xcorr`来计算自相关函数,并进行周期性分析。
自相关函数是由原始序列与滞后版本的序列之间的相关性统计量构成的。
滞后是指将序列向后移动几个时间单位。
在MATLAB中,通过将滞后长度作为参数传递给`xcorr`函数,可以计算得到自相关函数。
下面是使用MATLAB编写的自相关函数的示例代码:```matlab%生成一个时间序列t=0:0.1:10;x = sin(t); % 原始序列为正弦函数%计算自相关函数lags = -20:1:20;acf = xcorr(x, lags, 'coeff'); % 'coeff'参数用于计算相关系数%绘制自相关函数图像figure;stem(lags, acf);title('自相关函数');xlabel('滞后');ylabel('相关系数');```在这个示例中,我们生成了一个时间序列`t`,然后计算了与原始序列`x = sin(t)`自相关函数。
我们使用了`-20`到`20`的滞后长度,并使用`'coeff'`参数计算相关系数。
最后,我们使用`stem`函数绘制了自相关函数的图像。
自相关函数的图像描述了序列与其自身滞后版本之间的相关性。
图像上的峰值表示序列中存在的周期性,峰值的位置对应于序列中的周期。
在上面的例子中,由于原始序列是一个正弦函数,所以我们期望在自相关函数中看到一个峰值,其位置对应于正弦函数的周期。
除了计算自相关函数,MATLAB还提供了其他一些函数用于周期函数的分析。
例如,`findpeaks`函数可以用于提取自相关函数中的峰值,`fft`函数可以用于计算信号的频谱,`periodogram`函数可以用于绘制信号的功率谱密度图等等。
自相关函数的应用——语音周期检测
基音周期检测——自相关函数法一、基音周期相关知识简介人在发音时,根据声带是否震动可以将语音信号分为清音跟浊音两种。
浊音又称有声语言,携带着语言中大部分的能量,浊音在时域上呈现出明显的周期性;而清音类似于白噪声,没有明显的周期性。
发浊音时,气流通过声门使声带产生张弛震荡式振动,产生准周期的激励脉冲串。
这种声带振动的频率称为基音频率,相应的周期就成为基音周期[4]。
通常,基音频率与个人声带的长短、薄厚、韧性、劲度和发音习惯等有关系,在很大程度上反应了个人的特征。
此外,基音频率还跟随着人的性别、年龄不同而有所不同。
一般来说,男性说话者的基音频率较低,大部分在70~200Hz 的范围内,而女性说话者和小孩的基音频率相对较高,在200~450Hz 之间。
基音周期的估计称谓基音检测,基音检测的最终目的是为了找出和声带振动频率完全一致或尽可能相吻合的轨迹曲线。
基因周期作为语音信号处理中描述激励源的重要参数之一,在语音合成、语音压缩编码、语音识别和说话人确认等领域都有着广泛而重要的问题,尤其对汉语更是如此。
汉语是一种有调语言,而基因周期的变化称为声调,声调对于汉语语音的理解极为重要。
因为在汉语的相互交谈中,不但要凭借不同的元音、辅音来辨别这些字词的意义,还需要从不同的声调来区别它,也就是说声调具有辨义作用;另外,汉语中存在着多音字现象,同一个字的不同的语气或不同的词义下具有不同的声调。
因此准确可靠地进行基音检测对汉语语音信号的处理显得尤为重要。
二、自相关函数法原理能量有限的语音信号}{()s n 的短时自相关函数[10][11]定义为:10()[()()][()()]N n m R s n m w m s n m w m ττττ--==++++∑(2.1)其中,τ为移位距离,()w m 是偶对称的窗函数。
短时自相关函数有以下重要性质:①如果}{()s n 是周期信号,周期是P ,则()R τ也是周期信号,且周期相同,即()()R R P ττ=+。
基于MATLAB的基音检测分析
基于MATLAB 的基音检测分析骆娇艳,孙祥娥(长江大学电子信息学院,湖北荆州434000)摘要:基音检测作为语音信号处理的重要手段,被广泛地应用于语音的合成、编码及识别等一系列语音信号处理技术问题。
基音检测的准确性对于要求极高的语音识别、合成、分析、压缩编码等等都有重要的意义。
该文用自相关函数法、平均幅度差函数法和倒谱法这三种常用的基音检测方法,运用MATLAB 编程实现,对语音信号的基音周期轨迹图进行了比较分析,并由此得出和倒谱法进行语音信号基音的检测更为精确。
关键词:基音检测;MATLAB;自相关函数法;平均幅度差函数法;倒谱法中图分类号:TP311文献标识码:A文章编号:1009-3044(2014)18-4293-031 概述语音是人类相互之间进行信息交流的基本手段和重要载体,随着现代通信科学技术的迅速发展,尤其是计算机的日趋普及,对语音信号的处理发挥着越来越重要的作用。
汉语中的声调对于语音的理解很重要,同时相同的汉语在不同的语气或词义下均有不同的声调[1]。
因此,基音检测的准确性对于汉语语音信号的识别极为重要。
根据声带的震动情况,我们一般将语音信号分为清音和浊音两种[2]。
清音和普通的白噪声相似,尚未发现明显的规律性;而浊音就是俗称的有声语言,携带着语音的大部分能量,并且具有明显的周期性。
当人们在发出浊音的时候,气流往往会通过声门迫使声带产生规律性的震动,我们称之为激励脉冲串。
通过声带震动产生的频率被定义为:基音频率,同样地,就有了基音周期[3]。
通常所指的基音检测实际上就是一种对基音周期的估计,结果是希望能够找出与声带的振动频率相一致或较为吻合的轨迹曲线。
语音信号的处理包括四大类,分别为:语音合成、语音识别、语音编码以及语音识别[2]。
其中,准确提取语言信号参数对于整个的语音信号处理是至关重要的。
只有当某些可以表示语音信号本质特征的参数被准确地提出,这些参数才可以被利用进行有效的语音合成,语音识别以及语音的压缩解码处理,其中语音周期提取的准确性会直接影响到语音合成的真实性,因此在众多参数中就会显得尤为重要[4]。
基于Matlab的语音信号自相关基音检测
基于Matlab的语音信号自相关基音检测
付青青;吴爱平
【期刊名称】《长江大学学报(自然版)理工卷》
【年(卷),期】2006(003)004
【摘要】自相关基音检测算法是语音信号处理的关键技术,算法的效率直接影响语音信号实时处理的质量.在对自相关基音检测算法基本原理进行分析的基础上,设计了Matlab算法实现方案,通过对一段具体语音时域信号采样值进行滤波、分帧、求短时自相关函数,得到了浊音语音的基音周期.试验结果表明,该算法结构简单,运算量小,效率高.
【总页数】3页(P99-101)
【作者】付青青;吴爱平
【作者单位】长江大学电子信息学院,湖北,荆州,434023;长江大学电子信息学院,湖北,荆州,434023
【正文语种】中文
【中图分类】TN912.34
【相关文献】
1.语音信号基音检测算法研究 [J], 覃慧超;许爽
2.基于Matlab的藏语语音基音检测算法研究 [J], 卓嘎;边巴旺堆
3.基于MATLAB的基音检测分析 [J], 骆娇艳;孙祥娥
4.基于MATLAB的自相关函数基音检测的优化 [J], 王丽
5.基于Matlab的语音信号自相关基音检测 [J], 付青青;吴爱平
因版权原因,仅展示原文概要,查看原文内容请购买。
语音信号基音频率的提取
E[ y1* y 2] E ( y1 ) E ( y 2 )
2 2
语音的基音周期一般在20到140,因此 小于20没有周期 i+20-1,因此pitch.m在调用这个时需要 有一句p=19+ind_pitch;
二、主程序pitch
[maxim,mxi]=max(rr);%maxim存放最大值,mxi存放最 大值位置 ind_pitch=mxi; if mxi>THR_largePitch %与限定值比较 mi=maxx(rr,THR_maxx);%实际上就是以最大值 点的t倍为界找出这个界以上的左右极值点的位置 %这个序列的第一个值是1,最后一个是序列rr的长度 %一开始看到这里的时候会觉得比较多余了,直接一次 maxim*THR_pitch分界比较就可以了 %事实上,下面的比较没有只针对极值点处理。 %maxx的作用是筛选出大于maxim*THR_maxx的极值点 出来,所以这个还是必须的 for i=1:length(mi) if rr(mi(i))>max(THR_corr,maxim*THR_pitch); ind_pitch=mi(i); break;%break说明只取第一个满足条件的 end end end p=19+ind_pitch;%rr(i)对应的是i+19 mx=rr(ind_pitch);
第一个和最后一个 if newstate==-1 & oldstate ==1 if s(i)>t*max_value j=j+1; mi(j)=i; end end
Байду номын сангаас
oldstate=newstate; end
ll=length(mi); mi(ll+1)=length(s);
matlab求自相关函数
matlab求自相关函数
matlab(Matrix Laboratory)是一种具有应用深远的实用型科学计算软件。
在统计
学分析中,自相关系数是用来度量不变时间序列数据点之间的相关性的简便方法。
在matlab中,可以使用 xcorr 函数来快速求解不变时间序列数据点之间的自相关系数。
让我们以一个简单的实例来整明白求解自相关系数的两个步骤:
第一步:定义一个信号,这里我们可以使用一个简单的正弦信号:
x = sin(2*pi*1*t);
第二步:求解自相关系数,可以使用xcorr函数来求解:
r = xcorr(x,x);
以上是matlab中求解自相关函数的简便方法,本文也可用于其他编程语言,当然也
可以手动运算,但这需要一些复杂的数学知识,建议大家采用matlab的方式来求解,节
省更多的时间。
使用matlab提供的xcorr函数可以帮助我们识别连续信号的自相关系数。
自相关基频提取算法的MATLAB实现
自相关基频提取算法的MATLAB实现马效敏;郑文思;陈琪【摘要】在对自相关基音检测算法进行分析的基础上,对自相关基频提取算法进行了探讨.考虑到检测准确度和检测速率两方面的因素,结合带通滤波及三电平削波模块,设计了基于Matlab的估计方法,然后通过对一段具体的语音进行处理,得到了比较准确的浊音语音的基音周期,实验证明,该方法简单有效.【期刊名称】《西北民族大学学报(自然科学版)》【年(卷),期】2010(031)004【总页数】6页(P54-58,63)【关键词】Matlab;基音检测;自相关函数;三电平削波【作者】马效敏;郑文思;陈琪【作者单位】西北民族大学,科研处,甘肃,兰州,730030;中国民族信息技术研究院,甘肃,兰州,730030;中国民族信息技术研究院,甘肃,兰州,730030【正文语种】中文【中图分类】TP3910 引言基频是指浊音发声过程中声带振动的频率.它是语音信号中的重要参数之一,在语音识别、语音合成和语音编码中有广泛的应用.由于语音信号变化十分复杂,声门激励信号并不是一个完全周期的序列、不同发声类型声带振动的复杂性和不同信号在反映声带振动时的差异有时会严重影响到激励信号的基频检测.同时,基音周期变化范围大,从老年男性的80 Hz到儿童女性的500 Hz,接近三倍频程.这些困难使得基频检测一直没有得到很好的解决,所以虽然已经提出各种各样的基音检测算法,如自相关函数(ACF)法、峰值提取算法(PPA)、平均幅度差函数(AMDF)法等及基于它们的改进算法,但没有一种算法,在各种环境条件下对各类人群都能获得满意的检测结果. 此外,声道特性与基音周期估计有关,会对基频提取造成一定干扰.从语音信号中去除声道的影响,直接取出仅与声带振动有关的声源信息并非易事.声道共振峰可能强烈改变声门波形的结构,从而严重影响激励信号的谐波结构[1],给基音检测造成困难.因此,减少声道共振峰的影响对基频提取尤为重要.减少共振峰影响通常可用的方法:①采用带通滤波.②采用中心削波.本文在采用滤波和削波的基础上,对用自相关函数提取语音基频进行了探讨.对于一段具体的语音信号先通过带通滤波去掉语音信号中的高次共振峰,然后从语音信号中选取一段样本并将样本中获得的语音样值点分为若干个语音帧;再经过三电平削波滤除大多数次要的峰,只保留明显的周期性的峰.再用自相关函数求出自相关序列,并把自相关序列的周期转化为频率.最后通过中值平滑进行后处理,平滑掉半频点、倍点和随机错误点,较准确地提取出浊音语音信号的基音频率.1 基频提取算法原理自相关函数的性质:若原信号具有周期性,那么它的自相关函数也具有周期性,并且周期与原信号的周期相同.清音信号没有周期性,它的自相关函数 R(k)会随着k的增大呈衰减趋势.浊音信号具有准周期性,它的 R(k)在基音周期整数倍上有很大的峰值,通常取第一最大峰值点为基音周期点.自相关函数法基音检测正是利用这一性质对语音信号进行基音检测的,同时结合滤波和三电平削波及后处理使基频提取更准确、高效.1.1 带通滤波语音基音的频率范围是50 Hz~450 Hz,为了保留语音的一二次谐波以保证正确的处理结果,一般先使语音信号通过一个频率范围为60 Hz~900 Hz的带通滤波器,下截止频率为60 Hz可以抑制电源的干扰,上截止频率为900 Hz不但可以保留基音的一二次谐波,还可以滤掉高次谐波[2].在语音信号中,基音的频率一般在100 Hz~200 Hz之间,而第一共振峰在300 Hz~1 000 Hz之间,通过带通滤波器,可以去掉语音信号中的高次共振峰.实验表明,滤波处理后的信号只含有第一共振峰以下的基波和谐波分量,明显改善了检测效果.1.2 采样分帧这里的“采样”是指从语音信号中选取一段样本,一般取样点数为帧长的整数倍.每秒钟的采样样本数叫做采样频率.分帧主要完成将取样模块中获得的语音样值点分为若干个语音帧.语音是不平稳的时变信号,在时间足够短的情况下,可以近似认为是平稳的,短时分析将语音流分为一段一段来处理,每一段就被称为一“帧”.分帧时需对语音信号进行加窗操作,即用一个有限长度的窗序列截取一段语音信号来进行分析.该窗函数可以按时间方向滑动,以便分析任一时刻附近的信号.常见的窗函数有:方窗、Hamming 窗及Hann窗.如果把窗函数理解成为某个滤波器的单位冲激响应,由于窗函数一般是中间大两头小的光滑函数,因此该滤波器具有低通特性.窗口长度的选择非常重要,窗长过短会使分析窗内没有包含足够的数据点来进行周期判断,且短时能量变化剧烈窗长过长,短时能量是一段长时间的平均,不但不能反映语音信号基频的细节变化部分,而且使得计算量增大.窗口长度至少要大于基音周期的两倍.1.3 三电平削波自相关函数提基频,运算量很大,其原因是乘法运算非常费时.然而从提取基频的角度看,短时自相关函数所包含的信息许多是多余的,用自相关函数提取基音频率时,关心的是时间,也就是自相关函数峰值出现的位置,而与峰值本身大小没有什么关系.这样就可以采用三电平削波法,其输入输出关系式为:即削波器的输出在 x(n)>CL时为1,x(n)<-CL时为-1,除此以外都为0.这样可以增加刚刚超过电平的峰的重要性,滤除大多数次要的峰,只保留了明显的具有周期性的峰,避免了对清音段不必要的分析处理,这对后期处理有很大的好处.削波电平由语音信号的峰值幅度来确定,它等于语音段最大幅度的一个固定百分数.这个门限的选择是重要的,由于在整个语音段的持续时间内,信号幅度可能有较大变化,因此,采用较高的削波电平可能会把一些有用的波形削去,然而削波电平太低,又达不到应用的效果.所以在不损失基音信息的情况下应尽可能选得高些,以达到较好的效果.1.4 自相关函数经三电平削波后:自相关函数的计算极为简单.用 y(n)表示削波器的输出,则短时自相关函数如下所示:由自相关函数的定义可以看出其所具有的一些性质:1)自相关函数是偶函数,满足 R(k)=R(-k);2)k=0时函数取得最大值;3)如果原序列是周期为 T的周期信号,那么自相关函数也是周期为 T的周期函数,即1.5 基频计算因为浊音语音的自相关函数具有一定的周期性,在相隔一定的取样后,自相关函数达到最大值.浊音语音的周期可用自相关函数中的第一个峰值的位置来估算.得到语音的周期后,根据周期与频率的倒数关系就可容易得到语音频率.1.6 后处理没有任何一种预测方法能够准确计算出所有的基音频率.往往大部分的点是比较准确的,但基音频率轨迹中总是会有一个或几个基音频率的估计值偏离了正常的轨迹(通常是偏离到正常值的两倍或1/2),称这种偏离点为基音轨迹的“野点”.此时为了去除这些野点,可以采用各种平滑算法,其中最常用的是中值平滑算法、线性平滑算法及组合平滑算法.此处采用的是中值平滑处理.中值平滑处理的基本原理是:设 x(n)为输入信号,y(n)为中值滤波器的输出,采用一个滑动窗,输出值就是将窗外的中心移到 n处时窗口输入样点的中值,及 n点的左右各取L个样点.连同被平滑点中心共同构成一组信号采样点(共2L+1个样值),然后将这(2+1)个样点按大小序列排成一排,此序列中中间者作为平滑器的输出.L值一般为1或2,即中值平滑处的“窗口”一般套住3个或5个样点.中值平滑的优点是既可以有效地除去少量的野点,又不会破坏基音周期轨迹中两个平滑段之间的阶跃性变化[4].2 算法实现与实验结果Matlab作为mathworks公司的高性能的数值计算和可视化软件,集成数值分析、矩阵计算、信号运算、信号处理和图形显示于一体,构成了一个方便且界面友好的用户环境.以下,我们在voicebox工具箱的帮助下完成对一段具体语音的基频提取.2.1 带通滤波图1为语音信号波形图,图2为滤波前后波形图对照.很明显,滤波后谐振峰的影响被削弱了,语音波形得到了改善,而且信号能量比较集中.图1 语音信号波形图图2 滤波前后波形图对照2.2 三电平削波三电平消波Matlab程序如下:for jj=1:Nif(data(jj)>Amax)data(jj)=1;elseif(data(jj)<-Amax)data(jj)=-1;elseif(data(jj)〈 =Amax&&data(jj)〉=-Amax)data(jj)=0;endend其中Amax取最大幅值的0.65,data存放的是加窗之后的数据,长度为一帧.其中一帧语音经Matlab编程削波处理后的语音波形如图3所示.图3 削波前后波形图对照图4 基频轨迹2.3 自相关求基频经过三电平滤波后,自相关函数的计算由繁复的乘法运算变为简单的逻辑组合,其Matlab实现如下:for k=1:N-1 %求自相关序列for jj=1:N-kR(k)=R(k)+data(jj)*data(jj+k);endend其中N为每一帧的长度.由信号周期转换为频率的Matlab程序为:value(ii)=Fs/find-maxn(R).其中Fs为采样频率,读取语音时获得,find-maxn(R)为寻找最大峰值位置的函数,其具体实现为:zer=find(r==0);%找第一个零点如果存在clozer;%找第一近零点ii=1;w hile(clozer<=0)if(r(ii)>0&&r(ii+1)<0&&(ii+1)<length(r))clozer=ii;endii=ii+1;if ii==length(r)%没有找到符合要求的点clozer=1;endendif length(zer)>0%检查是否存在零点if zer(1)<clozer%存在,则和clozer比较大小,用于去除前点对基音周期的查找带来的影响clozer=zer(1);endendr(1:clozer)=0;%去除影响maxn=max(r);%找最大值temp=find(r==maxn);%返回第一个最大值nmax=temp(1);2.4 后处理在后处理之前先对频率数组执行去除大野点操作,即将偏移值超出均值的1/5的基音频率值去除,后处理采用中值平滑算法,具体实现如下:aver=mean(value)%基音频率的平均值,未去除野点value=value(logical(abs(value-aver)>=aver/5));%找出偏移均值超出均值的1/5的基音频率,将其去除len=length(value)%去除大野点后剩余的基音点数for jj=1:3:len/4 %中值平滑,滑动窗口宽度3,精度为中值1/4(剔除野点) average=(value(jj)+value(jj+1)+value(jj+2))/3;for kk=1:3if abs((value(jj-1+kk))-average)>average/4value(jj-1+kk)=0;%将野点置零endendendvalue=value((value~=0));%除去所有野点后的基音频率数组以男声汉语普通话bá为例,经处理后得到的基频轨迹如图4所示.3 总结本文中自相关函数法通过带通滤波减小了共振峰的影响,同时采用了三电平削波方法,避免了自相关函数中繁杂的乘法运算,从而提高了程序的运行速度及准确度.实验表明,本文所用方法能较精确地提取出具体语音的基频.笔者在对自相关基音检测基本原理进行分析的基础上,设计了Matlab算法实现方案,通过浊音的自相关函数波形图进行语音的基音检测,得到了较好的结果,且算法结构简单,运算量小.由于使用Matlab编程,计算中有很多现有的函数可以利用,更有一些免费的第三方工具的支持,结果可视化也简单易行,因此将其用于语音处理的各种算法试验,具有良好的效果.本文主要实现了结合滤波和削波的自相关基频提取算法,但此方法对于一些复杂语音段及信噪比较低的语音所提取出的基频效果仍不太理想,该方法仍需继续改进. 参考文献:[1]Akagi M,Iwaki M,M inakawaT.Fundamental frequency fluctuation in continuous vowel utterance and itsperception[C].Fifth International Conference on Spoken Language Processing,Sydney,1998,1519-1522.[2]杨森斌,陈砚圃等.一种改进的自相关函数基音检测算法[J].现代电子技术,2008,9.[3]蔡莲红等.现代语音技术基础与应用[M].北京:清华大学出版社,2003.[4]宋建华,朱勇等.基于Matlab的一种基音周期检测算法[J].信息技术,2009,1.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
function nmax=find_maxn(r)
%maxn,为峰值最大的n
zer=find(r==0); %找第一个零点如果存在
jiaocha=0; %找第一近零点
ii=1;
while (jiaocha<=0)
if(r(ii)>0 && r(ii+1)<0 && (ii+1)<length(r))
jiaocha=ii;
end
ii=ii+1;
if ii==length(r) %没有找到符合要求的点
jiaocha=1;
end
end
if length(zer)>0 %检查是否存在零点
if zer(1)<jiaocha %存在,则和jiaocha比较大小,用于祛除前点的对基音周期的查找带来的影响jiaocha=zer(1);
end
end
r(1:jiaocha)=0; %祛除影响
maxn=max(r); %找最大值
temp=find(r==maxn);%返回第一个最大值
nmax=temp(1);
function jiyinzhouqi(filename,shift)
%短时自相关分析
%filename语音文件*.wav
%zhouqi基音周期
shift=10;
[signal,fs]=wavread('f:/mywork/1.wav');
shift=round(fs*shift); %帧移
n1=fix(fs*0.97)+1; %分析起点970ms,帧长30ms
n2=fix(fs*1)+1;
ii=1;
for ii=1:(length(signal)-n1)/shift %分析次数
if n2<length(signal)
data=signal(n1:n2);
N=n2-n1+1;
R=zeros(1,N); %基音周期(n)多次分析数组
for k=1:N-1
for jj=1:N-k
R(k)=R(k)+data(jj)*data(jj+k);
end
end
value(ii)=find_maxn(R); %调用基音周期(n)分析函数
n1=n1+shift; %移动帧
n2=n2+shift;
end
end
%figure(3)
%plot(R);
%axis([0,1000 -300 300])
figure(1)
stem(value);
axis([0 length(value) 0 1000])
len =length(value); %基音周期(n)多次分析数组长度aver=mean(value);
index=find(abs((value-aver))>aver/5);
value(index)=0; %去除大野点的影响
len=len-length(index);
for jj=1:3:len/3 %中值平滑,滑动窗口宽度3,精度为中值1/4(剔除野点)
average=(value(jj)+value(jj+1)+value(jj+2))/3;
for kk=1:3
if abs((value(jj-1+kk))-average)>average/4
value(jj-1+kk)=0; %将野点置零,同时数组长度减一
len=len-1;
end
end
end
figure(2)
stem(value);
axis([0 length(value) 0 max(value)])
Tp=sum(value)/len/fs %求基音周期(Tp)。