%%感染了一个学年的语音氛围,自己也做了一些这方面的研究,但仿佛空中架楼,很多基础不是很扎实,而且前晚忽然意识到语音的重要,所以打算一点一点把语音基础知识积累起来,而且为了加深理解和便于复习,特此记录下来,供自己也供语音学习者作为参考,此系列多来自赵力的《语音信号处理》这本书,再加一些自己理解,但写博客是一件很辛苦的事,希望自己坚持下来。
通过语音传递信息是人类最重要、最有效、最常用和最方便的交换信息的形式。说话人识别和语种识别是语音识别的两种特殊形式,它们和语音识别一样都是通过提取语音信号的特征和建立相应的模型进行分类判断的,说话人识别力求找到包含在语音信号中的说话人的个性因素,强调不同人之间的特征差异;而语种辨别则要从一个语音片段中判别它是哪种语种,所以尽可能找到不同语种的差异特征。
语音基本声学特性:语音室发声器官发出的一种声波,具有一定音色音调,音强和音长,其中,
音色:即音质,是一种声音区别另一种声音的基本特性;
音调:声音的高低,取决于声波的频率;
音强:声音的强弱,由声波的振动幅度决定;
音长:取决于发音时间的长短。
说话时一次发出的,具有一个响亮的中心,并被明显的感觉到的语音片段叫音节。一个音节由一个音素或几个因素构成,音素是语音发音的最小单位,任何语言都有语音的元音(vowel)和辅音(Consonant)。 元音构成一个音节的主干,无论从长度还是能量看,元音在音节中都占主要部分辅音则只出现在音节的前端或后端或前后两端,时长和能量相对都很小。
元音是当声带振动发出的声音从喉腔、咽腔进入口腔从唇腔出去时,这些声腔完全开放,气流顺利通过产生的音。
决定元音音色的主要因素是舌头的形状及其在口腔中的位置和嘴唇的形状等,元音的一个重要特性是共振峰(Formant),声道可以看成是一个根具有非均匀截面的声管,在发音时起共鸣器的作用,当元音激励进入声道时会引起共振特性,产生一组共振频率,称为共振峰频率或共振峰。
辅音包含了浊音和清音。
辅音是呼出的声流,由于通路的某一部分封闭起来或受到阻碍,气流被阻不能畅通,而克服发音器官的这种阻碍而产生的音素为辅音。发辅音时由声带是否振动引起浊音和清音的区别,振动的是浊音,不振动的是清音。
辅音:辅音没有明确的共振峰结构,分为以下几类:
(1)塞音又称爆破音:如普通话中[p]、[t]、[k]、[b]、[d]、[g]。
(2)摩擦音:如[f]、[s]、[sh]、[x]、[h]。
(3)塞擦音:如[z]、[zh]。
(4)鼻音:如[m]、[n]。
(5)边音:舌尖形成阻碍不让气流通过,但舌尖两边有空隙能让气流通过的音,如[l]。
(6)颤音:如[ra]、[r]。
(7)通音,又为半元音或半辅音:通音一般是浊音,性质接近元音,如[w]、[y]。
这些音素,虽然声道基本%%感染了一个学年的语音氛围,自己也做了一些这方面的研究,但是仿佛空中架楼,很多基础不是很扎牢,而且前晚失眠忽然意识到语音的重要,所以打算一点一点把语音基础畅通,但某处声道比较狭窄,引起轻微摩擦音,成为半元音。
汉语由音素构成声母和韵母,有时,将含有声调的韵母成为调母,由单个调母或由声母和调母拼音成为音节,汉语的一个音节就是汉语的一个字的音,即音节字。汉语音节一般由声母、韵母和声调三部分组成。
普通话中二十二个声母分为六大类:擦音、塞音、塞擦音、边音、鼻音、零声母,除零声母外,其他都是单辅音。
普通话中38个韵母可以分为三类:8个单韵母,14个复韵母和16个鼻韵母。
(上图均为我在百度搜到的图,和赵力的那本《语音信号处理》中有点不一致,供参考)。
人的发音器官包含:肺、气管、喉、咽、鼻和口,这些器官共同形成一条形状复杂的管道,喉的部分称为声门,从声门到嘴唇的呼气通道叫做声道,声道的形成主要由嘴唇、颚和舌头的位置决定,由声道形状的不断改变而发出不同的音。
语音是从肺部呼出的气流通过在喉头至嘴唇的器官的各种作用发出的,作用方式有三种,第一是把从肺部呼出的直气流变为音源即变为交流的断续流或者乱流;第二是对音源起共振和反共振的作用,使它带有音色;第三是从嘴唇或鼻孔向空间辐射的作用。下图为发音器官的部位和名称:
人的听觉系统是一个十分巧妙的音频信号处理器,结构图如下:
其中1-耳翼 2-颞骨 3-鼓膜 4-锤骨 5-詀骨 6-半规管 7-镫骨 8-前庭窗 9-鼓窗 10-耳蜗 11-耳蜗神经 12-外耳道 13-前庭 14-腮腺 15-内耳道 16-咽鼓管
工作机能想了解的可以自己查查,这里说说听觉系统的一些特性。
当声音经外耳传入中耳时,镫骨的运动引起耳蜗内流体压强的变化,从而引起行波沿基底膜的传播。从这个意义上讲,耳蜗就像一个频谱分析仪,将复杂的信号分解成各种频率分量。
心理声学中的听觉掩蔽效应指,一个强信号附近,弱信号将变得不可闻,被掩蔽掉了,如工厂机器音会淹没人的谈话声音,此时,被掩蔽掉的不可闻信号的最大声压级称为掩蔽门限,在这个阈值以下的声音将被掩蔽掉。下图为一个掩蔽曲线:
文章目录0.定义链式队列的基本结构1.初始化链式队列(不带头结点)2.判断队列是为空(不带头结点)3.入队(不带头结点)4.出队(不带头结点)完整代码0.定义链式队列的基本结构/*0.定义链式队列的基本结构*/typedef struct LinkNode { //链式队列结点 ElemType data; struct LinkNode* next;}LinkNode;typedef struct { //链式队列 LinkNode* front, * rear; //队列的队头和队尾指
求一个数的最小素因子#include<stdio.h>#define MAX_N 1000int prime[MAX_N + 5];void init() { for (int i = 2; i <= MAX_N; ++i) { if prime[i] continue; prime[++prime[0]] = i; for (int j = i ; j <= MAX_N; j+=i){ if (p
Realme GT 2Pro 解锁+ROOT教程前言:本文解锁教程及部分相关图片来自Realme官方社区官方人员发布,资料由本人制作并提供。正文:准备活动:1.手机下载下方链接的“深度测试”apk并安装;2.电脑下载下方链接的ROOT工具并解压(注意要将所有文件解压);3.注意请保持手机电量在30%以上;4.本教程需要电脑配合使用。深度测试APK(点此下载 密码:e6i5)ROOT工具(点此下载 密码:dsgs)注意:本次上传工具仅适用于GT 2Pro-A19版本,其他版本号的真友们
如果你的项目使用maven构建的话,当项目要上线,部署到服务器上去的时候或许会碰见这样的问题。问题就是,服务器上没有maven的环境,也就是说,项目所依赖到的那些仓库(repository)中的jar包你需要单独提取出来上传到服务器中去。我知道pom类型如果是war的话,在使用mvn package 的命令就能自动将项目依赖的jar包打到web-inf 下的lib文件夹中。但是,如果pom类型...
题意:每个卡车有对应标码,定义不同卡车之间的距离为标码中每个位置对应字符不同的个数,每个卡车只能诞生于另一索引在其之前的卡车,运输质量定义为1/Q,Q为所有两个不同卡车的距离之和,求出最大运输质量思路:以距离即不同字符数为权值,求最小生成树即可#include<iostream>#include<cstdio>#include<cmath>#inclu...
前言众所周知,golang协程的创建、销毁、调度是非常轻量的,但是即便再轻量,规模大了开销也不能忽视的。比如利用协程处理http请求,每个请求用一个协程处理,当QPS上万的时候,资源消耗还是比较大的。协程池和线程池一样,池子中都是热协程,需要的时候取出来,用完后归还,避免了高频率的创建和销毁。同时协程池还能将空闲超时的协程销毁来释放资源,并且还有一定保护能力,通过设定协程最大数量避免无休止的创建协程把系统资源消耗殆尽。总之,golang虽然提供了非常轻量且容易使用的协程编程环境,但是不同的应用场
LinkQueue.h文件#ifndef LINKQUEUE_H#define LINKQUEUE_H#include &amp;amp;lt;stdio.h&amp;amp;gt;#include &amp;amp;lt;stdlib.h&amp;amp;gt;#include &amp;amp;lt;string.h&amp;amp;gt;//定义节点的存储结构typedef struct LINKQUEUENODE{
目录1. 队列概述1.1 队列定义1.2 队列演示2. 队列顺序存储2.1 顺序存储定义2.2 循环队列2.3 顺序存储队列常规操作2.3.1 初始化与清空2.3.2 空队列与满队列判断2.3.3 入队与出队2.3.4 其他操作3. 队列链式存储3.1 链式存储定义3.2 链式存储队列常规操作3.2.1 初始化与销毁3.2.2 空队列判断3.2.3 入队与出队3.2.4 其他操作4. 总结1. 队列概述1.1 队列定义队列是只允许在一端进行插入操作,在另一端进行删除操作的线性表。队列是一种先进先出的
基于 laravel框架的微信公众号的自动回复功能。主要是图文消息和文本类型
基本配置&lt;assembly&gt; &lt;id&gt;bin&lt;/id&gt; &lt;includeBaseDirectory&gt;false&lt;/includeBaseDirectory&gt; &lt;!-- 最终打包成一个用于发布的zip文件 --&gt; &lt;formats&gt; &lt;format&a
把质数放进一个容器里,无聊写的。vector<int> prime;bool tp[maxn];void init(){ for (int i = 2; i < maxn; ++i){ if (!tp[i]){ prime.emplace_back(i); for (int j = 2; j * i < maxn; ++j){ tp[j * i] = 1;
文章目录一、埃拉托斯特尼筛法简介二、黎曼ζ\zetaζ函数与欧拉乘积公式三、问题求解一、埃拉托斯特尼筛法简介埃拉托斯特尼筛法(Sieve of Eratosthenes)是一种能快速求出1∼n1\sim n1∼n内所有质数的方法。埃拉托斯特尼就是用很聪明的方法测出地球周长的那个希腊人。算法的过程是:枚举1∼n1\sim n1∼n中的每个数iii,如果它没有被前面的数标记过,则iii为质数,此时标记它的2,3,4⋯2,3,4\cdots2,3,4⋯倍为合数。C++代码如下:bool isprime[MA