FFT快速傅里叶变换在MM32F013单片上应用
[复制链接]
大家好,我现在在MM32F013用FFT快速傅里叶变换把ADC读取的混频数据进行分频处理,下面是之前别的同事写的FFT代码,因为时间久远, 且没有交接清楚,而且注释是乱码,不知道有没有网友能看懂这个部分代码呢?
#ifdef FAST_FFT
for (i = 0; i < 5; i++) //first, clear all
{
dft_temp1[i] = 0;
dft_temp2[i] = 0;
}
for (i = t_start; i < t_end; i++)
{
p = data + (i * TN); //μ??·??ò?
dft_temp1[0] += (*(p + 1) + *(p + 9) - *(p + 11) - *(p + 19));
dft_temp1[1] += (*(p + 2) + *(p + 8) - *(p + 12) - *(p + 18));
dft_temp1[2] += (*(p + 3) + *(p + 7) - *(p + 13) - *(p + 17));
dft_temp1[3] += (*(p + 4) + *(p + 6) - *(p + 14) - *(p + 16));
dft_temp1[4] += (*(p + 5) - *(p + 15)); //sin
dft_temp2[0] += (*(p + 4) + *(p + 16) - *(p + 6) - *(p + 14));
dft_temp2[1] += (*(p + 3) + *(p + 17) - *(p + 7) - *(p + 13));
dft_temp2[2] += (*(p + 2) + *(p + 18) - *(p + 8) - *(p + 12));
dft_temp2[3] += (*(p + 1) + *(p + 19) - *(p + 9) - *(p + 11));
dft_temp2[4] += (*(p + 0) - *(p + 10)); //cos
//dft_temp2[5] += *(p+15);
}
//sumim = 3164*dft_temp1[0]+6019*dft_temp1[1]+8284*dft_temp1[2]+9739*dft_temp1[3]+10240*dft_temp1[4];
//sumre = 3164*dft_temp2[0]+6019*dft_temp2[1]+8284*dft_temp2[2]+9739*dft_temp2[3]+10240*dft_temp2[4];//-dft_temp2[5];
sumim = 316 * dft_temp1[0] + 602 * dft_temp1[1] + 828 * dft_temp1[2] + 974 * dft_temp1[3] + 1024 * dft_temp1[4];
sumre = 316 * dft_temp2[0] + 602 * dft_temp2[1] + 828 * dft_temp2[2] + 974 * dft_temp2[3] + 1024 * dft_temp2[4]; //-dft_temp2[5];
#else
p = data; //+ (s16)(t_start*TN); //×¢òaμ??·??ò?
for (i = t_start * TN; i < t_end * TN; i++)
{
sumre += *(p + i) * costab[i % TN];
sumim += *(p + i) * sintab[i % TN];
}
#endif
我现在的问题是要弄清楚这部分代码的傅里叶级数,然后通过修改适当的级数来得到我想要的数据处理效果,希望有熟悉FFT快速傅里叶变换的大佬能帮忙分析解惑一下,当然也可以付费咨询,谢谢!
|