语音基音周期的估计
基音周期的优化算法

脚
= a r g m i n [ E V  ̄ U  ̄ r ( v ) J
( 4 )
由以上推导过程可以看出 , 式( 3 ) 比 式 ( 1 ) 减少了 ( 2 Ⅳ一
f ) ( z 一 ) / 2 次 减法 和( 2 N一 i 一 ) ( 彳 一一 ) / 2次加 法运 算, 算法 得到简 化。
来 完成 。
半计算 时间。
^ / k ^ ^ / X ^ ^ ^ / X / N ^ X ^ X ^
、X
语 音 识 别 的 首 要 步 骤 是特 征 提取 ,特 征 的选 择 对 识 别 效 果
至关重要 ,选择的标准应该体现 对异 音字特征 间的距离尽可能 的 最 大 化 ,同 音 字特 征 间 的距 离尽 可 能 的小 。 同时 ,还 要 考 虑
v a r i e d - l e n g t h a v e r a g e ma g n i t u d e d i f f e r e n c e f u n c t i o n)和 变 长 自相 关 ( V L AC v a r i e d - l e n g t h a u t o — c o r r e l a t i o n)函数 的基 音 估计 。 1 V L A MD F 基 音估 计 及 其优 化 算法
( 8 )
从式 ( 5 )中可 以看 出 ,用 自相 关 法估 计 基 音周 期 需要 计 算
为 了减少函数乘法的计算次数 ,本文提 出如下的变长 自相
关 基 音估 计 方 法 。
语音信号的最大特 征是短时平稳 性 ,即时域波形 的周期 间 隔相似性 。平均幅度差函数通过比较原始信号 及其 时移信号 的 相 似 性来 估算 语 音信 号 的基 音 周期 。 短时平均幅度差函数定义为:
语音信号处理15.ppt

基音周期估值在语音信号处理应用中具有十分 重要的作用。本节介绍语音信号基音周期估值 最基本的两种方法:
基于短时自相关法的基音周期估值 基于短时平均幅度差函数法的基音周期 估值
1
3.6 基音周期估值
1. 基于短时自相关法的基音周期估值
语音的浊音信号具有准周期性,其自相关函 数在基音周期的整数倍处取最大值。计算两相邻 最大峰值间的距离,就可以估计出基音周期。
因此,可以通过计算短时平均幅度差函数中两相邻
谷值间的距离来进行基音周期估值。
这里使用修正的短时平均幅度差函数并加矩形窗,
得到:
N 1
rn (k) | x(n) x(n k) |, k 0,1, , N -1 (3.6-3)
n0
10
3.6 基音周期估值
图3.6-7 浊音信号的AMDF
11
3.6 基音周期估值
AMDF函数与短时自相关函数的不同是:
自相关函数进行基音周期估计时寻找的是最大峰值点的位置 AMDF寻找的是它的最小谷值点的位置
由于清音没有周期性,所以它的自相关函数和平均幅度差 函数均不具有准周期性的峰值或谷值。
12
基音周期估值的后处理
在提取基音时,无论采用哪种方法提取的基音频率 轨迹与真实的基音频率轨迹都不可能完全吻合。
图3.6-3 中心削波前后修正自相关函电平削波 为了克服短时自相关函数计算量大的问题,在中
心削波法的基础上,还可以采用三电平削波法,削波 函数如下式
1 f (x) 0
1
x xL xL x xL x xL
(3.6-2)
f(x)
1
-xL
O xL
x
-1
图3.6-4 三电平削波函数
语音基音周期精确测量方法研究

