阻抗匹配
这里主要有L型匹配和PI型匹配两种
#include <math.h>
#include <stdio.h>
#include<stdlib.h>
void main()
{double RL,XL,Q,Rs;double Q1,Q2,Qe,L1,L2,L3,XL1,XL2,B,Ri,XC1,XC2,C1,C2,C;double Freq,w,Xs,Xp,ind,cap;int i=1,goon=1,select;do{i=0;printf("请输入工作频率(MHz) Frequency = ");scanf("%lf",&Freq);printf(" 请输入源阻抗 Rs = ");scanf("%lf",&Rs);printf(" 输入实部 Real(Z) = ");scanf("%lf",&RL);printf(" 输入虚部 Imag(Z) = ");scanf("%lf",&XL);if(XL > 0)printf("=========在%g Hz下,需要进行匹配的阻抗为%g + j*%g\n\n",Freq,RL,XL);elseprintf("=========在%g Hz下,需要进行匹配的阻抗为%g - j*%g\n\n",Freq,RL,-XL);printf(" L型匹配请按-------1 PI型匹配请按-------2\n Input: ");scanf("%d",&select);if(select==1){if(RL < Rs){Q = sqrt(Rs/RL-1);Xs = Q * RL;Xp = Rs/Q;w = 2*3.1416*Freq*1e6;ind = Xs*1e6/w-XL*1e6/w;cap = 1e6/(Xp*w);printf("\n\n ******先并后串******* \n");if(cap >= 1)printf("第一种匹配方式:\n----C1 = %.3f uF",cap);else if(cap*1e3 > 1)printf("第一种匹配方式:\n----C1 = %.3f nF",cap*1e3);else if(cap*1e6 > 1)printf("第一种匹配方式:\n----C1 = %.3f pF",cap*1e6);elseprintf("第一种匹配方式:\n----C1 = %.3f fF",cap*1e9);if(ind >= 1)printf(" L1 = %.3f uH\n",ind);else if(ind*1e3 > 1)printf(" L1 = %.3f nH\n",ind*1e3);elseprintf(" L1 = %.3f pH\n",ind*1e6);ind = Xp*1e6/w;if (XL == 0)cap = 1e6/(Xs*w);elsecap = 1/(1/(1e6/(Xs*w))+1/(1e6/(XL*w)));if(ind >= 1)printf("第二种匹配方式:\n----L1 = %.3f uH",ind);else if(ind*1e3 > 1)printf("第二种匹配方式:\n----L1 = %.3f nH",ind*1e3);elseprintf("第二种匹配方式:\n----L1 = %.3f pH",ind*1e6);if(cap >= 1)printf(" C1 = %.3f uF\n",cap);else if(cap*1e3 > 1)printf(" C1 = %.3f nF\n",cap*1e3);else if(cap*1e6 > 1)printf(" C1 = %.3f pF\n",cap*1e6);elseprintf(" C1 = %.3f fF\n",cap*1e9);}else{Q = XL/RL;RL = RL*(1+Q*Q);XL = XL*(1+1/(Q*Q));Q = sqrt(RL/Rs-1);Xs = Q * Rs;Xp = RL/Q;w = 2*3.1416*Freq*1e6;ind = Xs*1e6/w;if (XL == 0)cap = 1e6/(Xp*w);elsecap = 1e6/(Xp*w)+1e6/(XL*w);printf("\n\n --------先串后并--------\n");if(ind >= 1)printf("第一种匹配方式:\n----L1 = %.3f uH",ind);else if(ind*1e3 > 1)printf("第一种匹配方式:\n----L1 = %.3f nH",ind*1e3);elseprintf("第一种匹配方式:\n----L1 = %.3f pH",ind*1e6);if(cap >= 1)printf(" C1 = %.3f uF\n",cap);else if(cap*1e3 > 1)printf(" C1 = %.3f nF\n",cap*1e3);else if(cap*1e6 > 1)printf(" C1 = %.3f pF\n",cap*1e6);elseprintf(" C1 = %.3f fF\n",cap*1e9);if (XL == 0)ind = Xp*1e6/w;elseind = 1/(1/(Xp*1e6/w)-1/(XL*1e6/w));cap = 1e6/(Xs*w);if(cap >= 1)printf("第二种匹配方式:\n----C1 = %.3f uF",cap);else if(cap*1e3 > 1)printf("第二种匹配方式:\n----C1 = %.3f nF",cap*1e3);else if(cap*1e6 > 1)printf("第二种匹配方式:\n----C1 = %.3f pF",cap*1e6);elseprintf("第二种匹配方式:\n----C1 = %.3f fF",cap*1e9);if(ind >= 1)printf(" L1 = %.3f uH\n",ind);else if(ind*1e3 > 1)printf(" L1 = %.3f nH\n",ind*1e3);elseprintf(" L1 = %.3f pH\n",ind*1e6);}}else if(select==2){XL=0-XL;printf("====该匹配需要确定 Q= ");scanf("%lf",&Qe);Q2=2*Qe;Ri=(RL/(1+Q2*Q2));XL2=RL/Q2;XC2=Q2*Ri;Q1=sqrt((50/Ri)-1);XL1=50/Q1;XC1=Q1*Ri;w=2*3.14159*Freq*1E6;C1=1/(w*XC1);C2=1/(w*XC2);C=(C1*C2)/(C1+C2);L1=XL1/w;L2=XL2/w;L3=XL/w;B=Freq/Q2;printf("*************在%g MHz下,匹配的样式如下:并L1,串C,并L2,串L3\n",Freq);if((L1 >= 1E-6)&&(L1 <= 1E-3))printf("==========先并联电感L1为 %.2f uH",L1*1E6);if((L1 >= 1E-9)&&(L1 <= 1E-6))printf("==========先并联电感L1为 %.2f nH",L1*1E9);if((L1 >= 1E-12)&&(L1 <= 1E-9))printf("==========先并联电感L1为 %.2f pH",L1*1E12);if((C >= 1E-6)&&(C <= 1E-3))printf("再串联电容C为 %.2f uF\n",C*1E6);if((C >= 1E-9)&&(C <= 1E-6))printf("再串联电容C为 %.2f nF\n",C*1E9);if((C >= 1E-12)&&(C <= 1E-9))printf("再串联电容C为 %.2f pF\n",C*1E12);if((C >= 1E-15)&&(C <= 1E-12))printf("再串联电容C为 %.2f fF\n",C*1E15); if((L2 >= 1E-6)&&(L2 <= 1E-3))printf("==========然后并联电感L2为 %.2f uH",L2*1E6);if((L2 >= 1E-9)&&(L2 <= 1E-6))printf("==========然后并联电感L2为 %.2f nH",L2*1E9);if((L2 >= 1E-12)&&(L2 <= 1E-9))printf("==========然后并联电感L2为 %.2f pH",L2*1E12);if((L3 >= 1E-6)&&(L3 <= 1E-3))printf("最后串联电感L3为 %.2f uH\n",L3*1E6);if((L3 >= 1E-9)&&(L3 <= 1E-6))printf("最后串联电感L3为 %.2f nH\n",L3*1E9);if((L3 >= 1E-12)&&(L3 <= 1E-9))printf("最后串联电感L3为 %g.2f pH\n",L3*1E12); if((B >= 1E-3)&&(B <= 1))printf("带宽为 %g MHz\n",B*1E3);elseprintf("带宽为 %g MHz\n",B);}elsei=1;printf("\n=======是否继续阻抗匹配,继续请按1,退出请按任意键=========\n\n\n");scanf("%d",&goon);if(goon==1)i=1;elsei=0;}while(i==1);
}