Chapter 10: Exercises
- (**)
計算中文母音頻譜之一:
請寫一個 MATLAB 程式 vowelSpectrumPlot01.m,完成下列功能:
- 進行三秒錄音,錄音規格是 16KHz/16Bits/Mono,錄音內容是中文母音「ㄧ」。(請盡量維持穩定的音高及音量,可以試聽此範例檔案。)
- 使用 buffer2.m 及 frame2volume.m 來切出音框並計算音量,相關規格是 frameSize=32ms, overlap=0ms。(提示:你必須先將 frameSize 及 overlap 轉成點數。)請抓出音量最大的音框,在其前後各抓出 2 個音框,總共有 5 個音框。
- 使用 fft 來計算這五個音框的頻譜,含大小和相位,並畫出所有相關圖形:
- subplot(3,1,1):五個音框的訊號圖。
- subplot(3,1,2):五個音框的單邊頻譜強度圖。
- subplot(3,1,3):五個音框的單邊頻譜相位圖。
畫出的圖形應該類似下圖:
(提示:(a)對音框進行 fft 時,可以先乘上 Hamming window,可以讓算出來的頻譜比較乾淨。程式碼是:frame=frame.*hamming(length(frame))。(b)在畫出單邊頻譜強度圖,可以使用 log 刻度,比較容易看出諧波結構,方法是在畫第二個圖後,下達下列命令:set(gca, 'yscale', 'log')。(c) 為使相位產生連續的曲線,可以使用 unwarp 指令。)
- 請觀察看看所畫出的三個圖,那一個圖的五條曲線的相似度最高?(提示:由於我們的發音都是「ㄧ」,因此相似度最高的圖所用的特徵,就是穩定不變的特徵,可用於語音辨識。)
- (**)
計算中文母音頻譜之二:
請寫一個 MATLAB 程式 vowelSpectrumPlot02.m,功能如同上一題,但將錄音內容改成中文母音「ㄧˊ」。此題可用來探討在音高變化的情況下,頻譜的變化情況。
- (***)
計算中文母音頻譜並進行分類:
請寫一個 MATLAB 程式 vowelSpectrumRecogChinese01.m,完成下列功能:
- 進行五秒錄音,錄音規格是 16KHz/16Bits/Mono,錄音內容是中文母音「ㄚ、ㄧ、ㄨ、ㄝ、ㄛ」。(發音請盡量平穩,並在母音之間稍許停頓,以便後續進行自動切音,可以試聽此範例檔案。)
- 使用 endPointDetect.m (in SAP Toolbox) 來找出這五個音的開始和結束位置。請調整相關端點偵測參數,使得你的程式能夠自動地正確切出這五個音。你可以設定 plotOpt=1,以便使用 endPointDetect.m 來畫出端點偵測結果,正確圖形類似下圖:
- 使用 buffer2.m 來對這五個音切出音框(frameSize=32ms, overlap=0ms,但你必須先將 frameSize 及 overlap 轉成點數)並計算頻譜強度,請將這五個音的頻譜強度畫出來,每一個母音對應到 m 條曲線,m 是此母音的音框個數,請比較此 m 條曲線的相似度。畫出圖形應該類似下圖:
- 請用 knncLoo.m (in Machine Learning Toolbox) 來算出使用 KNNC 將資料分成五類母音的 leave-one-out 辨識率。(可以設定 k = 1。)
- 請將特徵數目由 1 增加到 128,畫出 KNNC 的 leave-one-out 辨識率對特徵數目的曲線。畫出圖形應該類似下圖:
- 請用 PCA 或 LDA 將這些頻譜強度資料投影到二度空間,並將圖形畫出來,觀察看看是否同一類母音,其資料點有聚集在一起的傾向。
- (**)
計算英文母音頻譜並進行分類:
請寫一個 MATLAB 程式 vowelSpectrumRecogEnglish01.m.m,功能如同上一題,但將錄音內容改成英文母音「i、e、�芊Bo、u...」。
Audio Signal Processing and Recognition (音訊處理與辨識)