EmpOpTM README

EmpOp v 1.0
Copyright (c) 2004-2007
Hutt Systems, Inc. All Rights Reserved.

EmpOp is an antenna array optimization program that can be used to
optimize the following performance features:

* Optimum pattern synthesis, i.e. extraction of element excitations
used to create a specified array pattern, based on the physical array
dimensions

* Optimum synthesis to minimize sidelobe levels

* Optimum synthesis to minimize the power in the sidelobes

* Optimum synthesis of sum/diff patterns

EmpOp is available for 32 and 64 bit Linux systems as well as Mac OSX.

The array parameters to be optimized include the spacing between
elements and/or element excitations.

EmpOp accounts for coupling between the elements of the array and
nearby structure by using either measured or calculated element
pattern data. The calculated element pattern data is obtained either
by the induced emf method or by NEC method of moments.

EmpOp is command line driven and reads its data from the file
specified by the -f flag.

Usage: empop -hv -f 

empop -f 4xhalf.dat

The results are contained in the empop.out file.

Elements are defined in the input file as follows:

#            x,   y,   z,   movx, movy, movz, ec,  exph, half-length, radius,   driven
element#0:   0.0, 0.0, 0.0, 0,    0,    0,    1.0, 0.0,  0.242,       0.000242, 1

The first 3 parameters define the element's position in space. The
next 3 specify in which dimension the element can be moved (required
for optimization of spacings). This version currently only supports
movement in X and Y. ec is the excitation amplitude, and exph is the
excitation phase of the element. The excitation can also be controlled 
by the following parameters:

cheby:0
chebysll:30.0

When cheby is set to 0 the values from the ec column are used. When
cheby is set to 1, a set of Chebyshev amplitudes are calculated for
the specified sidelobe level.

Below is a sample input file for the case of extracting element
excitations used to create a specified array pattern, based on the
physical array dimensions. Any line beginning with a '#' is treated as
a comment and ignored. This input file is configured to find the
excitations that produced the array pattern specified in npat.out. The
array contains 4 half-wave dipoles spaced 0.5 wavelengths apart. NEC
was used to generate the element pattern of each element, including
the effects of mutual coupling. The corresponding NEC files are
4x1half.nec, 4x2half.nec, 4x3half.nec, and 4x4half.nec. The Perl
script genepat.pl extracts the element pattern from the NEC output
file and was used to create 4x1half.pat, 4x2half.pat 4x3half.pat, and
4x4half.pat which are then specified at the end of the input file.

4xhalf30db.nec was used to produce the desired pattern for the example
- this would normally be provided by the user as the desired pattern
and is specified as npat.out in the configuration file below.

The array was configured in NEC so that each element has a reflector
1/4 wavelength behind it. There is also a passive scatterer 1/4
wavelength in front of the array.


Sample input file (4xhalf.dat)
==============================

# EmpOp configuration file for 4 element dipole array.
# Optimize to desired pattern.

# number of elements in the array
nelem:4

# average spacing between elements
spacing:0.5

# beamwidth factor - determines the start of the sidelobe region
bw:0.9

# phi angle to which the array is scanned. Broadside is 90 deg.
scan:90.0

# specifies the start of the sidelobe region when yagi is selected
# (see below)
sidelobe:0.0

# number of samples in phi
nos:181

# number of cuts in theta
thetamax:1

# samples angles in the theta plane (DEG)
thetas:90,60,30

# If yagi is set to one then the sidelobe region is taken from
# sidelobe to phi=180.  Otherwise, the sidelobes are considered the
# regions between phi=0 to 180 outside the first nulls.  
yagi:0

# if set the initial simplex will not have to be scaled
fmins:0

# this is used to scale the initial simplex for Nelder-Mead
scale:1.0

# pattern floor - pattern values below this values are ignored during
# the optimization
floor:-50.0

# if set to 0 - isotropic elements
# otherwise a cos^q pattern is used for each element
q:0.0

# 0:coupling not included
# 1:use induced emf to account for coupling
# 2:use NEC element patterns defined in pattern#x below
coupling:2
zo:50.0

