语音特征公式与python实现

2023-11-14

1.过零率

zero crossing rate
每帧信号内,信号过零点的次数,体现的是频率特性。
Z n = 1 2 ∑ m = 0 N − 1 ∣ s g n [ x n ( m ) ] − s g n [ x n ( m − 1 ) ] ∣ Z_n = \frac{1}{2}\sum_{m=0}^{N-1}|sgn[x_n(m)]-sgn[x_n(m-1)]| Zn=21m=0N1sgn[xn(m)]sgn[xn(m1)]

import numpy as np
def stZCR(frame):
   # computing zero crossing rate
   count = len(frame)
   count_z = np.sum(np.abs(np.diff(np.sign(frame)))) / 2
   return (np.float64(count_z) / np.float64(count - 1))

2.能量

energy
短时能量,即每帧信号的平方和,体现的是信号能量的强弱
E n = ∑ m = 0 N − 1 x n 2 ( m ) E_n = \sum_{m=0}^{N-1}x_n^2(m) En=m=0N1xn2(m)

import numpy as np
def stEnergy(frame):
   return (np.sum(frame ** 2) / np.float64(len(frame)))

2.1 振幅扰动度-分贝形式

shimmer in DB
S h i m m e r ( d B ) = 1 N − 1 ∑ i = 1 N − − 1 ∣ 20 l o g ( A i + 1 / A i ) ∣ Shimmer(dB) = {\frac{1}{N-1}}\sum_{i=1}^{N--1}|20log(A_{i+1}/A_i)| Shimmer(dB)=N11i=1N120log(Ai+1/Ai)

import numpy as np
def stShimmerDB(frame):
    '''
     amplitude shimmer 振幅扰动度
     expressed as variability of the peak-to-peak amplitude in decibels 分贝
     [3]
    '''
    count = len(frame)
    sigma = 0
    for i in range(count):
        if i == count - 1:
            break
        sigma += np.abs(20 * (np.log10(np.abs(frame[i + 1] / (frame[i] + eps)))))
    return np.float64(sigma) / np.float64(count - 1)

2.2 振幅扰动度-百分数形式

S h i m m e r ( r e l a t i v e ) = 1 N − 1 ∑ N − 1 i = 1 ∣ A i − A i + 1 ∣ 1 N ∑ i = 1 N A i Shimmer(relative) = \frac{\frac{1}{N-1}\sum_{N-1}^{i=1}|A_i-A_{i+1}|}{\frac{1}{N}\sum_{i=1}^{N}A_i} Shimmer(relative)=N1i=1NAiN11N1i=1AiAi+1

def stShimmerRelative(frame):
    '''
    shimmer relative is defined as average absolute difference between the amplitude
    of consecutive periods divided by the average amplitude, expressed as percentage
    [3]
    '''
    count = len(frame)
    sigma_diff = 0
    sigma_sum = 0
    for i in range(count):
        if i < count - 1:
            sigma_diff += np.abs(np.abs(frame[i]) - np.abs(frame[i + 1]))
        sigma_sum += np.abs(frame[i])
    return np.float64(sigma_diff / (count - 1)) / np.float64(sigma_sum / count + eps)

3. 声强/响度

intensity / loudness

  • intensity: mean of squared input values multiplied by a Hamming window
    声强和响度是对应的概念,参考openSmile程序
    i n t e n s i t y = ∑ m = 0 N − 1 h a m W i n [ m ] ∗ x n 2 ( m ) ∑ m = 0 N − 1 h a m W i n [ m ] intensity = \frac{\sum_{m=0}^{N-1}hamWin[m]*x_n^2(m)}{\sum_{m=0}^{N-1}hamWin[m]} intensity=m=0N1hamWin[m]m=0N1hamWin[m]xn2(m)
    l o u d n e s s = ( i n t e n s i t y I 0 0.3 ) loudness =( {\frac{intensity}{I0}}^{0.3}) loudness=(I0intensity0.3) I 0 = 1 × 1 0 − 12 I0=1\times10^{-12} I0=1×1012
###################
##
## from opensimle
##
#####################
def stIntensity(frame):
    '''
    cannot understand what differ from energy
    '''
    fn = len(frame)
    hamWin = np.hamming(fn)
    winSum = np.sum(hamWin)
    if winSum <= 0.0:
        winSum = 1.0
    I0 = 0.000001
    Im = 0
    for i in range(fn):
        Im = hamWin[i] * frame[i] ** 2
    intensity = Im/winSum
    loudness = (Im / I0) ** .3
    return intensity, loudness

4. 基频

