📄 hilbth.h
字号:
#include "head.h"
void fht(float *x,int n)
{
int i,j,k,m,l1,l2,l3,l4,n1,n2,n4;
float a,e,c,s,t,t1,t2;
for(j=1,i=1;i<16;i++)
{
m=i;
j=2*j;
if(j==n)
break;
}
n1=n-1;
for(j=0,i=0;i<n1;i++)
{
if(i<j)
{
t=*(x+j);
*(x+j)=*(x+i);
*(x+i)=t;
}
k=n/2;
while(k<(j+1))
{
j=j-k;
k=k/2;
}
j=j+k;
}
for(i=0;i<n;i+=2)
{
t=*(x+i);
*(x+i)=t+(*(x+i+1));
*(x+i+1)=t-(*(x+i+1));
}
n2=1;
for(k=2;k<=m;k++)
{
n4=n2;
n2=n4+n4;
n1=n2+n2;
e=6.283185307179586/n1;
for(j=0;j<n;j+=n1)
{
l2=j+n2;
l3=j+n4;
l4=l2+n4;
t=*(x+j);
*(x+j)=t+(*(x+l2));
*(x+l2)=t-(*(x+l2));
t=*(x+l3);
*(x+l3)=t+(*(x+l4));
*(x+l4)=t-(*(x+l4));
a=e;
for(i=1;i<n4;i++)
{
l1=j+i;
l2=j-i+n2;
l3=l1+n2;
l4=l2+n2;
c=cos(a);
s=sin(a);
t1=*(x+l3)*c+(*(x+l4))*s;
t2=*(x+l3)*s-(*(x+l4))*c;
a=(i+1)*e;
t=*(x+l1);
*(x+l1)=t+t1;
*(x+l3)=t-t1;
t=*(x+l2);
*(x+l2)=t+t2;
*(x+l4)=t-t2;
}
}
}
}
void hilbth(float *x,int n)
{
//希尔波特变换
int i,n1,n2;
float t;
n1=n/2;
n2=n1+1;
fht(x,n);
for(i=1;i<n1;i++)
{
t=*(x+i);
*(x+i)=*(x+n-i);
*(x+n-i)=t;
}
for(i=n2;i<n;i++)
*(x+i)=-(*(x+i));
*x=0.0;
*(x+n1)=0.0;
fht(x,n);
t=1.0/n;
for(i=0;i<n;i++)
*(x+i)*=t;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -