谱包络之pysptk和pyworld

谱包络之pysptk和pyworld

谱包络可以直接用于语音的合成,常用的两个计算谱包络的库pysptk和pyword。

先看看代码:

一段语音x,采样率16000Hz
pysptk

import pysptkframe_length = 1024
hop_length = 80
order = 25
alpha = 0.41
frames = librosa.util.frame(x, frame_length=frame_length, hop_length=hop_length).astype(np.float64).T# Windowing
frames *= pysptk.blackman(frame_length)# Convert mel-cesptrum to MLSADF coefficients
mc = pysptk.mcep(frames, order, alpha)
b = pysptk.mc2b(mc, alpha);synthesizer = Synthesizer(MLSADF(order=order, alpha=alpha), hop_length)y_synthesized = synthesizer.synthesis(source_excitation, b)

world

import pyworld as pwnum_dim =25
sp = pw.cheaptrick(x, f0, temporal_positions, fs)
ap = pw.d4c(x, f0, temporal_positions, fs)
coded_sp = pw.code_spectral_envelope(sp, fs,num_dim)#合成时需要解码
fftlen = pw.get_cheaptrick_fft_size(fs)
decoded_sp = pw.decode_spectral_envelope(coded_sp, fs, fftlen)
y_synthesized = pw.synthesize(praatf0, sp, ap, fs,  frame_period=5.0)

那这两个中的谱包络有什么区别呢?
pysptk中我们用到pysptk.mcep函数,pyworld中用到pyworld.code_spectral_envelope。

相关资料:https://github.com/r9y9/pysptk/issues/74

下面我们追溯到这两段代码的论文,来一探究竟。

pysptk.mcep

论文信息:
Tokuda, Keiichi et al. “Mel-generalized cepstral analysis - a unified approach to speech spectral estimation.” ICSLP (1994).

MCEP是一种广义的倒谱分析方法。
广义倒谱分析方法是对倒谱方法和线性预测方法的统一,其中模型谱根据参数γ的值从全极到倒谱连续变化。由于人耳在低频时具有高分辨率,引入了与模型频谱相似的特征,我们可以更有效地表示语音频谱。

基础理论
线性预测是一种公认的获得语音全极表示的方法。然而,在某些情况下,谱零点也很重要,需要更一般的建模过程。虽然倒谱建模可以用相等的权重表示极点和零点,但使用少量倒谱系数的倒谱方法高估了共振峰的带宽。为了克服这一问题,我们提出了广义倒谱分析方法。当参数γ分别为0和-1时,广义倒谱系数与倒谱系数和AR系数相同。因此,利用广义倒谱表示,我们可以根据γ的值得到连续变化模型谱,从全极谱到倒谱表示的谱。
由于人耳在低频时具有高分辨率,我们引入了与模型频谱相似的特征,可以更有效地表示语音频谱。梅尔广义倒谱表示的频谱,即变换后的广义倒谱,在适当选择参数α值的情况下,具有与人耳相似的频率分辨率。因此,我们期望混合广义倒谱系数对语音频谱表示有用。

在这里插入图片描述

谱模型及其规范

广义对数函数[6]是对数函数的自然推广:
在这里插入图片描述

实序列x(n)的倒谱c(m)定义为,对数谱的傅里叶反变换,而广义倒谱Cα,γ(m)定义为在规整频率标度βα(ω)上计算的广义对数谱的傅里叶反变换。
广义倒谱:
在这里插入图片描述

其中X(ejω)是X(n)的傅里叶变换。规整频率尺度βα(ω)定义为全通系统的相位响应。
在这里插入图片描述

其中,
在这里插入图片描述

相位响应βα(ω)在适当选择α时,可以很好地近似于听觉频率尺度。

在本文中,我们假设一个语音频谱H(ejω)可以用M + 1维的 mel广义倒谱系数来建模,如下所示:

在这里插入图片描述

可以看出,
当(α,γ) =(0,1)时,模型谱采用全极表示形式,当(α,γ) =(0,-1)时,就是全零点。
当(α,γ) =(0,0)时,模型谱与倒谱表示的谱相同。(倒谱)

