⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxdb.c

📁 在CCS开发工具下交流采样并实现FFT算法
💻 C
字号:
#include <math.h>
#define N  1024

#pragma DATA_SECTION(Uads,"Uad_Sample");
float Uads[8*N];
#pragma DATA_SECTION(Udft,"U_dft");
float Udft[2*N];
#pragma DATA_SECTION(Iads,"Iad_Sample");
float Iads[8*N];
#pragma DATA_SECTION(Idft,"I_dft");
float Idft[2*N];
#pragma DATA_SECTION(Uhar,"Uhar_analyse");
float Uhar[N];
#pragma DATA_SECTION(Ihar,"Ihar_analyse");
float Ihar[N];
#define pi 3.14152
float Urms=0;
float Irms=0;
float P=0,Q=0,S=0;
float PF=0,PH=0,F=0;

void main()
{
  int i=0,j=0;
  float q=2*pi/N;
  float w=0,d=0,c=0,s=0;
  float real=0,imag=0;
  float Umag=0;
  float Usum=0;
  float Isum=0;
  float Psum=0;
  float Qsum=0;
  for(i=0;i<4*N;i++)
  {
     
     Uads[2*i]=1.414*sinf(2*pi*i/N);
     Iads[2*i]=1.414*sinf(2*pi*i/N-pi/3);
     Uads[2*i+1]=0.0;
     Iads[2*i+1]=0.0;
  }
  //电压有效值
  for (i=0;i<N;i++)
  {
     Usum =Usum+Uads[2*i]*Uads[2*i];
  }
  Urms=sqrt(Usum/N);
  //电流有效值
  for (i=0;i<N;i++)
  {
    Isum =Isum+Iads[2*i]*Iads[2*i];
  }
  Irms=sqrt(Isum/N);
  //有功功率
  for (i=0;i<N;i++)
  {
    Psum=Psum+Uads[2*i]*Iads[2*i];
  }
  P=Psum/N;
  //无功功率
  for (i=0;i<N;i++)
  {
    Qsum=Qsum+Uads[2*i]*Iads[2*i+2*N/4];
  }
  Q=Qsum/N;
  //视在功功率
  S=sqrtf(P*P+Q*Q);
  //功率因数
  PF=P/S;
  //相位差
  PH=acosf(PF);
  //电压谐波分析
  for(i=0;i<N;i++)
  {
    w=i*q;
    Udft[2*i]=0.0;
    Udft[2*i+1]=0.0;
    for(j=0;j<N;j++)
    {
      d=j*w;
      c=cos(d);
      s=-sin(d);
      real=c*Uads[2*j]+s*Uads[2*j+1];
      imag=c*Uads[2*j+1]-s*Uads[2*j];
      Udft[2*i] +=real;
      Udft[2*i+1] +=imag;
    }
  }
  for(i=0;i<N;i++)
  {
    Umag=Udft[2*i]*Udft[2*i]+Udft[2*i+1]*Udft[2*i+1];
    Uhar[i]=sqrtf(Umag);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -