📄 fftsy.c
字号:
/*************************************************************
*文件名称:fft.c
*文件标示:
*摘 要:本文件内容为tms320lf2407 dsp快速傅立叶变换实验程序
*
*当前版本:1.0
*作 者:杨广龙
*完成日期:2005年12月12日
*
*取代版本:
*原作者 :
*完成日期:
*************************************************************/
#include "2407c.h"
#include "math.h"
#pragma DATA_SECTION(input,"ccb0");
#pragma DATA_SECTION(im,"bss");
const double sins[127]={-0.000, -0.000, -1.000, -0.000, -0.707, -1.000, -0.707, -0.000,
-0.383, -0.707, -0.924, -1.000, -0.924, -0.707, -0.383, -0.000,
-0.195, -0.383, -0.556, -0.707, -0.831, -0.924, -0.981, -1.000,
-0.981, -0.924, -0.831, -0.707, -0.556, -0.383, -0.195, -0.000,
-0.098, -0.195, -0.290, -0.383, -0.471, -0.556, -0.634, -0.707,
-0.773, -0.831, -0.882, -0.924, -0.957, -0.981, -0.995, -1.000,
-0.995, -0.981, -0.957, -0.924, -0.882, -0.831, -0.773, -0.707,
-0.634, -0.556, -0.471, -0.383, -0.290, -0.195, -0.098, -0.000,
-0.049, -0.098, -0.147, -0.195, -0.243, -0.290, -0.337, -0.383,
-0.428, -0.471, -0.514, -0.556, -0.596, -0.634, -0.672, -0.707,
-0.741, -0.773, -0.803, -0.831, -0.858, -0.882, -0.904, -0.924,
-0.942, -0.957, -0.970, -0.981, -0.989, -0.995, -0.999, -1.000,
-0.999, -0.995, -0.989, -0.981, -0.970, -0.957, -0.942, -0.924,
-0.904, -0.882, -0.858, -0.831, -0.803, -0.773, -0.741, -0.707,
-0.672, -0.634, -0.596, -0.556, -0.514, -0.471, -0.428, -0.383,
-0.337, -0.290, -0.243, -0.195, -0.147, -0.098, -0.049};
const double coss[127]={1.000, 1.000, -0.000, 1.000, 0.707, -0.000, -0.707, 1.000,
0.924, 0.707, 0.383, -0.000, -0.383, -0.707, -0.924, 1.000,
0.981, 0.924, 0.831, 0.707, 0.556, 0.383, 0.195, -0.000,
-0.195, -0.383, -0.556, -0.707, -0.831, -0.924, -0.981, 1.000,
0.995, 0.981, 0.957, 0.924, 0.882, 0.831, 0.773, 0.707,
0.634, 0.556, 0.471, 0.383, 0.290, 0.195, 0.098, -0.000,
-0.098, -0.195, -0.290, -0.383, -0.471, -0.556, -0.634, -0.707,
-0.773, -0.831, -0.882, -0.924, -0.957, -0.981, -0.995, 1.000,
0.999, 0.995, 0.989, 0.981, 0.970, 0.957, 0.942, 0.924,
0.904, 0.882, 0.858, 0.831, 0.803, 0.773, 0.741, 0.707,
0.672, 0.634, 0.596, 0.556, 0.514, 0.471, 0.428, 0.383,
0.337, 0.290, 0.243, 0.195, 0.147, 0.098, 0.049, -0.000,
-0.049, -0.098, -0.147, -0.195, -0.243, -0.290, -0.337, -0.383,
-0.428, -0.471, -0.514, -0.556, -0.596, -0.634, -0.672, -0.707,
-0.741, -0.773, -0.803, -0.831, -0.858, -0.882, -0.904, -0.924,
-0.942, -0.957, -0.970, -0.981, -0.989, -0.995, -0.999};
double re[128]={0.000, 1.706, 3.337, 4.825, 6.108, 7.137, 7.879, 8.315,
8.446, 8.292, 7.886, 7.279, 6.531, 5.712, 4.893, 4.145,
3.536, 3.121, 2.945, 3.038, 3.411, 4.057, 4.954, 6.061,
7.325, 8.682, 10.059, 11.384, 12.585, 13.596, 14.361, 14.838,
15.000, 14.838, 14.362, 13.597, 12.586, 11.385, 10.060, 8.682,
7.326, 6.062, 4.954, 4.058, 3.411, 3.038, 2.945, 3.121,
3.535, 4.145, 4.892, 5.711, 6.531, 7.279, 7.886, 8.291,
8.446, 8.315, 7.879, 7.138, 6.109, 4.826, 3.338, 1.706,
0.001, -1.705, -3.336, -4.824, -6.108, -7.137, -7.878, -8.315,
-8.446, -8.292, -7.886, -7.279, -6.532, -5.712, -4.893, -4.146,
-3.536, -3.121, -2.945, -3.038, -3.410, -4.057, -4.953, -6.061,
-7.324, -8.681,-10.059,-11.384,-12.585,-13.596,-14.361,-14.838,
-15.000,-14.838,-14.362,-13.597,-12.587,-11.386,-10.061, -8.683,
-7.326, -6.062, -4.955, -4.058, -3.411, -3.038, -2.945, -3.121,
-3.535, -4.144, -4.892, -5.711, -6.530, -7.278, -7.885, -8.291,
-8.446, -8.315, -7.879, -7.138, -6.109, -4.826, -3.339, -1.707
};
double im[128]={ 7.500, 8.896, 10.071, 10.977, 11.583, 11.874, 11.853, 11.542,
10.977, 10.211, 9.307, 8.332, 7.362, 6.466, 5.710, 5.150,
4.830, 4.775, 4.997, 5.487, 6.219, 7.153, 8.233, 9.395,
10.567, 11.676, 12.651, 13.428, 13.954, 14.187, 14.106, 13.703,
12.991, 11.998, 10.769, 9.363, 7.846, 6.291, 4.773, 3.362,
2.121, 1.104, 0.348, -0.126, -0.312, -0.225, 0.104, 0.630,
1.294, 2.029, 2.764, 3.427, 3.951, 4.275, 4.352, 4.150,
3.652, 2.860, 1.794, 0.490, -1.002, -2.619, -4.290, -5.941,
-7.499, -8.895,-10.070,-10.977,-11.583,-11.874,-11.853,-11.542,
-10.978,-10.212, -9.307, -8.333, -7.362, -6.466, -5.710, -5.150,
-4.830, -4.775, -4.997, -5.486, -6.219, -7.152, -8.233, -9.394,
-10.566,-11.675,-12.651,-13.428,-13.953,-14.187,-14.106,-13.703,
-12.991,-11.998,-10.770, -9.364, -7.847, -6.292, -4.774, -3.362,
-2.122, -1.104, -0.348, 0.125, 0.312, 0.225, -0.104, -0.630,
-1.293, -2.029, -2.764, -3.427, -3.950, -4.275, -4.352, -4.150,
-3.653, -2.861, -1.795, -0.490, 1.001, 2.618, 4.289, 5.940
};
double XT,YT,S[128];
double actep, bctep, bcarg, aw, bw;
double atemp, btemp;
void inline disable()
{ asm(" setc INTM");}
void initial()
{ asm(" setc SXM");
asm(" clrc OVM");
asm(" clrc CNF");
*SCSR1=0x80FE;//4倍频
*WDCR=0x0E8;
WSGR=0x0000;
*IMR=0x0021;
*IFR=0x0FFFF;
}
void TIMEINT()
{
*T1CNT=0X0000;
*T1CON=0X100C; //1分频,连续增计数
*T1PR=0X186a;
*GPTCONA=0X08100; //timer1周期触发
*EVAIFRA=*EVAIFRA&0X0080;
*EVAIMRA=*EVAIMRA|0x0080;
}
void interrupt nothing()
{ return;
}
void myfft()
{
int j, ij, m, l, istep,kk=0;
j = 0;
for (ij=0; ij<=128-1; ij++)
{
if (ij <= j)
{
actep = re[j]*0.0883883; // 0.0883883 =sqrt(1.0 / 128);
bctep = im[j]*0.0883883;
re[j] = re[ij]*0.0883883;
im[j] = im[ij]*0.0883883;
re[ij] = actep;
im[ij] = bctep;
}
m = 64;// 128/2
do
{
if ((j+1)<=m)
break;
j = j - m;
m = m/2;
}
while (m>=1);
j = j + m;
}
l = 1;
do
{
istep = 2 * l;
for (m=1; m<=l; m++)
{
aw = coss[kk];
bw = sins[kk];
kk++;
for (ij=m-1; ij<=127; ij=ij+istep)
{
atemp = aw * re[ij+l] - bw * im[ij+l];
btemp = aw * im[ij+l] + bw * re[ij+l];
re[ij+l] = re[ij] - atemp;
im[ij+l] = im[ij] - btemp;
re[ij] = re[ij] + atemp;
im[ij] = im[ij] + btemp;
}
}
l = istep;
}
while( l < 128 );
kk=0;
}
main()
{
int i;
disable();
initial();
TIMEINT();
myfft();
for(i=0;i<128;i++)
{
S[i]=sqrt(re[i]*re[i]+im[i]*im[i]);
}
puts("the end") ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -