【英飞凌PSoC 6 RTT开发板试用】信号处理前端之谐波分析

描述

3.1 电能质量,谐波分析

添加命令行

在电能检测应用中,电能质量一项分析即谐波分析,谐波分量大,说明电能质量不好,

基于本板信号处理前端也实现了该功能。

shell_fun.h中

void FftFun(void* param);

shell_fun.c中

#include "fft.h"

shell_cmd_list中添加一行

{ (const uint8_t*)"fft",         FftFun,           "fft"},                 /*打印帮助信息*/

添加命令执行函数

void FftFun(void* param)

{

fft_main();

}

添加实现

Fft.c

#include "arm_math.h"
#include "arm_const_structs.h"
#include < stdio.h >

#define TEST_LENGTH_SAMPLES 2048

extern float32_t testInput_f32_10khz[TEST_LENGTH_SAMPLES];
static float32_t testOutput[TEST_LENGTH_SAMPLES/2];


static uint32_t fftSize = 1024;
static uint32_t ifftFlag = 0;
static uint32_t doBitReverse = 1;
static arm_cfft_instance_f32 varInstCfftF32;

static int testIndex = 0;

static float testtmp_f32_10khz[2048];
static int32_t adcbuffer[2048];

int32_t fft_main(void)
{

  arm_status status;
  float32_t maxValue;

  status = ARM_MATH_SUCCESS;

  status=arm_cfft_init_f32(&varInstCfftF32,fftSize);

  //memcpy(testtmp_f32_10khz,testInput_f32_10khz,sizeof(testInput_f32_10khz));
  adc_samp(adcbuffer,2048);
  for(int i=0; i< 2048;i ++)
  {
	  testtmp_f32_10khz[i] = (float)adcbuffer[i];
  }
  arm_cfft_f32(&varInstCfftF32, testtmp_f32_10khz, ifftFlag, doBitReverse);

  arm_cmplx_mag_f32(testtmp_f32_10khz, testOutput, fftSize);

  /* Calculates maxValue and returns corresponding BIN value */
  arm_max_f32(testOutput, fftSize, &maxValue, &testIndex);

  int32_t out = 0;

  for(int i=0; i< TEST_LENGTH_SAMPLES; i++)
  {
	  if(i >TEST_LENGTH_SAMPLES/2)
	  {
		  out = testOutput[i-TEST_LENGTH_SAMPLES/2]/1024;
	  }
	  else
	  {
		  out = testOutput[i]/1024;
	  }
      printf("/*%ld,%ld*/rn", adcbuffer[i],out);
  }

}

 /** endlink */

Fft.h

#ifndef FFT_H
#define FFT_H

int fft_main(void);

#endif

测试

看到分析如下,前面是模拟输入,后面是谐波分析结果

开发板

详见视频和工程源码

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分