#include "math.H"
/***********************************************/
蝶形图表
/***********************************************/
const float cos_tab[16] =
{
1, //0
0.9238795,//1
0.7071068,//2
0.3826834,//3
0, //4
-0.382683,//5
-0.707107,//6
-0.923880,//7
-1, //8
-0.923880,//9
-0.707107,//10
-0.382683,//11
0, //12
0.3826834,//13
0.7071068,//14
0.9238795,//15
};
const float sin_tab[16] =
{
0, //0
0.3826834,//1
0.7071068,//2
0.9238795,//3
1, //4
0.9238795,//5
0.7071068,//6
0.3826834,//7
0, //8
-0.382683,//9
-0.707107,//10
-0.923880,//11
-1, //12
-0.923880,//13
-0.707107,//14
-0.382683,//15
};
/**********************************************/
/***********************************************************************************/
//void DFT(void) 傅立叶变换函数 dft_over[]为全局变量 为定时采样的原始数据
/*struct DFT_RESULT
{
double an;
double bn;
double angle;
double mag;
};
struct DFT_RESULT dft_over[2];
struct DFT_RESULT ad_result[2][N];
*/
/***********************************************************************************
void DFT(void)
{
unsigned char i,j;
for (i=0;i<2;i++)
{
dft_over[i].an = 0;
dft_over[i].bn = 0;
}
for (i=0;i<2;i++)
{
for (j=0;j<16;j++)
{
dft_over[i].an = dft_over[i].an + (ad_result[i][j] * cos_tab[j]);
dft_over[i].bn = dft_over[i].bn + (ad_result[i][j] * sin_tab[j]);
}
dft_over[i].an = 0.125 * dft_over[i].an;
dft_over[i].bn = (-0.125) * dft_over[i].bn;
dft_over[i].mag = sqrt(dft_over[i].an * dft_over[i].an + dft_over[i].bn * dft_over[i].bn)*COR_M[i]/100;
}
}