#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include"FFT1.h"
const int L=4;//信号长度
//x初始序列,也存变换结果序列
void HT(float x[],int num)
{
float *xi,*x1r, *x1i, *sgn;
int i,k;
k=log(num)/log(2);
xi=(float *)calloc(num,sizeof(float));
x1r=(float *)calloc(num,sizeof(float));
x1i=(float *)calloc(num,sizeof(float));
sgn=(float *)calloc(num,sizeof(float));
//apply FFT to x[]
fft(x,xi,k,1);
//construct sgn[]
for( i=1; i<num/2; i++)
sgn=1.0;
for(i=num/2+1; i<num; i++)
sgn=-1.0;
//X(k)sgn(k)
for(i=0; i<num; i++)
{
x1r=x*sgn;
x1i=xi*sgn;
}
//apply IFFT to x1
fft(x1r,x1i,k,-1);
for(i=0; i<num; i++)
x= x1i;
free(x1r);
free(x1i);
free(sgn);
free(xi);
}
void main()
{
float x[L]={1,2,3,4};
float xx[L];
int i;
for(i=0; i<L; i++)
xx=x;
HT(x,L);
printf("Hilbert变换得到的解析信号为:\n");
for(i=0; i<L; i++)
printf("%f+i(%f)\n",xx,x);
}