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