# number of program iterations
iterations:1

# excitation symmetry
symmetry:1

# optimization criteria
# 0:MaxSLL 
# 1:Max Power 
# 2:Sum/Diff 
# 3:Specify Desired Pattern in optpat
opt:3

# specifies file containing desired pattern
# this file must contain the number of sample points specified in nos
optpat:npat.out

# 0:Excitations 
# 1:Spacings 
# 2:Both
optparam:0

# 0:excitation phase fixed at 0
# 1:excitations phase varies during optimization
exphase:1

# 0: use values from ec column below
# 1:set Chebyshev excitatations 
cheby:0
chebysll:30.0
 
# element parameters
# x, y, z, movx, movy, movz, ec, exph, half-length, radius, driven

# Note: nelem controls how many of the elements below are read in.

element#0:   0.0, 0.0, 0.0, 0, 0, 0, 1.0, 0.0, 0.242, 0.000242, 1
element#1:   0.5, 0.0, 0.0, 1, 0, 0, 1.0, 0.0, 0.242, 0.000242, 1
element#2:   1.0, 0.0, 0.0, 1, 0, 0, 1.0, 0.0, 0.242, 0.000242, 1
element#3:   1.5, 0.0, 0.0, 0, 0, 0, 1.0, 0.0, 0.242, 0.000242, 1

# element patterns
pattern#0:4x1half.pat
pattern#1:4x2half.pat
pattern#2:4x3half.pat
pattern#3:4x4half.pat

#end of input file


Running EmpOp on the above input file
=====================================

../../empop -f ./4xhalf.dat

Setting      nelem to :4
Setting    spacing to :0.5
Setting         bw to :0.9
Setting       scan to :90.0
Setting   sidelobe to :0.0
Setting        nos to :181
Setting   thetamax to :1
Setting       yagi to :0
Setting      fmins to :0
Setting      scale to :1.0
Setting      floor to :-50.0
Setting          q to :0.0
Setting   coupling to :2
Setting         zo to :50.0
Setting iterations to :1
Setting   symmetry to :1
Setting        opt to :3
Setting     optpat to :npat.out
Setting   optparam to :0
Setting    exphase to :1
Setting      cheby to :0
Setting   chebysll to :30.0

Read in 181 points from npat.out
Read in 181 points from 4x1half.pat
Read in 181 points from 4x2half.pat
Read in 181 points from 4x3half.pat
Read in 181 points from 4x4half.pat
Set excitation 0 to 1.000000
Set excitation 1 to 1.000000
Set excitation 2 to 1.000000
Set excitation 3 to 1.000000
startspSize = 1
x:1 at simplex:0
x:2 at simplex:1
Space simplex size:1
Iteration 1...
Optimizing Excitations to minimize deviation with desired pattern
Optimization completed in 1 seconds


empop.out
=========

empop Version 1.0 Beta Release 1 - Results

Spacing:	0.50
BW Factor:	0.90
TFN:		64.22
TFN:		115.78
Scan Angle:	90.00
Side Lobe:	0.00
q:		0.00
Samples:	181

X	Y	Z	MovX	MovY	MovZ	EC	EXPH	HL	Radius
0.00	0.00	0.00	0	0	0	0.4416	1.29	0.2420	0.0002
0.50	0.00	0.00	1	0	0	1.0000	1.28	0.2420	0.0002
1.00	0.00	0.00	1	0	0	1.0000	1.28	0.2420	0.0002
1.50	0.00	0.00	0	0	0	0.4416	1.29	0.2420	0.0002

Initial Metric:		16.49 dB
Phi:	138.54 Deg
Theta:	90.00 Deg
Optimized Metric:	0.93 dB
Phi:	124.38 Deg
Theta:	90.00 Deg


Visualizing the data
====================

EmpOp will create a gnuplot script file 'empop.gp' that can be used to
visualize the results. If you have gnuplot installed you can run it
interactively, e.g.;

gnuplot
gnuplot> load 'empop.gp'

or run:
gnuplot empop.gp to create a png file.