楊俊美 雷楊 陳習(xí)坤
(華南理工大學(xué) 電子與信息學(xué)院,廣東 廣州 510640)
語音帶寬擴(kuò)展旨在利用高帶寬語音信號(hào)低頻分量和高頻分量之間的數(shù)學(xué)關(guān)系來還原低帶寬語音中丟失的高頻分量。語音帶寬擴(kuò)展對(duì)于在低帶寬信道上進(jìn)行語音通信的設(shè)備非常有用,將語音帶寬擴(kuò)展模塊集成到接收端設(shè)備中可以提高實(shí)時(shí)傳輸?shù)牡蛶捳Z音的帶寬,例如應(yīng)用在公共交換電話網(wǎng)(PSTN)、人工耳蝸[1]等。除了應(yīng)用于實(shí)時(shí)語音通信,其還可以應(yīng)用于其他語音信號(hào)處理領(lǐng)域,例如文本合成語音(TTS)[2]、語音識(shí)別[3- 4]和語音增強(qiáng)[5]。
傳統(tǒng)算法通常采用源濾波器模型[6],其主要理論依據(jù)是線性預(yù)測(cè)分析。源濾波器算法由兩部分構(gòu)成:第1部分是頻譜包絡(luò)的擴(kuò)展,常見方法有碼書映射[7]、線性映射[8]和統(tǒng)計(jì)模型映射等,其中碼書映射基于矢量量化,統(tǒng)計(jì)模型映射有高斯混合模型[9- 10]和隱馬爾可夫模型[11- 12];第2部分是激勵(lì)信號(hào)的產(chǎn)生,目前有直接信號(hào)合成、非線性失真和窄帶頻譜移動(dòng)與合成。
近年來流行的基于深度學(xué)習(xí)的算法已被證明優(yōu)于傳統(tǒng)算法。Kuleshov等[13]提出時(shí)域算法Audio-Unet,結(jié)構(gòu)類似于自編碼器,本質(zhì)是卷積神經(jīng)網(wǎng)絡(luò),不需要對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,輸入低帶寬語音波形預(yù)測(cè)出高帶寬語音波形,效果較好;Ling等[14]提出時(shí)域算法SampleRNN,他們首次在語音帶寬擴(kuò)展任務(wù)中使用循環(huán)神經(jīng)網(wǎng)絡(luò)及其各種變型版,網(wǎng)絡(luò)新穎;Wang等[15]提出T-CNN,其結(jié)構(gòu)類似于文獻(xiàn)[13]提出的AudioUnet,在損失函數(shù)中引入了頻域損失,實(shí)質(zhì)上也是時(shí)域算法,依然存在時(shí)域算法不能充分利用語音信號(hào)特征、訓(xùn)練數(shù)據(jù)量大的問題。Li等[16]提出頻域算法DNN-BWE,其網(wǎng)絡(luò)被預(yù)先訓(xùn)練為受限玻爾茲曼機(jī),并根據(jù)低帶寬對(duì)數(shù)功率譜預(yù)測(cè)高帶寬對(duì)數(shù)功率譜。對(duì)于高頻范圍相位譜的缺失問題,他們提出了對(duì)低帶寬相位譜重復(fù)、翻轉(zhuǎn)、取相反數(shù)的方法。Eskimez等[17]提出基于生成對(duì)抗網(wǎng)絡(luò)的頻域算法F-GAN,用低帶寬對(duì)數(shù)功率譜預(yù)測(cè)高頻范圍對(duì)數(shù)功率譜,再將預(yù)測(cè)的高頻范圍對(duì)數(shù)功率譜和原始的低帶寬對(duì)數(shù)功率譜連接起來組成高帶寬對(duì)數(shù)功率譜。其高頻范圍相位譜缺失的處理方法和文獻(xiàn)[16]是一樣的。F-GAN已經(jīng)取得了不錯(cuò)的效果,但在對(duì)數(shù)功率譜特征提取時(shí)未能重視幀與幀之間的數(shù)學(xué)關(guān)系,頻率軸數(shù)為奇數(shù),網(wǎng)絡(luò)深度淺,且忽略了語音時(shí)域信息。Lim等[18]提出時(shí)頻兩域算法TFNet,它定義了一個(gè)完全可微、端到端的時(shí)頻網(wǎng)絡(luò),包含頻譜融合層、頻譜復(fù)制器、損失函數(shù),分別在時(shí)域和頻域訓(xùn)練神經(jīng)網(wǎng)絡(luò),最后結(jié)合兩個(gè)網(wǎng)絡(luò)的信息生成高帶寬語音。相對(duì)時(shí)域或者頻域算法,其本質(zhì)上是訓(xùn)練兩個(gè)網(wǎng)絡(luò),所以模型相對(duì)復(fù)雜。
上述算法極大地促進(jìn)了語音帶寬擴(kuò)展技術(shù)的發(fā)展,但仍然存在以下問題:時(shí)域算法語音特征提取不夠精確,訓(xùn)練數(shù)據(jù)量大;頻域算法對(duì)數(shù)功率譜特征提取忽略幀與幀之間的數(shù)學(xué)關(guān)系,頻率軸數(shù)為奇數(shù),不利于網(wǎng)絡(luò)深度加深,且未利用語音時(shí)域信息;兩域算法模型訓(xùn)練兩個(gè)網(wǎng)絡(luò)相對(duì)復(fù)雜。鑒于此,文中提出了一種基于頻域運(yùn)行的語音帶寬擴(kuò)展算法,以便于充分利用語音信號(hào)特征和減小數(shù)據(jù)量;此外,提出了一種改進(jìn)的編碼器,通過引入平鋪層,使一維卷積核能夠提取對(duì)數(shù)功率譜時(shí)頻兩軸信息,以有效提升網(wǎng)絡(luò)結(jié)構(gòu)特征提取能力;接著,在數(shù)據(jù)處理時(shí)去掉頻率軸最后一個(gè)點(diǎn),還原時(shí)再補(bǔ)零,使頻率軸數(shù)為偶數(shù)而利于加深網(wǎng)絡(luò)深度;最后在損失函數(shù)中引入時(shí)域損失,以便于充分利用語音兩域信息。
當(dāng)前流行的頻域算法結(jié)構(gòu)[17]中,利用一維卷積核提取對(duì)數(shù)功率譜頻率軸特征,取得了不錯(cuò)的效果。但它們的卷積核只作用于對(duì)數(shù)功率譜頻率軸,而忽略了對(duì)數(shù)功率譜時(shí)間軸。對(duì)此,文中提出了基于Flatten-CNN的語音帶寬擴(kuò)展網(wǎng)絡(luò),其結(jié)構(gòu)見圖1。
(a)網(wǎng)絡(luò)結(jié)構(gòu)中的圖層
首先,文中網(wǎng)絡(luò)是一個(gè)序列到序列的模型,輸入是128×64(128和64分別對(duì)應(yīng)頻率軸和時(shí)間軸)低帶寬對(duì)數(shù)功率譜,輸出是預(yù)測(cè)的高頻范圍對(duì)數(shù)功率譜。編碼器中,引入了平鋪層,它由拉伸和變形組合而成,通過將對(duì)數(shù)功率譜時(shí)頻兩軸數(shù)據(jù)(128×64)轉(zhuǎn)化為一軸(8 192×1),使卷積核能夠同時(shí)對(duì)對(duì)數(shù)功率譜時(shí)間軸和頻率軸進(jìn)行特征提取,充分利用對(duì)數(shù)功率譜幀與幀之間、低頻和高頻之間的數(shù)學(xué)關(guān)系。此外,平鋪層能夠使網(wǎng)絡(luò)搭得很深,它使輸出數(shù)據(jù)維度為1,卷積核數(shù)量能夠從8、16、16、32、32、64、64、128、128、256、256、512逐漸增大。如果沒有平鋪層,直接進(jìn)行一維卷積,數(shù)據(jù)維度是64,卷積核數(shù)量一般比這個(gè)數(shù)大,導(dǎo)致網(wǎng)絡(luò)不能建得太深,否則網(wǎng)絡(luò)參數(shù)過于龐大。在解碼器中,文中引入了Shi等[19]提出的亞像素層。據(jù)研究[20],在圖像超分辨率應(yīng)用中,亞像素層是一種比插值或反卷積更優(yōu)的上采樣方法,它將低帶寬圖像特征圖通過卷積和多通道間的重組得到高帶寬圖像特征圖,減輕了圖像重建時(shí)的偽影。亞像素層引入到文中語音帶寬擴(kuò)展網(wǎng)絡(luò)后,編碼器通過卷積核降采樣得到低帶寬對(duì)數(shù)功率譜特征圖,解碼器將低帶寬對(duì)數(shù)功率譜特征圖器通過卷積和多通道間的重組得到高頻范圍對(duì)數(shù)功率譜特征圖。為防止網(wǎng)絡(luò)層數(shù)過深而導(dǎo)致信息丟失,在編碼器和解碼器之間使用了跳躍連接,在實(shí)驗(yàn)中,發(fā)現(xiàn)這樣做還可以加速網(wǎng)絡(luò)的收斂。一維卷積層中,均使用參數(shù)化修正線性單元激活函數(shù),詳細(xì)參數(shù)設(shè)置見表1。
表1 文中所提的網(wǎng)絡(luò)結(jié)構(gòu)的詳細(xì)參數(shù)1)Table 1 Detailed parameters of the network structure mentioned in the article
目前流行的頻域算法[17]中,損失函數(shù)只和頻域有關(guān),這會(huì)使訓(xùn)練出來的模型只具有在頻域中的優(yōu)良表現(xiàn)。文中受文獻(xiàn)[15]的時(shí)頻損失啟發(fā),在損失函數(shù)中引入了時(shí)域損失,使訓(xùn)練出來的模型同時(shí)具有在頻域和時(shí)域中的優(yōu)良表現(xiàn)。
頻域損失函數(shù)LF是對(duì)預(yù)測(cè)的高頻范圍對(duì)數(shù)功率譜和真實(shí)的高頻范圍對(duì)數(shù)功率譜求均方誤差(MSE):
(1)
時(shí)域損失函數(shù)的計(jì)算過程如下:首先把低帶寬對(duì)數(shù)功率譜輸入到文中提出的Flatten-CNN,預(yù)測(cè)出高頻范圍對(duì)數(shù)功率譜;再將預(yù)測(cè)出的高頻范圍對(duì)數(shù)功率譜和原始的低帶寬對(duì)數(shù)功率譜連接起來得到合成的高帶寬對(duì)數(shù)功率譜;接著利用短時(shí)傅里葉逆變換(ISTFT)將合成的高帶寬對(duì)數(shù)功率譜和真實(shí)相位譜從頻域反變換到時(shí)域,得到預(yù)測(cè)的高帶寬語音波形。同理,將真實(shí)的高頻范圍對(duì)數(shù)功率譜和原始的低帶寬對(duì)數(shù)功率譜連接起來得到真實(shí)的高帶寬對(duì)數(shù)功率譜;然后利用短時(shí)傅里葉逆變換將真實(shí)的高帶寬對(duì)數(shù)功率譜和真實(shí)相位譜從頻域反變換到時(shí)域,得到真實(shí)的高帶寬語音波形;最后對(duì)預(yù)測(cè)的高帶寬語音波形和真實(shí)的高帶寬語音波形求均方誤差(MSE),得到時(shí)域損失函數(shù)LT。
(2)
(3)
(4)
將時(shí)域損失函數(shù)和頻域損失函數(shù)按一定比例相加得到最終的時(shí)頻損失函數(shù)LTF。其中,α取值為0.75。
LTF=αLT+(1-α)LF
(5)
為驗(yàn)證文中算法的有效性,用TIMIT數(shù)據(jù)集[21]和VCTK數(shù)據(jù)集[22]進(jìn)行模型的訓(xùn)練和測(cè)試。文中復(fù)現(xiàn)了文獻(xiàn)[23]提出的Spline、文獻(xiàn)[15]提出的T-CNN、文獻(xiàn)[16]提出的DNN-BWE、文獻(xiàn)[17]提出的F-GAN,利用筆者的開源代碼實(shí)現(xiàn)了文獻(xiàn)[13]提出的AudioUnet。對(duì)于文獻(xiàn)[14]提出的SampleRNN,文中在TIMIT數(shù)據(jù)集實(shí)驗(yàn)中直接用他們?cè)闹械慕Y(jié)果作對(duì)比。
文中算法網(wǎng)絡(luò)訓(xùn)練所使用顯卡為NVIDIA TITAN Xp GPUs,深度學(xué)習(xí)框架為TensorFlow框架。使用Adam優(yōu)化器進(jìn)行優(yōu)化,學(xué)習(xí)率設(shè)置為0.000 3,網(wǎng)絡(luò)訓(xùn)練100個(gè)epoch,batch size設(shè)置為256。
文中選取兩個(gè)客觀指標(biāo)來評(píng)估語音帶寬擴(kuò)展性能,即分段信噪比SegSNR(segment signal-to-noise ratio)和對(duì)數(shù)功率譜距離LSD(log-spectral distance)[24],它們分別從時(shí)域和頻域來評(píng)估性能。SegSNR反映了正常聲音信號(hào)與噪聲信號(hào)比值,定義如下:
(6)
式中,n、N分別是語音分段數(shù)、語音分段總數(shù)。
LSD反映了頻域里兩個(gè)信號(hào)之間的距離,定義如下:
(7)
TIMIT數(shù)據(jù)集[21]是由德州儀器、麻省理工學(xué)院和SRI International合作構(gòu)建的數(shù)據(jù)集。其采樣頻率為16 kHz,一共包含6 300個(gè)句子,由來自美國(guó)8個(gè)主要方言地區(qū)的630個(gè)人每人朗誦給定的10個(gè)句子得到。
數(shù)據(jù)處理:①TIMIT數(shù)據(jù)集下采樣至8 kHz視為原始低帶寬語音,原本的16 kHz視為真實(shí)高帶寬語音。利用短時(shí)傅里葉變換(STFT)將語音變換到頻域時(shí),16 kHz語音的窗口大小(frame length)為512,8 kHz語音窗口大小為256。求出對(duì)數(shù)功率譜后,對(duì)于16 kHz語音的對(duì)數(shù)功率譜的頻率軸,文中截取129-256作為真實(shí)的高頻范圍對(duì)數(shù)功率譜。對(duì)于8 kHz語音的對(duì)數(shù)功率譜的頻率軸,文中截取1-128作為原始的低帶寬對(duì)數(shù)功率譜。對(duì)于對(duì)數(shù)功率譜的時(shí)間軸,文中以64為長(zhǎng)度進(jìn)行分割,剩余部分不足64的用零填補(bǔ),最終得到128×64的原始低帶寬對(duì)數(shù)功率譜和高頻范圍對(duì)數(shù)功率譜。為了保證低帶寬對(duì)數(shù)功率譜和高頻范圍對(duì)數(shù)功率譜的拼接連續(xù)性,數(shù)據(jù)還需要作歸一化處理。②求出相位譜后,對(duì)于16 kHz語音相位譜的時(shí)間軸,以64為長(zhǎng)度進(jìn)行分割,剩余部分不足64的用零填補(bǔ),得到257×64的真實(shí)相位譜。對(duì)于 8 kHz 語音相位譜也以64為長(zhǎng)度進(jìn)行分割,剩余部分不足64的用零填補(bǔ)。接著在頻率軸截取1-128的部分,并將其翻轉(zhuǎn)、取相反數(shù),再將其和原始的1-129進(jìn)行拼接,得到257×64人工相位譜。128×64原始低帶寬對(duì)數(shù)功率譜和128×64預(yù)測(cè)的高頻范圍對(duì)數(shù)功率進(jìn)行拼接,并用零填補(bǔ)缺失的中間點(diǎn)257,最終得到257×64的合成高帶寬對(duì)數(shù)功率譜;同理可以得到257×64的真實(shí)高帶寬對(duì)數(shù)功率譜。③模型訓(xùn)練時(shí),利用短時(shí)傅里葉逆變換將合成的高帶寬對(duì)數(shù)功率譜還原成時(shí)域語音信號(hào)時(shí),所用相位譜是真實(shí)相位譜。模型訓(xùn)練好后,利用短時(shí)傅里葉逆變換將合成的高帶寬對(duì)數(shù)功率譜還原成時(shí)域語音信號(hào)時(shí),所用相位譜是人工相位譜。
TIMIT數(shù)據(jù)集實(shí)驗(yàn)結(jié)果見表2,相較于F-GAN,文中算法在時(shí)域性能指標(biāo)SegSNR上有較大提升,其從14.22 dB提升到19.67 dB;LSD從0.64 dB降低到0.55 dB,LSDH是高頻范圍對(duì)數(shù)功率譜距離,其從0.85 dB降低到0.77 dB。這個(gè)結(jié)果是符合預(yù)期的,因?yàn)镕-GAN受限于頻率軸數(shù)為奇數(shù),網(wǎng)絡(luò)不便于加深,且未有效利用對(duì)數(shù)功率譜時(shí)間軸信息。文中對(duì)頻率軸數(shù)進(jìn)行處理,使其為2的倍數(shù),再使用平鋪層加深網(wǎng)絡(luò)深度、提取時(shí)間軸特征,從而更深的網(wǎng)絡(luò)能夠提取到更準(zhǔn)確的信息。圖2是文中算法用TIMIT數(shù)據(jù)集訓(xùn)練后輸出的對(duì)數(shù)功率譜(LPS)。
(a)原始LPS
表2 TIMIT數(shù)據(jù)集實(shí)驗(yàn)結(jié)果
從指標(biāo)上看,文中算法在頻域指標(biāo)LSD、LSDH上表現(xiàn)突出,這是毋庸置疑的,說明直接基于頻域的算法能更好地提取頻譜特征,提升頻譜上的表現(xiàn)。從對(duì)數(shù)功率譜圖上看,AudioUnet和T-CNN時(shí)域算法容易將對(duì)數(shù)功率譜圖高頻部分陰影區(qū)域過度填補(bǔ),而文中頻域算法能夠更好地展示頻譜圖的高頻陰影部分。從合成語音實(shí)際聽覺來看:一方面,時(shí)域算法合成語音可能有呲呲聲,這就是因?yàn)闀r(shí)域算法頻譜圖高頻部分被過度填補(bǔ)導(dǎo)致頻譜圖不準(zhǔn)確;另一方面,文中頻域算法的音質(zhì)通透感更強(qiáng),這是頻域指標(biāo)LSD提升帶來的效果,而非時(shí)域指標(biāo)SNR。Spline三次樣條插值算法是時(shí)域算法中最簡(jiǎn)單的,也較大提升了時(shí)域指標(biāo),但頻域指標(biāo)表現(xiàn)很差,Spline算法合成的語音幾乎無高頻語音特有的通透感。不過頻域算法合成語音可能有金屬聲,這是因?yàn)樵谡Z音的諸多特征中,雖然頻譜是影響最大的,但還有人工相位譜這個(gè)影響小的因素不準(zhǔn)確所致。文中借鑒文獻(xiàn)[15]引入了時(shí)域損失以盡量消除人工相位譜對(duì)合成語音的這種影響,當(dāng)訓(xùn)練較好時(shí),這種影響可以降到最低,以致幾乎聽不到金屬聲。
VCTK數(shù)據(jù)集[22]是愛丁堡大學(xué)語音技術(shù)研究中心的Yamagishi等構(gòu)建的數(shù)據(jù)集。其采樣頻率是48 kHz,由110個(gè)不同口音的人每人朗誦400句在報(bào)紙上選取的句子,在愛丁堡大學(xué)的半消聲室中使用全向麥克風(fēng)(DPA 4035)錄制。VCTKS表示單說話人數(shù)據(jù)集,VCTKM表示多說話人數(shù)據(jù)集。
VCTK數(shù)據(jù)集實(shí)驗(yàn)結(jié)果見表3,相較于F-GAN,VCTKS數(shù)據(jù)集實(shí)驗(yàn)中,SegSNR從18.77 dB提升到23.74 dB,LSD從0.49 dB降低到0.43 dB,LSDH從0.64 dB降低到0.59 dB;VCTKM數(shù)據(jù)集實(shí)驗(yàn)中,SegSNR從16.37 dB提升到22.67 dB,LSD從0.59 dB降低到0.53 dB,LSDH從0.78 dB降低到0.74 dB。圖3是文中算法用VCTKM數(shù)據(jù)集訓(xùn)練后輸出的對(duì)數(shù)功率譜。由圖可見,VCTK數(shù)據(jù)集和TIMIT數(shù)據(jù)集的實(shí)驗(yàn)結(jié)果類似。
(a)原始LPS
表3 VCTK數(shù)據(jù)集實(shí)驗(yàn)結(jié)果
為了驗(yàn)證時(shí)頻損失函數(shù)的優(yōu)越性,文中進(jìn)行了不同損失函數(shù)的消融分析,表4給出了損失函數(shù)消融實(shí)驗(yàn)結(jié)果,所用數(shù)據(jù)集是VCTKM??梢钥闯觯瑑H使用頻域損失函數(shù)時(shí),指標(biāo)LSDH、LSD表現(xiàn)較好,但指標(biāo)SegSNR表現(xiàn)稍差。只使用時(shí)域損失函數(shù)時(shí)有類似結(jié)果,指標(biāo)SegSNR表現(xiàn)較好,指標(biāo)LSDH、LSD表現(xiàn)稍差。時(shí)頻損失函數(shù)結(jié)合了時(shí)域和頻域損失,在兩個(gè)指標(biāo)上有平衡的表現(xiàn)。
表4 損失函數(shù)消融實(shí)驗(yàn)結(jié)果
文中頻域算法的另一個(gè)優(yōu)勢(shì)是處理數(shù)據(jù)集時(shí)頻域能夠利用對(duì)稱性減少數(shù)據(jù)量,訓(xùn)練速度更快,而時(shí)域算法不能減少數(shù)據(jù)集。為了保證測(cè)試的公平性,對(duì)AudioUnet和T-CNN進(jìn)行了調(diào)整,以保證網(wǎng)絡(luò)深度與文中算法一致。調(diào)整后均為55層,batch size均為256。時(shí)域算法AudioUnet和T-CNN產(chǎn)生了約21萬條訓(xùn)練數(shù)據(jù)集,文中頻域算法產(chǎn)生約10萬條訓(xùn)練數(shù)據(jù)集。結(jié)果得到AudioUnet、T-CNN和文中算法的訓(xùn)練時(shí)間分別為379、420和221 s,可見文中算法訓(xùn)練速度更快。由此可知,理論上同樣復(fù)雜度、深度的神經(jīng)網(wǎng)絡(luò)用在頻域時(shí),頻域算法利用頻域?qū)ΨQ性減少數(shù)據(jù)集,訓(xùn)練速度更快。
文中算法改進(jìn)了目前頻域流行算法F-GAN[17],借鑒了文獻(xiàn)[15]的時(shí)頻損失思路,使頻域算法的輸入和時(shí)域算法一致,頻域算法能夠應(yīng)用時(shí)域算法里的網(wǎng)絡(luò)模型,增強(qiáng)了頻域算法的網(wǎng)絡(luò)拓展性。它的編碼器通過引入平鋪層,實(shí)現(xiàn)時(shí)頻兩軸特征提?。活l率軸數(shù)據(jù)處理時(shí)湊偶補(bǔ)零,以加深網(wǎng)絡(luò)深度;它的損失函數(shù)引入了時(shí)域損失,充分利用了語音兩域信息。實(shí)驗(yàn)結(jié)果表明,與當(dāng)前的主流算法相比,文中算法生成的高帶寬語音質(zhì)量得到提高。文中算法依然存在頻域方法人工相位譜不夠精準(zhǔn)的問題,接下來可以考慮用深度學(xué)習(xí)的方法對(duì)相位譜建模,以及引用更多的時(shí)域方法網(wǎng)絡(luò)。