Pitch-detection-MATLAB.zip

  • PUDN用户
    了解作者
  • matlab
    开发工具
  • 11KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 6
    下载次数
  • 2013-11-30 11:29
    上传日期
基音检测的MATLAB程序,好含有分帧程序,短时域所有相关分帧处理算法代码。
Pitch-detection-MATLAB.zip
  • fra.m
    370B
  • enframe.m
    443B
  • PitchAnalysis.m
    3.5KB
  • MaoYiSheng.wav
    14.1KB
内容介绍
%基于自相关法的基音检测程序 %包括语音分帧、短时能量及过零率计算、清浊音判决、中心削波、自相关法基音检测、基音平滑6个模块 %语音分帧 %start; FS=8000;%采样率 NBITS=16;%量化比特数 [Y,FS,NBITS]=wavread('MaoYiSheng.wav'); L=length(Y);%样点总长度 %sound(Y) N=160;%帧长 FrameShift=N/2;%帧移 F=fra(Y,N,FrameShift);%调用分帧函数进行分帧 FrameNumber=size(F,1);%帧数 %短时能量计算 E=zeros(1,FrameNumber);%生成行向量存放每帧能量 for i=1:FrameNumber%帧间循环 temp=F(i,1:N);%取每帧样点 E(i)=sum(temp.*temp);%计算每帧能量E end m=max(E); for i=1:FrameNumber %对E进行归一化 E(i)=E(i)/m; end %短时过零率计算 for i=1:FrameNumber %帧间循环 for j=2:N %帧内循环 if F(i,j)>=0%计算该样点的符号 a(j)=1; else a(j)=-1; end if F(i,j-1)>=0%计算后一个样点的符号 b(j)=1; else b(j)=-1; end w(j)=abs(a(j)-b(j))/2; end Z(i)=sum(w);%计算每帧过零率Z end m=max(Z); for i=1:FrameNumber %对Z进行归一化 Z(i)=Z(i)/m; end %基于短时能零比的清浊音判决 k=1; TH=0.5;%短时能零比判决阈值 for i=1:FrameNumber %帧间循环 EZR=E(i)/Z(i);%短时能零比 if EZR>TH %利用短时能零比进行清浊音判决 VoiceFrame(k)=i;%保存浊音帧的序号 k=k+1; end end VoiceFrame_Number=length(VoiceFrame)%浊音帧帧数 % VoiceFrame %中心削波 for i=1:FrameNumber%帧间循环 x=F(i,1:N); m=max(x);%计算每帧最大样值 CL=0.6*m;%中心削波阈值为最大样值的0.6 for j=1:N%中心削波 if F(i,j)>=CL F(i,j)=F(i,j)-CL; elseif F(i,j)<=(-CL) F(i,j)=F(i,j)+CL; else F(i,j)=0; end end end %自相关法基音检测 Pitch=zeros(1,VoiceFrame_Number);%生成行向量保存基音周期 for i=1:VoiceFrame_Number%浊音帧间循环 p=VoiceFrame(i);%浊音帧序号 x=F(p,1:N);%选取浊音段 R=zeros(1,N); for k=1:N %循环计算自相关函数 for n=1:(N-k) R(k)=R(k)+x(n)*x(n+k); end end Rm=0; for k=20:N %寻找自相关函数的第一最大峰值点 if R(k)>Rm Rm=R(k); Pitch(i)=k/FS;%记录峰值点所对应的延时,可求出该帧的基音周期 end end end %基音中值平滑 Pinghua_Pitch=Pitch; Pitch_Number=VoiceFrame_Number;%基音个数与浊音帧个数相同 for i=1:Pitch_Number%中值平滑,滑动窗口长度为5,取前后样值的中值作为输出 if i==1 temp=Pinghua_Pitch(i:i+4); Pinghua_Pitch(i)=median(temp); elseif i==2 temp=Pinghua_Pitch(i-1:i+3); Pinghua_Pitch(i)=median(temp); elseif i==Pitch_Number-1 temp=Pinghua_Pitch(i-3:i+1); Pinghua_Pitch(i)=median(temp); elseif i==Pitch_Number temp=Pinghua_Pitch(i-4:i); Pinghua_Pitch(i)=median(temp); else temp=Pinghua_Pitch(i-2:i+2); Pinghua_Pitch(i)=median(temp); end end figure;%出图 subplot(2,2,1); plot(E); xlabel('帧数'); ylabel('短时能量E、短时过零率Z(归一化)'); title('语音短时能量、短时过零率'); grid; hold on plot(Z,'r'); legend('短时能量','短时过零率','Location','South'); subplot(2,2,2); plot(R); title('中心削波后的短时自相关函数(最后浊音帧)'); xlabel('延时k'); ylabel('幅度'); grid; subplot(2,2,3); plot(VoiceFrame,Pitch,'.'); xlabel('帧数'); ylabel('基音周期(s)'); title('基音周期曲线'); axis([0,90,0,0.02]); grid; subplot(2,2,4); plot(VoiceFrame,Pinghua_Pitch,'.'); xlabel('帧数'); ylabel('基音周期(s)'); title('中值平滑后的基音周期曲线'); axis([0,90,0,0.02]); grid;
评论
    相关推荐
    • Pitch-Detection.rar
      这是一篇论文,说的是关于哼唱检索系统中的基频检测,用的算法是短时平均幅度差函数
    • Pitch-detection.zip
      线性预测声码器设计中语音信号的基音周期提取,采集语音信号,对语音信号进行处理,区分清音浊音,并通过对采样值进行滤波、分帧、求短时自相关函数,得到浊音的基音周期。
    • Predominant_Pitch_Detection.zip
      分 离 音 乐 和 背 景 声 音 的 代 码
    • Pitch-Detection.zip
      Program to detect short term pitch
    • pitch_detection.zip
      以matlab为平台,基于倒谱、自相关性进行基因检测。
    • Pitch Detection.zip
      For the detection of Pitches in a signal
    • Pitch-detection.zip
      (1)掌握时域基音检测的基本原理和方法。 (2)熟悉基音检测的预处理和后处理的基本思想和方法。 (3)掌握基于归一化互相关函数的基音检测算法。
    • pitch-detection-app-master.zip
      Pitch Detection master
    • pitchtracker.zip
      Pitch Tracker detector C#
    • matlabcnhelp.rar
      matlab中文帮助很难找的,快速下载