一、 概念介绍
短时过零率可以看做信号频率的简单度量,是谱特性的一种粗略估计。
(1) 过零就是指信号通过零值。过零率就是指每秒内信号值通过零值的次数
(2) 对于离散时间序列,过零则是指信号取样值改变符号,过零率则是每个样本改变符号的次数。对于声音信号,则是指一帧声音中语声音信号波形穿过横轴的次数,可以用相邻两个取样值改变符号的次数来计算。
二、 计算公式
其中,N是一帧的采样点数,sgn[ ]为符号函数,即
三、 MATLAB程序
sgn.m
%% sgm.m
function z = sgn(x)
if x>=0
z=1;
else
z=-1;
end
短时过零率提取程序
clear all
clf
close all
[x fs]=audioread('D:\experiment\soundclassify\training\glass\2.wav'); %读取音频信号 x为信号样本,fs信号采样频率
%%%%%%%%%%%%%判断并合并单双声道%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if size(x,2)>1
x=x(:,1);
endframe=enframe(x,1024,512);%分帧 帧长1024 帧移512
zcr_sum=0;%变量保存过零点数
for i=1:size(frame,1)
y=frame(i,:);%每帧数据
s=y'.*hamming(1024);%加汉明窗窗
%%%%%%%%%%%%%%%%%%%%%计算过零率%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for j=1:size(s,1)-1
zcr_sum=zcr_sum+abs(sgn(s(j+1))-sgn(s(j)));
end
zcr_sum=zcr_sum/2; m(:,i) = zcr_sum;%将每帧的过零率保存到变量m中
end
figure(1)
plot(m)
xlabel('帧数/帧');
ylabel('过零数');
title('短时平均过零率')
(有错误,请批评指正)