和缚氏变换的原理一样的啊,你可以改一下缚氏变换的程序
解决方案 »
- 想外包一个tapi方面的项目,有兴趣的高手qq联系
- 【求助】关于bind函数,在线等
- 在logoff的时候,哪些进程会被杀掉?(咨询Microsoft后也没有搞明白的问题)
- 别人的程序,其中几行不明白。请问下面2组赋值方法有什么区别?(一个有&,一个没有&)是笔误还是有其它用意?
- 请教一个问题,vc 编写串口通讯程序与下位机通讯
- 如何让VS不再自动调试网页?
- PowerPoint的使用问题?
- 如何对按钮添加按下和抬起的函数
- 好象是找不到头文件??
- 请问怎么调试Release版的程序
- 程序员考试的题目真是没水平,欢迎大家来发表看法!
- 为什麽在vc文件中包含class 类名,而不包含 它的头文件,多谢
unsigned NumSamples,
int InverseTransform,
double *RealIn,
double *ImagIn,
double *RealOut,
double *ImagOut )
{
unsigned NumBits; /* Number of bits needed to store indices */
unsigned i, j, k, n;
unsigned BlockSize, BlockEnd; double angle_numerator = 2.0 * DDC_PI;
double tr, ti; /* temp real, temp imaginary */ if ( !IsPowerOfTwo(NumSamples) )
{
fprintf (
stderr,
"Error in fft(): NumSamples=%u is not power of two\n",
NumSamples ); exit(1);
} if ( InverseTransform )
angle_numerator = -angle_numerator; CHECKPOINTER ( RealIn );
CHECKPOINTER ( RealOut );
CHECKPOINTER ( ImagOut ); NumBits = NumberOfBitsNeeded ( NumSamples ); /*
** Do simultaneous data copy and bit-reversal ordering into outputs...
*/ for ( i=0; i < NumSamples; i++ )
{
j = ReverseBits ( i, NumBits );
RealOut[j] = RealIn[i];
ImagOut[j] = (ImagIn == NULL) ? 0.0 : ImagIn[i];
} /*
** Do the FFT itself...
*/ BlockEnd = 1;
for ( BlockSize = 2; BlockSize <= NumSamples; BlockSize <<= 1 )
{
double delta_angle = angle_numerator / (double)BlockSize;
double sm2 = sin ( -2 * delta_angle );
double sm1 = sin ( -delta_angle );
double cm2 = cos ( -2 * delta_angle );
double cm1 = cos ( -delta_angle );
double w = 2 * cm1;
double ar[3], ai[3];
double temp; for ( i=0; i < NumSamples; i += BlockSize )
{
ar[2] = cm2;
ar[1] = cm1; ai[2] = sm2;
ai[1] = sm1; for ( j=i, n=0; n < BlockEnd; j++, n++ )
{
ar[0] = w*ar[1] - ar[2];
ar[2] = ar[1];
ar[1] = ar[0]; ai[0] = w*ai[1] - ai[2];
ai[2] = ai[1];
ai[1] = ai[0]; k = j + BlockEnd;
tr = ar[0]*RealOut[k] - ai[0]*ImagOut[k];
ti = ar[0]*ImagOut[k] + ai[0]*RealOut[k]; RealOut[k] = RealOut[j] - tr;
ImagOut[k] = ImagOut[j] - ti; RealOut[j] += tr;
ImagOut[j] += ti;
}
} BlockEnd = BlockSize;
} /*
** Need to normalize if inverse transform...
*/ if ( InverseTransform )
{
double denom = (double)NumSamples; for ( i=0; i < NumSamples; i++ )
{
RealOut[i] /= denom;
ImagOut[i] /= denom;
}
}
}
/*--- end of file fourierd.c ---*/