gabor滤波代码(无源滤波器设计软件)

无源滤波器通用程序设计

一、设计任务:

按照一般设计无源滤波器原理,编写一个滤波器设计的通用程序。

二、程序描述:

gabor滤波代码(无源滤波器设计软件)

给定电网的基本参数、谐波电源各次谐波电流的大小、谐次、电压含有率、

等设计所需参数,能够输出所需要的滤波器各元件的参数,为工程进一步选择合适的滤波器元件提供指导。

三、设计算例:

电网运行线电压35kV,相电压U1==20kV,电网运行最高相电压U1M= 21.2kV ,相电压基波角频率W1=2*Pi*50=314.16 ,奇次谐波电压含有率Hurh=2..4%,I3h=60A, I5h= 50A,I7h=40A, I9h= 30A,I11 h=20A, I13h= 40A,I15h=10A, I17h=10A ,I19h=8A,截止频率h0=8,主要滤波频率hm=13, 单调滤波器品质因数q都取为40,供电点总的无功补偿需求Q=0.5Mvar。

在程序输入电流的时候单位是千安。

四、程序内容:

#include<stdio.h>

#include<math.h>

#include<string.h>

voidmain() /*滤波器设计主程序*/

{ doubledanlvbo(float U1 ,float U1m ,floatW1 ,int k);

/*单调滤波器设计程序函数声明*/

void gtlvbo(float U1 ,float U1m ,float W1,float Q,float sum);/*高通滤波器设计程序函数声明*/

floatU1,U1m,Q,W1;

floatQ1h,sum=0;

int flag=1;

int k=0;

printf(“请输入电网原始参数:\n\n母线电压U1,母线运行最高电压U1m,电网基准角频率W1,设计点总的基波无功补偿需求Q\n”); /*输入电网原始参数*/

scanf_s(“%f%f%f%f”,&U1,&U1m,&W1,&Q);

while(flag==1)

{ Q1h=danlvbo(U1,U1m,W1,k);

sum=Q1h sum; /*求取单调滤波器补偿的总的无功*/

k=k 1;

printf(“\n已设完第%d次谐波器\n是否要继续1=YES,0=NO(1/0)?\n”,k);

scanf_s(“%d”,&flag);

}

gtlvbo(U1,U1m,W1,Q,sum);

}

float danlvbo(floatU1,float U1m,floatW1,int k)/*单调滤波器设计子程序*/

{ float Ih,Hurh,q;

floatUc1,Uch,QL,QR,Ucn,Ucns,Q1h,Qcn,Qcn1,Qcn2,Qcn3;

float max,C,R;

double L;

int h;

printf(“请输入第%d单调谐波设计参数:\n谐波电流大小Ih谐波次数h,电压含有率指标Hurh,滤波器品质因素q\n”,k 1);

scanf_s(“%f%d%f%f”,&Ih,&h,&Hurh,&q);

Uc1=h*h*U1m/(h*h-1);/*求取电容器额定电压Ucn*/

Uch=Hurh*U1*q;

Ucn=(Uc1 Uch)/1.1;

printf(“Ucn=%f,请根据实际电容器规格及串并联情况选择Ucn\n”,Ucn);

printf(“请输入选择的电容的额定电压Ucns\n”);

scanf_s(“%f”,&Ucns);

Qcn1=3*Ucns*Ucns*Ih/(Hurh*q*h*U1);/*按电压要求求取电容器额定容量Qcn*/

Qcn2=3*Ih*Ucns*Ucns/sqrt(h*(Ucns*Ucns-Uc1*Uc1));/*按容量平衡要求求取电容器额定容量Qcn*/

Qcn3=3*Ih*Ucns*Ucns/sqrt(1.69*Ucns*Ucns-Uc1*Uc1);/*按不过流要求求取电容器额定容量Qcn*/

max=Qcn1;

if(max<Qcn2)

max=Qcn2;/*find the max vualue of Qcn*/

if(max<Qcn3)

max=Qcn3;

Qcn=max;/*选取三者之间的最大值作为额定容量*/

C=Qcn*1000/(3*W1*Ucns*Ucns);/*以下求取所要参数 C R L 提供基波无功 Q,元件容量*/

L=Qcn*1000/(3*W1*h*h*Ucns*Ucns);

QL=W1*C*U1*W1*C*U1/(1000*(W1*C Ih*Ih*h*W1*L)); /*求取电抗器的容量,电压工频下主要降落在电容上*/

R=1000/(h*W1*C*q);

QR=(W1*C*U1)*(W1*C*U1)/1000000*R Ih*Ih*h*R;/*求取单调等值电阻容量*/

Q1h=3*h*h*U1*W1*C/(1000*(h*h-1)); /*求取其提供的基波无功*/

printf(“本次单调滤波器参数的设计参数如下;\n”); /*输出当次单调谐波设计结果*/

printf(“谐波次数h=%d次,电阻R=%f欧,电感L=%emH,电容C=%emF\n\n电容额定电压Ucn=%fkV,电容额定容量Qcn=%fMvar,电感容量QL=%fMvar”,h,R,L,C,Ucns,Qcn,QL);

return(Q1h);

}

voidgtlvbo(float U1 ,float U1m,float W1,float Q,float sum )

/*高通滤波器设计程序*/

