預加重及C代碼
預加重的作用
預加重是提高信號高頻部分,使得低頻部分到高頻部分的頻譜平穩。使低頻到高頻的信噪比一樣。經常在頻譜分析中使用。
在語音頻譜分析中,我們為什麼要使用預加重?
語音信號中由於人聲的激勵,使得頻譜低頻向高頻呈跌落狀態,也就是說高頻比低頻的成分少,高頻比低頻難求。所以在頻譜分析之前我們需要對時域語音信號進行預加重。
以下是預加重的C代碼
pfData 是輸入語音信號
fMem 用於保存計算中語音信號的前一個信號值pfData[i-1]
fPreemph 預加重值,值在0.0~1.0區間,值越大,高頻提高的程度越高
nFrameSize pfData的個數
void PreEmphasis(float* pfData, int nFrameSize, float fPreemph, float& fMem)
{
float fTmp = 0;
for(int i = 0; i < nFrameSize; i++)
{
fTmp = pfData[i] - fPreemph * fMem;
fMem = pfData[i];
pfData[i] = fTmp;
}
}