资源简介
利用FFT计算电压有效值的C语言例程,FFT_C.C 为vc++编写的C代码。
代码片段和文件信息
想用FFT算法计算电压的有效值。试验用数据由Ui=1024*[1+sin(2*i*PI/N)](i=0,1,...N-1)得到理想的32点数值,存入数组data[32].Re中,而data[32].Im=0。对data[]逆序排列后,进行FFT运算,预想结果是:预想的运算结果data[]的实部之和应为AD_full的值,虚部之和为0 。但是以下程序运行结果data[]的实部之和为0。查了多半天,没有找到原因,头都大了。请大家帮忙看看,错在哪里。谢谢!*/
/*test_data(float u_test[])和revers_order(struct complx A[])经验证没有问题,错误很可能在FFT()中。*/
#define PI 3.141593
#define AD_full 1024
#define N 32
#include
#include
struct complx
{
double Re;
double Im;
};
void test_data(float u_test[]);/*产生32个理想的电压数据点*/
void FFT(struct complx A[]);
/*对复数进行FFT运算,A[]的实部为电压,虚部为0。预想的运算结果A[]的实部之和应为AD_full的值,虚部之和为0 */
void revers_order(struct complx A[]); /* 按照数组下标的二进制逆序重新排列数据*/
main()
{
int i;
struct complx data[N];
float sum_data=0.0u_test[N]re_test[N]im_test[N]sum_re=0.0sum_im=0.0;
test_data(u_test);
printf(“\ntest_data are:\n“);
for(i=0;i {
data[i].Re=u_test[i];
data[i].Im=0.0;
sum_data=sum_data+data[i].Re*data[i].Re;
printf(“d[%2d].Re=%f d[%2d].Im=%1.1f\n “idata[i].Reidata[i].Im);
}
getch();
revers_order(data);
printf(“\ntest revers data are:\n“);
for(i=0;i {
printf(“d[%2d].Re=%f d[%2d].Im=%1.1f “idata[i].Reidata[i].Im);
if((i+1)%2==0) printf(“\n“);
}
getch();
FFT(data);
printf(“\ntest FFT data are:\n“);
for(i=0;i {
sum_re=sum_re+data[i].Re;
sum_im=sum_im+data[i].Im;
printf(“d[%2d].Re=%f d[%2d].Im=%f “idata[i].Reidata[i].Im);
if((i+1)%2==0) printf(“\n“);
}
printf(“\n\nsum_re=%fsum_im=%fdata_sum=%f“sum_resum_imsqrt(sum_data/N));
getch();
}
void FFT(struct complx A[])
{
struct complx UWT;
int LELE1IJIP;
int M=5;
double temp;
i
- 上一篇:回溯算法实现5皇后问题
- 下一篇:electric-fence 源码
评论
共有 条评论