—
期测 量 的影 响 , 高基 音周期 测量 的准 确率 。 提 该算 法 适 用于基 音分 离 ,对 于语音合 成 和语 音合成 工作 具
有 指导 意义 。
参 考 文献
[] 1黄煜 , 陈克安 , 郑文. 声样本质量及其在声 品质评价 中的应用 ll J 电 _ 声技术. 0 8 3 ( :0 4 . 20 ,23)4 — 3 f1 飞 , 2李 覃爱娜 , 赖旭 芝. 过渡音 的基 音周期检测方 法. 中南大 学学
上 扬趋 势 , 与图 2共振 峰 图走 势 一致 。
7 6 5 4 3 2 l O
一 一 叵 繇
4 结 语
本文基于短时 自 相关算法 ,根据语音信号共振
峰 频谱 图 的特点 , 对语 音信 号进 行低 通滤 波 预处理 ,
【1 3 陈小利 , 徐金甫. 基于小波变换和时域波形 的基音检测算[ ]现代 J. 电子技术 , 0 1 3 (1 :7 9 2 1 , 4 ) 7 —7 . [] 4 郑继 明, 王劲松. 语音基音周期检测方法ll J 计算机丁程. 0 0 3 ( _ 2 1 ,6
…
…
…
…
…
…
…
。
蕊
语 音 音周 期 精确 测量 方法 研 究 旧 日基
沈 阳 南 京 邮电大 学硕 士研 究 生 王 曾泉 南 京 邮电大 学硕 士研 究 生
摘要 : 文章 对短 时 自相 关测语 音基 音周期 的方法
进行 改进 ,提 出一种精 确的基音周期 测量方法 。 根据 语音共 振峰 的特点 , 滤除 高频分 量 , 降低 语 音 短 时周 期 性 对 基 音 周期 测量 的影 响 。
语音信号的自相关基音周期检测

语音信号的自相关基音周期检测语音信号是一种人类最基本的交流方式,它包含人声的频率、强度和时间三个方面的信息。
语音信号的自相关和基音周期是语音信号分析中的重要技术,对于语音信号分析、识别、合成等应用有着积极的作用。
一、语音信号的自相关语音信号的自相关是指语音信号的样本与样本之间的相关性。
在语音信号中,相邻的样本之间一般都具有相关性,该相关性可以通过计算信号的自相关函数获得。
自相关函数描述了语音信号在不同延迟情况下的相似程度,也就是说,自相关函数可以反映语音信号的周期特征和基音周期。
二、语音信号的基音周期检测语音信号的基音周期是指人语中相邻两个基音周期之间的时间长度。
基音周期检测是一项关键的语音信号分析技术,在音素识别、语音合成、语音编码等领域应用广泛。
基音周期检测方法主要有三种:自相关法、FFT法和LP法。
自相关法是指通过计算信号与自身在不同延迟下的相似度,判断语音信号的基音周期。
具体来说,自相关法首先将语音信号进行预加重和分帧处理,然后计算每一帧的自相关函数,最后采用模板匹配的方法找到最强的周期峰值,从而得到基音周期。
FFT法则是将分帧后的语音信号进行傅里叶变换,提取频谱信息,并通过在频域滑动一个窗口,检测周期性的能量最大值,确定基音周期数。
LP法是通过线性预测,将语音信号分解成具有不同频率的谐波分量,然后利用实验数据验证模型,得到基音周期。
总的来说,不同的基音周期检测方法有其各自的优缺点。
自相关法较为简单但在噪声环境下准确度不高,FFT法可以检测到非周期性的基音,但精度不如自相关法,LP法精度较高但计算复杂度较大。
作为一门复杂的反演问题,语音信号的自相关和基音周期检测一直是语音处理研究中的重要问题,目前的研究主要集中在解决语音信号分析和识别中的实际问题和应用,为提高语音合成、语音编码等方面的应用水平提供技术支持。
基音周期预测

专业班级组别成员实验内容:编程求解出各自声音信号的基音周期。
1 程序代码(或者软件流程图等)(1)function zhouqi=jiyinzhouqi(filename)%帧长和帧位移是重要的参数,位移是帧长的0~1/2%短时自相关分析%filename语音文件*.wav%zhouqi基音周期,以毫秒为单位表示[signal,fs]=wavread(filename); %用于得到声音文件的数据和采样率shift=0.02; %每次移动20毫秒shift=round(fs*shift); %帧移n1=fix(fs*0.01)+1; %分析起点0.01ms,帧长20msn2=fix(fs*0.03)+1;shift_count=fix((length(signal)-n1)/shift);value =zeros(1,shift_count); %存放每次移位后的帧的基音周期for ii=1:shift_count %分析次数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-kR(k)=R(k)+data(jj)*data(jj+k); %矩阵用于储存每次自相关的结果; endendvalue(ii)=find_maxn(R); %调用基音周期分析函数,求最大值所对应的位置,即基音周期n1=n1+shift; %移动帧,计算下一帧的基音周期n2=n2+shift;endendfigure(1)stem(value); %画出基因周期走势图axis([0 length(value) 0 1000])aver=mean(value); %基音周期的平均值,未去除野点value=value(logical(abs(value-aver)<=aver/5));%找出偏移均值超出均值的1/5的基音周期,将其去除len= length(value); %去除大野点后剩余的基音点数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; %将野点置零,同时数组长度减一endendendvalue=value(( value~=0)); %出去所有野点后的基音周期数组len= length(value); %去除野点以后的基音点数figure(2)stem(value);axis([0 length(value) 0 max(value)])zhouqi=1000*sum(value)/len/fs; %求平均的基音周期,单位是毫秒(2) function nmax=find_maxn(r) %寻找峰值最大的n值及基音周期%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);(3) function zhouqi=get_frq_frame(filename)%帧长和帧位移是重要的参数,位移是帧长的0~1/2%短时自相关分析%filename语音文件*.wav%zhouqi基音周期,以毫秒为单位表示[signal,fs]=wavread(filename);%用于得到声音文件的数据和采样率shift=0.02; %每次移动20毫秒shift=round(fs*shift); %帧移n1=fix(fs*0.01)+1; %分析起点0.01ms,帧长20msn2=fix(fs*0.03)+1;shift_count=fix((length(signal)-n1)/shift);value = zeros(1,shift_count); %存放每次移位后的帧的基音周期zhouqi = zeros(1,shift_count); %存放每次移位后的帧的基音周期for ii=1:shift_count %分析次数if n2<length(signal) %防止溢出data=signal(n1:n2); %加窗,提取一帧数据N=n2-n1+1; %每一帧的长度R=zeros(1,N);for k=1:N-1 %求自相关序列for jj=1:N-kR(k)=R(k)+data(jj)*data(jj+k);endendvalue(ii)=find_maxn(R); %调用基音周期分析函数,求最大值所对应的位置,即基音周期n1=n1+shift; %移动帧,计算下一帧的基音周期n2=n2+shift;zhouqi(ii) = 8000/value(ii);endendfor ii=1:length(zhouqi)if zhouqi(ii)==0zhouqi(ii) = [];endendplot(zhouqi);2 程序使用说明(1) function zhouqi=jiyinzhouqi(filename)① 函数基音周期是计算所采样的声音的平均基音周期的函数,函数使用加窗计算自相关函数的办法,通过帧移得到不同位置加窗信号的相关性,然后用矩阵R储存相对应的n2-n1+1个自相关值。
含噪语音的基音周期提取算法

