自相关函数法基音周期提取(matlab版)

合集下载

Matlab技术音频特征提取与识别

Matlab技术音频特征提取与识别

Matlab技术音频特征提取与识别随着数字音频技术的迅速发展,音频特征提取与识别在音乐、语音和语言处理等领域中起着重要的作用。

Matlab作为一种功能强大的编程语言和工具箱,提供了一系列用于音频特征提取和识别的函数和工具。

本文将通过对Matlab技术在音频特征提取与识别中的应用进行深入探讨。

一、音频特征提取原理1.1 音频信号的表示在音频处理中,我们需要将音频信号转化为数值数据进行处理。

音频信号通常以采样点的形式存储,每个采样点对应一个时间点上的声压值。

而音频信号的数值表示通常以PCM(Pulse Code Modulation)格式存储,即将连续的声压波形离散化为一系列离散的采样点。

1.2 常用音频特征音频特征是从音频信号中提取出来的数值化的数据,用于描述音频信号的某些特性。

常用的音频特征包括时域特征(如均值、方差、时域波形等)、频域特征(如功率谱密度、频谱形心等)和时频域特征(如短时傅里叶变换、小波变换等)等。

1.3 音频特征提取方法提取音频特征的方法有很多,其中常用且有效的方法包括自相关法、傅里叶变换法、小波变换法等。

自相关法是通过计算音频信号与其自身的相关性,来提取出声音的周期性特征;傅里叶变换法则是基于信号的频域特性进行分析,将信号分解为一系列频率成分;小波变换法则是在不同频率范围内,对信号进行分解和重构,从而快速获得信号的时频信息。

二、Matlab在音频特征提取中的应用2.1 音频读取与处理Matlab提供了一系列函数用于音频读取与处理,如audioread函数可读取音频文件,audiowrite函数可写入音频文件。

另外,Matlab还提供了多种音频处理函数,如加噪声、去噪声、时域滤波、频域滤波等,用于对音频信号进行预处理。

2.2 时域特征提取通过Matlab提供的函数,可以计算音频信号的时域特征,如幅度谱、短时平均能量、过零率等。

以短时平均能量为例,可通过将音频信号切分为一段段较短的时间片段,然后计算每段的能量平均值,从而得到音频信号的短时平均能量特征。

《语音信号处理》实验2-基音周期估计

《语音信号处理》实验2-基音周期估计

华南理工大学《语音信号处理》实验报告实验名称:基音周期估计姓名:学号:班级:10级电信5班日期:2013年5 月15日1.实验目的本次试验的目的是通过matlab编程,验证课本中基音周期估计的方法,本实验采用的方法是自相关法。

2. 实验原理1、基音周期基音是发浊音时声带震动所引起的周期性,而基音周期是指声带震动频率的倒数。

基音周期是语音信号的重要的参数之一,它描述语音激励源的一个重要特征,基音周期信息在多个领域有着广泛的应用,如语音识别、说话人识别、语音分析与综合以及低码率语音编码,发音系统疾病诊断、听觉残障者的语音指导等。

因为汉语是一种有调语言,基音的变化模式称为声调,它携带着非常重要的具有辨意作用的信息,有区别意义的功能,所以,基音的提取和估计对汉语更是一个十分重要的问题。

由于人的声道的易变性及其声道持征的因人而异,而基音周期的范围又很宽,而同—个人在不同情态下发音的基音周期也不同,加之基音周期还受到单词发音音调的影响,因而基音周期的精确检测实际上是一件比较困难的事情。

基音提取的主要困难反映在:①声门激励信号并不是一个完全周期的序列,在语音的头、尾部并不具有声带振动那样的周期性,有些清音和浊音的过渡帧是很难准确地判断是周期性还是非周期性的。

②声道共振峰有时会严重影响激励信号的谐波结构,所以,从语音信号中直接取出仅和声带振动有关的激励信号的信息并不容易。

③语音信号本身是准周期性的(即音调是有变化的),而且其波形的峰值点或过零点受共振峰的结构、噪声等的影响。

④基音周期变化范围大,从老年男性的50Hz到儿童和女性的450Hz,接近三个倍频程,给基音检测带来了一定的困难。

由于这些困难,所以迄今为止尚未找到一个完善的方法可以对于各类人群(包括男、女、儿童及不向语种)、各类应用领域和各种环境条件情况下都能获得满意的检测结果。

