1、需求分析
采用五种基本波形进行短时平均过零率算法的检测。生成一段5s的波形,采样频率均为8000Hz:1、正弦波:幅值:0.5V,频率:1kHz;2、全0波形;3、正弦波:幅值:0.5V,频率:2kHz;4、正弦波:幅值:0.5V,频率:3kHz;5、噪声。
注意 :因为生成.wav文件后,MATLAB和python读取WAV文件时全零波形会产生误差,读入后不再是全零波形,所以这里在验证短时平均过零率算法的时候直接输入全零矩阵进行验证。
2、短时平均过零率代码
1)基于MATLAB的代码
短时平均过零率程序:
zcr=zeros(1,frameNum);
for i=1:frameNum
frameMat(:,i)=frameMat(:,i)-mean(frameMat(:,i)); % 消除直流分量
zcr(i)=sum(frameMat(1:end-1,i).*frameMat(2:end,i)<=0);
end
完整代码如下:
[y,fs]=wavread('synthesis.wav');
%直接输出全零矩阵
%y=zeros(1,8000);
%fs = 8000; %采样频率
frameSize=200;inc=80; % 设置帧长、帧移
win=hanning(frameSize);
N=length(y);
frameMat=enframe(y, win, inc)'; %分帧。“'”表示共轭转置
frameNum=size(frameMat, 2); %获取帧数。返回frameMat矩阵的列数
zcr=zeros(1,frameNum);
for i=1:frameNum
frameMat(:,i)=frameMat(