📄 dxdb.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 + -