尽管基音检测有许多困难,但因为它的重要性,基音的检测提取一直是一个研究的课题,为此提出了各种各样的基音检测算法,如自相关函数(ACF)法、峰值提取算法(PPA)、平均幅度差函数(AMDF)法、并行处理技术、倒谱法、SIFT、谱图法、小波法等等。

matlab 自相关法

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自相关法有所帮助。

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

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

基于自相关函数法的语音基音周期的检测
方臻成
【期刊名称】《科学与财富》
【年(卷),期】2014(000)009
【摘要】语音的基音周期是指人说话时声带振动的周期,它是语音信号的一个重
要参数,广泛运用在语音识别、说话人识别、发音系统诊断、语言指导等多个领域。

因此,准确的提取语音信号的基音周期显得尤为重要。

本文针对基音周期检测,介绍了一种较为简单的方法---自相关函数法。

【总页数】1页(P203-203)
【作者】方臻成
【作者单位】华南理工大学电子与信息学院,广州市,510641
【正文语种】中文
【相关文献】
1.基于改进小波变换的语音基音周期检测 [J], 吴兴铨;周金治
2.一种基于线性预测与自相关函数法的语音基音周期检测新算法 [J], 柏静;韦岗
3.基于LPC的藏语语音基音周期的检测分析 [J], 马英;陈超;贾国庆
4.基于自相关函数的藏语语音基音周期检测 [J], 李积逊;余玲梅
5.基于倒谱分析法的藏语语音基音周期检测 [J], 李积逊;范武英
因版权原因,仅展示原文概要,查看原文内容请购买。

语音中提取基音频率matlab程序

语音中提取基音频率matlab程序
temp1=0.0;
temp2=0.0;
for j=L-d+1:L
temp=temp+s(j-i)*s(j);
temp1=temp1+s(j-i)*s(j-i);
temp2=temp2+s(j)*s(j);
%求到结果后放到rr序列中时,注意到下标为i时实际上已经是错开
%i+20-1,因此pitch.m在调用这个时需要有一句p=19+ind_pitch;
function r=corr(s,d,flag)
epsilon=1.0e-10; % to avoid divided by zero
L=length(s);
j=1;
mi=[1];
for i=1:L-1
if s(i)>s(i+1)
newstate=-1;
end
if s(i)t*max_value
j=j+1;
% t times the global maximum
% max_index=maxx(s,t)
%输入一个序列和一个标量t
%首先求出序列s的最大值max_value
%然后如果序列中的一个点比相邻两个点都大
%而且还大于max_value的t倍
%就把这个点的位置存放在序列mi中
%在序列mi最后再补上序列的最后一个点
mi(j)=i;
end
end
oldstate=newstate;
end
ll=length(mi);
mi(ll+1)=length(s);
%%pitch.m
% This is a function to find the pitch period of a long enough speech

matlab语音信号基频参数提取

matlab语音信号基频参数提取
wp=3000*2/fs;
[b,a]=ellip(4,0.1,20,wp); % 构造椭圆滤波器
data=filter(b,a,data2);
%plot(data);% 求加窗处理后的数据经过滤波器的响应
[xmax,index]=max(data1);
%画基频图
plot(yy);
[ymax,maxindex] = max(yy);
fmax=fs/(maxindex+30);
%fmaxce2;
fmaxce2=fmax;
%fmax=roundn(fmax,-3);
fmax21=roundn((fmax-5),3);
fmax22=roundn((fmax+5),3);
run(cc,'runtohalt')
%ddatV=read(cc,address(cc,'fIn'),'single',256)
%idattV=read(cc,address(cc,'fOut'),'single',1000)
%plot(abs(idattV))
timewin=floor(0.015*fs);
xwin=data1(index-timewin:index+timewin);
[y,lags]=xcov(xwin);
ylen=length(y);
halflen=(ylen+1)/2 +30;
yy=y(halflen: ylen);
blocksize =length(data1); % 计算窗函数长度
window = hanning(blocksize); % 计算汉宁窗函数(此函数为MATLAB自带)

实验二语音信号的基音周期提取最终报告

实验二语音信号的基音周期提取最终报告

实验二语音信号的基音周期提取一、实验目的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在基音周期检测教学中的应用研究

Matlab在基音周期检测教学中的应用研究

Matlab在基音周期检测教学中的应用研究我们需要了解一些基本的概念和原理。

基音周期指的是连续说话过程中声带振动的周期性,它对应于声道系统的特征,可以通过周期估计来获取。

常见的基音周期估计方法有自相关法、互相关法和短时傅立叶变换法等。

