语音特征公式与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实现 的相关文章

  • 小波理论的基本概念及概述 学习笔记

    本文来自 https blog csdn net seek97 article details 81266223 感谢前辈的分析和总结 下文我做了简要的修改 一 前言 欢迎阅读此份关于小波变换的入门教程 小波变换是一个相对较新的概念 其出现
  • MATLAB函数 zp2tf详解

    zp2tf 将零极点增益滤波器参数转换为传递函数的形式 语法格式 b a zp2tf z p k 例如 b a zp2tf z p k 将单输入 多输出 SIMO 系统的分解式传递函数表示 转换为多项式传递函数表示
  • 2023年信号处理与机器学习国际研讨会(WSPML 2023)

    会议简介 Brief Introduction 2023年信号处理与机器学习国际研讨会 WSPML 2023 会议时间 2023年9月22 24日 召开地点 中国 杭州 大会官网 www wspml org 2023年信号处理与机器学习国际
  • 图像构成与信号处理之三——图像滤波

    一 什么是图像滤波 图像滤波是一种常见的图像处理技术 用于平滑图像 去除噪声和边缘检测等任务 其工作的原理是通过提前设定滤波器 将滤波器作用与原图像 得到拥有需要的滤波效果的图像 一般图像滤波分为平滑类 均值滤波 去噪类 中值滤波 突出边缘
  • 【信号分解】基于辛几何模态SGMD实现信号数据分解附Matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信 无线传感器 电力系统 信号
  • 【数字信号处理2】IIR 滤波器设计

    一 实验目的 1 掌握冲激响应法和双线性变换法设计IIR滤波器的原理及具体设计方法 熟悉用双线性设计法设计低通 带通和高通IIR数字滤波器的计算机程序 2 熟悉模拟Butterworth滤波器的设计 掌握冲激响应法和双线性变换法设计数字II
  • python 利用plt.plot绘柱状图横坐标刻度均设为整数

    在使用python进行音频信号处理时 使用plt plot绘柱状图时 希望横坐标为整数 即音频通道号 通常使用的方法是 xticksig np arange 1 1 MicNum 或给它加个步长 xticksig np arange 1 1
  • CEEMDAN算法及其应用

    目录 前言 一 CEEMDAN 算法 1 算法原理 2 MATLAB程序 二 CEEMDAN 算法的应用 1 CEEMDAN 小波阈值联合去噪 2 CEEMDAN 小波包分析降噪 3 CEEMDAN 时频峰值滤波 结束语 参考文献 前言 针
  • 从瞳孔的扩张收缩提取大脑EEG的delta,theta,alpha,beta,gamma等信号信息

    展示得到的结果图 直接上代码 import pandas as pd from scipy signal import find peaks from scipy fftpack import fft fftshift ifft impor
  • 图信号处理基础------Foundations in Graph Signal Processing

    本篇博文意在用例子的形式解释图信号处理基础 目的是记录总结自己的学习过程 有兴趣的读者也可也一起交流 前言 图是一种包含多种数据属性的不规则结构 然而 传统的图论处理方法都注重分析底层的图结构而不是图上的信号 随着多传感器测量技术的快速发展
  • SDRAM操作说明——打开DDR3的大门

    SDRAM synchronous dynamic random access memory 同步动态随机存储器 所谓同步就是指需要时钟信号来控制命令数据 动态是指存储阵列需要不断地刷新来保证数据不会丢失 随机是指存取数据可以根据需要在不同
  • 使用SARIMA做季节时间序列预测全流程(附MATLAB代码)

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

    1 信号和槽概述 gt 信号槽是 Qt 框架引以为豪的机制之一 所谓信号槽 实际就是观察者模式 发布 订阅模式 当某个 事件 发生之后 比如 按钮检测到自己被点击了一下 它就会发出一个信号 signal 这种发出是没有目的的 类似广播 如果
  • matlab:快速傅里叶(反)变换 FFT&IFFT

    文章目录 前言 一 傅里叶变换的离散性与周期性 二 MATLAB 实现快速傅里叶变换 FFT DFT 的计算 三 FFT 频谱的对称性 四 FFT 频谱的频率刻度 五 频谱图的绘制 半谱图 全谱图 六 练习 绘制cos信号的频谱图 半谱图
  • 正交多载波调制(OFDM)

    Orthogonal Frequency Division Multiplexing OFDM OFDM is a special case of multi carrier communication as opposed to a co
  • 信号处理之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 傅里叶变换的局
  • 信号处理——梅尔滤波器(MFCC)

    信号处理 梅尔滤波器 MFCC 一 概述 在语音识别 Speech Recognition 和话者识别 Speaker Recognition 方面 最常用到的语音特征就是梅尔倒谱系数 Mel scale FrequencyCepstral
  • pandas学习笔记--增加行或列

    一 增加行 1 loc 想增加一行 行名称为 5 内容为 16 17 18 19 df loc 5 16 17 18 19 后面的序列是Iterable就行 2 at df at 5 16 17 18 19 3 set value df s

随机推荐

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

    组合模式 组合模式 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