资助项 目 江苏 省科 技创 新与 成果 转化 专项
( E 0 83 ) 江 苏 省 “ 大人 才 高峰 ” 目资 B 2 0 19 ; 六 项
主要是通过综合分析语音信号 的波形特征来进行 的, 而不是单单运 用 了语音信号的幅值信息. 文献 [ ] 出, 5指 首先要对语音信号进行相
2 一 I I + J<卢 n=2 34 )j / , , ,.
未 鏖. 学 学 自 科 版, 141:- z 报:然 学 2 2 ( 77 0 , ) 04
Jun f aj gU i rt o If m t nSi c n eh o g : a r c n e dtn 2 1 , ( ) 7 - o ra o N n n nv sy f n r a o c neadT c nl y N t a S i c i ,0 24 1 : 7 l i e i o i e o ul e E i o 04
滑, 从而 得 出最 终 的基音 周期 .
1 时域 波形 匹 配 法提 取 基 音 周 期 的原 理
通 常情况 下 , 语音信 号 总是 以时域 波 形 来描 述 和 记 录 的 , 过 人 通
眼就可 以大 致地判 断 出语 音信 号 的基 音 周 期 . 这个 估 计 的过 程 中 , 在
基 音 周 期 . 真 实验 表 明 : 传 统 的 基 音 仿 与 周 期提 取 方 法 相 比 较 , 提 方 法 在 基 音 所
周 期 提 取 的 准 确 度 方 面有 很 大 的提 高. 关 键 词 基 音 周 期 ; 噪 ; 形 信 息 ; 音 降 波 基
检 坝 4
通过利用语音信号的幅值信息或者频率信息来进行基音周期 的提取 的 , 没 有充分 利用 信号本 身 的一些 形 状 特征 . 际语 音在 产 生 的过 并 实
《语音信号处理》实验2-基音周期估计

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