这些方法在Matlab中都可以很方便地实现。

对于自相关法,Matlab提供了xcorr函数来计算信号的自相关函数,然后可以通过寻找自相关函数的峰值来估计基音周期。

我们可以使用如下的代码来实现基音周期的自相关估计:```matlab[x, Fs] = audioread('音频文件名.wav');x = x(:,1); % 取一个声道R = xcorr(x); % 计算自相关函数[~,I] = max(R);T = I / Fs; % 基音周期```对于短时傅立叶变换法,Matlab提供了stft函数来计算短时傅立叶变换,然后可以通过寻找频谱的峰值来估计基音周期。

下面是一个使用短时傅立叶变换法进行基音周期估计的示例代码:使用这些基音周期估计方法,可以对语音信号进行周期性分析,进一步研究和应用各种语音处理算法。

我们可以通过基音周期检测来识别说话人的特征,从而实现说话人识别系统;我们也可以根据基音周期检测结果来实现语音转换,实现男声转女声、音乐转唱等效果。

Matlab在基音周期检测教学中具有重要的应用研究价值。

通过Matlab提供的强大的科学计算功能,我们可以方便地实现基音周期估计算法,并进行相关的研究和分析。

基音周期检测的研究不仅对语音信号处理具有重要意义,同时也可以为语音合成、说话人识别、语音转换等应用领域提供支持和指导。

matlab求自相关函数

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 基频提取Matlab是一种强大的数学软件,被广泛应用于科学计算、数据分析等领域。

在信号处理领域,基频提取是一个重要的任务,它可以帮助我们分析音频信号中的基本频率成分。

本文将介绍基频提取在Matlab中的应用方法。

我们需要明确什么是基频。

在音频信号中,基频即为最低频率的成分,也是声音的主要音高。

基频提取的目标就是从音频信号中准确地找到基频值。

在Matlab中,有多种方法可以实现基频提取。

其中,最常用的方法是基于自相关函数的算法。

自相关函数可以描述信号与其自身延迟后的版本之间的相关性。

基于自相关函数的基频提取算法主要包括自相关法、差值自相关法和短时自相关法。

我们来介绍自相关法。

该方法的基本思想是计算音频信号与其自身延迟后的版本之间的相似度。

具体步骤如下:1. 首先,将音频信号进行分帧处理,将长时间的信号拆分成多个短时段的小片段。

2. 对每个小片段进行自相关计算,得到自相关函数。

3. 在自相关函数中,寻找第一个极大值点,其对应的延迟就是基频周期。

4. 计算基频值,即音频信号的采样率除以基频周期。

另一种常用的方法是差值自相关法。

该方法的基本思想是计算音频信号与其自身延迟后的版本之间的差异度。

具体步骤如下:1. 同样地,对音频信号进行分帧处理,得到多个小片段。

2. 对每个小片段进行差值自相关计算,得到差值自相关函数。

3. 在差值自相关函数中,寻找第一个零交叉点,其对应的延迟就是基频周期。

4. 计算基频值,即音频信号的采样率除以基频周期。

我们来介绍短时自相关法。

该方法的基本思想是将音频信号分成多个短时段,分别计算每个短时段的基频值,然后通过插值等方法得到整个音频信号的基频值。

具体步骤如下:1. 将音频信号进行分帧处理,得到多个小片段。

2. 对每个小片段进行自相关计算,得到短时自相关函数。

3. 在短时自相关函数中,寻找第一个极大值点,其对应的延迟就是该短时段的基频周期。

4. 根据短时段的基频周期,通过插值等方法得到整个音频信号的基频值。

基音周期检测ACF算法及MATLAB仿真

基音周期检测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 Ⅳ )

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

基于短时自相关函数法的基音周期检测
for i=1 : vsl % 只对有话段数据处理
ixb=vseg(i).begin;
ixe=vseg(i).end;
ixd=ixe-ixb+1;% 求取一段有话段的帧数
for k=1 : ixd % 对该段有话段数据处理
u=y(:,k+ixb-1); % 取来一帧数据
ru= xcorr(u, 'coeff'); % 计算归一化自相关函数
ru = ru(wlen:end);% 取延迟量为正值的部分
[tmax,tloc]=max(ru(lmin:lmax)); % 在基音频率范围内寻找最大值
period(k+ixb-1)=lmin+tloc-1; % 给出对应最大值的延迟量
end
end
4.2.4实验结果
图4端点检测的语音信号
图5有话段的基音周期
图2图中实线代表语音起始点,虚线代表语音终点
2.2.5结果分析
基音周期是语音信号的重要参数之一,它描述了语音激励源的一个重要特征。语音的头、尾部并不能具有声带振动那样的周期性,也就是检测不到相应的基音周期。如果要进行基音周期的计算,首要的必然是检测语音端点,将有话段从整段语音中分离出来,才能开始对语音的基音周期进行计算.
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的索引)

