|
最近畢設(shè)需要用到希爾伯特變換的知識(shí),今天做完之后決定還是記錄下思路。 當(dāng)然是數(shù)字信號(hào)的希爾伯特變換
上面是連續(xù)信號(hào)的希爾伯特變換,離散的應(yīng)該也能根據(jù)上面寫(xiě)(沒(méi)現(xiàn)成的圖片,懶得編輯公式了)。
這里打算采用使用卷積的方法來(lái)計(jì)算。由于希爾伯特變換的傳輸函數(shù)的傅里葉變換是 H(w)= -j w>=0 j w<0 所以我們可以先求原始信號(hào)的離散傅里葉變換E(K),然后按照下面的公式就可以求出希爾伯特變換之后的信號(hào)的離散傅里葉變換Eh(K)。
然后對(duì)Eh(K)求反傅里葉變換就可得到我們需要的信號(hào)的希爾伯特變換信號(hào)。
下面貼代碼思路 先建立一個(gè)復(fù)信號(hào)的結(jié)構(gòu)體: typedef struct { 接著是離散傅里葉變換的函數(shù) 第一個(gè)參數(shù)dir代表正變換和反變換。 void DFT(int dir,int framelen,CPX *signal,CPX *dft_s)
上主函數(shù) int main(void) { CPX *signal; CPX *hdft_s; CPX *hsignal; signal=calloc(framelen,sizeof(CPX)); // 原始信號(hào) DFT(1,framelen,signal, dft_s); //求原始信號(hào) 傅里葉變換 for(i=0;i<framelen;i++) //求出希爾伯特變換信號(hào)的傅里葉變換 DFT(-1,framelen, hdft_s,hsignal); //利用反傅里葉變換求出希爾伯特變換信號(hào) } 最后這個(gè)hsignal就是我們要的希爾伯特變換信號(hào)了。 |
|
|