( 5) 对 截取 加 窗后 的 一帧 语 音信 号 AMP 进 行 CEP 和 L PC 谱分 析, 观察波 形图, 估 计基音周期。如 图 2, 图 3 所示。
LPC 谱( 左 ) 和CEP 谱 ( 右 ) 的讨论
对一帧语音信号做 CEP 谱和 L PC 谱都能准 确地 分析出语音信号的基音周期。 L P C 谱图波峰位置恰好 对应 CEP 谱图中的波谷位置 ; 波形基本上关于横轴对 称; LP C 谱估计基音周期 , 可以采用离开原点的第一个 波谷出现的样值点除以采样频率 ; 而用 CEP 谱图估计 基音周期 , 可以采用离开原点的第一个波峰出现的样点 值除以采样频率[ 7] 。 但是 , 在语音信号分析过程中窗长的选择对于语音 特征参数的选择是非常重要的 , 如果窗长很大, 当语音 信号通过时, 反映波纹细节的高频部分被阻碍, 短时能
0 引
言
1 1. 1
同态分析 同态信号处理的原理 同态信号处理也称为同态滤波, 实现将卷积关系和
语音信号的分析 , 就是提取语音产生模型的各种参 数( 语音的特征参数 ) , 应用于语音的编码、 识别和合成 等。不论是分析怎样的参数以及采用什么分析方法, 在 按帧进行语音分析, 提取语音特征参数前, 有一些经常 使用的、 共同的短时分析技术必须预先进行, 如语音信 号的数字化、 预加重、 加窗和分帧等。经过这些处理, 语 音信号就被分割成一帧一帧加过窗函数的短时信号, 然 后再把每一个短时语音帧看成平稳的随机信号, 利用数 字信号处理技术提取语音特征参数。 在进行处理时, 按帧从数据区中取出数据 , 处理完 后再取下一帧。 最后得到由每一帧参数组成的语音特征 参数的时间序列。基音周期是语音信号最重要的参数 之一 , 它描述了语音激励源的一个重要特征。因为汉语 言是一种有调语言, 基音的变化模式称为声调 , 它携带 着非常重要的具有辨意作用的信息 , 有区别意义的功 能, 所以基音周期的提取和估计对汉语言更是一个十分 重要的问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一离散数字信号的产生及其时域处理学习实现实验1的内容,并且编制一个程序(m文件)产生5种信号,函数需要的参数可输入确定,并绘出其图形1、单位抽样序列在MATLAB中可以利用函数实现,%单位抽样序列函数%X=0:10;Y=[0 1 zeros(1,9)];stem(X,Y,'r');axis([-1,10,0,1]);title('单位抽样序列');xlabel('n');ylabel('δ*n+');图形如右:2、单位阶越序列在MATLAB中可以利用函数实现, 实现过程如下:%单位阶跃序列函数K=-8:8;H=[zeros(1,8),ones(1,9)];stem(K,H,'r');axis([-8,8,0,2]);title('单位阶跃序列');xlabel('n');ylabel('u[n]');图形如下:3、正弦序列,在MATLAB中实现过程如下:%正弦序列函数sin(2*pi*D/5+pi/4)%D=-1:0.1*pi:8*pi;C=sin(2*pi*D/5+pi/4);stem(D,C,'filled');axis([-1,10,-2,2]);title('正弦序列');xlabel('n');ylabel('sin(2*pi*D/5+pi/4)')图形如下:4、复指数序列,从幅度和相位进行分析,在MATLAB中实现过程如下:%复指数序列函数%n=[0:10];x1=2*exp((-0.2+0.7*j)*n);x2=abs(x1);x3=angle(x1);subplot(2,3,4);stem(n,x2);title('复指数序列幅值'); xlabel('n');ylabel('x2');stem(n,x3);title('复指数序列相位'); xlabel('n');ylabel('x3');图形如下:5、指数序列,在MATLAB中实现过程如下:% 实指数序列%L=0:20;x4=(1.4).^(L/3);stem(L,x4);title('实指数序列');xlabel('n');ylabel('x4');图形如下:编制一个完整的程序(m文件)产生以上5种信号,图形如下:m文件程序如下:function F1%单位抽样序列函数%X=0:10;Y=[0 1 zeros(1,9)];subplot(2,3,1);stem(X,Y,'r');axis([-1,10,0,1]);title('单位抽样序列 ');xlabel('n');ylabel('δ[n]');%单位阶跃序列函数K=-8:8;H=[zeros(1,8),ones(1,9)];subplot(2,3,2);stem(K,H,'r');axis([-8,8,0,2]);title('单位阶跃序列 ');xlabel('n');ylabel('u[n]');%正弦序列函数sin(2*pi*D/5+pi/4)%D=-1:0.1*pi:8*pi;C=sin(2*pi*D/5+pi/4);subplot(2,3,3);stem(D,C,'filled');axis([-1,10,-2,2]);title('正弦序列 ');xlabel('n');ylabel('sin(2*pi*D/5+pi/4)');%复指数序列函数2*exp((-0.2+0.7*j)*n),从相位和幅值角度来分开讨论其图形%n=[0:10];x1=2*exp((-0.2+0.7*j)*n);x2=abs(x1);x3=angle(x1);subplot(2,3,4);stem(n,x2);title('复指数序列幅值');xlabel('n');ylabel('x2');subplot(2,3,5);stem(n,x3);title('复指数序列相位');xlabel('n');ylabel('x3');% 实指数序列(1.4)^(L/3)%L=0:20;x4=(1.4).^(L/3);subplot(2,3,6);stem(L,x4);title('实指数序列 ');xlabel('n');ylabel('x4');%在MATLAB 中产生5种信号,所需参数预先设定%语音基音周期估计语音基音周期估计的实现方法: 自相关函数法能量有限的语音信号}{()s n 的短时自相关函数定义为:10()[()()][()()]N n m R s n m w m s n m w m ττττ--==++++∑其中,τ为移位距离,()w m 是偶对称的窗函数。
短时自相关函数有以下重要性质:①如果}{()s n 是周期信号,周期是P ,则()R τ也是周期信号,且周期相同,即()()R R P ττ=+。
②当τ=0时,自相关函数具有最大值;当0,,2,3P P P τ=+++…处周期信号的自相关函数达到极大值。
③自相关函数是偶函数,即()()R R ττ=-。
短时自相关函数法基音检测的主要原理是利用短时自相关函数的第二条性质,通过比较原始信号和它移位后的信号之间的类似性来确定基音周期,如果移位距离等于基音周期,那么,两个信号具有最大类似性。
在实际采用短时自相关函数法进行基音检测时,使用一个窗函数,窗不动,语音信号移动,这是经典的短时自相关函数法。
窗口长度N 的选择至少要大于基音周期的两倍,N 越大,短时自相关函数波形的细节就越清楚,更有利于基音检测,但计算量较大,近年来由于高速数字信号处理器(DSP )的使用,从而使得这一算法简单有效,而不再采用结构复杂的快速傅里叶变换法、递归计算法等;N 越小,误差越大,但计算量较小。
自相关函数在基音周期处表现为峰值,自相关函数在基音周期处表现为峰值,这些峰值点之间的间隔的平均值就是基音周期中值滤波: 为了平滑噪声,君安邪恶基因周期前,需要对各自的声音文件进行中值滤波处理,并比较前后语音的差别。
对采样信号进行滤波处理,这里用截至频率为500Hz 的低通滤波器,阻带衰减20dB ,程序如下:[x,fs,bits]=wavread ('E:\A.wav');%读取输入语音信号的频率及波形figure(1);stem(x,'.');%做原始语音信号的时域图形title('原始语音信号');fc1=500;N1=2*pi*0.9/(0.1*pi)wc1=2*pi*fc1/fs;if rem(N1,2)==0N1=N1+1;endWindow= boxcar (N1+1); %长度为N1的矩形窗Windowb1=fir1(N1,wc1/pi,Window);figure(2);freqz(b1,1,512);title('低通滤波器的频率响应');y= filter(b1,1,x1);%对信号进行低通滤波figure(3);plot(y);title('信号经过低通滤波器后');经过中值滤波后,对信号用自相关函数法进行基音周期的检测。
语音信号需分帧处理,20ms一帧(160个样点),程序如下:n=160; %取20ms的声音片段,即160个样点for m=1:length(x)/n; %对每一帧求短时自相关函数for k=1:n;Rm(k)=0;for i=(k+1):n;Rm(k)=Rm(k)+x(i+(m-1)*n)*x(i-k+(m-1)*n);endendp=Rm(10:n); %防止误判,去掉前边10个数值较大的点[Rmax,N(m)]=max(p); %读取第一个自相关函数的最大点end %补回前边去掉的10个点N=N+10;T=N/8; %算出对应的周期figure(4);stem(T,'.');axis([0 length(T) 0 10]);xlabel('帧数(n)');ylabel('周期(ms)');title('各帧基音周期');得到各帧基音周期如图:可以看到,该信号有48000个样点,一共有300帧(每帧160个样点)由图中可以看出基音周期大约为4.2ms.但是图中存在野点,为此,需要对此进行进一步的处理,即去除野点。
运行以下程序:T1= medfilt1(T,5); %去除野点figure(3);stem(T1,'.');axis([0 length(T1) 0 20]);xlabel('帧数(n)');ylabel('周期(ms)');title('各帧基音周期');从图可以看到野点被消除,可以读出基音周期约为4.2ms.完整程序如下:[x,fs,bits]=wavread('E:\A.wav');figure(1);plot(x);%做原始语音信号的时域图形title('原始语音信号');fc1=500;N1=2*pi*0.9/(0.1*pi)wc1=2*pi*fc1/fs;if rem(N1,2)==0N1=N1+1;endWindow= boxcar (N1+1); %长度为N1的矩形窗Windowb1=fir1(N1,wc1/pi,Window);figure(2);freqz(b1,1,512);title('低通滤波器的频率响应');y= filter(b1,1,x1);%对信号进行低通滤波figure(3);plot(y);title('信号经过低通滤波器(时域)');n=160; %取20ms的声音片段,即160个样点for m=1:length(x)/n; %对每一帧求短时自相关函数for k=1:n;Rm(k)=0;for i=(k+1):n;Rm(k)=Rm(k)+x(i+(m-1)*n)*x(i-k+(m-1)*n);endendp=Rm(10:n); %防止误判,去掉前边10个数值较大的点[Rmax,N(m)]=max(p); %读取第一个自相关函数的最大点end %补回前边去掉的10个点N=N+10;T=N/8; %算出对应的周期figure(4);stem(T,'.');axis([0 length(T) 0 10]);xlabel('帧数(n)');ylabel('周期(ms)');title('各帧基音周期');T1= medfilt1(T,5); %去除野点figure(6);stem(T1,'.');axis([0 length(T1) 0 10]);xlabel('帧数(n)');ylabel('周期(ms)');title('各帧基音周期');。