变速不变调方法

语音变速不变调,即语音时长规整,是指不改变原说话人的音调及语义信息,只改变说话人的语速。

语音变速不变调算法有三大类:时域法、频域法、参量法,如表2-1所示。 

表2-1 变速不变调算法分类

时域法

频域法

参量法

剪贴法

LSEE-MSTFTM

相位声码器

SOLA、SOLA-FS

 

正弦模型

TD-PSOLA

 

 

时域法包括:剪贴法、同步波形叠加法(Synchronized Overlap-Add, SOLA)、固定同步波形叠加法(Synchronized Overlap-Add and Fixed Synthesis, SOLAFS)、时域基音同步叠加法(Time-Domain Pitch Synchronized Overlap-Add, TD-PSOLA) 波形相似叠加法(waveform similarity overlap-and-add, WSOLA)等。

剪贴法[32]由Fairbanks等人在1958年提出,其基本思想是将语音划分为若干连续不重叠帧,然后重复或者丢弃其中某些语音帧,来实现语速变慢或者加快。

这种方法只是简单的重复或者丢弃语音帧,这样会造成相邻两帧之间波形不连续,基音发生断裂,如图2-2所示,因此语音质量较差。

 

第一帧重复

 

 

两个连续语音帧

 

  

                      图2-2  剪贴法

为了减小波形不连续现象,Gabor等人改善了剪贴法,在相邻两帧部分进行平滑处理,但是基音断裂现象仍然存在。

为了在改善波形不连续的同时,减小基音断裂现象,S.Roucos等人在提出了同步波形叠加法(SOLA)[33]。该算法主要分为分解、合成两个阶段,如图2-3所示。

 

图2-3 SOLA分解与合成过程

分解阶段完成原始语音信号的分帧任务,为了减小不连续现象,一般在分帧的同时进行加窗平滑处理,分解后的所有帧用于合成变速语音,这里假设帧长为N,分析帧移为Sa。合成阶段则可以分成两个步骤:

第一步,确定初步合成重叠距离。按照变速因子a=Ss/Sa,改变分解阶段相邻两帧的帧移距离,Ss=Sa*a,即保持分解阶段的第一帧位置不变,移动之后的各帧,使得相邻两帧的距离由为Sa变为Ss,这样便可获得初步合成帧。

第二步,确定最终合成帧的起始位置。如果将初步合成帧直接进行叠加合成,则会造成基音断裂。为了减小该现象,通过在已合成第m帧第Ss个采样点的邻域[-kmax, kmax]内移动搜索和分解阶段第m帧信号的波形相关最大的位置k(m),如式2-1,确定最终合成帧的初始位置,保证叠加部分波形相似,减小基频断裂。

                   (2-1)

其中,k(m) [-kmax, kmax],表示搜索偏移量,表示原始语音信号,表示合成变速后的输出语音信号,L表示分解阶段第m帧信号与已合成信号的重叠区域长度。

由于偏移量k(m)的存在,所以SOLA算法不能精确的改变语音的时间长度。

为了解决该问题,D.J.Hejna提出了固定同步波形叠加法(SOLAFS)[34],该算法与SOLA算法很相似,不同的是在合成时固定了合成步长Ss,而在分解阶段第m帧的邻域[-kmax, kmax]内移动搜索与已合成第m帧信号波形相关最大的位置k(m)。即使式2-2最大。

                   (2-2)

为了进一步达到基音同步的目的,Moulines提出了基音同步波形叠加算法(PSOLA)[35],著名的语音分析软件Praat的变速功能就是基于此原理[36]。在该算法中,变速和变调是两个独立的过程,由不同的参数控制。其主要做法是首先进行基音同步分析,标记基音周期一系列位置点,以这些标记为中心,将原始语音划分成若干合成语音单元。通过重复或者省略合成单元来实现语速时长的控制,通过改变相邻合成单元的重叠长度来改变语音的基频。该算法主要缺点有两点,首先基音周期及其起始点的判定误差会严重影响PSOLA技术的效果,另外计算量大,很难满足实时的变速与变调处理。

