/*************************************************************************
*
* 函数名称:
* WALSH()
*
* 参数:
* double * f - 指向时域值的指针
* double * F - 指向频域值的指针
* r -2的幂数
*
* 返回值:
* 无。
*
* 说明:
* 该函数用来实现快速沃尔什-哈达玛变换。
*
************************************************************************/
VOID WINAPI WALSH(double *f, double *F, int r)
{
// 沃尔什-哈达玛变换点数
LONG count;
// 循环变量
int i,j,k;
// 中间变量
int bfsize,p;
double *X1,*X2,*X;
// 计算快速沃尔什变换点数
count = 1 << r;
// 分配运算所需的数组
X1 = new double[count];
X2 = new double[count];
// 将时域点写入数组X1
memcpy(X1, f, sizeof(double) * count);
// 蝶形运算
for(k = 0; k < r; k++)
{
for(j = 0; j < 1< {
bfsize = 1 << (r-k);
for(i = 0; i < 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];
}
}
// 互换X1和X2
X = X1;
X1 = X2;
X2 = X;
}
// 调整系数
for(j = 0; j < count; j++)
{
p = 0;
for(i = 0; i < r; i++)
{
if (j & (1< {
p += 1 << (r-i-1);
}
}
F[j] = X1[p] / count;
}
// 释放内存
delete X1;
delete X2;
}
阅读(2774) | 评论(0) | 转发(0) |