语音信号基音周期检测的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 背景由于语言是人们在日常生活中的主要交流手段,因此语音信号处理在现代信息社会中占用重要地位。
语音信号处理MATLAB程序

试验一语音信号处理语音信号处理综合运用了数字信号处理的理论知识,对信号进行计算及频谱分析,设计滤波器,并对含噪信号进行滤波。
一,具体分为以下步骤:(1)语音信号的采集:利用Windows下的录音机,录制一段话音。
然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,播放语音信号,并绘制原始语音信号;(2)对原始信号加入噪声:对原始语音信号加入s=0.05*sin(2*pi*f*Ts*n)的噪声,采样后可知Fs ,选择f = 2500,播放加入噪声信号的语音信号,并绘制噪声信号和含噪语音信号;(3)频谱分析:分别对原始语音信号,噪声信号和含噪声的语音信号进行频谱分析,并绘出各频谱图;(4)设计滤波器:计算滤波器的性能指标,设计滤波器,绘制滤波器的特性曲线;(5)滤波器滤波:用自己设计的滤波器对采集的信号进行滤波,得出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化,并回放语音信号,感觉滤波前后的声音有变化。
(6) 对原始信号进行整数倍抽取,比较抽取前后的频谱图(7)对原始信号进行整数倍内插,比较原始信号频谱,内插零值时的频谱和滤波后的频谱图。
二,源程序:[x,fs,bits]=wavread('he.wav');N=length(x);%测定语音信号长度f=2500;x=x';%对语音信号进行转置,使N行1列矩阵变为1行N列矩阵n=0:1/fs:(N-1)/fs;s=0.05*sin(2*pi*f*n);%噪声信号y=x+s;%信号加噪声f1=0:fs/N:fs*(N-1)/N;%横坐标,f1为频率x1=fft(x,N);s1=fft(s,N);Y=fft(y,N);figure(1);subplot(311);plot(n,x);title('原始信号波形图');xlabel('t/s');ylabel('幅值');subplot(312);plot(n,s);title('噪声信号波形图');ylim([-0.08,0.08]);xlabel('t/s');ylabel('幅值');subplot(313);plot(n,y);title('信号+噪声信号波形图');xlabel('t/s');ylabel('幅值');figure(2);subplot(221);plot(f1,abs(x1));title('原始信号频谱图');xlabel('频率/Hz'); ylabel('频率响应幅度');xlim([0,fs/12]);subplot(222);plot(f1,abs(s1));title('噪声信号频谱图');xlabel('频率/Hz'); ylabel('频率响应幅度');xlim([0,fs/12]);subplot(223);plot(f1,abs(Y));title('信号+噪声频谱图');xlabel('频率/Hz'); ylabel('频率响应幅度');xlim([0,fs/12]);%%%%%%%%%%%%%%滤波器设计%%%%%%%%%%%%%%%%%%%% %%根据原始信号与噪声信号频谱图,选择巴特沃斯低通滤波器%%滤波器性能指标:取wp=1500*2*pi rad/s,ws=2400*2*pi rad/s,Rp=2,Rs=15 %选择滤波器的最小阶数wp=1500*2*pi;ws=2200*2*pi;Rp=2;Rs=15;[N1,Wn]=buttord(wp,ws,Rp,Rs,'s');%创建butterworth模拟滤波器[Z,P,K]=buttap(N1);%把滤波器的零极点模型转化为传递函数模型[Bap,Aap]=zp2tf(Z,P,K);%把模拟滤波器原型转换成截止频率为Wn的低通滤波器[b,a]=lp2lp(Bap,Aap,Wn);%用双线性变换法实现模拟滤波器到数字滤波器的转换[bz,az]=bilinear(b,a,fs);%绘制频率响应曲线[H,W]=freqz(bz,az);figure(3);subplot(211),plot(W*fs/(2*pi),abs(H)); gridtitle('butterworth低通滤波器频响图');xlabel('频率/Hz'); ylabel('频率响应幅度');%%%%%%%用所设计的滤波器对语音+噪声信号y滤波%%%%%%%y1=filter(bz,az,y);subplot(212),plot(n,y1);title('滤波后信号波形图');xlabel('频率/Hz'); ylabel('频率响应幅度');%sound(x,fs);%播放语音信号%sound(y,fs);%播放语音+噪声信号%sound(y1,fs);%播放滤波后的信号%%%%%%对原始信号进行整数倍抽取%%%%%%%%%%%%%%%%M=2;%%按M倍抽取for i=1:fix(N/M)y2(i)=x(M*i);endy2=fft(y2,i);%%抽取后进行傅里叶变换fs2=fs/M;f2=0:fs2/i:fs2*(i-1)/i;figure(4);subplot(322);plot(f2,abs(y2));title('原始信号');xlim([0 fs/(12*M/2^1)]);%%%%%%%%%对原始信号进行整数倍内插%%%%%%%%%%%M1=1;%%按M1倍内插y3=zeros(1,N*M1);for i=1:Ny3(i*M1)=x(i);endy3=fft(y3,N*M1);%%内插后进行傅里叶变换fs3=fs*M1;f3=0:fs3/(N*M1):fs3*(N*M1-1)/(N*M1);figure(5);subplot(221);plot(f3,abs(y3));title('原始信号频谱图');xlim([0 150000]);注:程序中最后两步对信号进行整数倍抽取和整数倍内插时只分别给出了参数M=2和M1=1;即运行的时候figure(4)和figure(5)分别只显示M=2和M1=1的图;要想得到其他整数倍抽取(或内插)的图像,可修改相应的M,M1值。
基于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基音是语音信号处理中的一个非常重要的参数。
(完整word版)基于MATLAB对语音信号进行分析和处理