用Matlab编程实现语音信号的短时分析

用Matlab编程实现语音信号的短时分析
end
end
figure(2)
subplot(4,1,2)
jj=[1:240];
plot(jj, Yn1,'b');
grid
%%%%%%清音,取12120--12360个点
%短时自相关函数
temp=Y(12121:12360);
%% %temp2=reshape(temp,1,240);
%temp=temp2.*B;
Mn(ii)=sum(abs(temp))/N;
end
figure(1)
subplot(4,1,2)
jj=[1:(LL-1)*240];
plot(jj, Mn,'b');
grid
% axis([12000,16000,0,0.015])
%短时过零率
Zn=zeros(1,(LL-1)*240);
for ii=2:(LL-1)*240,
for ii=[1:240-nn],
Yn1(nn) =Yn1(nn)+ abs(temp(ii)-temp(nn+ii));
end
end
figure(2)
subplot(4,1,2)
jj=[1:240];
plot(jj, Yn1,'b');
grid
%%%%%%清音,取12120--12360个点
%短时自相关函数
六、附录
源程序:
%没有加窗nowindow.wav
N=240
Y=WAVREAD('nowindow',[1 18000]);
L=length(Y)%30秒,每秒8000个点,一共240000个点
LL=length(Y)/N %一共1000帧

自相关函数的应用——语音周期检测

自相关函数的应用——语音周期检测

基音周期检测——自相关函数法一、基音周期相关知识简介人在发音时,根据声带是否震动可以将语音信号分为清音跟浊音两种。

浊音又称有声语言,携带着语言中大部分的能量,浊音在时域上呈现出明显的周期性;而清音类似于白噪声,没有明显的周期性。

发浊音时,气流通过声门使声带产生张弛震荡式振动,产生准周期的激励脉冲串。

