STRAIGHT中提出的一种新的使用多个F0线索的基频提取算法。
Nearly Defect-free F0 Trajectory Extraction for Expressive Speech Modifications based on STRAIGHT
文章发表在2005InterSpeech上
新的F0提取器在处理表达性语音时特别有效,其中不规则的声带振动模式更容易被检测到。
代码:
f0raw = MulticueF0v14(x,fs);
ap = exstraightAPind(x,fs,f0raw);n3sgram=exstraightspec(x,f0raw,fs);
sy = exstraightsynth(f0raw,n3sgram,ap,fs);
提取的语音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);