计算基频的方法包括倒谱法、短时自相关法和线性预测法。本文采用短时自相关法
1)基音检测预处理:语音端点检测
由于语音的头部和尾部不具有周期性,因此为了提高基音检测的准确性,在基音检测时采用了端点检测。使用谱熵法进行端点检测。
语音信号时域波形为 x ( i ) x(i) x(i),加窗分帧后第 n n n帧语音信号为 x n ( m ) x_n(m) xn(m),其FFT表示为 X n ( k ) X_n(k) Xn(k) k k k表示第 k k k条谱线。该语音帧在频域中的短时能量 E n E_n En
E n = ∑ k = 0 N / 2 X n ( k ) X n ∗ ( k ) E_n = \sum_{k=0}^{N/2}X_n(k)X_n^*(k) En=k=0N/2Xn(k)Xn(k)
N N N为FFT长度,只取正频率部分
某一谱线 k k k的能量谱为 Y n ( k ) = X n ( k ) X n ( k ) ∗ Y_n(k) = X_n(k)X_n(k)^* Yn(k)=Xn(k)Xn(k),则每个频率分量的归一化谱概率密度函数定义为 p n ( k ) = Y n ( k ) E n = Y n ( k ) ∑ l = 0 N / 2 Y n ( l ) p_n(k)=\frac{Y_n(k)}{E_n}=\frac{Y_n(k)}{\sum_{l=

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

语音特征公式与python实现 的相关文章

  • CEEMDAN代码,自适应噪声完备集合经验模态分别,C++代码下载

    CEEMDAN Complete Ensemble Empirical Mode Decomposition with Adaptive Noise 的中文名称是自适应噪声完备集合经验模态分解 要注意这个方法并不是在CEEMD方法上改进而来
  • 稀疏重构算法详解

    引入 在室内环境中 多径信号具有天然的空间稀疏性 根据压缩感知理论可知 如果信号是可压缩的或者在某个变换域是稀疏的 可以采用一个随机测量矩阵将高维信号映射到一个低维空间上 通过求解优化问题 以很高的概率重构出原始信号 因此 在该理论框架下
  • 零点分布对单位脉冲响应的影响

    共四个二阶网络的系统函数 画系统零极点分布图 求各系统单位脉冲响应 画波形 H1 clc clear all close all A 1 1 6 0 9425 B 1 0 0 figure zplane B A z roots B zero
  • 关于z域利用零极点快速判断滤波特性

    极点在右零点在左是低通 极点在左零点在右是高通 极点在零点中间是带通 零点在极点中间是带阻
  • 深入理解采样定理 + Matlab 仿真 Sa 函数的采样与恢复

    建议配合国宝老师的视频食用 信号与线性系统分析 吴大正 郭宝龙 文章目录 1 采样的说明 1 为什么要取样 2 什么是取样 2 采样定理 1 为什么要有奈奎斯特频率 2 什么是采样定理 3 信号的恢复 4 Matlab的Sa函数取样仿真 1
  • 图信号处理基础------Foundations in Graph Signal Processing

    本篇博文意在用例子的形式解释图信号处理基础 目的是记录总结自己的学习过程 有兴趣的读者也可也一起交流 前言 图是一种包含多种数据属性的不规则结构 然而 传统的图论处理方法都注重分析底层的图结构而不是图上的信号 随着多传感器测量技术的快速发展
  • 使用SARIMA做季节时间序列预测全流程(附MATLAB代码)

    在之前的专栏中我们用ARIMA的方法做了时间序列的趋势性预测 不过我们经常还会遇到一种情况 即某些时间序列中存在明显的周期性变化 这种周期是由于季节性变化 季度 月度等 引起的 如下图所示 为1949年到1960年每月国际航空公司的乘客人数
  • QT信号槽机制理解

    1 信号和槽概述 gt 信号槽是 Qt 框架引以为豪的机制之一 所谓信号槽 实际就是观察者模式 发布 订阅模式 当某个 事件 发生之后 比如 按钮检测到自己被点击了一下 它就会发出一个信号 signal 这种发出是没有目的的 类似广播 如果
  • 王道考研计算机网络第二章--物理层

    目录 2 1通信基础 2 1 1物理层基本概念 1物理层基本概念 2 1 2数据通信基础知识 1典型的数据通信模型 2数据通信相关术语 3三种通信方式 4两种数据传输方式 2 1 3码元 波特 速率 带宽 1码元 2速率 波特 带宽 2 1
  • 基于DFA方法的健康人与癫痫病人EEG数据分析附代码

    引言 DFA分析方法是由C K提出的一种研究时间序列波动长时相关性的方法 主要用来区别复杂系统本身产生的波动和由外界及环境刺激作用在系统上产生的波动 外部刺激产生的变化假设引起了局部效应 而系统本身内部的动力学产生的变化假设展示了长时的相关
  • 类EMD的“信号分解方法”及MATLAB实现(第四篇)——VMD

    重头戏来了 在以往的应用经验里 VMD方法在众多模态分解方法中可以说是非常好的 从催更力度上看 这个方法也是格外受关注 笔者决定加快进度快一些写完这个方法 十月份了有些同学要开始做毕设 希望这篇文能帮上忙 1 VMD 变分模态分解 的概念
  • 曼彻斯特编码/差分曼彻斯特编码

    1 曼彻斯特编码 Manchester Encoding 位中间电平从低到高跳变表示 0 位中间电平从高到低跳变表示 1 2 差分曼彻斯特编码 differential Manchester encoding 在最初信号的时候 即第一个信号
  • GIS状态检测新技术——振动分析法

    提示 唐老师好 我之前因为 阳 了 所以就没有参与汇报 给老师带来不便 请老师见谅 以此篇文章代替课堂汇报 文章目录 前言 一 不同故障对应的振动频谱和故障特征量 二 GIS设备振动特征估计 1 GIS设备状态空间 2 粒子滤波 三 GIS
  • 信号处理之FFT(如何求幅度、相位、画频谱图)

    信号处理 可以理解为对信号进行某种加工或变换来达到削弱信号中的多余内容 滤除混杂的噪声和干扰 将信号变换成容易分析与识别的形式 便于估计和选择它的特征参量等目的 快速傅里叶变换 FFT 是信号处理的重要组成部分 是离散傅里叶变换 DFT 的
  • [转]基于TDOA声源定位算法仿真--MATLAB仿真

    转自 http t cn AiTjYCqD 关注微信公众号 通信小课堂 获取专业小知识 声源定位算法是利用麦克风阵列进行声音定位 属于宽带信号 传统的MUSIC和DOA算法并不适用该场景 本仿真主要用TDOA算法进行定位 常用的阵列信号定位
  • 时频分析常用工具:STFT短时傅里叶变换 & 小波变化

    文章目录 1 傅里叶变换的局限性 2 STFT 3 小波变换 参考 时频分析之STFT 短时傅里叶变换的原理与实现 形象易懂讲解算法I 小波变换 https www zhihu com question 58814934 1 傅里叶变换的局
  • 信号的时域相位、频域相位

    文章目录 傅里叶变换的时移性质 matlab代码 单点频信号 线调信号 时域相位 频域相位 傅里叶变换的时移性质 信号增加线性相位时 是所有的频率分量对应的相位都有变化 matlab代码 清空一切 clc clear all close a
  • C++ 信号处理

    信号是由操作系统传给进程的中断 会提早终止一个程序 在 UNIX LINUX Mac OS X 或 Windows 系统上 可以通过按 Ctrl C 产生中断 有些信号不能被程序捕获 但是下表所列信号可以在程序中捕获 并可以基于信号采取适当
  • 波端口的使用

    波导端口代表了计算域的一种特殊边界条件 它既可以激发能量 也可以吸收能量 这种端口模拟了连接到该结构的无限长波导 波导模式从结构向边界平面传播 从而以非常低的反射水平离开计算域 当端口中的波导模式与结构内部波导的模式完全匹配时 可以实现非常
  • IBIS AMI Model 算法模式的选择

    常规的信号完整性仿真 只会包含传统的基于IBIS的芯片行为级模型 但高速串行总线在使用过程中 经常会由于传输信道或链路过长以及信号频率较高而造成信号衰减过大 接收端无法正确判别信号 因此 这类SerDes芯片都需要集成均衡或者加重等信号处理

随机推荐

  • 每天一个设计模式之 -- 组合模式

    组合模式 组合模式 Composite Pattern 又叫部分整体模式 是用于把一组相似的对象当作一个单一的对象 组合模式依据树形结构来组合对象 用来表示部分以及整体层次 这种类型的设计模式属于结构型模式 它创建了对象组的树形结构 这种模
  • 基于TCP的Socket网络编程

    前言 Socket通信是基于TCP IP协议的通信 在工作和做项目中应用非常广 下面来介绍下Socket网络编程 Socket的介绍 首先 在Socket网络编程中我们要了解两个重要的东西 ip和端口号 一台拥有IP地址的主机可以提供许多服
  • HttpContext在一般程序中无法引用

    刚刚写代码的时候 发现在类库的程序中无法直接使用HttpContext 经过学习发现 只要在引用上右击弹出下面界面 然后点击程序集 直接在搜索框中搜web 然后选用System Web 确定 再在你的cs文件中using System We
  • isolation forest在MATLAB和python上的简单应用

    isolation forest在MATLAB和python上的简单应用 1 问题描述 2 isolation forest 3 MATLAB实现isolation forest 4 python实现isolation fores 5 遇到
  • 【linux学习笔记】红帽Linux 7.8系统在虚拟机上的安装

    目录 一 打开VMware 选择新建虚拟机选项 二 选择自定义 并且点击下一步 三 可以选择默认继续下一步 可以进行更改虚拟机硬件兼容性 四 继续下一步 选择稍后安装系统 五 下一步选择客户操作系统Red Hat Enterprise Li
  • Centos8无法用yum下载

    原因 CentOS 8操作系统版本结束了生命周期 EOL Linux社区已不再维护该操作系统版本 解决方案 在服务器上执行如下代码 1 curl o etc yum repos d CentOS Base repo https mirror
  • 遍历Redis集群中的所有Key

    文章目录 1 背景s 2 需求 3 实现思路 4 SCAN 简介 5 用Jedis来实现Key扫描 5 1 基础的辅助工具类 5 2 批处理停止开关 5 3 扫描结果回调函数 5 4 实现单个Redis节点的Key扫描 5 5 实现Redi
  • 从软件的角度看待PCI和PCIE(二)

    PCI电路图 如图所示AD0 AD31 A表示地址 D表示数据 PCI是并行接口 怎么去分辨别当前使用的是地址还是数据呢 是根据FRAME这个引脚来分辨的 上面可以看出PCI是并行接口 在我们的印象中 并口传输的速率会比较高 但是当速率达到
  • mysql delete limit 使用方法详解

    一 mysql delete limit优点 用于DELETE的MySQL唯一的LIMIT row count选项用于告知服务器在控制命令被返回到客户端前被删除的行的最大值 本选项用于确保一个DELETE语句不会占用过多的时间 您可以只重复
  • php md化的nav,宝塔面板搭建onenav – 使用PHP开发的简约导航/书签管理系统

    onenav 使用PHP SQLite 3开发的简约导航 书签管理器 用宝塔搭建体验了一番 效果不错 这篇文章就来说说用宝塔搭建的体验教程 之前也介绍过Shiori书签管理程序 基于docker安装 喜欢的可以看看 1 功能特点支持后台管理
  • windows 只能同时 启动一个_如何将U盘一分为二(启动分区和存储分区两不误)...

    现在网上有很多关于U盘分区的帖子 有的方法过时不适用 有的过于深奥繁琐 难道将U盘一分为二 做成一个启动盘 文件存储盘有那么难吗 小编找来一篇有详实操作体验的U盘分区心得文章 希望能传达一个将U盘分成启动和存储两个分区的有效方法给广大用户们
  • ROS与navigation教程——ACML参数配置

  • 系统架构设计专业技能 · 信息系统基础

    系列文章目录 系统架构设计专业技能 网络技术 三 系统架构设计专业技能 系统安全分析与设计 四 系统架构设计师 系统架构设计高级技能 软件架构设计 一 系统架构设计师 系统架构设计高级技能 系统质量属性与架构评估 二 系统架构设计师 系统架
  • 一.初识Spring Boot ,了解什么是spring boot 及他的优点缺点应用背景

    目录 1 spring 能做什么 spring网站的提供的 2 为什么用SpringBoot 官网信息 3 1 SpringBoot优点 3 2 SpringBoot缺点 4 springboot 出现的时代背景 4 1 微服务 这是提出的
  • GPT专业应用:生成电影解说词

    正文共 969 字 阅读大约需要 3 分钟 内容创作者必备技巧 您将在3分钟后获得以下超能力 快速生成电影解说词 Beezy评级 B级 经过简单的寻找 大部分人能立刻掌握 主要节省时间 推荐人 Kim 编辑者 Linda 图片来源 Lexi
  • UI系统——作业与练习

    血条 Health Bar 的预制设计 具体要求如下 分别使用 IMGUI 和 UGUI 实现 使用 UGUI 血条是游戏对象的一个子元素 任何时候需要面对主摄像机 分析两种实现的优缺点 给出预制的使用方法 IMGUI制作血条 using
  • easy-excel批量导出数据

    easy excel批量导出 前言 最近遇到个用户数据批量导出excel的需求 第一次看到这个需求大家第一时间想到的应该大多都是easy excel这个框架吧 哈哈 我第一时间想到的也是这个框架 但是对于少量的数据 比如有10个用户这样的数
  • 项目一 计算器

    目录 学习目标 1 1准备工作 1 1 1搭建QT开发环境 1 2用户界面UI设计 1 2 1显示模块 1 2 2按键模块 1 3功能实现 1 3 1输入输出反馈 1 3 2退格与清除功能 1 3 3浏览历史记录与历史记录清除功能 1 3
  • Matlab第二版(本科教学版)

    matlab程序 数字图像处理第二版 本科教学版 第七章 图像分割 注 代码原因 程序源码中笑脸 符合都为 例7 1 点检测 程序源码 f imread D photo DIP3E CH05 Original Images Fig0524
  • 语音特征公式与python实现

    参考pyAudioAnalysis openSmile以及语音信号处理实验教程 MATLAB源代码 Introduction to Audio Analysis A Matlab Approach 完整测试文件 注意 以下代码不在genFe