基于MATLAB对语音信号进行分析和处理一、设计目的1.学会MATLAB的使用,掌握MA TLAB的程序设计方法;2.掌握在Windows环境下语音信号采集的方法;3.掌握数字信号处理的基本概念、基本理论和基本方法;4.掌握MATLAB设计FIR和IIR数字滤波器的方法;5.学会用MA TLAB对信号进行分析和处理。
二、设计过程1、语音信号采集与分析运用windows下的录音机,录制一段自己的话音,时间为两秒。
然后在MATLAB 软件平台下,利用函数wavread对语音信号进行采样,再运用plot函数画出语音信号的时域波形,最后在语音信号频谱分析时运用fft对信号进行快速傅里叶变换,得到频谱特性图形。
人为设计一个固定频率5500Hz的噪声干扰信号。
噪声信号通常为随机序列,在本设计中用正弦序列代替,干扰信号构建命令函数为d=[Au*sin(2*pi*5500*t)]',给出的干扰信号为一个正弦信号,针对上面的语音信号 ,采集了其中一段。
再对噪音信号进行频谱变换得到其频谱图。
2、滤波器设计和运用滤波器进行滤波1 )窗函数和等波纹逼近法设计FIR滤波器及滤波首先根据阻带最小衰减选定窗口类型,然后调用fir1函数设计线性相位FIR数字滤波器,再用freqz函数画出其频谱图形,最后运用fftfilt函数对信号进行滤波。
而等波纹逼近法中则运用remez和remezord直接设计FIR滤波器,然后运用fftfilt函数对信号进行滤波。
2 )双线性变换法社设计IIR数字滤波器及滤波首先将数字滤波器的技术指标运用预畸校正法转换成模拟滤波器的设计指标:Ωph=2/T*tan(wp/2),然后用butter、cheby1设计各种模拟滤波器,再用bilinear函数进行模拟滤波器和数字滤波器之间的转换,最后用filter函数对语音信号进行滤波,并运用函数sound播放滤波后语音。
三、结果及分析1、用MATLAB对原始语音信号进行分析,画出它的时域波形和频谱时域波形和频谱:图1 原始语音信号图2 语音信号频率响应图图3 原始语音信号FFT与信号频谱2、给原始的语音信号加上一个高频余弦噪声,频率为5500hz。
基于MATLAB的自相关函数基音检测的优化

基于MATLAB的自相关函数基音检测的优化作者:王丽来源:《电脑知识与技术》2009年第36期摘要:基音是语音信号的一个重要参数,它是指发浊音时声带振动所引起的周期性。
基音的提取是语音处理中的重要任务。
目前对基音的检测方法有很多,典型的就有自相关法,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 vibration. 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 cepstrum combination of algorithms, the more traditional autocorrelation have some improvements.Key words: autocorrelation; cepstrum; the three-level center clipping基音是语音信号处理中的一个非常重要的参数。
基于MATLAB的基音检测分析

