概念

上一篇文章介绍了语音短时能量,这篇介绍一下语音的短时过零率。短时过零率也是一个比较基础的语音时域特征,下面就来介绍一下。

短时过零率就是单位时间穿过坐标系横轴的次数,计算公式如下:

Zn=∑m=−∞∞∣sgn[x(m)]−sgn[x(m−1)]∣w(m)Z_n = \sum_{m = -\infty}^\infty|sgn[x(m)] - sgn[x(m - 1)]|w(m)Zn​=m=−∞∑∞​∣sgn[x(m)]−sgn[x(m−1)]∣w(m)

其中,sgn(n)sgn(n)sgn(n)为符号函数:

sgn[x(n)]={1x(n)≥0−1x(n)&lt;0sgn[x(n)] = \begin{cases} 1 &amp; x(n) \ge 0 \\ -1 &amp; x(n) &lt; 0 \end{cases}sgn[x(n)]={1−1​x(n)≥0x(n)<0​

w(n)w(n)w(n) 函数用来计算比:

w(n)={1/2N0≤n≤N−10其它w(n) = \begin{cases} 1/2N &amp; 0 \le n \le N -1 \\ 0 &amp; \text{其它} \end{cases}w(n)={1/2N0​0≤n≤N−1其它​

我们可以通过计算每一帧时间内穿过的横轴的次数,然后除以每帧内采样点的数目,就可以得到语音每帧内的短时过零率。

门限过零率

由于短时过零率很容易受到低频的干扰,因此,在计算时,加上门限,来过滤掉低频带来的影响,如图所示:

计算公式如下:

Zn=∑m=−∞∞∣sgn[x(m)−T]−sgn[x(m−1)−T]∣+∣sgn[x(m)+T]−sgn[x(m−1)+T]∣w(m)Z_n = \sum_{m = -\infty}^\infty{|sgn[x(m) - T] - sgn[x(m - 1) - T]| + |sgn[x(m) + T] - sgn[x(m - 1) + T]|}w(m) Zn​=m=−∞∑∞​∣sgn[x(m)−T]−sgn[x(m−1)−T]∣+∣sgn[x(m)+T]−sgn[x(m−1)+T]∣w(m)

这样,利用添加门限的方式,就可以过滤掉低频带来的影响。

Python 实现

首先,还是先要读取语音文件:

f = wave.open("./语料/" + str(i + 1) + ".wav","rb")
# getparams() 一次性返回所有的WAV文件的格式信息
params = f.getparams()
# nframes 采样点数目
nchannels, sampwidth, framerate, nframes = params[:4]
# readframes() 按照采样点读取数据
str_data = f.readframes(nframes)            # str_data 是二进制字符串# 以上可以直接写成 str_data = f.readframes(f.getnframes())# 转成二字节数组形式(每个采样点占两个字节)
wave_data = np.fromstring(str_data, dtype = np.short)
print( "采样点数目:" + str(len(wave_data)))          #输出应为采样点数目
f.close()

写一个计算短时过零率的函数,我这里的语音,每帧有个采样点:

# 自定义函数,计算数值的符号。
def sgn(data):if data >= 0 :return 1else :return 0
#计算过零率
def calZeroCrossingRate(wave_data) :zeroCrossingRate = []sum = 0for i in range(len(wave_data)) :if i % 256 == 0:continuesum = sum + np.abs(sgn(wave_data[i]) - sgn(wave_data[i - 1]))if (i + 1) % 256 == 0 :zeroCrossingRate.append(float(sum) / 255)sum = 0elif i == len(wave_data) - 1 :zeroCrossingRate.append(float(sum) / 255)return zeroCrossingRate

最后,调用即可:

zeroCrossingRate = calZeroCrossingRate(wave_data)

所有过零率数据都存储在 zeroCrossingRate 数组里了 。

写在最后

由于本人刚开始学习语音部分,学的还很有限,如有书写错误的地方,希望大家帮助改正,十分感谢。

语音短时过零率计算——Python实现相关推荐

  1. matlab短时过零率计算+源代码

    [xx,Fs]=audioread('mei.wav'); % 读入数据文件 x=xx-mean(xx); % 消除直流分量 wlen=200; inc=80; % 设置帧长.帧移 win=hanni ...

  2. 音频信号特征提取(1):短时特征之短时能量、短时功率、短时过零率

    特征提取(Feature Exaction)的重要性,就不用多说了. 对于音频信号,按时间分辨率.按局部or全局的观念.持续时间长短,或者爱怎么讲怎么讲,特征可分为长期(long-term).中期(m ...

  3. python求语音信号短时能量、短时过零率、语谱图

    python语音信号处理(二) 一.短时能量 短时能量主要用于区分浊音段和清音段,因为浊音时E(i)值比清音时大得多:区分声母与韵母的分界和无话段与有话段分界. 计算第i帧语音信号yi(n)的短时能量 ...

  4. 用python计算准确率_分词结果准确率、召回率计算-python(示例代码)

    使用python计算分词结果的准确率,召回率和F值 测试文件output.txt格式如下: 团 B B 圆 E E 是 BE BE 春 B B 节 E E 千 B B 年 E E 不 B B 变 E ...

  5. python计算召回率_分词结果准确率、召回率计算-python

    原博文 2016-06-19 13:01 − 使用python计算crf根据模型的分词结果的准确率,召回率和F值 测试文件output.txt,第一列是字,第二列是人工标注的分词结果,第三列是根据模型 ...

  6. 语音短时能量计算——Python实现

    介绍 刚开始学习计算机视听觉,第一个实验是端点检测算法.这个算法实现起来还是比较简单的,主要是该算法利用到的两个数据--语音短时能量和短时过零率.今天先分享一下我计算短时能量的方法. 语音短时能量,顾 ...

  7. 语音识别-过零率和短时能量-端点检测

    端点检测 个人理解 能量与过零数的端点检测算法步骤 语音信号x(n)进行分帧处理 计算每一帧的短时能量,得到语音的短时帧能量 计算每一帧语音的过零数,得到短时帧过零数 考擦语音的平均能量设置一个较高的 ...

  8. matlab 端点检测 能零比法_基于短时能量与过零率的端点检测的matlab分析

    基于语音端点检测的方法有很多,从历史的发展来看. 首先是基于短时能量和短视过零率的端点检测=〉各变换域=〉人工神经网络=〉基于倒谱距离的检测算法=〉基于谱熵的方法=〉几何门限的方法=〉sigma函数= ...

  9. python (语音)信号拆分为数据块,计算短期能量和过零率

    学习目标(ILO): 您应该 了解如何将(语音)信号拆分为数据块(帧)并在这些块上进行分析/转换 计算短期能量和过零率并将它们可视化以区分浊音和清音语音部分 了解相关性的基础知识并能够实现相关性估计器 ...

最新文章

  1. java 空格乱码_java 中文乱码以及空格乱码解决方案总结
  2. 计算机联锁站按钮继电器电路,计算机联锁系统与站内各种电路结合说明.DOC
  3. boot数据加解密 spring_springboot项目使用druid对数据库密码的加解密
  4. UVA11324-- The Largest Clique(SCC+DP)
  5. SAP Spartacus Theme 设置
  6. LeetCode 788. 旋转数字
  7. Verilog HDL中阻塞语句和非阻塞语句的区别
  8. 32. My Experiences in the Factories 我在工厂的经历
  9. 使用PhoneNumberValidator判断用户输入的电话格式,并用PhoneFormatter对电话号码格式化。...
  10. 单位个人计算机 数据备份,个人所得税软件数据备份,您必须知道的5件事
  11. linux如何查看内存?
  12. 抖音整人/撩小姐姐代码(vbs脚本)
  13. 欢迎大家加入我的Q群
  14. Android UI 模板
  15. 用c语言实现打印乘法口诀表
  16. 【UOS】如何用Ventoy工具制作UOS启动盘操作
  17. js中利用prompt和parseFloat来实现用户体温华氏和摄氏的提取(18)
  18. 高精度轻量级图像分割SOTA模型PP-LiteSeg开源
  19. 【分布式微服务】消息中心初步搭建
  20. 回顾 Firefox 历史

热门文章

  1. lsb_release 提示命令不存在
  2. [RL 9] Trust Region Policy Optimization (ICML, 2015)
  3. 穿越NAT的p2p通信方法研究
  4. 大物知识点复习框架——光学
  5. Maya获取材质ShadingEngine信息
  6. java eclipse生成apk,将Eclipse Android项目打包成APK文件
  7. 自控力读书笔记 第七章 出售未来:及时享乐的经济学
  8. Java并发编程工具类:CountDownLatch、CyclicBarrier、Semaphore
  9. iOS开发者账号Agent更换
  10. kafka启动失败 The Cluster ID doesn‘t match...