This web page is also available on English. Your browser is configured to use English as the default locale. Would you like to view this page in English? • Yes pleaseNo, thanks

Centro de Scripts y Funciones de Usuario

Función para el diseño de una bocina corrugada que depende de sus frecuencias de operación

La siguiente función genera genera una bocina cónica corrugada.

Los parámetros de entrada son las frecuencias mínimas y máximas de funcionamiento. El resultado es un script que genera una bocina corrugada que funciona entre las frecuencias establecidas.

El usuario también puede cambiar el tipo de perfil de la bocina. La función tiene 7 perfiles diferentes, aunque el usuario puede establecer sus propios perfiles. Las variables a tener en cuenta son:

profile_index = n; donde 'n' es el numero del perfil de entre los siguientes disponibles:

1 - Perfil lineal

2 - Perfil sinusoidal

3 - Perfil tangencial

4 - Perfil del tipo x^rho

5 - Perfil exponencial

6 - Perfil hiperbólico

7 - Perfil polinomial

A: Entre 0 (lineal) y 1; Afecta a los perfiles 2,3 y 4 y establece el grado de curvatura que tomarán los perfiles

Rho: Parámetro que afecta a los perfiles 2,3,4 y 7; Normalmente vale 2 aunque puede tomar valores entre 0,5 y 5

Thumb linear Thumb sinusoid Thumb tangential Thumb x exp rho Thumb exponential Thumb hyperbolic Thumb polynomial
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter; 

	// 'fmin' and 'fmax' are the lowest and the highest operating frequencies (GHz)