基于MATLAB 的基音检测分析骆娇艳,孙祥娥(长江大学电子信息学院,湖北荆州434000)摘要:基音检测作为语音信号处理的重要手段,被广泛地应用于语音的合成、编码及识别等一系列语音信号处理技术问题。
基音检测的准确性对于要求极高的语音识别、合成、分析、压缩编码等等都有重要的意义。
该文用自相关函数法、平均幅度差函数法和倒谱法这三种常用的基音检测方法,运用MATLAB 编程实现,对语音信号的基音周期轨迹图进行了比较分析,并由此得出和倒谱法进行语音信号基音的检测更为精确。
关键词:基音检测;MATLAB;自相关函数法;平均幅度差函数法;倒谱法中图分类号:TP311文献标识码:A文章编号:1009-3044(2014)18-4293-031 概述语音是人类相互之间进行信息交流的基本手段和重要载体,随着现代通信科学技术的迅速发展,尤其是计算机的日趋普及,对语音信号的处理发挥着越来越重要的作用。
汉语中的声调对于语音的理解很重要,同时相同的汉语在不同的语气或词义下均有不同的声调[1]。
因此,基音检测的准确性对于汉语语音信号的识别极为重要。
根据声带的震动情况,我们一般将语音信号分为清音和浊音两种[2]。
清音和普通的白噪声相似,尚未发现明显的规律性;而浊音就是俗称的有声语言,携带着语音的大部分能量,并且具有明显的周期性。
当人们在发出浊音的时候,气流往往会通过声门迫使声带产生规律性的震动,我们称之为激励脉冲串。
通过声带震动产生的频率被定义为:基音频率,同样地,就有了基音周期[3]。
通常所指的基音检测实际上就是一种对基音周期的估计,结果是希望能够找出与声带的振动频率相一致或较为吻合的轨迹曲线。
语音信号的处理包括四大类,分别为:语音合成、语音识别、语音编码以及语音识别[2]。
其中,准确提取语言信号参数对于整个的语音信号处理是至关重要的。
只有当某些可以表示语音信号本质特征的参数被准确地提出,这些参数才可以被利用进行有效的语音合成,语音识别以及语音的压缩解码处理,其中语音周期提取的准确性会直接影响到语音合成的真实性,因此在众多参数中就会显得尤为重要[4]。
如何使用MATLAB进行声音信号处理

如何使用MATLAB进行声音信号处理声音信号处理在现代通信、音频处理、语音识别等领域起着非常重要的作用。
MATLAB作为一款功能强大的科学计算软件,在声音信号处理方面具有广泛的应用。
本文将介绍如何使用MATLAB进行声音信号处理。
一、声音信号的基本概念和特征声音信号是一种通过空气、水等介质传播的机械波,具有振幅、频率和相位等特征。
在声音信号处理中,我们常用到的一些概念和特征包括频谱、语谱图、信噪比等。
频谱是声音信号在频域上的表现形式,可以通过傅里叶变换将时域信号转换为频域信号。
MATLAB提供了fft函数可以方便地进行傅里叶变换。
语谱图是声音信号在时间和频率上的三维表示,可以通过短时傅里叶变换(STFT)得到。
MATLAB的spectrogram函数可以实现语谱图的计算和绘制。
信噪比是衡量声音信号中有用信息和噪声之间比例的常用指标,可以通过计算信号的能量和噪声的能量比值得到。
MATLAB提供了snr函数可以计算信噪比。
二、声音信号的读取和保存在使用MATLAB进行声音信号处理之前,我们首先需要将声音信号读取到MATLAB中进行处理。
MATLAB的audioread函数可以实现读取常见音频格式的声音文件,例如.wav、.mp3等。
读取得到的声音信号可以保存在一个向量中,每个采样点的数值表示声音的振幅。
保存处理后的声音信号可以使用MATLAB的audiowrite函数。
我们可以指定保存的音频格式和保存的文件名。
三、声音信号的滤波处理滤波是声音信号处理中常用的技术,可以用来去除信号中的噪声或者增强信号中的某些频率成分。
MATLAB提供了fir1和butter函数可以用于设计和实现各种类型的滤波器。
fir1函数用于设计FIR滤波器,可以通过指定滤波器的阶数和截止频率来设计低通、高通、带通或带阻滤波器。
butter函数用于设计IIR滤波器,可以通过指定滤波器的阶数和截止频率来设计低通、高通、带通或带阻滤波器。
基于MATLAB的语音信号时域特征分析.doc

