通過離散傅裡葉變換(DFT)實作希爾伯特變換。
Hilbert變換C語言實作學習。
Plan:五一前完成希爾伯特C語言程式設計,能與MATLAB 得出的結果相對應。
Hilbert變換原理
假設有一個離散時間信号s(n),s(n)的希爾伯特變換為:s^(n)

其中:
-π<w<π
s(n)的解析信号為g(n)=s(n)+js^(n)
用DFT求離散信号s(n)的解析信号及其Hilbert變換
步驟如下:
- 對s(n)做DFT,的S(k),k=0,1,2,3…,N-1;
- 令
Win10+VS2017安裝FFTW庫
參考文章:
https://blog.csdn.net/alxe_made/article/details/84205377
第一步:下載下傳FFTW預編譯庫,網址為:http://www.fftw.org/install/windows.html
第二步:解壓縮下載下傳的預編譯檔案。
第三步:運作lib.exe。如下圖:找到64位的vs工具。
點選打開,輸入>lib.exe,回車運作,如下圖。
第四步:切換到解壓縮後的檔案:fftw-3.3.5-dll64目錄下,并執行以下指令,如圖:
lib /machine:x64 /def:libfftw3-3.def
lib /machine:x64 /def:libfftw3l-3.def
lib /machine:x64 /def:libfftw3f-3.def
打開解壓縮後的檔案,發現剛才生成了三個.exp檔案,三個.lib檔案,如圖:
第五步:将生成的檔案複制到下圖位置:
- 将我們E:\fftw-3.3.5-dll64下面的生成的庫檔案libfftw3-3.lib ,libfftw3f-3.lib ,libfftw3l-3.lib 拷貝到lib檔案夾裡面。
- 将E:\fftw-3.3.5-dll64盤下面fftw3.h放到include檔案夾裡面。
- 将E:\fftw-3.3.5-dll64下的libfftw3-3.dll、libfftw3f-3.dll、libfftw3l-3.dll複制到C:\Windows\SysWOW64
- 将E:\fftw-3.3.5-dll64下的libfftw3-3.dll、libfftw3f-3.dll、libfftw3l-3.dll也複制到C:\Windows\System32裡面。
第六步:建立一個測試工程,輸入以下代碼:
#include "fftw3.h"
#include <windows.h>
int main()
{
fftw_complex *in, *out;
fftw_plan p;
int N = 8;
int i;
int j;
in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N);
out = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N);
for (i = 0; i < N; i++)
{
in[i][0] = 1.0;
in[i][1] = 0.0;
printf("%6.2f ", in[i][0]);
}
printf("\n");
p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
fftw_execute(p); /* repeat as needed*/
for (j = 0; j < N; j++)
{
printf("%6.2f ", out[j][0]);
}
printf("\n");
fftw_destroy_plan(p);
fftw_free(in);
fftw_free(out);
system("pause");//暫停
return 0;
}
第七步:配置一下工程屬性,在工程->屬性->配置屬性->連結器->輸入->附加依賴項中,修改如下圖所示:
運作後得到結果:
完成添加FFTW庫。
未完待續……