赞
踩
void FFT_UIC() { u8 i; fCosU=0; fSinU=0; fCosI=0; fSinI=0; fCos=0; fSin=0; // T_ON(); memset(fft_inputbuf,0,FFT_LENGTH); memset(fft_outputbuf,0,FFT_LENGTH); for(i=0;i<FFT_LENGTH;i++)//生成信号序列 { fft_inputbuf[2*i]=ADC_3[i]; //生成输入信号实部 fft_inputbuf[2*i+1]=0;//虚部全部为0 } arm_cfft_radix2_f32(&scfft,fft_inputbuf); //FFT计算(基4) arm_cmplx_mag_f32(fft_inputbuf,fft_outputbuf,FFT_LENGTH); //把运算结果复数求模得幅值 45us fftu1=fft_outputbuf[1]/103220;/*基波有效值 vpp*/ fCosU=fft_inputbuf[2]/fft_outputbuf[1];//实部 fSinU=fft_inputbuf[3]/fft_outputbuf[1];//虚部 memset(fft_inputbuf,0,FFT_LENGTH); memset(fft_outputbuf,0,FFT_LENGTH); for(i=0;i<FFT_LENGTH;i++)//生成信号序列 { fft_inputbuf[2*i]=ADC_7[i]; //生成输入信号实部 fft_inputbuf[2*i+1]=0;//虚部全部为0 } arm_cfft_radix2_f32(&scfft,fft_inputbuf); //FFT计算(基4) arm_cmplx_mag_f32(fft_inputbuf,fft_outputbuf,FFT_LENGTH); //把运算结果复数求模得幅值 ffti1=fft_outputbuf[1]/103210;/*基波有效值 vpp*/ fCosI=fft_inputbuf[2]/fft_outputbuf[1];//实部 fSinI=fft_inputbuf[3]/fft_outputbuf[1];//虚部 fCos=fCosU*fCosI + fSinU*fSinI; fSin=fSinU*fCosI - fCosU*fSinI; SC=rms3*rms6; PC=SC*fCos; QC=SC*fSin; PFC=PC/SC; // T_OFF(); } void FFT_HRI() { u16 i; fCosU=0; fSinU=0; fCosI=0; fSinI=0; fCos=0; fSin=0; // T_ON(); memset(fft_inputbuf,0,FFT_LENGTH); memset(fft_outputbuf,0,FFT_LENGTH); for(i=0;i<FFT_LENGTH;i++)//生成信号序列 { fft_inputbuf[2*i]=ADC_9[i]; //生成输入信号实部 fft_inputbuf[2*i+1]=0;//虚部全部为0 } arm_cfft_radix2_f32(&scfft,fft_inputbuf); //FFT计算(基2) arm_cmplx_mag_f32(fft_inputbuf,fft_outputbuf,FFT_LENGTH); //把运算结果复数求模得幅值 45us fft_hria=fft_outputbuf[1]/524.626;/*基波有效值 vpp*/ memset(fft_inputbuf,0,FFT_LENGTH); memset(fft_outputbuf,0,FFT_LENGTH); for(i=0;i<FFT_LENGTH;i++)//生成信号序列 { fft_inputbuf[2*i]=ADC_10[i]; //生成输入信号实部 fft_inputbuf[2*i+1]=0;//虚部全部为0 } arm_cfft_radix2_f32(&scfft,fft_inputbuf); //FFT计算(基2) arm_cmplx_mag_f32(fft_inputbuf,fft_outputbuf,FFT_LENGTH); //把运算结果复数求模得幅值 fft_hrib=fft_outputbuf[1]/526.628;/*基波有效值 vpp*/ }
可由公式 atan2(imag, real) 得到相位值。
其中:imag为虚数值,real为实数值,atan2为求反正切值。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。