/*************************************************************************
*
* 函数名称:
* DCT()
*
* 参数:
* double * f - 指向时域值的指针
* double * F - 指向频域值的指针
* r -2的幂数
*
* 返回值:
* 无。
*
* 说明:
* 该函数用来实现快速离散余弦变换。该函数利用2N点的快速付立叶变换
* 来实现离散余弦变换。
*
************************************************************************/
VOID WINAPI DCT(double *f, double *F, int r)
{
// 离散余弦变换点数
LONG count;
// 循环变量
int i;
// 中间变量
double dTemp;
complex *X;
// 计算离散余弦变换点数
count = 1<
// 分配内存
X = new complex[count*2];
// 赋初值为0
memset(X, 0, sizeof(complex) * count * 2);
// 将时域点写入数组X
for(i=0;i {
X[i] = complex (f[i], 0);
}
// 调用快速付立叶变换
FFT(X,X,r+1);
// 调整系数
dTemp = 1/sqrt(count);
// 求F[0]
F[0] = X[0].real() * dTemp;
dTemp *= sqrt(2);
// 求F[u]
for(i = 1; i < count; i++)
{
F[i]=(X[i].real() * cos(i*PI/(count*2)) + X[i].imag() * sin(i*PI/(count*2))) * dTemp;
}
// 释放内存
delete X;
}
阅读(2662) | 评论(0) | 转发(0) |