Routines to Create Synthetic Arrays¶
Here we provide a convenient way to generate EADF objects from
synthetic arrays. We assume the arrays elements to be uniformly sensitive
in all directions.
Making your Own¶
If you want to add your of synthetic configurations, this is the place to be. We suggest to use the generateArbitraryDipole function by just passing the locations of the elements to it and let it handle the rest.
The Functions¶
-
eadf.arrays.generateURA(numElementsY: int, numElementsZ: int, numSpacingY: float, numSpacingZ: float, elementSize: numpy.ndarray, arrFreq: numpy.ndarray, addCrossPolPort: bool = False, **options) → eadf.eadf.EADF¶ Uniform Rectangular Array in y-z-plane
Creates an URA in y-z-plane according to the given parameters. Depending on the dimension of elementSize the basic elements are dipoles or patches. For dipoles the elementSize has to be (1 x 1). For patches the elementSize requires a shape of (3 x 1).
The raw dipoles are located in the z-axis and the predominant polarization is vertical. The raw patches are located in the y-z-plane and the predominant polarization is horizontal.
By setting the addCrosspolPort true, each element will be duplicated with a crosspol element. So the number of elements in the EADF is also doubled. The cross-pol element is rotated about 90 degree around the x-axis to get the cross-polarization.
Example
>>> import eadf >>> import numpy as np >>> elementSize = np.ones((3, 1)) >>> arrFreq = np.arange(1,4) >>> A = eadf.generateURA(7, 5, 1.5, 0.5, elementSize, arrFreq)
Parameters: - numElementsY (int) – number of array elements in x-direction
- numElementsZ (int) – number of array elements in y-direction
- numSpacingY (float) – spacing between the first and last element in meter
- numSpacingZ (float) – spacing between the first and last element in meter
- elementSize (np.ndarray) – (dim x 1) array with size of single antenna element in meter (1 x 1) only length for dipole (3 x 1) length, width and thickness of patch element
- arrFreq (np.ndarray) – array of frequencies for EADF calculation in Hertz
- addCrossPolPort (bool) –
Should we have appropriately rotated cross-pol ports? If true, the virtual elements will have two cross-polarized ports and are described as two elements in the EADF object. If false, the array has a predominant polarization.
Defaults to false.
- **options – get passed to the EADF constructor
Returns: URA
Return type:
-
eadf.arrays.generateULA(numElements: int, numSpacing: float, elementSize: numpy.ndarray, arrFreq: numpy.ndarray, addCrossPolPort: bool = False, **options) → eadf.eadf.EADF¶ Uniform Linear Array (ULA) along y-axis
Creates an ULA along y-axis according to the given parameters. Depending on the dimension of elementSize the basic elements are dipoles or patches. For dipoles the elementSize has to be (1 x 1). For patches the elementSize requires a shape of (3 x 1).
The raw dipoles are located in the z-axis and the predominant polarization is vertical. The raw patches are located in the y-z-plane and the predominant polarization is horizontal.
By setting the addCrosspolPort true, each element will be duplicated with a crosspol element. So the number of elements in the EADF is also doubled. The cross-pol element is rotated about 90 degree around the x-axis to get the cross-polarization.
Example
>>> import eadf >>> import numpy as np >>> elementSize = np.ones((3, 1)) >>> arrFreq = np.arange(1,4) >>> A = eadf.generateULA(11, 1.5, elementSize, arrFreq)
Parameters: - numElements (int) – number of array elements
- numSpacing (float) – spacing between the first and last element in meter
- elementSize (np.ndarray) – (dim x 1) array with size of single antenna element in meter (1 x 1) only length for dipole (3 x 1) length, width and thickness of patch element
- arrFreq (np.ndarray) – array of frequencies for EADF calculation in Hertz
- addCrossPolPort (bool) –
Should we have appropriately rotated cross-pol ports? If true, the virtual elements will have two cross-polarized ports and are described as two elements in the EADF object. If false, the array has a predominant polarization.
Defaults to false.
Returns: ULA
Return type:
-
eadf.arrays.generateUCA(numElements: int, numRadius: float, elementSize: numpy.ndarray, arrFreq: numpy.ndarray, addCrossPolPort: bool = False, **options) → eadf.eadf.EADF¶ Uniform Circular Array (UCA) in the x-y-plane
Creates an UCA in the x-y-plane according to the given parameters. Depending on the dimension of elementSize the basic elements are dipoles or patches. For dipoles the elementSize has to be (1 x 1). For patches the elementSize requires a shape of (3 x 1).
The raw dipoles are located in the z-axis and the predominant polarization is vertical. The raw patches are located in the y-z-plane and the predominant polarization is horizontal.
By setting the addCrosspolPort true, each element will be duplicated with a crosspol element. So the number of elements in the EADF is also doubled. The cross-pol element is rotated about 90 degree around the x-axis to get the cross-polarization.
Example
>>> import eadf >>> import numpy as np >>> elementSize = np.ones((3, 1)) >>> arrFreq = np.arange(1,4) >>> A = eadf.generateUCA(11, 1.5, elementSize, arrFreq)
Parameters: - numElements (int) – Number of Elements
- numRadius (float) – Radius of the UCA in meter
- elementSize (np.ndarray) – (dim x 1) array with size of single antenna element in meter (1 x 1) only length for dipole (3 x 1) length, width and thickness of patch element
- arrFreq (np.ndarray) – array of frequencies for EADF calculation in Hertz
- addCrossPolPort (bool) –
Should we have appropriately rotated cross-pol ports? If true, the virtual elements will have two cross-polarized ports and are described as two elements in the EADF object. If false, the array has a predominant polarization.
Defaults to false.
Returns: EADF object
Return type:
-
eadf.arrays.generateStackedUCA(numElements: int, numStacks: int, numRadius: float, numHeight: float, elementSize: numpy.ndarray, arrFreq: numpy.ndarray, addCrossPolPort: bool = False, **options) → eadf.eadf.EADF¶ Stacked Uniform Circular Array (SUCA)
Creates a SUCA according to the given parameters. Depending on the dimension of elementSize the basic elements are dipoles or patches. For dipoles the elementSize has to be (1 x 1). For patches the elementSize requires a shape of (3 x 1).
The raw dipoles are located in the z-axis and the predominant polarization is vertical. The raw patches are located in the y-z-plane and the predominant polarization is horizontal.
By setting the addCrosspolPort true, each element will be duplicated with a crosspol element. So the number of elements in the EADF is also doubled. The cross-pol element is rotated about 90 degree around the x-axis to get the cross-polarization.
Example
>>> import eadf >>> import numpy as np >>> elementSize = np.ones((3, 1)) >>> arrFreq = np.arange(1,4) >>> A = eadf.generateSteackedUCA(11, 3, 1.5, 0.5, elementSize, arrFreq)
Parameters: - numElements (int) – Number of Elements per Stack > 0
- numStacks (int) – Number of Stacks > 0
- numRadius (float) – Radius of the SUCA in meter
- numHeight (float) – Displacement height between two adjacent stacks in meter
- elementSize (np.ndarray) – (dim x 1) array with size of single antenna element in meter (1 x 1) only length for dipole (3 x 1) length, width and thickness of patch element
- arrFreq (np.ndarray) – array of frequencies for EADF calculation in Hertz
- addCrossPolPort (bool) –
Should we have appropriately rotated cross-pol ports? If true, the virtual elements will have two cross-polarized ports and are described as two elements in the EADF object. If false, the array has a predominant polarization.
Defaults to false.
Returns: EADF object representing this very array
Return type:
-
eadf.arrays.generateArbitraryDipole(arrPos: numpy.ndarray, arrRot: numpy.ndarray, arrLength: numpy.ndarray, arrFreq: numpy.ndarray, addCrossPolPort: bool = False, **options) → eadf.eadf.EADF¶ Arbitrary dipole array EADF
One specifies a (3 x N) np.ndarray to specify the elements positions and rotations in 3D cartesian space. Furthermore, a (1 x N) np.ndarray specifies the dipole-lengths of the elements. The EADF can be created for multiple frequencies at one time. The elements themselves are assumed to be uniform emitters based on finite length dipoles. One can decide if only one single pol dipole is used or if two dipoles are combined to a dual-polarimetric antenna element. This function allows to create a vast amount of different antenna geometries for quick testing.
Example
>>> import eadf >>> import numpy as np >>> arrPos = np.random.uniform(-1, 1, (3, 10)) >>> arrRot = np.zeros((3, 10)) >>> arrLength = np.ones((1, 10)) >>> arrFreq = np.arange(1,4) >>> A = eadf.generateArbitraryDipole(arrPos, arrRot, arrLength, arrFreq)
Parameters: - arrPos (np.ndarray) – (3 x numElements) array of positions in meter
- arrRot (np.ndarray) – (3 x numElements) array of rotations of the elements in radians
- arrLength (np.ndarray) – (1 x numElements) array of length of the individual dipole lengths in meter
- arrFreq (np.ndarray) – array of frequencies to sample in Hertz
- addCrossPolPort (bool) –
Should we have appropriately rotated cross-pol ports? If true, the virtual elements will have two cross-polarized ports and are described as two elements in the EADF object. If false, the array has a predominant vertical polarization.
Defaults to false.
Returns: EADF object representing this very array
Return type:
-
eadf.arrays.generateArbitraryPatch(arrPos: numpy.ndarray, arrRot: numpy.ndarray, arrSize: numpy.ndarray, arrFreq: numpy.ndarray, addCrossPolPort: bool = False, **options) → eadf.eadf.EADF¶ Creates an EADF of an analyical patch antenna and returns an EADF.
One specifies a (3 x N) np.ndarray to specify the elements positions and rotations in 3D cartesian space. Furthermore, a (3 x N) np.ndarray specifies the size of the patch elements. The EADF can be created for multiple frequencies at one time. One can decide if only one single pol patch is used or if two dipoles are combined to a dual-polarimetric antenna element. This function allows to create a vast amount of different antenna geometries for qucik testing.
Example
>>> import eadf >>> import numpy as np >>> arrPos = np.random.uniform(-1, 1, (3, 10)) >>> arrRot = np.zeros((3, 10)) >>> arrSize = np.ones((3, 10)) >>> arrFreq = np.arange(1,4) >>> A = eadf.generateArbitraryPatch(arrPos, arrRot, arrSize, arrFreq)
Parameters: - arrPos (np.ndarray) – (3 x numElements) array of positions in meter
- arrRot (np.ndarray) – (3 x numElements) array of rotations of the elements in radians
- arrSize (np.ndarray) – (3 x numElements) array of sizes of the patches (length, width, thickness) in meter
- arrFreq (np.ndarray) – array of frequencies to sample in Hertz
- addCrossPolPort (bool) –
Should we have appropriately rotated cross-pol ports? If true, the virtual elements will have two cross-polarized ports and are described as two elements in the EADF object. If false, the array has a predominant horizontal polarization.
Defaults to false.
Returns: EADF object
Return type: