基于語音頻譜的共振峰聲碼器實現(xiàn)
語音編碼算法利用語音信號的冗余信息及某些人耳不敏感的信息,可以在低比特率上獲得較高質(zhì)量的重建語音,壓縮編碼一直是通信中的關鍵技術。語音信號研究者們一直在尋求一種在保持語音質(zhì)量不顯著下降的情況下使語音信號的編碼比特率最小的方法,特別地,低比特率語音編碼體制(比特率在4.8 kb/s以下)因其廣泛的需求而得到研究者的重視。
語音編碼器的性能常常用比特率、延時、復雜度和質(zhì)量4個屬性來進行衡量,因此,在分析語音編碼器的性能時,主要應該考慮這些屬性。值得注意的是,這些屬性之間不是孤立的,而是相互緊密聯(lián)系的,例如,低比特率的編碼器一般比高比特率的編碼器有更大的延時、更高的算法復雜度和較低的語音質(zhì)量。因此在對各種編碼算法進行取舍時,應根據(jù)實際應用環(huán)境,在這些屬性之間進行權衡。
共振峰參數(shù)編碼算法在低碼率的音頻編碼中應用越來越廣泛。與基于時域波形的壓縮算法相比,他在傳輸?shù)倪^程中只需要傳輸構造信號所用的基頻和共振峰參數(shù),因此可以大大地降低傳輸?shù)拇a率,實現(xiàn)低碼率下的多媒體通信。而且,基于共振峰參數(shù)的算法無須嚴格限制信號的結構,他可以靈活地描述音頻信號的特征。這一靈活性決定了基于共振峰參數(shù)的算法,可以滿足對音頻信號進行方便訪問和控制的需要。
2 基頻及共振峰提取
基頻與共振峰參數(shù)的準確提取對于共振峰編碼算法質(zhì)量起著至關重要的作用。在本課題中采用改進的雙重傅里葉變換算法進行語音參數(shù)提取。本課題分析算法所需要的語音頻譜是由機語公司的SA-0505語譜儀分析得到。機語公司的SA-0505頻譜分析儀最高分辨精度為頻率分辨精度為5 Hz,時間分辨精度為5 ms。分析結果是各頻率分量的幅值函數(shù),不包含相位信息。由于語音信號中相位信息不影響語音分辨,所以在此基礎上的進一步工作有很大意義。
在實際的語音參數(shù)提取過程中,首先應用機語語譜儀分析語音信號,得到語音的時頻分析圖譜。如圖l所示。
對各時刻的頻譜序列進行傅里葉變換,圖2所示時刻的頻譜序列的傅里葉變換如圖3所示。
從圖2中可以看出,由于實際的語音是準周期信號和實際上是短時間信號的頻率分析,其頻譜序列不是周期性沖激函數(shù)序列的采樣,而是近似三角脈沖的采樣,所以其傅里葉變換的幅度譜呈現(xiàn)高頻衰減性質(zhì)。從圖3中可以觀察到頻譜序列的幅度譜是周期信號和高頻衰減信號的乘積。實際語音分析過程中各時刻頻譜序列的傅里葉變換后衰減幅度差異很大,低頻部分有時會出現(xiàn)分支脈沖的幅值大于下一個周期主脈沖的幅值,這對信號周期地分辨產(chǎn)生一定的干擾,而無法準確估計基頻值。所以本文在確定基頻時利用高頻部分衰減幅度差異較小的特點,分析其周期特性并用來計算語音基頻。
共振峰參數(shù)包括共振峰頻率、頻帶寬度和幅值,共振峰信息包含在語音頻譜的包絡中。因此共振峰參數(shù)提取的關鍵是估計語音頻譜包絡,并認為譜包絡中的最大值就是共振峰。利用語音頻譜傅里葉變換相應的低頻部分進行逆變換,就可以得到語音頻譜的包絡曲線。依據(jù)頻譜包絡線各峰值能量的大小確定出第1~第4共振峰,如圖4所示。
對于提取參數(shù)準確性的測試,可以在時域和頻域上與人工分析的結果進行比較,這種方法可以定量計算出提取算法的準確度,但工作量大不易實現(xiàn)。由于基頻和共振峰兩個基本信息是語音信號辨別的主要特征點,所以判斷兩個參數(shù)重建語音信號的語音質(zhì)量就可了解參數(shù)提取算法的性能。語音信號重建采用諧波合成方法,即首先根據(jù)共振峰信息建立語音頻譜的包絡,然后根據(jù)頻譜包絡確定基頻及其各次諧波的幅值并合成語音信號。本文應用所得到的參數(shù)重新生成語音,主觀分辨合成語音的質(zhì)量,據(jù)此判斷參數(shù)提取算法準確度。在短時間內(nèi)語音信號可以被看作是平穩(wěn)信號,所以每一幀的語音頻譜也可以簡化為一組離散信號,離散的量化值就是基頻。根據(jù)離散頻譜利用式(1),式(2)合成語音信號:
V(t)為合成語音信號,fp為基頻。為避免出現(xiàn)尖峰信號,設定了相位φn(ω)函數(shù):
比較3種方式確定的離散頻譜所合成的語音信號:
(1)直接對原語譜圖離散;
(2)對所得的語譜包絡離散;
(3)對根據(jù)共振峰值確定的頻譜包絡離散。
此方式的具體方案是:由于人耳對共振峰的參數(shù)中的中心頻率敏感,而對幅值和帶寬不敏感,所以本文只用共振峰的中心頻率和最大幅值兩個參數(shù)信息來合成語音。
根據(jù)成年人語音信號的共振峰帶寬大約300 Hz,將各共振峰的帶寬統(tǒng)一定為300 Hz。重新作語音頻譜包絡線時,以各共振峰中心頻率值為中點、最大能量為幅度作寬度為300 Hz的門信號,然后根據(jù)新生成的包絡線確定基頻的各次諧波的幅值。用第一種語譜圖合成語音聽起來只是音質(zhì)略有變化,可以清晰分辨每個音節(jié),完整保留原語音的語調(diào)、語氣和說話人音質(zhì)特征等信息。這說明算法能夠準確提取基頻信息,而且這種合成方法可以合成出高質(zhì)量的語音信號。用第二種語譜圖合成的語音中說話人音質(zhì)特征有些不清楚,其他方面與第一種相同。第三種語譜圖和成的語音中說話人音質(zhì)特征完全被過濾掉,個別音節(jié)有些含糊,但語氣、語調(diào)信息完整保留。
3 共振峰語音編碼
共振峰編碼算法需要基頻和共振峰兩種參數(shù)。通過實驗表明應用基頻、共振峰信息不但可以重建語音中的元音和濁輔音部分,還可以重建清輔音部分。首先是因為參數(shù)提取算法在清輔音部分時所確定的基頻參數(shù)不穩(wěn)定,根據(jù)不穩(wěn)定參數(shù)重建的語音信號會出現(xiàn)跳變,這種跳變信號與清輔音的頻譜相似。更重要的原因人耳對于輔音的聽辨要點是過渡音征,所以只要準確提供共振峰值就能重建清輔音部分。根據(jù)語音信號合成的研究表明,表示濁音信號最主要的是前三個共振峰。一個語音信號的共振峰模型,只用前三個時變共振峰頻率就可以得到可懂度很好的合成濁音。考慮到特殊情況下可能會出現(xiàn)偽共振峰,本算法在確定編碼參數(shù)時根據(jù)共振峰幅值大小保留4個共振峰參數(shù)。
3.1 參數(shù)量化
語音編碼算法最主要的兩個主要指標是比特率和語音質(zhì)量。低速率語音編碼算法要求在語音可懂的基礎上最大限度地降低比特率。為確定各參數(shù)的最大量化度,我們對各參數(shù)進行不同程度量化后重新合成語音,并評價各量化程度的語音質(zhì)量。
正常語音的基頻變化范圍為50~500 Hz,基頻量化實驗時發(fā)現(xiàn)當基頻量化精度為20 Hz時,重建的語音信號仍然清晰。所以編碼時基頻最低可以用5 b表示,但為了提高抗誤碼能力用8 b對基頻進行編碼。共振峰的量化分為頻率值量化和幅值量化。根據(jù)參數(shù)提取算法可知,共振峰曲線是基頻及其各次諧波的包絡線。我們可以認為語音頻譜是基頻及其諧波對共振峰曲線采樣信號,所以可以以基頻值作為描述共振峰曲線的精度。共振峰的中心頻率值就可以用基頻的第幾次諧波確定,所以變化范圍是1~32,編碼時用5 b表示。人耳對共振峰幅值不敏感,通過語音實驗表明當時域上以16位采樣精度錄制語音,信號振幅變化范圍210~215時用3 b對幅值編碼時就能清楚表現(xiàn)語音。所以對于每個共振峰可以用8 b量化,其中5 b表示中心頻率,3 b表示幅值。
3.2 編碼規(guī)則
編碼中語音幀周期可以分為動態(tài)和固定兩種形式。動態(tài)形式是每幀的周期根據(jù)基頻來確定,即每幀是一個基頻周期。這種方式在解碼時語音清晰度自然度最好,但由于幀周期的長度小導致編碼率高。固定形式是幀的周期是一定的,根據(jù)實際情況可以設定為10~40 ms。周期長度與音質(zhì)成反比,與壓縮率成正比。本算法中幀周期采用固定形式設定為25 ms。根據(jù)頻譜能量值判斷是否有語音,當沒有語音時以一個0字節(jié)編碼。我們采用一個字節(jié)表示靜音幀,是為了提高算法的抗誤碼能力。
3.3 結果
用本算法對一段正常語速朗讀的語音材料進行編碼及解碼,解碼后語音可懂性好,平均碼率1 400 b/s。
4 結 語
理論上只要有準確的基頻和共振峰參數(shù),就可以恢復出原語音信號除嗓音音質(zhì)特征外其他所有特征。本算法所用的參數(shù)只有基頻和4個共振峰,對于語音信號這些參數(shù)是分辨語音信息的特征參數(shù)。當編碼信息中只含有這些參數(shù),則可以認為就每幀信號來講沒有冗余信息,也就是對于每幀信號編碼達到了最大壓縮。如果在本算法基礎上要進一步提高壓縮率,只能針對幀與幀間的關聯(lián)來設計,如矢量量化算法等。
本編碼算法的延時短、復雜度低,可以用于實時的語音信號傳輸。在比特率、延時、復雜度3個評價指標上其性能良好,解碼后語音有輕微的機器音和個別音節(jié)含糊。導致語音音質(zhì)差的因素有兩個:一是參數(shù)量化時出現(xiàn)誤差,根據(jù)實驗分析誤差主要是共振峰量化誤差,所以量化編碼時根據(jù)實際要求在音質(zhì)和編碼率間進行選擇;二是語音重建算法,本文重建時只是簡單地用門函數(shù)表示共振峰幅頻特性,如果能在深入研究共振峰幅頻特性的基礎上改進重建算法,解碼后語音音質(zhì)一定會得到改善。
評論