重要假设/基础:采集到的音频在起始处有一小段静音,长度为几百毫秒,这是我们估计静音阈值E0的基础,也是语音降噪的基础。

1. 能量energy

  选区一定数量的音频帧,计算其平均能量值,然后加上一个经验值或乘以一个大于1的系数,由此得到E0。

  javascript在浏览器源码页面--console模块下--输出console.log();

      取绝对值:Math.abs()

      x的y次幂:Math.pow(x,y)

      取对数: Math.log(Math, data);

  基于普天信息语音转写平台,web录音和实时语音分割

  • question1: chrome浏览器html5网页中的<script>标签代码找不到js文件及文件内定义的函数function。

  resolve: html-<script>  和 js中定义的方法/添加的语句有错误;

  • question2: chrome能找到js文件,但html5无法调用js方法,报错,而firefox浏览器可以。

  resolve: 清空浏览器历史缓存和清空js缓存(f12---network---disable cache)

  • question3: html5<script>模块程序触发运行时间可能有差距。

  window.clearInterval(clock_detection);
  clock_detection = self.setInterval("audio_detection()", 100); //100ms触发一次
  window.clearInterval(clock); //每个4s调用setInterval中定义的函数showData
  clock = self.setInterval("showData()",4000);

  resolve: console.log()输出触发时间;输出web stream input触发时间

  • question4: HZRecorder.js里buffer数据Float32Array每一位表示二进制还是十进制的语音采样数据?

  resolve: float32array里面是十进制float小数,可以转化为2个Int16Array整数。

     convert: do it directly from the arraybuffer.

     (1) var data_int16array = new Int16Array(data.buffer); //buffer里面是float32array类型数据

   或:(2) var float32 = new Float32Array(data);

        var int16 = new Int16Array(float32.buffer);

        float32: [0.12005, 0.25046, 0.101102, 0.030112]  int16: [-13107, 15823, -42142, 15588]

  javascript.Float32Array类型数组表示的是平台字节顺序为32为的浮点型数组,内容初始化为0:

    float32array.prototype.reduce()传入一个函数作为累加器,从左到右遍历,最终得到一个值

    float32array.prototype.slice()提取数组的一部分并且返回一个新数组

    float32array.prototype.some()如果数组中至少有一个元素满足测试函数的要求,则返回true

    float32array.prototype.subarray()从给定的起始位置返回一个新的float32array

    float32array.get()获取指定索引处的元素

  • question5:单个buffer元素Float32Array长度为4096,跟录音数据长度对不上。

    web api包括:input sample_rate=44100; input sample_bit=16; output sample_rate=8000; output sample_bit=32

    参见:https://developer.mozilla.org/zh-CN/docs/Web/API/AudioContext/createScriptProcessor

    web api AudioContext.createScriptProcessor()创建一个ScriptProcessorNode用于通过javascript直接处理音频

      参数:buffersize:缓存大小必须为其中一个--256, 512, 1024, 2048, 4096, 8192, 16384

  • question6: 较差的录音设备噪音较大,对录音数据有较大影响,尤其是开头静音部分。(手机录音效果不错,有麦克风阵列)

  resolve: 更换设备;外接声卡;麦克风整列;取音频数据最大值进行比较(在较大噪音环境下,效果比能量均值要好)

  • question7:一段静音内判断出多个结束端点

  resolve: 加入triggered_value,加入起始端点触发机制

  • question8: 出现40-60ms长音频

  resolve: 因为list[length] = null,导致buffer.slice(0)截取全部音频

  • question9: triggered激活后,更新audiobuffer.length,否则静音段会被截取出来。
  • question10: firefox火狐浏览器不能设置默认麦克风, can't set default microphone.

  resolve: 添加一个触发函数。在recorder.start()开始之后,激活触发函数。

2. 过零率zero

  优化:

    (1)高通滤波器,它以高于某一截止频率的频率传递信号,并衰减低于截止频率的信号。(我认为不可行,因为web录音实在html和js上,没有现成的python包调用傅里叶变换fft去获得语音频率,如果自己在js中实现,程序运行成本太高,而且也不能保证效果)

    (2)设置一个门限T,将过零率的含义修改为跨过正负门限。(减去门限)

3. 高斯高阶累积量

  《现代语音信号处理》清音、噪音符合高斯分布,高斯四阶及更高阶的累积量会将噪音值清零,只留下有效语音数据,我个人认为其计算很麻烦,我能力不够,没法有效将其实现出来,用到js中。

  -----以后如果哪位大腿实现出来,让我抱抱阿,比心

