int main(int argc, char* argv[])
...{

unsigned int i;
CvMat* s = cvCreateMat(1,32,CV_32FC1);
CvMat* d = cvCreateMat(1,32,CV_32FC1);
CvMat* s2 = cvCreateMat(1,32,CV_32FC1);
for(i=0;i<32;i++)
cvSetReal2D(s,0,i,i);
//显示一下输入信号
for(i=0;i<32;i++)
printf("%6.2f ",cvGetReal2D(s,0,i));
printf(" ");
//DFT 离散傅立叶变换
cvDFT(s,d,CV_DXT_FORWARD); //CV_DXT_FORWARD 代表了正变换:空域-〉频域
printf("The result of DFT: ");
for(i=0;i<32;i++)
printf("%6.2f ",cvGetReal2D(d,0,i));
//DFT 离散傅立叶逆变换
cvDFT(d,s2,CV_DXT_INVERSE); //逆变换
printf(" The result of IDFT: ");
for(i=0;i<32;i++)
printf("%6.2f ",cvGetReal2D(s2,0,i));
printf(" ");
system("pause");

return 0;


}结果:
0.00 1.00 2.00 3.00 4.00 5.00 6.00 7.00 8.00 9.00
10.00 11.00 12.00 13.00 14.00 15.00 16.00 17.00 18.00 19.00
20.00 21.00 22.00 23.00 24.00 25.00 26.00 27.00 28.00 29.00
30.00 31.00
The result of DFT:
496.00 -16.00 162.45 -16.00 80.44 -16.00 52.74 -16.00 38.63 -16.00
29.93 -16.00 23.95 -16.00 19.50 -16.00 16.00 -16.00 13.13 -16.00
10.69 -16.00 8.55 -16.00 6.63 -16.00 4.85 -16.00 3.18 -16.00
1.58 -16.00
The result of IDFT:
0.00 32.00 64.00 96.00 128.00 160.00 192.00 224.00 256.00 288.00
320.00 352.00 384.00 416.00 448.00 480.00 512.00 544.00 576.00 608.00
640.00 672.00 704.00 736.00 768.00 800.00 832.00 864.00 896.00 928.00
960.00 992.00
Press any key to continue . . .
离散傅立叶变换示例
本文通过一个简单的C语言程序演示了离散傅立叶变换(DFT)及其逆变换的应用。程序首先创建了一个包含0到31的矩阵,并通过DFT转换到频域,再通过逆DFT返回时域,验证了变换的有效性。
236

被折叠的 条评论
为什么被折叠?