+k w m k)()]开始录音1)短时能量(1)加矩形窗a=wavread('C:\Users\k01\WEI.wav'); subplot(6,1,1),plot(a);N=32;for i=2:6h=linspace(1,1,2.^(i-2)*N);En=conv(h,a.*a);subplot(6,1,i),plot(En);if(i==2) legend('N=32');elseif(i==3) legend('N=64');elseif(i==4) legend('N=128');elseif(i==5) legend('N=256');elseif(i==6) legend('N=512');endend00.51 1.52 2.53 3.54x 105-0.200.200.51 1.52 2.53 3.54x 105012 N=3200.51 1.52 2.53 3.54x 105024 N=6400.51 1.52 2.53 3.54x 10505 N=12800.51 1.52 2.53 3.54x 1050510 N=25600.51 1.52 2.53 3.54x 10501020 N=512(2)加汉明窗a=wavread('C:\Users\k01\WEI.wav');subplot(6,1,1),plot(a);N=32;for i=2:6h=hanning(2.^(i-2)*N);%形成一个汉明窗,长度为2.^(i-2)*N En=conv(h,a.*a);% 求短时能量函数Ensubplot(6,1,i),plot(En);if(i==2) legend('N=32');elseif(i==3) legend('N=64');elseif(i==4) legend('N=128');elseif(i==5) legend('N=256');elseif(i==6) legend('N=512');endend00.51 1.52 2.53 3.54x 105-0.200.200.51 1.52 2.53 3.54x 10500.51 N=3200.51 1.52 2.53 3.54x 105012 N=6400.51 1.52 2.53 3.54x 105024 N=12800.51 1.52 2.53 3.54x 10505 N=25600.51 1.52 2.53 3.54x 1050510 N=51200.51 1.52 2.53 3.5x 105-0.500.53) 自相关函数N=240Y=WAVREAD('C:\Users\k01\WEI.wav');x=Y(13271:13510);x=x.*rectwin(240);R=zeros(1,240);for k=1:240for n=1:240-kR(k)=R(k)+x(n)*x(n+k);endendj=1:240; plot(j,R); grid;短时谱1)短时谱cleara=wavread('C:\Users\k01\Desktop\WENWEI.wav');subplot(2,1,1),plot(a);title('original signal');gridN=256;h=hamming(N);for m=1:Nb(m)=a(m)*h(m)endy=20*log(abs(fft(b)))subplot(2,1,2)plot(y);title('短时谱');grid00.51 1.52 2.53 3.5x 105-0.500.5original signal050100150200250300-200-100100短时谱2)语谱图[x,fs,nbits]=wavread('C:\Users\k01\Desktop\WENWEI.wav ')specgram(x,512,fs,100);xlabel('时间(s)');ylabel('频率(Hz)');title('语谱图');3)倒谱和复倒谱(1)加矩形窗时的倒谱和复倒谱cleara=wavread('C:\Users\k01\Desktop\WENWEI.wav',[4000,4350]); N=300;h=linspace(1,1,N);for m=1:Nb(m)=a(m)*h(m);endc=cceps(b);c=fftshift(c);d=rceps(b);d=fftshift(d);subplot(2,1,1)plot(d);title('加矩形窗时的倒谱')subplot(2,1,2)plot(c);title('加矩形窗时的复倒谱')050100150200250300-6-4-22加矩形窗时的倒谱050100150200250300-505加矩形窗时的复倒谱(2)加汉明窗时的倒谱和复倒谱cleara=wavread('C:\Users\k01\Desktop\WENWEI.wav',[4000,4350]); N=300;h=hamming(N);for m=1:Nb(m)=a(m)*h(m);endc=cceps(b);c=fftshift(c);d=rceps(b);d=fftshift(d);subplot(2,1,1)plot(d);title('加汉明窗时的倒谱')subplot(2,1,2)plot(c);title('加汉明窗时的复倒谱')050100150200250300-6-4-22加汉明窗时的倒谱050100150200250300-505加汉明窗时的复倒谱段的起始点;而过零率分析仅仅是表明清音的过零率高于浊音,对噪声的存在比较敏感,如果背景中有反复穿越坐标轴的随机噪声,会产生大量的虚假过零率,影响检测结果。
matlab在基音周期检测教学中的应用研究