同样地,为了减小基音断裂和相位不连续问题,Verhelst和Roelands 提出了波形相似叠加法(WSOLA)[37],该方法计算量低于PSOLA,同时输出的语音质量高。Grofit对该方法进行了改进,使其也适用于音乐信号的变速处理[38]

频域法中最具代表性的方法是LSEE-MSTFTM(The Least-Square Error Estimation From the Modified Short-Time Fourier Transform Magnitude)[39],该算法是基于短时傅里叶变换来实现的,利用最小均方误差原则,寻找一个时域信号的短时傅里叶变换幅度谱逼近理想变速信号的频谱。

参数法是指对语音信号建立模型,然后根据需要修改模型相关参数来达到改变音调和语速的目的。它包括相位声码器[40]和正弦模型法。相位声码器是将语音通过带通滤波器组分解成若干正弦信号,然后对正弦信号随时间变化的幅度和相位通过内插和抽取进行时域压扩,最后经过合成便完成变速不变调。正弦模型法与相位声码器方法相似,需要估算出模型的瞬时幅度、瞬时频率、瞬时相位等参量,合成效果较好,但是复杂度较高。

活在当下,享受其中
http://sound.eti.pg.gda.pl/student/eim/synteza/leszczyna/index_ang.htm
http://archive.today/A5xQ

转载于:https://www.cnblogs.com/tkppain/p/3382546.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java开发高端说法_关于Java代码的设计和开发注意事项,下列哪些说法符合《集合开发规约》:...

案例分析一:假定CPU的主频是500MHz。硬盘采用DMA方式进行数据传送,其数据传输率为4MB/s, 每次DMA传输的数据量为8KB, 要求没有任何数据传输被错过。如果CPU在DMA初始化设置和启动硬盘操作等方面用了1000个时钟周期,并且在DMA传送完成后的中断…

ES6学习笔记六(Iterator和for..of)

