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

📄 showpowersplit.java

📁 天线阵列的涉及软件
💻 JAVA
字号:
/*
 *	ShowPowerSplit 
 *
 *	Button action to read current taper and performances
 * 	Calculate transformer arm width then call the drawer to show on the screen
 *
 *	Meirong He
 *	EEE Department
 *	University of Sheffield
 *	August 2005
 */

import java.awt.*;
import java.awt.event.*;

public class ShowPowerSplit implements ActionListener {
	
	private Button button;
	private AntennaDesigner taper;
		
	public ShowPowerSplit (Button bb, AntennaDesigner tt) {	
		button=bb;
		taper=tt;
	}
	
	public void actionPerformed (ActionEvent e) {
		
		taper.screen.clear();
		
		int N=taper.N;
		int P=N, V=(int)Math.ceil(Math.log(N)/Math.log(2));
		boolean odd, lastOdd=(N%2!=0);
		double er=taper.er, L=taper.lamda/Math.sqrt(er)/4;
		double pmax=0, R0=50.0, R=30.44;  
		double h=Double.parseDouble(new String(taper.height.getText()));
		double [] 	pow=new double[N];
		double [][] p=new double[N][V];
		double [][] Z1=new double[N][V], Z2=new double[N][V];
		double [][] w1=new double[N][V], w2=new double[N][V];
						//Set up variables necessary 
		
		for (int i=0; i<N; i++) {
			pow[i]=Math.pow(Double.parseDouble(new String(taper.amp[i].getText())), 2);
			pmax=Math.max(Math.abs(pow[i]), Math.abs(pmax));
		}				//Read current modules and obtain power
		
		for (int i=0; i<N; i++) pow[i]=pow[i]/pmax;
						//Normalise current modules
	
		for(int k=0;k<V;k++) 
			for (int i=0; i<N; i++) 	p[i][k]=0;
		
		for (int k=0; k<V; k++) {
			
			odd=(P%2!=0);
			
			for(int i=0; i<P; i++) 
				if(k==0) p[i][k]=pow[i];
				else
					if(i==0) p[i][k]=p[0][k-1]+p[1][k-1];
					else if(lastOdd & i==1) p[i][k]=p[2][k-1];
					else if(lastOdd & i>1 ) p[i][k]=p[2*i-1][k-1]+p[2*i][k-1];
					else p[i][k]=p[2*i][k-1]+p[2*i+1][k-1];
					
					//Calculate	power distributions
					
			for (int i=0; i<(int)Math.ceil(P/2.0); i++)	{
				if(odd)
					if(i==0) {
						Z1[i][k]=Math.sqrt(R0*R*(1+p[1][k]/p[0][k]));
						Z2[i][k]=Math.sqrt(R0*R*(1+p[0][k]/p[1][k]));
					}
					else if(i==1) {Z1[i][k]=50; Z2[i][k]=50;}
					else {
						Z1[i][k]=Math.sqrt(R0*R*(1+p[i*2][k]/p[i*2-1][k]));
						Z2[i][k]=Math.sqrt(R0*R*(1+p[i*2-1][k]/p[i*2][k]));
					}
				else {
					Z1[i][k]=Math.sqrt(R0*R*(1+p[i*2+1][k]/p[i*2][k]));
					Z2[i][k]=Math.sqrt(R0*R*(1+p[i*2][k]/p[i*2+1][k]));
				}
				
				w1[i][k]=getWidth(er, Z1[i][k], h);
				w2[i][k]=getWidth(er, Z2[i][k], h);
				
			lastOdd=odd;	
					
			}		//Calculate are impedance and width
			
			P=(int)Math.ceil(P/2.0);
		}
		
		taper.screen.drawTransformer(Z1,Z2,w1,w2,N,V,L,R0,R);
	}
	
	public double getWidth(double er, double Z0, double h) {
		
		double e=Math.E, pi=Math.PI;
		double A=Z0*2*pi*Math.sqrt((er+1)/2.0)/377.0+(er-1)/(er+1)*(0.23+0.11/er);
		double B=377*pi/(2.0*Z0*Math.sqrt(er));
		
		double woh=8.0*Math.pow(e, A)/(Math.pow(e, 2.0*A)-2);

		if (woh > 2.0) 
			woh=2.0*(1.0/pi)*(B-1-Math.log(2*B-1)+(er-1)*(1/(er+1))*(Math.log(B-1)+0.39-0.61/er));
				
		return h*woh;
	}					//Calculation from line impedance to width
}

⌨️ 快捷键说明

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