模型谱的形式与(α,γ)值的关系:
在这里插入图片描述

所以当α,γ取不同的值,可以得到更适合的谱模型。

采样率1KHz,α=0.35;
采样率16KHz,α=0.41;
其他采样率,α=0.5;

pyworld.code_spectral_envelope

论文信息:
Morise, Masanori et al. “Low-Dimensional Representation of Spectral Envelope Without Deterioration for Full-Band Speech Analysis/Synthesis System.” Interspeech (2017).

全频带语音是指采样频率在40khz以上,其奈奎斯特频率覆盖可听频率范围的语音。在以往的工作中,语音编码一般集中在采样频率低于16khz的窄带语音上。另一方面,统计参数语音合成目前使用的是全频带语音,使用的是语音参数的低维表示。本研究的目的在于实现全频带语音的无损编码。我们专注于高质量的语音分析/合成系统和梅尔-倒谱分析使用频率规整。在频率规整函数中,我们直接使用了三个听觉尺度。我们使用WORLD声码器进行了主观评估,发现最佳的维度数是50左右。频率规整对音质的影响不显著。

频谱包络中的语音编码
窄带语音编码的研究已经取得了一些进展。线性预测编码(Linear predictive coding, LPC)[11]是其中的主要算法之一,线谱对(line spectral pairs, LSP)[12]在电信系统中得到了广泛的应用。倒频谱[13]也是一种基本算法,以及几种改进算法。首先,提出了广义倒谱分析[14],几年后又提出了梅尔-倒谱分析[15,16]。
mel -广义倒谱分析[17]广泛应用于语音合成研究。它有一个频率规整参数,用户可以优化窄带语音的参数。在全频带语音的SPSS中,也有关于规整线性预测的研究[18]。提出了GlottDNN[7]。
在梅尔倒谱分析中,梅尔对数谱近似(mel-log spectrum approximation, MLSA)滤波器[19]可以直接从梅尔倒谱合成语音波形。相反,在基于声码器的合成中,我们是从解码的频谱包络线合成语音。因此,我们建议在听觉尺度的基础上直接使用频率规整函数。编码的目的是为全频带语音分析/合成系统获得无损的频谱包络。

具体流程:
在这里插入图片描述

1.在频率规整中,有三种基于听觉尺度(梅尔、BARK、ERB尺度)的规整函数。
(1) Mel尺度:是最流行的尺度,是对音高的感知音阶。
在这里插入图片描述(2)BARK尺度:是一种主观测量响度的心理声学量表。

在这里插入图片描述
(3)等效矩形带宽(ERB)尺度:也是一种心理声学量表,它给出了人类听觉系统中过滤器带宽的近似值。
在这里插入图片描述
这三种规整函数与对数规整函数相似,但主要区别在于低频段,图2显示了它们之间的区别。垂直轴被归一化为在20khz频率下表示1.0。规整函数决定了从低频到高频的分辨率分布。
在这里插入图片描述
2.在规整的频率轴上进行等间隔采样
在规整的频率轴上以等间隔采样。这一步有三个参数:下限和上限频率以及采样次数。我们设置下限频率为40(跟根据F0的下限为40Hz),设置频率上限为20000Hz,这是人类可听到的频率范围的上限。
采样次数与梅尔倒谱维数的最大值有关,并影响解码频谱包络的精度。我们使用WORLD,全频带语音的FFT大小为2048。根据抽样理论,我们知道有效值是1025,所以我们使用1024,它接近这个值。用简单线性插值法计算采样所用频率处的值。

3.谱包络的低维表示
对采样序列进行离散余弦变换(DCT),然后进行提升提取低维系数。提取的维数是决定编码效率的参数。当维数设置为N时,提取0 ~ N-1的系数,也就是将谱包络压缩到N/1025。提取的系数通过反向DCT变换到规整频率轴上的对数谱包络。通过规整函数的反函数将规整的频谱包络重新扭曲到线性频率轴上。

