声事件识别之时域短时过零率

 

一、       概念介绍

短时过零率可以看做信号频率的简单度量,是谱特性的一种粗略估计。

(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('短时平均过零率')

(有错误,请批评指正)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值