{"title":"void DFT1(void)//2022-3-7 3000点最多340mS\n{\n u32 i,j,k,n,pll_err;//n1,n2,num_f;\n float p,q;//r,s,t,w,ut,at,ut_even,at_even,ut_odd,at_odd;\n int64_t r_s64,s_s64,t_s64,w_s64; \n //u8 DFT_UpperLimit;\n \n \n //1----------------226ms 改进后175ms 增加功能后182ms 增加Routine_Process();后212ms\n pll_err=0;\n \n \n \n p= Base_Freq;//2022-3-7(float)SAMPLE_RATE / (float)3000.0f * (float)wave_num_now;//zyz:2014-6-19\n if(p<75.0f){DFT_UpperLimit=50+1;}\n else if(p<150.0f){DFT_UpperLimit=32+1;}\n else if(p<300.0f){DFT_UpperLimit=16+1;}\n else if(p<600.0f){DFT_UpperLimit=8+1;}\n else if(p<1200.0f){DFT_UpperLimit=4+1;}\n else {DFT_UpperLimit=0;pll_err=1;goto exit_DFT;}\n \n q= DOUBLE_PI/3000;\n n=1500+1;\n //ad_num_valid_old=ad_num_valid;\n //timer_test=timer_1ms; \n for(i=0;i<n;i++)//\n {\n p=q*(float)i;\n k=3000-i;\n cos_tbl[i]=cos(p)8388608.0f; //8388608=2^23 \n cos_tbl[k]=cos_tbl[i];\n sin_tbl[i]=sin(p)8388608.0f;\n sin_tbl[k]=-sin_tbl[i];\n if((i%100)==0)//2022-3-7\n {\n Routine_Process();\n }\n }\n Routine_Process();\n \n for(i=1;i<DFT_UpperLimit;i++)\n {\n r_s64 = 0;\n s_s64 = 0;\n t_s64 = 0;\n w_s64 = 0;\n \n n=wave_num_nowi;\n for(j=0;j<ad_num_valid;j++)\n {\n k=(nj)%ad_num_valid;\n \n r_s64 += (int64_t)(ShanBian_Count3ShanBian_FFT_Buffer1[j]+ShanBian_Count4ShanBian_FFT_Buffer2[j])(int64_t)cos_tbl[k];\n s_s64 += (int64_t)(ShanBian_Count3ShanBian_FFT_Buffer1[j]+ShanBian_Count4ShanBian_FFT_Buffer2[j])(int64_t)sin_tbl[k];\n t_s64 += (int64_t)I0_FFT_AD_BUFF[j](int64_t)cos_tbl[k];\n w_s64 += (int64_t)I0_FFT_AD_BUFF[j](int64_t)sin_tbl[k];\n }\n r_s64>>=23;s_s64>>=23;\n t_s64>>=23;w_s64>>=23;\n H_u_temp[i]=(float)(r_s64r_s64+s_s64s_s64);\n H_i_temp[i]=(float)(t_s64t_s64+w_s64w_s64);\n //H_angl_u[i]=(atan2(r_s64,s_s64))*57.295779;\n //H_angl_i[i]=(atan2(t_s64,w_s64))*57.295779;\n if(i==1)\n {\n Deg_R_U0=(atan2(-s_s64,r_s64));//*57.295779f;//2022-3-7\n Deg_R_I0=(atan2(-w_s64,t_s64));//57.295779f;//2022-3-7\n }\n Routine_Process();\n }\n for(i=DFT_UpperLimit;i<51;i++)\n {\n H_u_temp[i]=0.0;\n H_i_temp[i]=0.0;\n }\n Routine_Process();\n p=(float)ad_num_valid0.70710678f/Hv_Coefficient;\n Routine_Process();\n if((H_u_temp[1]>0.0f)&&(value[v_ac]>0.0f))\n {\n H_u_temp[51]=0;\n for(i=1;i<51;i++) //\n {\n H_u_temp[51]+=H_u_temp[i];\n }\n H_u_temp[51]=sqrt(H_u_temp[51])/p;\n if(THD_standard == 0)\n {\n for(i=1;i<51;i++) //\n {\n H_u[i]=sqrt(H_u_temp[i])/p;\n H_per_u[i]=H_u[i]/H_u[1]*100.0f;\n }\n }\n else\n {\n for(i=1;i<51;i++) //\n {\n H_u[i]=sqrt(H_u_temp[i])/p; //谐波\n H_per_u[i]=H_u[i]/H_u_temp[51]*100.0f;\n }\n }\n H_u[51]=H_u_temp[51];\n H_u[0]=sqrt((fabs)(H_u[51]*H_u[51]-H_u[1]*H_u[1]));\n if(THD_standard == 0){H_per_u[0]=H_u[0]/H_u[1]*100.0f;}\n else{H_per_u[0]=H_u[0]/H_u[51]100.0f;}\n }\n else\n {\n for(i=0;i<52;i++) //\n {\n H_u[i]=0.0f;\n H_per_u[i]=0.0f;\n }\n Deg_R_U0 = 0.0;//2022-3-7\n }\n Routine_Process();\n p=(float)ad_num_valid0.70710678f/Hi_Coefficient;\n if((H_i_temp[1]>0.0f)&&(value[a_ac]>0.0f))\n {\n H_i_temp[51]=0;\n for(i=1;i<51;i++) //\n {\n H_i_temp[51]+=H_i_temp[i];\n }\n H_i_temp[51]=sqrt(H_i_temp[51])/p;\n if(THD_standard == 0)\n {\n for(i=1;i<51;i++) //\n {\n H_i[i]=sqrt(H_i_temp[i])/p;\n H_per_i[i]=H_i[i]/H_i[1]*100.0f;\n }\n }\n else\n {\n for(i=1;i<51;i++) //\n {\n H_i[i]=sqrt(H_i_temp[i])/p;\n H_per_i[i]=H_i[i]/H_i_temp[51]*100.0f;\n }\n }\n H_i[51]=H_i_temp[51];\n H_i[0]=sqrt(H_i[51]*H_i[51]-H_i[1]*H_i[1]);\n if(THD_standard == 0){H_per_i[0] = H_i[0]/H_i[1]*100.0f;}\n else {H_per_i[0] = H_i[0]/H_i[51]*100.0f;}\n }\n else\n {\n for(i=0;i<52;i++) //\n {\n H_i[i]=0.0;\n H_per_i[i]=0.0;\n }\n Deg_R_I0 = 0.0;//2022-3-7\n }\n H_u[52] = Deg_R_U0;//2022-3-7\n H_i[52] = Deg_R_I0;//2022-3-7\n Routine_Process();\n//timer_test2=timer_1ms-timer_test; //242mS\n //--------------\n //1----------------\n exit_DFT:\n \n if(pll_err==1)\n {\n for(i=0;i<52;i++) //\n {\n H_u[i]=0.0;\n H_per_u[i]=0.0;\n \n H_i[i]=0.0;\n H_per_i[i]=0.0;\n \n// Hv_Coefficient=0.0;\n// Hv_zero=0.0;\n// Hi_Coefficient=0.0;\n// Hi_zero=0.0;\n }\n// H_angl_u[0]=0.0;\n// H_angl_i[0]=0.0;\n// H_angl_u[1]=0.0;\n// H_angl_i[1]=0.0;\n// for(i=0;i<3000;i++) //\n// {\n// U0_FFT_AD_BUFF[i]=0;\n// I0_FFT_AD_BUFF[i]=0;\n// }\n }\n else//2022-3-7\n {\n if( GB17625_1_Status_Change == 0x04 )\n {\n GB17625_1_Status_Change = 0x05;\n }\n }\n wave_num_now=0,ad_num_valid=0;\n FFT_Sample_En = 2;\n value[THD_v]=H_per_u[0];\n value[THD_a]=H_per_i[0];\n time_test=TimerTicker-time_test;\n}}


原文地址: https://www.cveoy.top/t/topic/pF8U 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录