语音信号基音周期检测的matlab程序.doc
自相关函数法基音周期提取(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))jiaocha=ii;endii=ii+1;if ii==length(r) %没有找到符合要求的点jiaocha=1;endendif length(zer)>0 %检查是否存在零点if zer(1)<jiaocha %存在,则和jiaocha比较大小,用于祛除前点的对基音周期的查找带来的影响jiaocha=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)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)。
《语音信号处理》实验2-基音周期估计

华南理工大学《语音信号处理》实验报告实验名称:基音周期估计姓名:学号:班级:10级电信5班日期:2013年5 月15日1.实验目的本次试验的目的是通过matlab编程,验证课本中基音周期估计的方法,本实验采用的方法是自相关法。
2. 实验原理1、基音周期基音是发浊音时声带震动所引起的周期性,而基音周期是指声带震动频率的倒数。
基音周期是语音信号的重要的参数之一,它描述语音激励源的一个重要特征,基音周期信息在多个领域有着广泛的应用,如语音识别、说话人识别、语音分析与综合以及低码率语音编码,发音系统疾病诊断、听觉残障者的语音指导等。
因为汉语是一种有调语言,基音的变化模式称为声调,它携带着非常重要的具有辨意作用的信息,有区别意义的功能,所以,基音的提取和估计对汉语更是一个十分重要的问题。
由于人的声道的易变性及其声道持征的因人而异,而基音周期的范围又很宽,而同—个人在不同情态下发音的基音周期也不同,加之基音周期还受到单词发音音调的影响,因而基音周期的精确检测实际上是一件比较困难的事情。
基音提取的主要困难反映在:①声门激励信号并不是一个完全周期的序列,在语音的头、尾部并不具有声带振动那样的周期性,有些清音和浊音的过渡帧是很难准确地判断是周期性还是非周期性的。
②声道共振峰有时会严重影响激励信号的谐波结构,所以,从语音信号中直接取出仅和声带振动有关的激励信号的信息并不容易。
③语音信号本身是准周期性的(即音调是有变化的),而且其波形的峰值点或过零点受共振峰的结构、噪声等的影响。
④基音周期变化范围大,从老年男性的50Hz到儿童和女性的450Hz,接近三个倍频程,给基音检测带来了一定的困难。
由于这些困难,所以迄今为止尚未找到一个完善的方法可以对于各类人群(包括男、女、儿童及不向语种)、各类应用领域和各种环境条件情况下都能获得满意的检测结果。
尽管基音检测有许多困难,但因为它的重要性,基音的检测提取一直是一个研究的课题,为此提出了各种各样的基音检测算法,如自相关函数(ACF)法、峰值提取算法(PPA)、平均幅度差函数(AMDF)法、并行处理技术、倒谱法、SIFT、谱图法、小波法等等。
MATLAB处理语音信号

MATLAB处理语⾳信号⼀、实验项⽬名称语⾳信号的处理⼆、实验⽬的综合运⽤数字信号处理课程的理论知识进⾏频谱分析以及滤波器设计,通过理论推导得出相应结论,并进⾏计算机仿真,从⽽复习巩固了课堂所学的理论知识,提⾼了对所学知识的综合应⽤能⼒。
三、实验内容1. 语⾳信号的采集2. 语⾳信号的频谱分析3. 设计数字滤波器和画出频率响应4. ⽤滤波器对信号进⾏滤波5. ⽐较滤波前后语⾳信号的波形及频谱6. 回放语⾳信号四、实验具体⽅案1.语⾳信号采集录制⼀段语⾳信号并保存为⽂件,长度控制在1秒,并对录制的信号进⾏采样;录制时使⽤Windows⾃带的录⾳机。
采样是将⼀个信号(即时间或空间上的连续函数)转换成⼀个数值序列(即时间或空间上的离散函数)。
采样定理指出,如果信号是带限的,并且采样频率⾼于信号带宽的两倍,那么,原来的连续信号可以从采样样本中完全重建出来。
如果信号带宽不到采样频率的⼀半(即奈奎斯特频率),那么此时这些离散的采样点能够完全表⽰原信号。
⾼于或处于奈奎斯特频率的频率分量会导致混叠现象。
⼤多数应⽤都要求避免混叠,混叠问题的严重程度与这些混叠频率分量的相对强度有关。
⽤Windows⾃带录⾳机录⼊⼀段⾳乐,2秒钟,⽤audioread读取⾳频内容,这⾥不使⽤waveread是因为他要求⾳频⽂件格式为.wav ,并且我进⾏了尝试但没有成功,画出⾳频信号的时域波形图[y1,fs]=audioread('F:\MATLAB\ren.m4a');figure(1);plot( y1 );title('Ô原语⾳信号时域波形图');xlabel('单位');ylabel('幅度');2.语⾳信号频谱分析⾸先画出语⾳信号的时域波形,然后对语⾳信号进⾏频谱分析。
在matlab中利⽤fft对信号进⾏快速傅⾥叶变换,得到信号的频谱特性。
Matlab的信号处理⼯具箱中的函数FFT可⽤于对序列的快速傅⾥叶变换分析,其调⽤格式是y=fft(x,N),其中,x是序列,y是序列的FFT变换结果,N为整数,代表做N点的FFT,若x为向量且长度⼩于N,则函数将x补零⾄长度N;若向量x长度⼤于N,则截断x使之长度为N。
基于MATLAB的语音信号的采集与分析

