过零率(Zeo Crossing Rate)是在每个音框中,音讯通过.docVIP

  • 126
  • 0
  • 约2.96千字
  • 约 7页
  • 2018-09-19 发布于江苏
  • 举报

过零率(Zeo Crossing Rate)是在每个音框中,音讯通过.doc

过零率(Zeo Crossing Rate)是在每个音框中,音讯通过

过零率(Zero Crossing Rate)是在每个音框中,音讯通过零点的次数,具有如下特性: 一般而言,杂讯的过零大于气音的过零率,而气音的过零率又大于有声音的过零率 通常在断点侦测,估测气音的起始位置和结束位置 可用来预估信号的基频,但很容易出错,所以必须先进行前处理 以下显示如何计算过零率 范例 1输入: close all waveFile=test.wav; frameSize=256; overlap=0; [y, fs, nbits]=wavread(waveFile); framedY=buffer(y, frameSize, overlap); zcr1=sum(framedY(1:end-1, :).*framedY(2:end, :)=0); zcr2=sum(abs(diff(framedY0))); time=(1:length(y))/fs; frameNum=size(framedY, 2); frameTime=((0:frameNum-1)*(frameSize-overlap)+0.5*frameSize)/fs; subplot(2,1,1); plot(time, y); title(waveFile); set(gca, xlim, [0, length(y)/fs]); subplot(2,1,2); plot(frameTime, zcr1, .-, frameTime, zcr2, .-); legend(zcr1, zcr2); set(gca, xlim, [0, length(y)/fs]); title(过零率); 输出图形: 在下面这个范例中可以同时显示音量和过零率 范例2 输入 % 显示音量及过零率 recordViaMic=0; % 若要自行录音,将这个值改为 1 % 获取音频数据 if recordViaMic, % 自行录音 fs=16000; % 取样频率 duration=3; % 录音时间 waveFile=test.wav; %音频文件名称 dataType=uint8; % 解析度 8 bits/sample nbits=8; % 录音 fprintf(按任意键后开始 %g 秒录音:, duration); pause fprintf(录音中...); y=wavrecord(duration*fs, dataType); fprintf(录音结束\n); else % 读取音频文件 waveFile=test.wav; [y, fs, nbits]=wavread(waveFile); y=uint8(y*(2^nbits)/2+2^nbits/2); %恢复到原先档案所记载的unit8整数值 end % 绘制音频的时域数据 y=double(y); % 转成 double型文件 y=y-mean(y); % 零点校正 sampleNum=length(y); time=(1:sampleNum)/fs; figure; subplot(4,1,1); plot(time, y); ylabel(Amplitude); title(waveFile); axis([min(time), max(time), -2^nbits/2, 2^nbits/2]); % 音框设置 frameSize=256; overlap=84; frameRate=fs/(frameSize-overlap); framedY=buffer(y, frameSize, overlap); frameNum=size(framedY, 2); %计算音量 intensity=10*log10(mean(framedY.^2)); frameTime=(1:frameNum)*(frameSize-overlap)/fs; subplot(4,1,2); plot(frameTime, intensity); ylabel(Volume (Decibel)); title(音量); set(gca, xlim, [min(frameTime) max(frameTime)]) % 计算过零率 zcr1=sum(abs(diff(framedY0))); frameTime=(1:frameNum)*(frameSize-overlap)/fs; subplot(4,1,3); plot(frameTime, zcr1); ylabel(ZCR); title(过零率); set(gca, xlim, [min(frameTime) max(frameTime)]) %计算过零率 zcr2=sum(framedY(1:e

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档