STRAIGHT之 MulticueF0v14算法

基频提取算法MulticueF0v14

STRAIGHT中提出的一种新的使用多个F0线索的基频提取算法,正如名字Multi cue。
文章发表在2005InterSpeech上:
Nearly Defect-free F0 Trajectory Extraction for Expressive Speech Modifications based on STRAIGHT
在这里插入图片描述
为了实现高质量的语音处理,提出了一种基于人类听觉感知原理的源信息提取方法。新的F0提取器在处理表达性语音时特别有效,其中不规则的声带振动模式更容易被检测到。

使用方法

代码:

f0raw = MulticueF0v14(x,fs);
ap = exstraightAPind(x,fs,f0raw);

n3sgram=exstraightspec(x,f0raw,fs);
sy = exstraightsynth(f0raw,n3sgram,ap,fs);

和STRAIGHT里的原始的基频提取算法有什么区别?

提取的语音F0如图1所示。红线显示了由默认提取器提取的F0轨迹。蓝线显示了新的F0提取器提取的F0轨迹。新的F0提取器提供非零轨迹,即使在清音段或静音段。浊音/清音区分信息以二进制值vuv给出。检测到的浊音段在图1中用黑色框表示。默认的F0轨迹有几个小故障在发声部分。这些故障在新的F0轨迹中消失了。特别是在缺省方法下,800毫秒左右的故障会产生明显的语音再合成缺陷。
在这里插入图片描述
下图显示了800ms左右的波形。从上到下依次显示了缺省再合成波形、新的再合成波形和原始波形。
在这里插入图片描述

对应代码:

[x,fs]=wavread(../Sample/em001c1013a.wav’);

% 新提取器
[f0raw,vuv,auxouts,prmouts]=MulticueF0v14(x,fs);
[ap,analysisParams]=exstraightAPind(x,fs,f0raw);
[n3sgram,prmP]=exstraightspec(x,f0raw.*vuv,fs);

%默认提取器
[f0rawFixp,apFixp,analysisParams]=exstraightsource(x,fs);
[n3sgramFixp,prmP]=exstraightspec(x,f0rawFixp,fs);

% 新,需vuv掩蔽
[sy,prmS] = exstraightsynth(f0raw.*vuv,n3sgram,ap,fs);

%默认
[syFixp,prmS] = exstraightsynth(f0rawFixp,n3sgramFixp,apFixp,fs);

新的提取器默认参数:

F0searchLowerBound: 40
F0searchUpperBound: 800
F0frameUpdateInterval: 1
NofChannelsInOctave: 24
IFWindowStretch: 1.2000
DisplayPlots: 0
IFsmoothingLengthRelToFc: 1
IFminimumSmoothingLength: 5
IFexponentForNonlinearSum: 0.5000
IFnumberOfHarmonicForInitialEstimate: 1
TimeConstantForPowerCalculation: 10
ACtimeWindowLength: 60
ACnumberOfFrequencySegments: 8
ACfrequencyDomainWindowWidth: 2200
ACpowerExponentForNonlinearity: 0.5000
ACamplitudeCompensationInShortLag: 1.6000
ACexponentForACdistance: 4
AClagSmoothingLength: 1.0000e-04
ACtemporalSmoothingLength: 20
ThresholdForSilence: 3
ThresholdForVUV: 0.6000
WeightForAutocorrelationMap: 1
WeightForInstantaneousFqMap: 1
VUVthresholdOfAC1: -0.1000
SDforNormalizeMixingDistance: 0.3000
SDforTrackingNormalization: 0.2000
MaxumumPermissibleOctaveJump: 0.4000
ThresholdToStartSearch: 0.3000
ThresholdToQuitSearch: 0.3500
ThresholdForReliableRegion: 0.2500
WhoAmI: ’MulticueF0v14’

默认的提取器默认参数:
在Matlab命令窗口中输入prmF0并返回,显示如下信息。这些表示Matlab结构变量prmF0的字段名及其用于源信息提取的预设值。字段名被设计为自描述的。(字段名称中的IF表示瞬时频率。)

F0searchLowerBound: 40
F0searchUpperBound: 800
F0defaultWindowLength: 40
F0frameUpdateInterval: 1
NofChannelsInOctave: 24
IFWindowStretch: 1.2000
DisplayPlots: 0
IFsmoothingLengthRelToFc: 1
IFminimumSmoothingLength: 5
IFexponentForNonlinearSum: 0.5000
IFnumberOfHarmonicForInitialEstimate: 1
refineFftLength: 1024
refineTimeStretchingFactor: 1.1000
refineNumberofHarmonicComponent: 3
periodicityFrameUpdateInterval: 5
note: ’ ’

也可以使用其他F0提取器
有时,F0提取会失败。这种失败会导致重新合成的语音出现明显的退化。由于直谱分析的基音同步特性,在频谱估计中也引入了误差。为了缓解这个问题,您可以手动编辑F0信息,或者使用其他F0提取器。一旦固定的F0信息准备好并存储在一个变量中,例如在f0fix中,您可以使用以下函数计算非周期性指数。

ap=exstraightAPind(x,fs,f0fix);

算法原理

背景

高质量的语音处理器有两个用途:作研究和作为应用程序的基底。对于一个研究工具,质量在研究非语言和副语言语音方面是至关重要的,这些方面可能不会对操作引入的人工制品产生强大的影响。对于应用来说,嵌入式语音处理系统的质量显然决定着整个系统的质量。STRAIGHT声码器就很好的解决了这些需求。但在语音边界附近有时会发现源信息提取的错误,从而导致感知干扰,如噪声、着色、中断等。

