Matlab在基音周期检测教学中的应用研究
- 格式:docx
- 大小:10.92 KB
- 文档页数:1
专业班级 组别成员实验内容:利用至少两种频率估计方法编程求给定信号的频率 1 设计思路方案一:采用谱峰估计法将信号进行傅里叶变换,从频谱中找到幅度最大的谱线,对应频点与频率分辨率乘积即为信号频率。
方案二:采用导数法利用傅里叶变换性质,将原信号进行时域求导,再利用离散Parseval 定理,求出原信号的频率。
具体推导公式如下:时域信号()j t x t e Ω=,求导得()()()()n n x t j x t =Ω 两边同时平方积分,得 ()2222|()||()()||()|n n n x t dt j x t dt x t dt ∞∞∞-∞-∞-∞=Ω=Ω⎰⎰⎰即Ω=运用离散Parseval 定理,得2N πω= 其中,ω为0~2π的一个频点,采样频率为Fs ,由此计算出频率2f Fs ωπ=⨯2 程序代码① 谱峰估计法function f=pufengload signal; %信号自动存于变量SN=128;Fs=4000; %信号采样频率f=zeros(1,7);y=abs(fft(S,N));[m,n]=max(y);f(1)=(n-1)*Fs/N; %无噪声时求出的频率SNR=[20 15 10 5 0 -5];%信噪比for i=1:6S=awgn(S,SNR(i));y=abs(fft(S,N));[m,n]=max(y);f(i+1)=(n-1)*Fs/N;endplot(f);hold;plot(f,'.');axis([0 8 340 355]);xlabel('无噪声--> 20dB --> 15dB --> 10dB --> 5dB --> 0dB --> -5dB');legend('谱峰估计法');②导数法function f=daoshu2Fs=4000;N=128;n=1; %求导次数ndelta=6;SNR=[20 15 10 5 0 -5]; %信噪比load signal;signal=zeros(7,length(S));signal(1,:)=S;for i=1:6signal(i+1,:)=awgn(S,SNR(i)); %加性高斯白噪声endfor j=1:7F=abs(fft(signal(j,:),N));[Fm,k0]=max(F);En1=0;En2=0;for k=k0-delta:k0+delta;En1=En1+(k-1)^(2*n)*F(k)^2;En2=En2+F(k)^2; %主瓣能量endf(j)=Fs/N*(En1/En2)^(1/(2*n));endplot(f,'r');hold;plot(f,'.r');axis([0 8 340 355]);xlabel('无噪声--> 20dB --> 15dB --> 10dB --> 5dB --> 0dB --> -5dB');legend('导数法');3 程序使用说明将谱峰估计法代码保存为pufeng.m文件,将导数法代码保存于daoshu2.m 文件,直接调用程序pufeng或daoshu2,查看运行结果。
华南理工大学《语音信号处理》实验报告实验名称:基音周期估计姓名:学号:班级:10级电信5班日期:2013年5 月15日1.实验目的本次试验的目的是通过matlab编程,验证课本中基音周期估计的方法,本实验采用的方法是自相关法。
2. 实验原理1、基音周期基音是发浊音时声带震动所引起的周期性,而基音周期是指声带震动频率的倒数。
基音周期是语音信号的重要的参数之一,它描述语音激励源的一个重要特征,基音周期信息在多个领域有着广泛的应用,如语音识别、说话人识别、语音分析与综合以及低码率语音编码,发音系统疾病诊断、听觉残障者的语音指导等。
因为汉语是一种有调语言,基音的变化模式称为声调,它携带着非常重要的具有辨意作用的信息,有区别意义的功能,所以,基音的提取和估计对汉语更是一个十分重要的问题。
由于人的声道的易变性及其声道持征的因人而异,而基音周期的范围又很宽,而同—个人在不同情态下发音的基音周期也不同,加之基音周期还受到单词发音音调的影响,因而基音周期的精确检测实际上是一件比较困难的事情。
基音提取的主要困难反映在:①声门激励信号并不是一个完全周期的序列,在语音的头、尾部并不具有声带振动那样的周期性,有些清音和浊音的过渡帧是很难准确地判断是周期性还是非周期性的。
②声道共振峰有时会严重影响激励信号的谐波结构,所以,从语音信号中直接取出仅和声带振动有关的激励信号的信息并不容易。
③语音信号本身是准周期性的(即音调是有变化的),而且其波形的峰值点或过零点受共振峰的结构、噪声等的影响。
④基音周期变化范围大,从老年男性的50Hz到儿童和女性的450Hz,接近三个倍频程,给基音检测带来了一定的困难。
由于这些困难,所以迄今为止尚未找到一个完善的方法可以对于各类人群(包括男、女、儿童及不向语种)、各类应用领域和各种环境条件情况下都能获得满意的检测结果。
尽管基音检测有许多困难,但因为它的重要性,基音的检测提取一直是一个研究的课题,为此提出了各种各样的基音检测算法,如自相关函数(ACF)法、峰值提取算法(PPA)、平均幅度差函数(AMDF)法、并行处理技术、倒谱法、SIFT、谱图法、小波法等等。
Matlab在基音周期检测教学中的应用研究
基音周期检测是语音信号处理领域中的一个基本任务,用于确定连续语音中的基音周期。
在语音合成、自然语言处理、音频信号处理等领域都有广泛的应用。
本文将介绍Matlab在基音周期检测教学中的应用研究。
Matlab提供了许多有用的工具箱和函数,方便进行基音周期检测的教学和研究。
其中最常用的是信号处理工具箱(Signal Processing Toolbox),内置了许多用于语音分析和处理的函数。
Matlab中的autocorr()函数可以计算信号的自相关函数,用于估计基音周期;Matlab还提供了一些用于语音分析和合成的函数,如resample()、filter()等。
这些函数可以帮助学生了解基音周期检测的原理,并进行实际操作和实验。
Matlab可以用于基音周期检测算法的实现和验证。
学生可以使用Matlab编写基音周
期检测算法,并对不同语音信号进行测试和评估。
可以使用Matlab生成不同基音周期和频率特征的语音信号,并添加噪声进行测试。
通过比较算法估计的基音周期与信号的真实基
音周期,可以评估算法的准确性和鲁棒性。
这样的实验可以帮助学生深入理解基音周期检
测算法的原理和性能。
Matlab在基音周期检测教学中的应用研究具有重要意义。
通过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) ,它的目标是找出和声带振动频率完全一致的基音周期变化轨迹曲线,或者是尽量相吻合的轨迹曲线。
基音周期检测在语音信号的各个处理领域中,如语音分析与合成、有调语音的辨意、低速率语音压缩编码、说话人识别等都是至关重要的,它的准确性及实时性对系统起着非常关键的作用,影响着整个系统的性能。
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);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-1 %求自相关序列for 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)。
---------------------------------------------------------------范文最新推荐------------------------------------------------------ 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 背景由于语言是人们在日常生活中的主要交流手段,因此语音信号处理在现代信息社会中占用重要地位。
基⾳周期提取2-基于线性相关系数的Matlab实现基⾳周期提取2-基于线性相关系数的Matlab实现基⾳周期提取结果图1 基⾳提取结果算法说明线性相关系数也称“⽪尔逊积矩相关系数”(Pearson product-moment correlation coefficient)通常⽤γ或ρ表⽰,是⽤来度量两个变量之间的相互关系(线性相关),取值范围在[-1,+1]之间。
γ>0为正相关,γ<0为负相关,γ=0表⽰不相关。
γ的绝对值越⼤,相关程度越⾼。
r=1时为完全正相关;如两者呈负相关则r为负值,⽽r=-1时为完全负相关。
通常|r|⼤于0.75时,认为两个变量有很强的线性相关性。
图2 线性相关系数计算公式式中x,y为两个向量,这⾥理解为两帧语⾳的采样序列。
当x,y为相邻的两帧数据,且帧长等于基⾳周期时,其相关系数为最⼤值(最接近1)。
Matlab应⽤编程Matlab中可⽤corrcoef(x,y)函数计算相关系数。
%inx: 输⼊的语⾳采样数据%Pos: 查找Pos点处的基⾳周期%minpth: 基⾳周期最⼩值对应的采样点数%maxpth: 基⾳周期最⼤值对应的采样点数%plotfig: 为1时绘制计算过程曲线图%%out: 以不同样点数作为期⾳周期的相似系数,其最⼤值点就对应基⾳周期function [out] = findPitchCorrcoef(inx,Pos,minpth,maxpth,plotfig)[line,row] = size(inx);out = 0;if(line<Pos+ceil(maxpth))return;endif(Pos<ceil(maxpth))return;endout=zeros(ceil(maxpth),1);for i=floor(minpth):ceil(maxpth)xa = inx(Pos-i:Pos); %以i为帧长,Pos点为分界,取其前后两帧数据xb = inx(Pos+1:Pos+1+i);if(max(abs(xa))<0.05) %为减⼩计算量,幅度⼩于0.05时认为是噪⾳,不作计算continue;endif(max(abs(xb))<0.05)continue;endcorrcoefxab = corrcoef(xa,xb);out(i)=corrcoefxab(2,1);endif(plotfig == 1) %绘计算过程曲线figure;subplot(2,1,1);plot(inx,'.-');grid on;subplot(2,1,2);plot(out,'*-');grid on;end图3 基⾳计算过程曲线由图3可以看出,在帧长为42点时(8K采样,对应190.5Hz),相邻两帧语⾳具有最⼤相似系数0.9359。
实验二语音信号的基音周期提取一、实验目的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个功能模块:带通滤波、取样、分帧、短时能量分析、相关运算、基音检测。
第1篇一、实验目的本实验旨在通过实际操作,深入了解基音周期估计的方法及其在语音信号处理中的应用。
通过实验,我们能够掌握基音周期估计的基本原理,并能够运用自相关法、倒谱法等常用方法进行基音周期的估计。
二、实验原理基音周期估计是语音信号处理中的一个重要环节,它可以帮助我们更好地理解语音的声学特征。
基音周期是指浊音的声带振动周期,它反映了声带的振动频率。
在语音信号中,浊音部分具有明显的周期性,而清音部分则没有明显的周期性。
三、实验设备与软件1. 实验设备:计算机、麦克风、耳机。
2. 实验软件:MATLAB、OpenCV。
四、实验步骤1. 数据采集:使用麦克风采集一段语音信号,并保存为.wav格式。
2. 信号预处理:对采集到的语音信号进行预处理,包括去除噪声、提取浊音段等。
3. 基音周期估计:- 自相关法:计算语音信号的短时自相关函数,找到最大值对应的周期即为基音周期。
- 倒谱法:对语音信号进行快速傅里叶变换(FFT)得到频谱,然后将频谱转换为对数坐标,再次进行FFT得到倒谱,最后从倒谱中提取基音周期。
4. 结果分析:比较不同方法得到的基音周期,分析其优缺点。
五、实验结果1. 自相关法:通过计算短时自相关函数,我们得到了一个周期性较强的曲线。
在曲线中,第一个峰值对应的周期即为基音周期。
通过实验,我们发现自相关法对于浊音段的基音周期估计较为准确。
2. 倒谱法:通过对语音信号进行FFT和倒谱变换,我们得到了一个倒谱曲线。
在倒谱曲线上,我们可以观察到多个峰值,这些峰值对应于不同的频率成分。
通过分析这些峰值,我们可以估计出基音周期。
实验结果表明,倒谱法在浊音段的基音周期估计上同样具有较高的准确性。
六、实验讨论1. 自相关法的优点在于计算简单,易于实现。
但它的缺点是对噪声敏感,容易受到干扰。
2. 倒谱法的优点在于对噪声具有一定的鲁棒性,能够较好地估计基音周期。
但其计算过程较为复杂,需要一定的计算资源。
3. 在实际应用中,可以根据具体需求选择合适的基音周期估计方法。
Matlab在基音周期检测教学中的应用研究
首先,Matlab可以通过波形显示功能直接显示被测语音信号的波形。
这为分析语音信号提供了便利。
其次,Matlab可以使用自带的基音周期检测函数(如“pitches.m”等)对语音信号进行基音周期检测。
该函数会自动计算语音中每个周期的长度,这对验证实验结果和进行声学参数分析非常有帮助。
在基音周期检测的实际应用中,Matlab还可以进行预处理工作,如语音信号的预加重和预降噪处理。
预加重的目的是在语音信号的传输过程中抵消高频信号的衰减,因而能够提升信号的质量。
预降噪则是在语音信号中去除噪音干扰,提高基音周期检测的准确性。
Matlab中的信号处理函数可以轻松地完成这些预处理操作。
除了基于自带函数的基音周期检测方法外,Matlab还可以使用更高级的算法进行基音周期检测。
例如,短时傅里叶变换(STFT)算法可以将整个语音信号分割成多个小段,并分别进行频谱分析,以便更精确地计算基音周期。
此外,自适应滤波算法、小波变换算法和神经网络算法等也被广泛应用于基音周期检测中。
这些算法的实现可以基于Matlab的信号处理工具箱等工具完成。
总之,Matlab在基音周期检测教学中具有重要的应用价值。
它不仅能够直接显示语音信号波形,而且能够快速计算基音周期,还支持多种预处理和高级算法。
这将有助于学生更好地理解语音处理算法的原理和应用,提高基音周期检测的准确性和实用性。