这种声带振动的频率称为基音频率,相应的周期就成为基音周期[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中的音频特征提取技术详解

Matlab中的音频特征提取技术详解在音频处理和音乐信息检索等领域,音频特征提取是一个重要的技术环节。

Matlab作为一款功能强大的科学计算软件,在音频特征提取方面提供了丰富的工具和函数。

本文将详细介绍Matlab中的音频特征提取技术,并探讨其在实际应用中的价值和局限性。

一、音频特征提取的概述音频特征提取是指从音频信号中提取出具有表征性质的特征,用于描述音频的不同方面。

这些特征可以是时域特征、频域特征或时频域特征等。

常见的音频特征包括音频能量、频谱特征、声调特征、音调特征、过零率等。

这些特征对于音频信号的分析、分类和识别等任务至关重要。

二、Matlab中的音频特征提取函数Matlab提供了一系列用于音频特征提取的函数和工具箱。

其中最常用的是信号处理工具箱(Signal Processing Toolbox)和音频系统工具箱(Audio System Toolbox)。

以下是几个常用的音频特征提取函数的介绍:1. 频谱特征提取函数:spectrogramspectrogram函数可以将音频信号转换成时频图,从而展示音频的频谱特征。

它将音频信号分成多个时间窗口,并对每个窗口进行傅里叶变换得到频谱图。

通过调整窗口大小和窗口函数,可以获得不同时间分辨率和频率分辨率的频谱图,进而提取出不同的频谱特征。

2. 过零率特征提取函数:zerocross过零率是指音频信号通过零轴的次数,它反映了音频信号的变化速度和频率。

通过zerocross函数可以计算出音频信号的过零率特征。

这个函数会对音频信号进行快速傅里叶变换(FFT),然后计算变换结果的零交叉次数。

过零率通常用于语音识别和音乐节奏分析等任务中。

3. 音频能量特征提取函数:envelope音频信号的能量反映了音频的响度和音量大小。

envelope函数可以计算出音频信号的包络曲线,从而获取音频的能量特征。

它通过将音频信号分段,计算每个段落的均方根(RMS),然后将均方根进行平滑处理,得到音频的能量包络曲线。

基于MATLAB的基音检测分析

基于MATLAB的基音检测分析

基于MATLAB 的基音检测分析骆娇艳,孙祥娥(长江大学电子信息学院,湖北荆州434000)摘要:基音检测作为语音信号处理的重要手段,被广泛地应用于语音的合成、编码及识别等一系列语音信号处理技术问题。

基音检测的准确性对于要求极高的语音识别、合成、分析、压缩编码等等都有重要的意义。

该文用自相关函数法、平均幅度差函数法和倒谱法这三种常用的基音检测方法,运用MATLAB 编程实现,对语音信号的基音周期轨迹图进行了比较分析,并由此得出和倒谱法进行语音信号基音的检测更为精确。

关键词:基音检测;MATLAB;自相关函数法;平均幅度差函数法;倒谱法中图分类号:TP311文献标识码:A文章编号:1009-3044(2014)18-4293-031 概述语音是人类相互之间进行信息交流的基本手段和重要载体,随着现代通信科学技术的迅速发展,尤其是计算机的日趋普及,对语音信号的处理发挥着越来越重要的作用。

汉语中的声调对于语音的理解很重要,同时相同的汉语在不同的语气或词义下均有不同的声调[1]。

因此,基音检测的准确性对于汉语语音信号的识别极为重要。

根据声带的震动情况,我们一般将语音信号分为清音和浊音两种[2]。

清音和普通的白噪声相似,尚未发现明显的规律性;而浊音就是俗称的有声语言,携带着语音的大部分能量,并且具有明显的周期性。

当人们在发出浊音的时候,气流往往会通过声门迫使声带产生规律性的震动,我们称之为激励脉冲串。

通过声带震动产生的频率被定义为:基音频率,同样地,就有了基音周期[3]。

通常所指的基音检测实际上就是一种对基音周期的估计,结果是希望能够找出与声带的振动频率相一致或较为吻合的轨迹曲线。

语音信号的处理包括四大类,分别为:语音合成、语音识别、语音编码以及语音识别[2]。

其中,准确提取语言信号参数对于整个的语音信号处理是至关重要的。

只有当某些可以表示语音信号本质特征的参数被准确地提出,这些参数才可以被利用进行有效的语音合成,语音识别以及语音的压缩解码处理,其中语音周期提取的准确性会直接影响到语音合成的真实性,因此在众多参数中就会显得尤为重要[4]。

自相关基频提取算法的MATLAB实现

自相关基频提取算法的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.。

两种基音周期检测方法

两种基音周期检测方法

基音周期中两种算法常用的基音周期检测方法-自相关函数法、倒谱法、平均幅度差函数法都属于非基于事件基音检测方法,都先将语音信号分为长度一定的语音帧,然后对每一帧语音求平均基音周期,它们的优点是比较简单,主要应用于只需要平均基音周期作为参数的语音编解码,语音识别等。

自相关函数具有很好的抗噪性,但易受半频、倍频错误影响。

平均幅度差函数只需加法、减法和取绝对值等计算,算法简单;它们在无背景噪声情况下可以精确地提取的语音基音周期,但在语音环境较恶劣、信噪比较低时,检测的结果很差,难以让人满意。

2.1 基于短时自相关函数的方法能量有限的语音信号}{()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 ττ=+。

②当τ=0时,自相关函数具有最大值;当0,,2,3P P P τ=+++…处周期信号的自相关函数达到极大值。

③自相关函数是偶函数,即()()R R ττ=-。

短时自相关函数法基音检测的主要原理是利用短时自相关函数的第二条性质,通过比较原始信号和它移位后的信号之间的类似性来确定基音周期,如果移位距离等于基音周期,那么,两个信号具有最大类似性。

在实际采用短时自相关函数法进行基音检测时,使用一个窗函数,窗不动,语音信号移动,这是经典的短时自相关函数法。

窗口长度N 的选择至少要大于基音周期的两倍,N 越大,短时自相关函数波形的细节就越清楚,更有利于基音检测,但计算量较大,近年来由于高速数字信号处理器(DSP )的使用,从而使得这一算法简单有效,而不再采用结构复杂的快速傅里叶变换法、递归计算法等;N越小,误差越大,但计算量较小。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

自相关函数法基音周期提取(matlab版)
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))< p=""> jiaocha=ii;
end
ii=ii+1;
if ii==length(r) %没有找到符合要求的点
jiaocha=1;
end
end
if length(zer)>0 %检查是否存在零点
if 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)< p="">
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)
</length(signal)<>
</length(r))<>。

相关文档
最新文档