STRAIGHT原理:(具体搜我其他博客)
在这里插入图片描述

STRAIGHT基本上算是一个通道声码器,具有增强参数修改能力和非常高的质量。操作参数为a)平滑谱图,b)基频,c)时频周期性图。周期图的频率分辨率是一个等效矩形带(ERB)。STRAIGHT为分析、修改和合成提供了图形化界面,还允许直接访问Matlab函数。

即使对F0或谱包线等参数进行很大修改(超过3倍),使用STRAIGHT处理的语音通常也能保持可懂度和质量。这一观察启发了一个关于人类听觉知觉的有趣假设,即听觉中的抢先机制提取了发声体的大小和形状信息。对这一假设的研究产生了对操纵人类声音以外的来源的需求,例如动物的声音和乐器的声音。但是,这类声音的基频分量有时几乎不见了(例如,牛蛙的二次和三次谐波分量的能量比基波分量高30分贝),这往往会在当前实现的F0提取中引入错误。

设计目标

一个高质量的系统必须在没有参数修改的情况下再现感知上相同的声音。 这并不直接意味着重建相同的波形,因为感知相同的语音具有完全不同的波形。 换句话说,在参数化声音操作中有用的等价类可以基于感知等价和索引派生:这是STRAIGHT[4]背后的基本思想。 其中一个指标是音高,它与F0的知觉相关。 基于这些考虑,定义了超高质量声音操作系统F0提取的设计目标,以提取产生相同的感知音高和音高相关感知属性(粗糙度、抖动、震颤、颤音等)的F0。 这个定义立即排除了音高感知模型,因为它们在上面描述的复制中使用时引入了双重计数的感知过程。 目标可细分为一组要求:
a)要求F0提取器具有与基本周期等效的时间分辨率;
b) F0提取器必须能够对缺失的基音进行提取;
c)提取的F0轨迹必须延伸到清音区域,保证连续。
对于高质量的操作,计算效率并不是最重要的,因为精心手动编辑语音参数以消除质量缺陷通常比机器时间要重要得多。 作为第一步,我们的目标是开发一个非常高质量的离线过程,减少(理想情况下消除)对人工干预的需求 。

结构

图2概述了所提出的方法,旨在取代STRAIGHT的源信息提取器方法(图1)。基于瞬时频率的提取器(主要负责需求a)和基于区间的提取器(主要负责需求b),生成F0个候选,其边信息表示置信度。将来自这些子系统的F0和边信息结合起来,生成混合的F0候选和边信息,并将其输入F0跟踪程序,以获得满足要求c)的最有可能的F0轨迹。然后将提取的轨迹作为初始值,对F0估计值进行细化,以恢复其时间分辨率并满足要求a)。
在这里插入图片描述
基于瞬时频率的F0提取器与我们之前的文章[7]基本相同,扩展到以载波噪声比(C/N)作为侧信息生成多个候选,而不是像以前那样只有一个估计。在这个实现中,使用104个信道间距同步等距高斯滤波器来覆盖40到800Hz。

基于区间的F0提取器采用FFT计算子带自相关。图2:基于多线索的源信息提取器的结构。这将取代图1中的源信息提取器。通过非线性谱平滑计算得到功率谱包络,对功率谱进行归一化处理。自相关在每个频带然后平均使用权重是一个局部S/N的函数。这个平均自相关被用来生成F0个候选。一般来说,语音、动物的声音和乐器的声音都是由多个和声组成的。这些声音的平均自相关在基本周期的整数倍上有多个线索。引入了一种不需要基本周期先验知识的抑制机制,以提高F0候选选择的可靠性。

利用边信息的归一化经验分布,实现了从不同线索得到的多个候选的混合。每个候选函数都被分配了一个势函数(在这个实现中使用高斯函数),它的高度是使用相应的归一化边信息确定的。设计了一个非线性混合函数来最大化最可能的候选和其他候选之间的距离。

跟踪过程使用了几种启发式方法来实现。成本函数的设计是为了最小化所得到的轨迹中的不连续,并基于与F0候选点相关的边信息最大化可信度。每个语音片段的双向跟踪从最可靠的候选开始。

跟踪后的F0细化过程与[7]相同。在这个实现中,F0计算为从F0自适应短期傅里叶变换中提取的前三个谐波分量的瞬时频率的加权平均值,使用F0候选作为F0的近似值。权重是根据各谐波分量的C/N来确定的。

其他信息:
在基于瞬时频率的分系统中增加了基于频域定点分析的线谱噪声消除预处理器[7]。整个源信息提取算法是在Matlab上实现的,没有使用机器相关编码的可移植性。当前的代码大小约为3000行。

结果

图3显示了结果的示例图。上图中的黑色矩形表示使用EGG信息确定的浊音区域。估计的V/UV信息用于突出F0轨迹上的浊音区域。评估基于EGG的浊音区域的F0提取误差。请注意,在V/UV边界上没有F0轨迹上的不连续点。
在这里插入图片描述

即使在没有明显误差的情况下,提取的基于语音的F0轨迹也与相应的基于电声门图egg的轨迹有一定的偏差。这种偏差的主要来源是与声道共振频率(共振峰)相关的群体延迟。如果无干扰谱包络只包含最小相位分量,则可以补偿这种偏差。然而,事实并非如此。由于声门波形形状导致的多个激励周期引入非最小相位成分,这些相位成分以概率的方式逐周期变化。初步的知觉测试表明,基于最小相群延迟的补偿方法不仅没有改善再现声,反而降低了再现声的质量。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值