基于MATLAB和Python的短时平均过零率分析

  短时平均过零率的MATLAB实现在博主的另一篇博客里已经介绍过了。这里主要介绍Python环境下信号的短时平均过零率,并对比MATLAB和Python两者仿真的结果是否一致。

1、过零率(Zero Crossing Rate)

概念:过零率(Zero Crossing Rate,ZCR)是指在每帧中,语音信号通过零点(从正变为负或从负变为正)的次数。 这个特征已在语音识别和音乐信息检索领域得到广泛使用,是对敲击的声音的分类的关键特征。

ZCR的数学形式化定义为:

z c r = 1 T 1 t = 1 T 1 π { s t s t 1 < 0 }

其中s是采样点的值,T为帧长,函数π{A}在A为真是值为1,否则为0。

特性:
(1).一般而言,清音(unvoiced sound)和环境噪音的ZCR都大于浊音(voiced sound);
(2).由于清音和环境噪音的ZCR大小相近,因而不能够通过ZCR来区分它们;
(3).在实际当中,过零率经常与短时能量特性相结合来进行端点检测,尤其是ZCR用来检测清音的起止点;
(4).有时也可以用ZCR来进行粗略的基频估算,但这是非常不可靠的,除非有后续的修正(refine)处理过程。

2、Python中语音信号的短时平均过零率

具体代码如下:
ZCR的Python实现如下:

import math
import numpy as np

def ZeroCR(waveData,frameSize,overLap):
    wlen = len(waveData)
    step = frameSize - overLap
    frameNum = math.ceil(wlen/step)
    zcr = np.zeros((frameNum,1))
    for i in range(frameNum):
        curFrame = waveData[np.arange(i*step,min(i*step+frameSize,wlen))]
        #To avoid DC bias, usually we need to perform mean subtraction on each frame
        curFrame = curFrame - np.mean(curFrame) # zero-justified
        zcr[i] = sum(curFrame[0:-1]*curFrame[1::]<=0)
    return zcr

对于给定语音文件MORSE.wav,利用上面的函数计算ZCR的代码如下:

import math
import wave
import numpy as np
import pylab as pl

fw = wave.open('F:\【1】音频\wav\MORSE.wav','rb')
params = fw.getparams()
print(params)
nchannels, sampwidth, framerate, nframes = params[:4]
str_data = fw.readframes(nframes)
wave_data = np.fromstring(str_data, dtype=np.int16)
wave_data = wave_data*1.0/(max(abs(wave_data)))#wave幅值归一化
fw.close()

# calculate Zero Cross Rate
frameSize = 256
overLap = 0
zcr = ZeroCR(wave_data,frameSize,overLap)

time = np.arange(0, len(wave_data)) * (1.0 / framerate)
time2 = np.arange(0, len(zcr)) * (len(wave_data)/len(zcr) / framerate)
pl.subplot(211)
pl.plot(time, wave_data)
pl.ylabel("Amplitude")
pl.subplot(212)
pl.plot(time2, zcr)
pl.ylabel("ZCR")
pl.xlabel("time (seconds)")
pl.show()

运行以上程序得到下图:
这里写图片描述

3、MATLAB中语音信号的短时平均过零率

MATLAB的具体代码在博主的另一篇博客里已经介绍过了。

实现的结果如下图所示:
这里写图片描述

4、分析

由MATLAB和Python的结果图可以看出两者的短时平均过零率基本一致。

猜你喜欢

转载自blog.csdn.net/qq_39516859/article/details/80222613