#include <memory.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
#define PI 3.1415926
#define CLK_TCK CLOCKS_PER_SEC
int N;
void DCT(double *f,double *F)
{
int n,m,x;
double *dTemp=new double[N*N];//中间矩阵
double *coff=new double[N*N];//变换系数
coff[0]=1/sqrt(N);
for(m=1;m<N;m++)
coff[m]=sqrt(2)/sqrt(N);
memset(dTemp,0,sizeof(double)*N*N);
memset(F,0,sizeof(double)*N*N);
//一维变换
for(n=0;n<N;n++)
for(m=0;m<N;m++)
for(x=0;x<N;x++)
dTemp[m*N+n]+=f[x*N+n]*coff[m]*cos((2*x+1)*PI*m/(2*N));
//第二次一维变换
for(m=0;m<N;m++)
for(n=0;n<N;n++)
for(x=0;x<N;x++)
F[m*N+n]+=dTemp[m*N+x]*coff[n]*cos((2*x+1)*PI*n/(2*N));
delete []dTemp;
delete []coff;
}
void iDCT(double *f,double *F)
{
int m,y,x;
double *dTemp=new double[N*N];//中间矩阵
double *coff=new double[N*N];//变换系数
coff[0]=1/sqrt(N);
for(m=1;m<N;m++)
coff[m]=sqrt(2)/sqrt(N);
memset(dTemp,0,sizeof(double)*N*N);
memset(F,0,sizeof(double)*N*N);
//一维变换
for(x=0;x<N;x++)