基于MATLAB的语音信号的采集与分析摘要:我们通过学习使用MA TLAB仿真软件实现语音信号分析,加深对信号与系统这门课程所学习内容的理解,锻炼自学能力和动手能力。
我们通过电脑的声卡采集声音信号,借助已有的知识和MATLAB对采集的声音信号进行时域波形和频域频谱的显示,研究男女声信号的差别,通过查找资料提取声音信号的基音频率,并通过大量测试确定门限值来自动判别男女声信号,最后对信号进行降采样处理并播放,重新绘制频谱图分析,验证抽样定理。
关键词:MA TLAB仿真、频谱分析、基音频率、降采样、抽样定理。
1.音频信号的采集我们所要分析的语音信号需要自行采集,所以信号分析的第一步就是采集音频信号。
实现音频信号的采集最简单的办法就是通过电脑的声卡直接进行采集,这样采集到的音频信号虽然已经被转化成了数字量存储在电脑中,但通过查询我们了解到电脑录音所使用的采样频率是为44100Hz,完全保证了人类耳朵能听到所有声音频率分量的无失真采集,如果通过MA TLAB软件采集还能够调节采样频率,所以能够完全满足我们实验的要求。
1.1使用MATLAB采集语音信号通过上网查询,我们了解到MATLAB有自带的音频信号采集函数audiorecord(),通过它可以在程序运行时即时采集音频信号进行存储并处理,并且可以通过改变输入参数来改变采样频率,可以直接模拟降采样的过程,直观地验证抽样定理。
但鉴于我们需要重复进行试验和演示,即时采集信号显得繁琐且不必要,而且会增加我们非界面化编程的难度,所以我们放弃了这种方法。
1.2使用电脑录音机采集语音信号通过电脑自带的录音机软件可以实现更简单的音频信号采集操作,虽然采样频率不可调节,但其固有的采样频率完全满足了我们对所采集信号的要求,可以通过MATLAB的降采样处理的到较低采样频率的信号。
这样采集的音频信号会直接以文件的形式存储在电脑中,方便我们随时进行调用,方便分析与演示,所以我们决定采用这种方式实现语音信号的采集。
语音信号MATLAB处理报告

《随机信号分析与处理》实验报告指导教师:班级:学号:姓名:2011-11-20实验一 熟悉MA TLAB 的随机信号处理相关命令一、实验目的1、熟悉GUI 格式的编程及使用。
2、掌握随机信号的简单分析方法3、熟悉语音信号的播放、波形显示、均值等的分析方法及其编程 二、实验原理 1、语音的录入与打开在MATLAB 中,[y,fs,bits]=wavread('Blip',[N1 N2]);用于读取语音,采样值放在向量y 中,fs 表示采样频率(Hz),bits 表示采样位数。
[N1 N2]表示读取从N1点到N2点的值。
2、时域信号的FFT 分析FFT 即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
在MA TLABde 信号处理工具箱中函数FFT 的一种调用格式为Y=fft (x )其中X 是序列,Y 是序列的FFT 。
3、希尔伯特变换及性质x (t ) 的希尔伯特变换为x (t ) 与1/πt的卷积,即因此,对x (t ) 的希尔伯特变换可以看作为x (t ) 通过一个冲击响应为1/πt 的线性滤波器。
希尔伯特变换器在整个频域上具有恒为1 的幅频特性,为全通网络,在相位上则引入−π/2 和π/2的相移 三、实验结果分析00.511.522.5x 105-0.50.5原始语音信号时域图time nf u z h i n05010015020025030035040045050012原始语音信号频谱Hzf u d u01020304050607080901000.511.5原始语音信号幅值020040060080010001200-4-2024原始语音信号相位200400600800100012001400160018002000-2024频率(Hz )幅值N=128红和N=1024绿00.51 1.52 2.53 3.54 4.55x 105-0.50.51自相关函数5010015020025030035040045050000.020.040.060.080.1希尔伯特变换-0.12-0.1-0.08-0.06-0.04-0.020.020.040.060.08051015概率谱密度。
基于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程序

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基于倒谱和EMD的语音基音周期的提取

---------------------------------------------------------------范文最新推荐------------------------------------------------------ Matlab基于倒谱和EMD的语音基音周期的提取在语音信号处理中,常用的语音特性是基于Mel频率的倒谱系数(MFCC)以及一些语音信号的固有特征,如基音周期等。
倒谱法可以较好地将语音信号中的激励信号和声道响应分离,并只需要用一些倒谱系数就能较好地描述语言信号的声道响应,在语音信号处理中占有很重要的位臵。
而倒谱解卷积法受加性噪声影响比较大,抗噪声性能不是很好。
针对这一存在问题,利用EMD 方法在理论上可以应用于任何类型的信号的分解,在处理非平稳及非线性数据上, 具有非常明显的优势这一优点。
本文中提出一种基于倒谱和EMD的语音基音周期提取的改进算法。
并在Matlab 中予以实现。
关键字:基音周期倒谱法EMD8664TitlePitch Period Extraction of Speech Signals based1 / 8on Cepstrum and EMDAbstractIn voice signal processing, MFCC and some inherent characteristics of voice signals, such as the frequency of pitch. Cepstrum can be used to separate the excitation signal and channel response, and can represent channel response with only a dozen cepstral coefficients. As a result, it has been a very important role in voice signal processing. While cepstrum deconvolution method is largely influenced by additive noise,and anti-noise performance is not very good.The EMD method can be applied to decompose any type of signals,and thus,having a very distinct advantage in handing non-stationary and non-linear data.For this problem,in this paper,an improved algorithm of pitch period extraction of speech signals based on cepstrum and EMD is proposed. Its implementation in MATLAB are described in detail.Key words:pitch periodCepstrumEMD---------------------------------------------------------------范文最新推荐------------------------------------------------------ 目次1 引言11 引言1.1 背景由于语言是人们在日常生活中的主要交流手段,因此语音信号处理在现代信息社会中占用重要地位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
function nmax=find_maxn(r)
%寻找峰值最大的n值及基音周期
%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)。