{let arr[hello,world];let maparr[Symbol.iterator](); //返回false时继续执行,true停止执行!console.log(map.next());console.log(map.next());console.log(map.next()); }{let obj{start:[1,3,2],end:[7,8,9],[Symbol.iterator](){let selfthis;let…

判定点是否在不规则多边形内部的问题

2019独角兽企业重金招聘Python工程师标准>>> 问题如下: 话说在平面内有一个任意的不规则的封闭多边形,另外在这个平面内还有一个点,问题:如何高效的判定这个点是在这个多边形内部还是外部?补充&#xff1a…

Cortex-A7 MPCore 架构详细介绍(九种运行模式、内核寄存器组R0~R15,有特定的名字和功能)

目录0.ARM架构的历史简介1.Cortex-A7 MPCore(即多核) 简介2.Cortex-A 处理器九种运行模式3.Cortex-A 寄存器组(内核寄存器)3.1通用寄存器3.1.1未备份寄存器(R0~R7)3.1.2备份寄存器(R8~R12、SP指针R13、备份R14也叫LR)3.1.3程序计数器R15(PC)3.2程序状态寄…

Java开发中遇到具有挑战的事_Java并发编程的挑战:遇到的问题及如何解决

并发编程的目的是为了让程序运行得更快,但是,并不是启动更多的线程就能让程序最大限度地并发执行。在进行并发编程时,如果希望通过多线程执行任务让程序运行得更快,会面临非常多的挑战,比如上下文切换的问题、死锁的问…

jQuery 属性选择器

jQuery 使用 XPath 表达式来选择带有给定属性的元素。 $("[href]") 选取所有带有 href 属性的元素。 $("[href#]") 选取所有带有 href 值等于 "#" 的元素。 $("[href!#]") 选取所有带有 href 值不等于 "#" 的元素。 $("…

使用的 SQL Server 版本不支持数据类型“datetime2”的错误解决方法

THE VERSION OF SQL IN USE DOES NOT SUPPORT DATATYPE ‘DATETIME2′ 主要错误原因,在使用ado.net entity的时候,entity使用的数据库是sqlserver 2008,或者sqlserver 2008 r2 但后来实际使用的数据库是sqlserver 2005, sqlserver…

树莓派(TCP客户端 )和Wemos(TCP服务端连接红外模块)通讯实现对红外设备的控制

参考:U如何用树莓派连接语音模块,红外模块来控制红外设备详解 作者:一只青木呀 发布时间:2020-08-12 17:14:10 网址:https://blog.csdn.net/weixin_45309916/article/details/107960066 目录硬件软件红外解码步骤1.连接…

java反编译微信小程序_教你如何一键反编译获取任何微信小程序源代码(图形化界面,傻瓜式操作)...

一键获取微信小程序源代码1 Tips:2   一键获取微信小程序源码, 使用了C#加nodejs制作 直接解压在D盘根目录下后就可以使用 将小程序文件放到 wxapkg目录下3 这个目录下有一些demo 可以先进行实验 使用正确 wxapkg exe这些文件应该在 D:CrackMinApp目录下4 然后打开…

PM2管理工具的使用

linux上PM2可以管理服务程序,防止程序无故关闭,具有程序守护功能,自动重启服务器程序,监控程序等好处,很方便,具体自己去体会! 官网地址: http://pm2.keymetrics.io/ 文档指南: ht…

C语言常用字符串操作函数大全详解(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等)

参考:string.h中常用字符串操作函数说明(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等) 作者:一只青木呀 发…

java将030A转换为方块_JAVA试题

1、下面关于变量及其作用范围的陈述哪个是不对的?( B )A.实例变量是类的成员变量。B.实例变量用关键字static声明。//Static 声明的是类变量C.在方法中定义的局部变量在该方法被执行时创建。D.局部变量在使用前必须被初始化。2、…

python 后缀 .py .pyc .pyw .pyo .pyd的区别

1.py是源文件 2.pyc是源文件编译后的文件: pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由…

MVC中使用Entity Framework 基于方法的查询学习笔记 (二)

解释&#xff0c;不解释&#xff1a; 紧接上文&#xff0c;我们在Visual Studio2012中看到系统为我们自动创建的视图(View)文件Index.cshtml中&#xff0c;开头有如下这句话&#xff1a; model IEnumerable<GuestBook.Models.Book> 这句话是MVC通过强类型获取数据的方式&…

位运算(按位与、按位或、异或、取反)以及原码、反码、补码

参考&#xff1a;运算符的计算&#xff08;按位与 按位或 异或 取反&#xff09; 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-07-23 18:13:55 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107543919 参考&#xff1a;计算机原码&#…

Docker03 Docker基础知识、Docker实战

1 Docker基础知识 1.1 什么是Docker Docker是一个可以装应用的容器&#xff0c;就像杯子可以装水、书包可以装书一样&#xff1b;docker官网 Docker是Docker公司开发的&#xff0c;并开源到GitHub上; Docker是跨平台的&#xff0c;支持windows、linux、Macos 1.2 Docker思想 1.…

Java字符串简化_关于java查询语句 如何简化的问题

首先&#xff0c;请你告诉我你使用PreparedStatement的理由&#xff0c;为什么不使用Statement&#xff1f;二者有什么区别&#xff1f;然后 你用到了PreparedStatement的特性了吗&#xff1f;接下来我们在探讨这代码该怎么写。下面的代码仅供参考&#xff0c;基本不具有实践意…

phpcms_v9推送到其他栏目后再在其他栏目删除导致数据库出错

修改phpcms/model/content_model.class.php大概454行的update_category_items()函数private function update_category_items($catid,$action add,$cache 0) {$this->category_db pc_base::load_model(category_model);if($actionadd) {$this->category_db->update…

Linux网络编程小知识(字节序、IP格式、函数、子网掩码、DNS域名解析代码实现)

参考&#xff1a;网络编程前的一些小知识–Linux笔记 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2021-04-12 23:19:10 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/115560197 参考&#xff1a;DNS域名解析 作者&#xff1a;一只青木呀 发布…

java ndk 在哪_NDK简介

一、NDK简介&#xff1a;C/C的动态库。Dalvik通过JNI编程方式调用C/C代码。NDK编程提高软件性能&#xff0c;加密保护APK文件ndk-build NDK编译生成脚本Java编译时会根据java声明文件生成dex文件&#xff0c;即使没有java代码NDK共享库&#xff1a;NDK生成的 .so文件(类…