4.输入功率谱
梅尔倒谱分析的输入通常是由FFT计算的对数功率谱。然而,即使谱包络是时间不变的,计算的功率谱也取决于时间位置[24]。在语音分析/合成系统中,这种时变分量会导致音质恶化。为了克服这个问题,提出了一种时域静态的谱包络表示。
STRAIGHT[5]是最流行的声码器之一,它具有获得时间静态频谱包络的算法,它利用补偿时间窗去除时变分量。TANDEM- straight[24,25]和WORLD分别使用TANDEM窗口和CheapTrick[26,27]。其他算法,如f0自适应多帧积分分析[28]也被提出去除了时变成分。
本文展示基于功率谱谱包络提取,与由STRAIGHT和WORLD估计的频谱包络提取相比,该表征获得了最好的音质。

总结

一个是mel广义谱表示,转换成MLSA声码器能够合成的语音参数,就能直接合成语音;一个是对语音频谱包络进行编码,需要再解码成普参数再合成语音。

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

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

相关文章

ubuntu python 查看系统是否可用 cuda

ubuntu python 查看系统是否可用 cuda 初环境与设备查看环境演示效果 本篇文章将介绍ubuntu python 查看系统是否可用 cuda 初 希望能写一些简单的教程和案例分享给需要的人 环境与设备 系统:ubuntu 22.04 工具:python 3.10.6 设备:Nvidi…

哪些人会看作业指导书?作业指导书怎样才能发挥作用?

一般人普遍人为,作业指导书就是给操作人员看的。其实不然,那么哪些人会看作业指导书?大致可以分为: 第一类:新到工作岗位的员工。其中包括新进员工和新转岗位的员工,他们都会在师傅或领班组长的带领指导下,…

SCAU操作系统知识点之(一)计算机系统概述

缩写词: OS: Operating System 操作系统 PSW: Program Status Word 程序状态字 FCFS: First Come First Serve 先来先服务 PCB: Process Control Block 进程控制块 DMA: Direct Memory Access 直接存储器存取 MMU: Memory Management Unit 内存管理单元 SSTF: Short…

MAUI+Blazor 如何开启浏览器调试工具

文章目录 前言如何开启调试模式输入快捷键打开浏览器有什么意义? 前言 MAUIBlazor其实就是浏览器套壳,我觉得很有意义,因为现在性能已经不是主要的限制了,很多时候讲究的快速开发。而且MAUIBlazor跨平台的未来感觉实在是太香了。…

了解IL汇编跳转语句