基于能量或过零率的实时语音分割--学习笔记相关推荐

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

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

  2. 使用Pytorch搭建U-Net网络并基于DRIVE数据集训练(语义分割)学习笔记

    使用Pytorch搭建U-Net网络并基于DRIVE数据集训练(语义分割)学习笔记 https://www.bilibili.com/video/BV1rq4y1w7xM?spm_id_from=33 ...

  3. 《机器学习实战:基于Scikit-Learn、Keras和TensorFlow第2版》-学习笔记(9):无监督学习技术

    · Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition, by Aurélien Géron ...

  4. 基于Kaldi+GStreamer搭建线上的实时语音识别器

    一.安装python2.7和Tornado 4,ws4py, YAML,JSON等依赖包 1.sudo pip2 install tornado==4.3(4.0版本不行) 2.sudo pip2 i ...

  5. 黑马程序员新版Linux零基础快速入门到精通——学习笔记

    01初识Linux 1.1.操作系统概述 1.1.1.硬件和软件 我们所熟知的计算机是由硬件和软件组成的. 硬件: 计算机系统中由电子.机械和光电元件等组成的各种物理装置的总称. ​ (看的见.摸得着 ...

  6. 《机器学习实战:基于Scikit-Learn、Keras和TensorFlow第2版》-学习笔记(8):降维

    · Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition, by Aurélien Géron ...

  7. 实时操作系统UCOS学习笔记1----UCOSII简介

    前面我们所有的实验都是跑的裸机程序(裸奔),从本章开始,我们开始介绍UCOSII(实时多任务操作系统内核). UCOSII简介 UCOSII的前身是UCOS,最早出自于1992年美国嵌入式系统专家Je ...

  8. 《机器学习实战:基于Scikit-Learn、Keras和TensorFlow第2版》-学习笔记(3)

    第三章 分类 · Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition, by Aurélie ...

  9. 实时操作系统UCOS学习笔记5----UCOSIII移植

    在2009年Micrium公司推出了UCOSIII,相对于UCOSII性能有了进一步的提升,支持时间片轮转调度,极短的关中断事件等.本章讲解如何在STM32F103开发板上移植UCOSIII操作系统. ...

最新文章

  1. [HTTP协议]基础篇-待完结
  2. Lightoj 1123 - Trail Maintenance(最小增量生成树)
  3. malloc()之后free报错的原因[详细解析]
  4. JAVA获取系统相关的信息
  5. thinkpadt450s换键盘视频_ikbc c87 入门级有线机械键盘测评
  6. reg型变量怎么赋值_UiPath变量介绍和使用
  7. C++设计模式-AbstractFactory抽象工厂模式
  8. 瑞士Migros Ostschweiz使用RFID和EPCIS优化供应链的可视化
  9. 新风系统风速推荐表_实验室通风系统的设计和应用
  10. 1.从第一道面试题谈起
  11. 微型计算机显卡,“智能”显卡 华硕ROG Matrix显卡赏析
  12. 用 Adobe 设置 PDF 文件在文件管理器右侧预览窗格预览
  13. python dataframe index_Python将DataFrame的某一列作为index的方法
  14. (01)ORB-SLAM2源码无死角解析-(62) BA优化(g2o)→追踪线程:Optimizer::PoseOptimization→仅位姿优化
  15. 数据跨域交换成刚需 志翔科技助力企业数据安全合规
  16. 【231】判断是否是2的次幂--位运算相关
  17. iOS VideoToolbox 硬编指南
  18. [每天读一点英文:那些给我勇气的句子]George Soros—the financial crocodile
  19. nodejs常用核心模块介绍
  20. java文件下载时文件类型_Java基础之文件下载实现自定义名称和格式类型-java下载文件...

热门文章

  1. 用Session和唯一索引字段实现通用Web分页功能
  2. echarts图表第一个案例
  3. php安全编程—sql注入攻击
  4. jquery技巧(持续更新。。)
  5. Java学习从入门到精通-旧版
  6. Java OR Android
  7. windows mobile开发循序渐进(4)移动应用程序的数据存储之本地数据存储第二篇
  8. 学习 ---AJAX如何用于Web部件
  9. CSP认证201312-5 I’m stuck![C++题解]:dfs、两次dfs
  10. 标题 穿越雷区 java_【蓝桥杯】穿越雷区-java语言描述