为了看明白那堆积分变换
![](/icons/7398dou.gif)
![](/icons/7398hanshu.gif)
![](/icons/7398yi.gif)
![](/icons/7398dou.gif)
![](/icons/7398dou.gif)
![](/icons/7398yi.gif)
![](/icons/7398dou.gif)
![](/icons/7398hanshu.gif)
![](/icons/7398de.gif)
![](/icons/7398dou2.gif)
![](/icons/7398dou.gif)
![](/icons/7398jiajia.gif)
![](/icons/7398chengxu.gif)
![](/icons/7398dou.gif)
![](/icons/7398yi.gif)
![](/icons/7398dou.gif)
#
![](/icons/7398include.gif)
#
![](/icons/7398include.gif)
#
![](/icons/7398include.gif)
using
![](/icons/7398namespace.gif)
const double PI = 3.14159265358979323846;
![](/icons/7398int.gif)
![](/icons/7398de.gif)
![](/icons/7398int.gif)
/// 复数结构体
struct stCompNum
{
double re;
double im;
};
stCompNum* pData1 = NULL;
stCompNum* pData2 = NULL;
/// 正整数位逆序后输出
![](/icons/7398int.gif)
![](/icons/7398int.gif)
![](/icons/7398int.gif)
{
![](/icons/7398int.gif)
![](/icons/7398int.gif)
for(i=0; i<bitCnt; i
![](/icons/7398jiajia.gif)
{
ret |= (value & 0x1) << (bitCnt - 1 - i);
value >>= 1;
}
![](/icons/7398return.gif)
}
void
![](/icons/7398main.gif)
![](/icons/7398kh.gif)
{
![](/icons/7398if.gif)
![](/icons/7398int.gif)
// input logn
fin>>logn;
// calculate n
for(i=0, n=1; i<logn; i
![](/icons/7398jiajia.gif)
// malloc memory space
pData1 =
![](/icons/7398new.gif)
pData2 =
![](/icons/7398new.gif)
// input raw data
for(i=0; i<n; i
![](/icons/7398jiajia.gif)
for(i=0; i<n; i
![](/icons/7398jiajia.gif)
// FFT transform
![](/icons/7398int.gif)
for(k=0; k<logn; k
![](/icons/7398jiajia.gif)
{
for(j=0; j<cnt; j
![](/icons/7398jiajia.gif)
{
![](/icons/7398int.gif)
double c = - 2 * PI / len;
for(i=0; i<len/2; i
![](/icons/7398jiajia.gif)
{
![](/icons/7398int.gif)
pData2[idx].re = pData1[idx].re + pData1[idx + len/2].re;
pData2[idx].im = pData1[idx].im + pData1[idx + len/2].im;
}
for(i=len/2; i<len; i
![](/icons/7398jiajia.gif)
{
double wcos = cos(c * (i - len/2));
double wsin = sin(c * (i - len/2));
![](/icons/7398int.gif)
stCompNum tmp;
tmp.re = pData1[idx - len/2].re - pData1[idx].re;
tmp.im = pData1[idx - len/2].im - pData1[idx].im;
pData2[idx].re = tmp.re * wcos - tmp.im * wsin;
pData2[idx].im = tmp.re * wsin + tmp.im * wcos;
}
}
cnt <<= 1;
stCompNum* pTmp = NULL;
pTmp = pData1;
pData1 = pData2;
pData2 = pTmp;
}
// resort
for(i=0; i<n; i
![](/icons/7398jiajia.gif)
{
![](/icons/7398int.gif)
stCompNum tmp;
![](/icons/7398if.gif)
{
tmp = pData1[i];
pData1[i] = pData1[rev];
pData1[rev] = tmp;
}
}
// output result data
for(i=0; i<n; i
![](/icons/7398jiajia.gif)
cout<<endl;
for(i=0; i<n; i
![](/icons/7398jiajia.gif)
cout<<endl;
// free memory space
delete
![](/icons/7398zhk2.gif)
delete
![](/icons/7398zhk2.gif)
fin.close
![](/icons/7398kh.gif)
system("pause");
}
输入文件data.txt
![](/icons/7398de.gif)
4
2.2 4.5 6.7 8.5 10.2 12.3 14.5 16.2 19.3 21.2 25.2 29.4 36.4 39.2 45.2 50.1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
最新评论