il代码, .assembly extern mscorlib {}.assembly Test{.ver 1:0:1:0}.module test.exe.method static void main() cil managed{.maxstack 5.entrypointldstr "Enter First Number"call void [mscorlib]System.Console::WriteLine (string)call string …

性能优化-react阻止子组件重渲染

因为父组件的状态变更会触发子组件的渲染,可以用shouldComponentUpdate或memo来阻止。下面就来介绍这两种方法。 类组件-shouldComponentUpdate 注:变化需要在render中打印,在component中检测不到 核心代码: 子组件中用shouldComponentUpda…

图像的缩放之c++实现(qt + 不调包)

1.基本原理 图像的缩放一般使用插值算法,而本章将介绍两种常用插值算法:最临近插值法和双线性插值法 1.最临近插值法 将浮点数的位置坐标,进行四舍五入找到原图像的整型坐标即可,具体操作可见下面的公式,其中原图像坐标…

Vue.js2+Cesium1.103.0 八、动态光墙效果

Vue.js2Cesium1.103.0 八、动态光墙效果 Demo <template><divid"cesium-container"style"width: 100%; height: 100%;"/> </template><script> /* eslint-disable no-undef */ import /utils/dynamicWallMaterialProperty.js exp…

简单程度与自负是否相关?探索STM32的学习价值

事实上&#xff0c;无论STM32是否简单并不重要&#xff0c;更重要的是我们能通过学习STM32获得什么。通过STM32&#xff0c;我们可以学习到许多知识&#xff1a;如果我们制作一个键盘或鼠标&#xff0c;我们可以学习USB协议。如果我们制作一个联网设备&#xff0c;我们需要学习…

Go http.Handle和http.HandleFunc的路由问题

Golang的net/http包提供了原生的http服务&#xff0c;其中http.Handle和http.HandleFunc是两个重要的路由函数。 1. 函数介绍 http.HandleFunc和http.Handle的函数原型如下&#xff0c;其中DefaultServeMux是http包提供的一个默认的路由选择器。 func HandleFunc(pattern st…

Docker启动一个Centos镜像

搜索可用的centos的docker镜像 docker search <image>&#xff1a;在docker index中搜索imagedocker search centos 下载centos镜像&#xff08;拉取镜像&#xff09; docker pull centos:latest查看镜像docker images&#xff1a;列出imagesdocker images -a&#xff…

激光与光电子学进展, 2023 | 非视域成像技术研究进展

注1&#xff1a;本文系“计算成像最新论文速览”系列之一&#xff0c;致力于简洁清晰地介绍、解读非视距成像领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; CVPR, ICCV, ECCV, SIGGRAPH, TPAMI; Light‑Science & Applications, Optica 等)。 本次介绍的论…

stm32 cubemx can通讯(1)回环模式

文章目录 前言一、cubemx配置二、代码1.过滤器的配置&#xff08;后续会介绍&#xff09;2.main.c3.主循环 总结 前言 介绍使用stm32cubemx来配置can&#xff0c;本节讲解一个简答&#xff0c;不需要stm32的can和外部连接&#xff0c;直接可以用于验证的回环模式。 所谓回环模…

Mysql按小时进行分组统计数据

目录 前言 按1小时分组统计 按2小时分组统计 按X小时分组统计 前言 统计数据时这种是最常见的需求场景&#xff0c;今天写需求时发现按2小时进行分组统计也特别简单&#xff0c;特此记录下。 按1小时分组统计 sql&#xff1a; select hour(pass_time) …

灵眸:2023年上半年中国主要消费领域宏观数据概览报告(附下载)

关于报告的所有内容&#xff0c;公众【营销人星球】获取下载查看 核心观点 2023年上半年中国社会消费品零售总额22.8万化元。2023年上半年中国电商实体商品消费总额达6.1万亿元&#xff0c;同比增长10.8%。2023年上半年中国餐饮、汽车消费均超2万化元&#xff0c;餐饮、金银珠…

如何预防ssl中间人攻击?

当我们连上公共WiFi打开网页或邮箱时&#xff0c;殊不知此时可能有人正在监视着我们的各种网络活动。打开账户网页那一瞬间&#xff0c;不法分子可能已经盗取了我们的银行凭证、家庭住址、电子邮件和联系人信息&#xff0c;而这一切我们却毫不知情。这是一种网络上常见的“中间…

Mysql整理

一、基础概念 1. 索引 之前的文章已经写过了&#xff0c;比较细 数据库索引含义,类别,用法,创建方式_表结构加树形id和索引是为什么_马丁•路德•王的博客-CSDN博客 简单概括就是在表的某个列或者多个列或者联合表的时候加个索引&#xff0c;类似图书馆书本的索引编号&…

PK Nounique CASCADE DROP INDEX keep index

Explicit Control Over Indexes when Creating, Disabling, or Dropping PK/Unique Constraints (Doc ID 139666.1)​编辑To Bottom PURPOSEIn Oracle 9i, the DBA has an explicit control over how indexes are affectedwhile creating, disabling, or dropping Primary Ke…

AI Deep Reinforcement Learning Autonomous Driving(深度强化学习自动驾驶)

AI Deep Reinforcement Learning Autonomous Driving&#xff08;深度强化学习自动驾驶&#xff09; 背景介绍研究背景研究目的及意义项目设计内容算法介绍马尔可夫链及马尔可夫决策过程强化学习神经网络 仿真平台OpenAI gymTorcs配置GTA5 参数选择行动空间奖励函数 环境及软件…

【雕爷学编程】Arduino动手做(13)---TTP223B电容式触摸模块之通过串口监视器检测电容触摸键的状态与控制继电器

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…