{ floatUcn,Ucns,Ih,Hurh,Hurh1,Q1h,Qcn,Qr,Ql;

float a[15],g[15],H[15];

floatmax,Xc1,j,f,f1,x,x0,x1,x2,Xl1,R,L,C,Ir,Il,h0,hm,s,z;

inti,h,n,t,m=0,k=0,flag=1;

Q1h=Q-sum; /*以下为求取Q1h*/

printf(“需要高通滤波器提供的无功Q1h=%f\n”,Q1h);

printf(“请输入高通滤波器要滤掉的不同谐次电流的最小电压含有率\n”);

scanf_s(“%f”,&Hurh);

while(flag==1)

{printf(“输入高通谐波电流谐次h及其电流大小Ih\n”);

scanf_s(“%d%f”,&h,&Ih);

Hurh1=3*Ih*U1/(h*Q1h);

a[k]=Hurh1;/*数组a来存储电压含有率*/

g[k]=Ih; /*数组a来存储电压含有率*/

H[k]=h;

k=k 1;

printf(“谐波电流还有谐次h与Ih需要输入?请输入(1/0)\n”);

scanf_s(“%d”,&flag);

}

max=a[0];

for(i=0;i<k;i )

if(max<a[i])max=a[i];

if(Hurh>max)

{ Hurh=max;

Q1h=3*Ih*U1/(h*Hurh);

printf(“已将Q1h增大以满足设计要求\n”);

}

else

printf(“第一次计算所得的Q1h合理,满足设计要求\n”); /*得到合理的Q1h值*/

Xc1=3*U1*U1/Q1h; /*求取Xc1*/

for (n=0;n<k;n )

sum=sum g[n]*Xc1/H[n];

Ucn=(U1m sum)/1.1;

printf(“计算Ucn的结果是%f,请根据实际电容器规格及串并联情况就近选择电容的额定电压\n”,Ucn);

printf(“请输入选择的电容的额定电压Ucns\n”);

scanf_s(“%f”,&Ucns);

Qcn=Q1h*Ucns*Ucns/(U1*U1); /*得到Qcn与Ucn*/

printf(“请输入截止频率与主要滤波频率的谐次h0,hm\n”); /*以下为利用牛顿迭代法求取x即m的值*/

scanf_s(“%f%f”,&h0,&hm);

j=hm/h0;

printf(“j=%f\n”,j);

x1=1.0;

do

{x0=x1;

f=j*j*x0*(1 2*x0-x0*x0)-x0-sqrt(1 2*x0);

f1=j*j*(1 4*x0-3*x0*x0)-1-1/sqrt(1 2*x0);

x1=x0-f/f1;}while(fabs(x1-x0)>=1e-8);

printf(“m1=%f\n”,x1);

x2=1.5;

do

{x0=x2;

f=j*j*x0*(1 2*x0-x0*x0)-x0-sqrt(1 2*x0);

f1=j*j*(1 4*x0-3*x0*x0)-1-1/sqrt(1 2*x0);

x2=x0-f/f1;}while(fabs(x2-x0)>=1e-8);

printf(“m2=%f\n”,x2);

printf(“请根据实际情况选择m的值,请输入(1/2)选择,1=m1;2= m2。\n”);

scanf(“%d”,&flag);

if(flag==1)

x=x1;

else

x=x2;

printf(“m=%f”,x);

Xl1=x*Xc1/(h0*h0);

R=Xc1/h0;/*求取高通电阻R*/

C=1000/(W1*Xc1); /*求取高通电容C*/

L=Xl1/W1; /*求取高通电感L*/

s=1000*W1*L*U1/(Xc1*(W1*L R)); /*设基波电流分流大小为初值*/

s=s*s;

z=1000*R*U1/(Xc1*(W1*L R));

/*公式做这样处理,是为了修正非 float 的数据丢失问题*/

z=z*z;

for(t=0;t<k;t )/*以下为利用分流公式来求取电流及容量*/

{

s=s 1000000*g[t]*g[t]*H[t]*H[t]*x*x/(h0*h0 H[t]*H[t]*x*x);

z=z 1000000*g[t]*g[t]*h0*h0/(h0*h0 H[t]*H[t]*x*x);

}

Ir=sqrt(s);

Qr=Ir*Ir*R/1000000; /*求取等效电阻的功率*/

Il=sqrt(z);

Ql=Il*Il*W1*L/1000000; /*求取电感的容量*/

printf(“高通滤波器参数的设计参数如下:\n “); /*输出高通滤波器设计结果*/

printf(“\n电阻R=%f欧,电感L=%eL,电容C=%emF,\n电容额定电压Ucns=%fkV,电容额定容量Qcn=%fMvar,电感容量Ql=%fMvar,电阻容量Qr=%fMvar\n”,R,L,C,Ucns,Qcn,Ql,Qr);

}

五、算例设计结果:

滤波器类型

谐次h

等效电阻R

电感L

电容C

Ucn

Qc

电感容量Ql

电阻容量 Qr

单调

3

6.42欧

40kV

6.23Mvar

0.519Mvar

单调

5

4.42欧

38kV

4.90Mvar

0.452Mvar

单调

7

3.96欧

38kV

3.90Mvar

0.360Mvar

高通

9

523.4欧

58kV

2.4Mvar

0.062Mvar

0.437 Mvar

11

13

15

17

19

发表评论

登录后才能评论