void corrugated_horn(double fmin, double fmax) {

// Number of slots in the mode converter
	int Nmc = 5; // tipically between 5 and 7

// Parameters that can be modified
	double L = 6;	// Horn length; depend of the aplicacion -- usually chosen between 5*lambda_c to 10*lambda_c
	double Lg = 3.5; // Length of waveguide (x*lambda_c)
	double ao = 1.95; // output radius -- usually 1*lambda_c to 2.5*lambda_c
	double p = 0.125; // slot pitch -- usually chosen between lambda_c/10 (broadband) and lambda_c/5 (narrowband)
	double delta = 0.8; // Slot pitch-to-width ratio; normally between 0.7 and 0.9
	double d = 0.25; // Depth of the slots, normally lambda_c/4


// Profile type parameters
	int profile_index = 1; // 1 - linear ; 2 - sinusoid ; 3 - tangential ; 4 - x^rho ; 5 - exponential ; 6 - hyperbolic ; 7 - polynomial
	double A = 0.9; // between 0 and 1; affects only 2,3 and 4 profiles
	double rho = 2; // usually between 0.5 and 5 but normally rho=2

// Name of generated script
	String ScriptName ="script_corrugated_horn";


// Mode converter parameters
	double[] dj=new double[Nmc];
	double sigma = 0.5;
	double kcaj = 20;
	double k = Math.exp(1/(2.114*Math.pow(kcaj,1.134)));

	double fc = Math.sqrt(fmin*fmax); // Center frequency
	double f0 = 1.02*fc;
	double lambda_c  = 300/fc; // Center frequency wavelength
	double ai  = (3*lambda_c)/(2*PI); // input radius (mm)
	ao  = ao*lambda_c;  // output radius (mm) -- usually 1*lambda_c to 2.5*lambda_c
	p  = lambda_c*p; // slot pitch -- usually chosen between lambda_c/10 (broadband) and lambda_c/5 (narrowband)
	double w  = delta*p; // Slot width
	double a  = p-w; // Teeth width
	L = L*lambda_c; // Horn length; depend of the aplicacion -- usually chosen between 5*lambda_c to 10*lambda_c
	double N = Math.ceil(L/p+1); // Total number of slots
	Lg = Lg*(300/fmin); // Length of waveguide

	double[] az=new double[N+1];

	d = lambda_c*d; // Depth of the slots

	int i, j;

	String EOL = "\r\n";
	String separator ="\t";

	BufferedWriter bw = null;
        try {
            bw = new BufferedWriter(new FileWriter("./mydatafiles/" + ScriptName + ".nfs"));

		bw.write("#" + EOL);
		bw.write("#	 newFASANT script file" + EOL);
		bw.write("#" + EOL);

	// Corrugated surface profile formulations
		if(profile_index==1) { // z=i*p
			for(i=0;i<=N;i++) { // linear
				az[i]=ai+(ao-ai)*(i*p/L); 
			}
		} else if(profile_index==2) { // sinusoid
			for(i=0;i<=N;i++) {
				az[i]=ai+(ao-ai)*((1-A)*i*p/L+A*Math.pow(Math.sin(Math.PI*i*p/(2*L)),rho));  
			}
		} else if(profile_index==3) { // tangential
			for(i=0;i<=N;i++) {
				az[i]=ai+(ao-ai)*((1-A)*i*p/L+A*Math.pow(Math.tan(Math.PI*i*p/(4*L)),rho));  
			}
		} else if(profile_index==4) { // x^rho
			for(i=0;i<=N;i++) {
				az[i]=ai+(ao-ai)*((1-A)*i*p/L+A*Math.pow(i*p/(L),rho));  
			}
		} else if(profile_index==5) { // Exponential
			for(i=0;i<=N;i++) {
				az[i]=ai*Math.exp(Math.log(ao/ai)*i*p/L);  
			}
		} else if(profile_index==6) { // Hyperbolic
			for(i=0;i<=N;i++) {
				az[i]=Math.sqrt(Math.pow(ai,2)+(Math.pow(i*p,2)*(Math.pow(ao,2)-Math.pow(ai,2)))/(Math.pow(L,2)));  
			}
		} else if(profile_index==7) { // Polynomial
			for(i=0;i<=N;i++) {
				az[i]=ai+(rho+1)*(ao-ai)*(1-(rho*i*p)/((rho+1)*L))*Math.pow(i*p/L,rho);  
			}
		} else if(profile_index==8) { // User profile 1
			for(i=0;i<=N;i++) {
				az[i]= 0;  
			}
		} else if(profile_index==9) { // User profile 2
			for(i=0;i<=N;i++) {
				az[i]= 0;  
			}
		} else if (profile_index<1 || profile_index>9) {
			for(i=0;i<=N;i++) { // linear
				az[i]=ai+(ao-ai)*(i*p/L); 
			}
		}

	// Mode converter
		for(i=0;i<Nmc;i++) { 
			
			dj[i] = (sigma-((1.0*i/Nmc)*(sigma-0.25*k)))*lambda_c;

			bw.write("line -n line" + (i+100000) + " -p " + az[i] + " 0.0 " + (p*i) + " " + (az[i]+dj[i]) + " 0.0 " + (p*i) + EOL);
			bw.write("line -n line" + (i+200000) + " -p " + (az[i]+dj[i]) + " 0.0 " + (p*i) + " " + (az[i]+dj[i]) + " 0.0 " + (p*i+w) + EOL);
			bw.write("line -n line" + (i+300000) + " -p " + (az[i]+dj[i]) + " 0.0 " + (p*i+w) + " " + (az[i+1]) + " 0.0 " + (p*i+w) + EOL);
			bw.write("line -n line" + (i+400000) + " -p " + (az[i+1]) + " 0.0 " + (p*i+w) + " " + (az[i+1]) + " 0.0 " + (p*i+w+a) + EOL);
			
		}

	// Corrugated horn
		for(i=Nmc;i<N-1;i++) {

			bw.write("line -n line" + (4*i) + " -p " + az[i] + " 0.0 " + (p*i) + " " + (az[i]+d) + " 0.0 " + (p*i) + EOL);
			bw.write("line -n line" + (4*i+1) + " -p " + (az[i]+d) + " 0.0 " + (p*i) + " " + (az[i]+d) + " 0.0 " + (p*i+w) + EOL);
			bw.write("line -n line" + (4*i+2) + " -p " + (az[i]+d) + " 0.0 " + (p*i+w) + " " + (az[i+1]) + " 0.0 " + (p*i+w) + EOL);
			bw.write("line -n line" + (4*i+3) + " -p " + (az[i+1]) + " 0.0 " + (p*i+w) + " " + (az[i+1]) + " 0.0 " + (p*i+w+a) + EOL);
			
		}

		bw.write("line -n guideline -p " + ai + " 0.0 0.0 " + ai + " 0.0 -" + Lg + EOL);

// revolve 180º
		bw.write("revolve -s ");
		for(i=1;i<=(Nmc-1);i++) {
			for(j=0;j<Nmc;j++) {
				bw.write("line" + (i) + "0000" + j + separator);
			}
		}
		for(i=(4*(Nmc+1)-4);i<=((N-1)*4-1);i++) {
			bw.write("line" + i + separator);
		}
		bw.write(" guideline -p 0.0 0.0 0.0 0.0 0.0 1.0 0.0 180.0" + EOL);
// revolve -180º
		bw.write("revolve -s ");
		for(i=1;i<=(Nmc-1);i++) {
			for(j=0;j<Nmc;j++) {
				bw.write("line" + (i) + "0000" + j + separator);
			}
		}
		for(i=(4*(Nmc+1)-4);i<=((N-1)*4-1);i++) {
			bw.write("line" + i + separator);
		}
		bw.write(" guideline -p 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 180.0" + EOL);

// delete lines
		bw.write("delete -s ");
		for(i=1;i<=(Nmc-1);i++) {
			for(j=0;j<Nmc;j++) {
				bw.write("line" + (i) + "0000" + j + separator);
			}
		}
		for(i=(4*(Nmc+1)-4);i<=((N-1)*4-1);i++) {
			bw.write("line" + i + separator);
		}
		bw.write(" guideline" + EOL);

// disc
		bw.write("disk -n tapa -p 0.0 0.0 -" + Lg + " " + ai + EOL);
		
		} catch(Exception e){
			System.out.println("Cannot write file " + EOL);
		} finally {
	            if (bw != null) {
	                try {
	                    bw.close();
	                } catch (IOException ex) {
	                    Logger.getLogger(NewMain.class.getName()).log(Level.SEVERE, null, ex);
	                }
	            }
        	}

}

¿Te ha sido útil esta información?

Usamos cookies en este sitio web para mejorar tu experiencia al navegar por esta página. Si continúas usando este sitio, aceptas nuestra política de cookies.

Aceptar