语音短时过零率计算——Python实现
概念
上一篇文章介绍了语音短时能量,这篇介绍一下语音的短时过零率。短时过零率也是一个比较基础的语音时域特征,下面就来介绍一下。
短时过零率就是单位时间穿过坐标系横轴的次数,计算公式如下:
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)<0sgn[x(n)] = \begin{cases} 1 & x(n) \ge 0 \\ -1 & x(n) < 0 \end{cases}sgn[x(n)]={1−1x(n)≥0x(n)<0
w(n)w(n)w(n) 函数用来计算比:
w(n)={1/2N0≤n≤N−10其它w(n) = \begin{cases} 1/2N & 0 \le n \le N -1 \\ 0 & \text{其它} \end{cases}w(n)={1/2N00≤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实现相关推荐
- matlab短时过零率计算+源代码
[xx,Fs]=audioread('mei.wav'); % 读入数据文件 x=xx-mean(xx); % 消除直流分量 wlen=200; inc=80; % 设置帧长.帧移 win=hanni ...
- 音频信号特征提取(1):短时特征之短时能量、短时功率、短时过零率
特征提取(Feature Exaction)的重要性,就不用多说了. 对于音频信号,按时间分辨率.按局部or全局的观念.持续时间长短,或者爱怎么讲怎么讲,特征可分为长期(long-term).中期(m ...
- python求语音信号短时能量、短时过零率、语谱图
python语音信号处理(二) 一.短时能量 短时能量主要用于区分浊音段和清音段,因为浊音时E(i)值比清音时大得多:区分声母与韵母的分界和无话段与有话段分界. 计算第i帧语音信号yi(n)的短时能量 ...
- 用python计算准确率_分词结果准确率、召回率计算-python(示例代码)
使用python计算分词结果的准确率,召回率和F值 测试文件output.txt格式如下: 团 B B 圆 E E 是 BE BE 春 B B 节 E E 千 B B 年 E E 不 B B 变 E ...
- python计算召回率_分词结果准确率、召回率计算-python
原博文 2016-06-19 13:01 − 使用python计算crf根据模型的分词结果的准确率,召回率和F值 测试文件output.txt,第一列是字,第二列是人工标注的分词结果,第三列是根据模型 ...
- 语音短时能量计算——Python实现
介绍 刚开始学习计算机视听觉,第一个实验是端点检测算法.这个算法实现起来还是比较简单的,主要是该算法利用到的两个数据--语音短时能量和短时过零率.今天先分享一下我计算短时能量的方法. 语音短时能量,顾 ...
- 语音识别-过零率和短时能量-端点检测
端点检测 个人理解 能量与过零数的端点检测算法步骤 语音信号x(n)进行分帧处理 计算每一帧的短时能量,得到语音的短时帧能量 计算每一帧语音的过零数,得到短时帧过零数 考擦语音的平均能量设置一个较高的 ...
- matlab 端点检测 能零比法_基于短时能量与过零率的端点检测的matlab分析
基于语音端点检测的方法有很多,从历史的发展来看. 首先是基于短时能量和短视过零率的端点检测=〉各变换域=〉人工神经网络=〉基于倒谱距离的检测算法=〉基于谱熵的方法=〉几何门限的方法=〉sigma函数= ...
- python (语音)信号拆分为数据块,计算短期能量和过零率
学习目标(ILO): 您应该 了解如何将(语音)信号拆分为数据块(帧)并在这些块上进行分析/转换 计算短期能量和过零率并将它们可视化以区分浊音和清音语音部分 了解相关性的基础知识并能够实现相关性估计器 ...
最新文章
- java 空格乱码_java 中文乱码以及空格乱码解决方案总结
- 计算机联锁站按钮继电器电路,计算机联锁系统与站内各种电路结合说明.DOC
- boot数据加解密 spring_springboot项目使用druid对数据库密码的加解密
- UVA11324-- The Largest Clique(SCC+DP)
- SAP Spartacus Theme 设置
- LeetCode 788. 旋转数字
- Verilog HDL中阻塞语句和非阻塞语句的区别
- 32. My Experiences in the Factories 我在工厂的经历
- 使用PhoneNumberValidator判断用户输入的电话格式,并用PhoneFormatter对电话号码格式化。...
- 单位个人计算机 数据备份,个人所得税软件数据备份,您必须知道的5件事
- linux如何查看内存?
- 抖音整人/撩小姐姐代码(vbs脚本)
- 欢迎大家加入我的Q群
- Android UI 模板
- 用c语言实现打印乘法口诀表
- 【UOS】如何用Ventoy工具制作UOS启动盘操作
- js中利用prompt和parseFloat来实现用户体温华氏和摄氏的提取(18)
- 高精度轻量级图像分割SOTA模型PP-LiteSeg开源
- 【分布式微服务】消息中心初步搭建
- 回顾 Firefox 历史
热门文章
- lsb_release 提示命令不存在
- [RL 9] Trust Region Policy Optimization (ICML, 2015)
- 穿越NAT的p2p通信方法研究
- 大物知识点复习框架——光学
- Maya获取材质ShadingEngine信息
- java eclipse生成apk,将Eclipse Android项目打包成APK文件
- 自控力读书笔记 第七章	 出售未来:及时享乐的经济学
- Java并发编程工具类:CountDownLatch、CyclicBarrier、Semaphore
- iOS开发者账号Agent更换
- kafka启动失败 The Cluster ID doesn‘t match...