概述
語音信號是一種非平穩的時變信號,它攜帶着大量信息。在語音編碼、語音合成、語音識別和語音增強等語音處理中,都需要提取語音中包含的各種信息
語音處理的目的
- 對語音信號進行分析,提取特徵參數,用於後續處理
- 加工語音信息,如語音增強和語音合成中的應用
根據所分析的參數類型,語音信號可以分成:
- 時域分析
- 最簡單、最直觀
- 直接對語音信號的時域波形進行分析
- 特徵參數:語音的短時能力、平均幅度、短時平均過零率、短時自相關函數和短時平均幅度差函數等
- 對語音信號進行分析(時域/變換域)之前,一般都要對其做預處理
- 變換域(頻域、倒譜域)分析
語音信號的預處理
模擬語音信號s(t),離散化爲s(n) ,即數字處理
獲得數字語音的途徑
- 正式:大公司或語音研究機構發佈的被大家認可的語音數據庫
- 非正式:研究者個人用錄音軟件或硬件電路加麥克風隨時隨地錄製的一些發音或語句
語音信號數字化:採樣
- 語音信號的頻率範圍通常是300 ~ 3400Hz
- 一般情況下取採樣頻率爲8kHz即可
- 採樣定理:當採樣頻率fs大於信號中最高頻率fmax的2倍時(fs>2fmax),採樣之後的數字信號完整地保留了原始信號中的信息
- 一個連續信號在被採樣化了以後,其頻域就是原信號頻譜的週期性延拓;每隔一個採樣頻率重複一次
語音信號數字化:量化
語音信號的預加重處理
- 語音信號的平均功率受聲門激勵和口脣輻射的影響,大約在200 ~ 500Hz處按6dB/倍頻程跌落
- 預加重的目的:提升語音信號高頻部分,去除口脣輻射的影響,增加語音的高頻分辨率,保持在低頻到高頻的整個頻帶中,能用同樣的信噪比求頻譜,便於進行頻譜分析或者聲道參數分析
- 實現:通過一階FIR高通數字濾波器來實現
- H(z) = 1 - az-1
- 其中a爲預加重參數,通常可以取0.9 < a < 1.0
- 設n時刻的語音採樣值爲x(n),用差分方程實現預加重的方程爲:y(n)=x(n)-ax(n-1)
- 高通濾波器的幅頻特性
- 一段語音信號在預加重前後的時域波形和頻譜圖
- 語音信號的加窗處理
- 爲了方便對語音信號進行分析,假設語音信號在10~30ms短時間內是平穩的。可把語音信號分幀進行處理。採用可移動的有限長度窗口進行加權實現分幀
- 典型的窗函數
- 矩形窗
- 漢明窗
- 漢寧窗
- 矩形窗
- 哪種窗函數較好?
- 漢明窗能相對更好地保留原語音信號的頻率特性,使用最廣泛
- 爲了方便對語音信號進行分析,假設語音信號在10~30ms短時間內是平穩的。可把語音信號分幀進行處理。採用可移動的有限長度窗口進行加權實現分幀
- 頻率泄露/截斷效應:頻譜分析的傅里葉變換會作週期延拓,把截取的有限長序列當成是無限長序列的一個週期,不斷的複製,取得一個新的無限長序列。這個新的序列與原序列是不一樣的,分析得到的頻譜自然也不同(會多出一些本來沒有的頻率)
- 幀長:一般每幀10-30ms(採樣率10kHz時,100~300個點),幀移10ms。原因如下:
- 當窗較寬時,平滑作用大(每一幀內作數據統計),能量變化不大,反映不出能量變化
- 當窗較窄時,沒有平滑作用,反映了能量的快變細節,而看不出包絡的變化
操作小記
矩形窗
代碼
x = linspace(0, 100, 10001); %在0-100的橫座標去10001個值
h = zeros(10001, 1); %爲矩陣h賦0指
h(1:2001) = 0; %前2000個值爲0值
h(2002:8003) = 1; %窗長,窗內取值爲1
h(8004:10001) = 0; %後2000個值爲0值
figure(1); %定義圖號
subplot(1, 2, 1); %畫第一個子圖
plot(x, h ,'k'); %畫波形,橫座標x,縱座標h,k表示黑色
title('矩形窗時域波形'); %圖標題
xlabel('樣點數'); %橫座標名稱
ylabel('幅度'); %縱座標名稱
axis([0, 100, -0.5, 1.5]); %限定橫縱座標範圍
line([0, 100], [0,0]); %畫出x軸
w1 = linspace(0,61,61); %取窗長內的61點
w1(1:61) = 1; %賦值1,相當於矩形窗
w2 = fft(w1, 1024); %對時域信號進行1024點的快速傅里葉變換
w3 = w2/w2(1); %幅度歸一化
w4 = 20*log10(abs(w3)); %對歸一化幅度取對數(根據dB的定義)
w = 2*[0:1023]/1024; %頻率歸一化
subplot(1, 2, 2); %畫第二個子圖
plot(w, w4, 'k'); %畫幅度特性圖
axis([0,1,-100,0]) %限定橫縱座標範圍
title('矩形窗幅度特性'); %圖標題
xlabel('歸一化頻率 f/fs'); %橫座標名稱
ylabel('幅度/dB'); %縱座標名稱
代碼分析
linspace(x1,x2,n)
- 功能:生成 n 個點。這些點的間距爲 (x2-x1)/(n-1)
- 參數:
x1
:起始值x2
:中止值N
:元素個數,默認點數爲100
- 具體可參看:生成線性間距向量 - MATLAB linspace - MathWorks 中國
效果
漢明窗
代碼
x = linspace(0, 60, 61); %在0-60的橫座標間取61個值作爲橫座標點
h = hamming(61); %取61個點的漢明窗值爲縱座標
figure(1); %畫圖
subplot(1, 2, 1); %第一個子圖
plot(x, h, 'k'); %橫座標x,縱座標h,k爲黑色
title('Hamming窗時域波形'); %圖標題
xlabel('樣點數'); %橫座標名稱
ylabel('幅度'); %縱座標名稱
w1 = linspace(0, 61, 61); %去窗長內的61個點
w1(1:61) = hamming(61); %加漢明窗
w2 = fft(w1, 1024); %對時域信號進行1024點傅立葉變換
w3 = w2/w2(1); %幅度歸一化
w4 = 20*log10(abs(w3)); %對歸一化幅度取對數
w = 2*[0:1023]/1024; %頻率歸一化
subplot(1, 2, 2); %畫第二個子圖
plot(w, w4, 'k'); %畫幅度特性圖
axis([0, 1, -100, 0]); %限定橫、縱座標範圍
title('Hamming窗幅度特性'); %圖標題
xlabel('歸一化頻率 f/fs'); %橫座標名稱
ylabel('幅度/dB'); %縱座標名稱
效果
漢寧窗
代碼
x = linspace(0, 60, 61); %在0-60的橫座標間取61個值作爲橫座標點
h = hann(61); %取61個點的漢寧窗值爲縱座標
figure(1); %畫圖
subplot(1, 2, 1); %第一個子圖
plot(x, h, 'k'); %橫座標x,縱座標h,k爲黑色
title('Hanning窗時域波形'); %圖標題
xlabel('樣點數'); %橫座標名稱
ylabel('幅度'); %縱座標名稱
w1 = linspace(0, 61, 61); %去窗長內的61個點
w1(1:61) = hann(61); %加漢寧窗
w2 = fft(w1, 1024); %對時域信號進行1024點傅立葉變換
w3 = w2/w2(1); %幅度歸一化
w4 = 20*log10(abs(w3)); %對歸一化幅度取對數
w = 2*[0:1023]/1024; %頻率歸一化
subplot(1, 2, 2); %畫第二個子圖
plot(w, w4, 'k'); %畫幅度特性圖
axis([0, 1, -100, 0]); %限定橫、縱座標範圍
title('Hanning窗幅度特性'); %圖標題
xlabel('歸一化頻率 f/fs'); %橫座標名稱
ylabel('幅度/dB'); %縱座標名稱
效果