天天看點

Hilbert變換C語言實作學習Hilbert變換C語言實作學習。

通過離散傅裡葉變換(DFT)實作希爾伯特變換。

Hilbert變換C語言實作學習。

Plan:五一前完成希爾伯特C語言程式設計,能與MATLAB 得出的結果相對應。

Hilbert變換原理

假設有一個離散時間信号s(n),s(n)的希爾伯特變換為:s^(n)

Hilbert變換C語言實作學習Hilbert變換C語言實作學習。

其中:

Hilbert變換C語言實作學習Hilbert變換C語言實作學習。
Hilbert變換C語言實作學習Hilbert變換C語言實作學習。

-π<w<π

s(n)的解析信号為g(n)=s(n)+js^(n)

用DFT求離散信号s(n)的解析信号及其Hilbert變換

步驟如下:

  1. 對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

Hilbert變換C語言實作學習Hilbert變換C語言實作學習。

第二步:解壓縮下載下傳的預編譯檔案。

第三步:運作lib.exe。如下圖:找到64位的vs工具。

Hilbert變換C語言實作學習Hilbert變換C語言實作學習。

點選打開,輸入>lib.exe,回車運作,如下圖。

Hilbert變換C語言實作學習Hilbert變換C語言實作學習。

第四步:切換到解壓縮後的檔案: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

Hilbert變換C語言實作學習Hilbert變換C語言實作學習。

打開解壓縮後的檔案,發現剛才生成了三個.exp檔案,三個.lib檔案,如圖:

Hilbert變換C語言實作學習Hilbert變換C語言實作學習。

第五步:将生成的檔案複制到下圖位置:

Hilbert變換C語言實作學習Hilbert變換C語言實作學習。
  1. 将我們E:\fftw-3.3.5-dll64下面的生成的庫檔案libfftw3-3.lib ,libfftw3f-3.lib ,libfftw3l-3.lib 拷貝到lib檔案夾裡面。
  2. 将E:\fftw-3.3.5-dll64盤下面fftw3.h放到include檔案夾裡面。
  3. 将E:\fftw-3.3.5-dll64下的libfftw3-3.dll、libfftw3f-3.dll、libfftw3l-3.dll複制到C:\Windows\SysWOW64
  4. 将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;
}


           

第七步:配置一下工程屬性,在工程->屬性->配置屬性->連結器->輸入->附加依賴項中,修改如下圖所示:

Hilbert變換C語言實作學習Hilbert變換C語言實作學習。
Hilbert變換C語言實作學習Hilbert變換C語言實作學習。

運作後得到結果:

Hilbert變換C語言實作學習Hilbert變換C語言實作學習。

完成添加FFTW庫。

未完待續……

繼續閱讀