fft计算P.Q.PF


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为求反正切值。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值