阻抗匹配

这里主要有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);
	else
	printf("=========在%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);
			else
				printf("第一种匹配方式:\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);
			else
				printf("    L1 = %.3f pH\n",ind*1e6);

				ind = Xp*1e6/w;
				if (XL == 0)
					cap = 1e6/(Xs*w);
				else
					cap = 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);
			else
				printf("第二种匹配方式:\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);
			else
				printf("    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);
				else
					cap = 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);
			else
				printf("第一种匹配方式:\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);
			else
				printf("    C1 = %.3f fF\n",cap*1e9);
				if (XL == 0)
					ind = Xp*1e6/w;
				else
					ind = 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);
			else
				printf("第二种匹配方式:\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);
			else
				printf("    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);
		else
			printf("带宽为 %g MHz\n",B);
	}
	else
		i=1;
	printf("\n=======是否继续阻抗匹配,继续请按1,退出请按任意键=========\n\n\n");
	scanf("%d",&goon);
	if(goon==1)
		i=1;
	else
		i=0;
	}
	while(i==1);
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值