本栏目责任编辑:王力计算机教学与教育信息化Matlab 在基音周期检测教学中的应用研究朱徐来(安徽建筑大学电子与信息工程学院,安徽合肥230039)摘要:基音周期是《语音信号处理》中的重点和难点,基音周期作为语音信号的重要参数,在语音编码、语音合成和语音识别等方面,有着非常重要的作用。
本文采用Matlab 对基因周期进行仿真分析,从仿真图上查看语音信号的基音周期,让学生更形象的理解语音信号的基音周期。
关键词:基音周期;语音编码;语音合成;语音识别;仿真中图分类号:G642文献标识码:A文章编号:1009-3044(2020)02-0188-02开放科学(资源服务)标识码(OSID):1概述语音信号是通信工程专业的一门必修课,其中基音周期是一个重要的知识点,对于基音周期的检测十分困难,处理复杂,且变化范围较大,不同的人群,他们的基音周期差别相当明显。
即使同一个人在不同环境下的基音周期也会有所不同,如何在教学中把语音信号的基音周期讲解清楚,让学生理解透彻,是该知识点讲解的难点。
本文采用Matlab 对基音周期进行仿真分析,从仿真图中很直观地看到基音周期,有利于把复杂的问题简单化。
2基音周期检测的难点2.1基音周期没有完全的周期性语音信号是随时间变化的信号,是非线性信号,在信号分析处理时进行短时加窗,近似为线性信号进行处理,而语音信号的产生采用二元激励的方式,即清音和浊音。
对于清音,没有明显的周期性;对于浊音,声门激励的波形并不是一个完全的周期序列,从而也就无法准确地计算基音周期[1,3,7]。
2.2声道的影响语音信号从声带部位产生到从口腔发出,经过声道的干扰,基音的周期性和共振峰的周期性会产生交叠现象,叠加后波形的峰值可能会与原来峰值相差较大,所以要从语音信号中去除声道的影响。
常见的方法有采用逆滤波器法[2]、同态分析法等。
或者直接取出仅与声带振动有关的声源信息,在声带部位直接取出语音信号,这也并非易事。
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程序

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

目录摘要-------------------------------------------------------------3 关键词-----------------------------------------------------------3 1课程设计的目的、意义-------------------------------------------3 1.1 目的---------------------------------------------------------31.2 意义---------------------------------------------------------32 设计任务及技术指标---------------------------------------------3 2.1 设计任务-----------------------------------------------------32.2技术指标------------------------------------------------------43 设计方案论证---------------------------------------------------43.1 信号的抽样与恢复---------------------------------------------4 3.2 滤波器设计---------------------------------------------------4 3.2.1模拟滤波器设计原理------------------------------------------4 3.2.2 模拟滤波器数字化原理---------------------------------------53.2.3数字高通、带通、带阻滤波器的设计----------------------------54 设计内容 ------------------------------------------------------6 4.1必选部分------------------------------------------------------6 4.2 拓展部分----------------------------------------------------65 实验结果与分析-------------------------------------------------66 总结-----------------------------------------------------------29 参考文献---------------------------------------------------------30题目语音信号分析系统设计摘要:语音信号分析系统设计涵盖了基于matlab对语音信号进行处理的原理、方法及源程序,包括语音信号的采集与时域频域分析、对语音信号进行加噪滤波处理、噪声滤除前后的语音进行时频域分析、语音信号的重采样和回放、语音信号部分时域参数的提取及GUI用户友好界面的实现,实现了对简单的单音节语音的综合处理与分析。
- 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)。