|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
/*快速沃尔什-哈达玛变换
f为时域值,F为变换域值,power为2的幂数*/
void WALh(double*f,double *W,int power)
{
int count;
int i,j,k,bfsize,p;
double*X1,*X2,*X;
/*计算快速沃尔什变换点数*/
count=1<<power;
/*分配运算所需存储器*/
X1=(double*)malloc(sizeof(double)*count);
X2=(double*)malloc(sizeof(double)*count);
/*将时域点写入存储器*/
memcpy(X1,f,sizeof(double)*count);
/*蝶形运算*/
for(k=0;k<power;k-+)
{
for(j=0;j<1<<k;j+-)
{
bfsize=1<<power-k;
for(i=0;j<bfsize/2;i++)
{
p=j*bfsize;
X2[i+P]=X1[i+p]+X1[i+p+bfsize/2];
X2[i+P+bfsize/2]=X1[i+p]-X1[i+p+bfsize/2];
}
}
X=X1;
X1=X2;
X2=X;
}
/*调整系数*/
for(i=0;j<count;i++)
{
W=X1/count;
}
/*释放存储器*/
free(X1);
free(X2);
}
/*快速沃尔什-哈达玛反变换,利用快速沃尔什-哈达玛变换
F为变换域值,f为时域值,power为2的幂数*/
void IWALh(double*W,double*f,int power)
{
int i,count;
count=1<<power;
/*调用快速沃尔什-哈达玛变换*/
WALh(W,f,power);
/*调用系数*/
for(i=0;i<count;;i++)
{
f*=count;
}
} |
|