(*^
::[paletteColors = 128; currentKernel;
fontset = title, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeTitle, center, M7, bold, L1, e8, 24, "Times"; ;
fontset = subtitle, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeTitle, center, M7, bold, L1, e6, 18, "Times"; ;
fontset = subsubtitle, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeTitle, center, M7, italic, L1, e6, 14, "Times"; ;
fontset = section, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, grayBox, M22, bold, L1, a20, 18, "Times"; ;
fontset = subsection, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, blackBox, M19, bold, L1, a15, 14, "Times"; ;
fontset = subsubsection, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, whiteBox, M18, bold, L1, a12, 12, "Times"; ;
fontset = text, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ;
fontset = smalltext, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 10, "Times"; ;
fontset = input, noPageBreakInGroup, preserveAspect, groupLikeInput, M42, N23, bold, L-5, 12, "Courier"; ;
fontset = output, output, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, L-5, 12, "Courier"; ;
fontset = message, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, R65535, L-5, 12, "Courier"; ;
fontset = print, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, L-5, 12, "Courier"; ;
fontset = info, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, B65535, L-5, 12, "Courier"; ;
fontset = postscript, PostScript, formatAsPostScript, output, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeGraphics, M7, l34, w282, h287, L1, 12, "Courier"; ;
fontset = name, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, italic, L1, 10, "Geneva"; ;
fontset = header, inactive, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ;
fontset = Left Header, inactive, 12, "Times"; ;
fontset = footer, inactive, noKeepOnOnePage, preserveAspect, center, M7, L1, 12, "Times"; ;
fontset = Left Footer, inactive, 12, "Times"; ;
fontset = help, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 10, "Times"; ;
fontset = clipboard, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ;
fontset = completions, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ;
fontset = special1, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ;
fontset = special2, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ;
fontset = special3, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ;
fontset = special4, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ;
fontset = special5, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ;]
:[font = title; inactive; preserveAspect; startGroup; ]
Field Patterns of a
Linear Dipole Antenna Array
:[font = section; inactive; Cclosed; preserveAspect; startGroup; ]
Description
:[font = text; inactive; preserveAspect; ]
This Notebook shows how Mathematica can be used in the analysis of engineering problems. We examine the specific example of a linear array of dipole antennas.
;[s]
3:0,0;24,1;35,0;161,-1;
2:2,13,9,Times,0,12,0,0,0;1,13,9,Times,2,12,0,0,0;
:[font = text; inactive; dontPreserveAspect; endGroup; ]
John M. Novak
Wolfram Research, Inc.
:[font = section; inactive; Cclosed; preserveAspect; startGroup; ]
Basics
:[font = text; inactive; preserveAspect; ]
In this analysis, we are only interested in the field or radiation pattern of antenna arrays, which is solely determined by the phases of the array elements. The phase of the field of a single dipole element is determined by the exponential term. This can be expressed as
:[font = text; inactive; preserveAspect; ]
Exp[-I (2 Pi f r)/c]
;[s]
2:0,1;20,0;21,-1;
2:1,13,9,Times,0,12,0,0,0;1,13,10,Courier,1,12,0,0,0;
:[font = text; inactive; preserveAspect; ]
where f is the frequency of the transmission, r is the distance from the element, and c is the speed of light.
;[s]
7:0,0;7,1;8,0;47,1;48,0;87,1;88,0;112,-1;
2:4,13,9,Times,0,12,0,0,0;3,13,9,Times,1,12,0,0,0;
:[font = text; inactive; preserveAspect; ]
We can analyze the array by superposing the individual elements. This leads us to the following description of the field pattern, assuming elems is the number of elements:
;[s]
3:0,0;139,1;146,0;173,-1;
2:2,13,9,Times,0,12,0,0,0;1,13,9,Times,1,12,0,0,0;
:[font = text; inactive; preserveAspect; ]
(1/elems) Sum[Exp[-I (2 Pi f r[n])/c + phase[n]], {n,1,elems}]
;[s]
1:0,1;63,-1;
2:0,13,9,Times,0,12,0,0,0;1,13,10,Courier,1,12,0,0,0;
:[font = text; inactive; preserveAspect; ]
This assumes that all the elements are transmitting at the same frequency. Note that r[n] is the distance from the nth element and phase[n] is a phase shift. We can further refine this by assuming the elements are evenly spaced, by a distance d, along the x axis (a linear array), and we determine the distance from each element in terms of the distance from the first element (centered at 0,0) and the angle from the x axis. From this, we can make a Mathematica function that, given the various parameters, returns the field pattern at a point. Let's call our function AF, for array factor.
;[s]
12:0,0;86,2;90,0;116,2;117,3;119,0;132,2;141,0;453,1;464,0;573,2;575,0;595,-1;
4:6,13,9,Times,0,12,0,0,0;1,13,9,Times,2,12,0,0,0;4,13,9,Times,1,12,0,0,0;1,21,13,Times,32,12,0,0,0;
:[font = input; preserveAspect; ]
AF[r_,phi_,f_,d_,shift_,elems_] :=
1/elems Sum[
Exp[-I (2 Pi f
(r - Sqrt[r^2 + ((n-1) d)^2 -
2 r ((n-1) d) Cos[phi]])/c +
(n-1) shift)],
{n,1,elems}]
:[font = text; inactive; preserveAspect; ]
We also need to set a value for c. We will assume all measurements are in meters and radians:
;[s]
3:0,0;31,1;33,0;95,-1;
2:2,13,9,Times,0,12,0,0,0;1,13,9,Times,1,12,0,0,0;
:[font = input; preserveAspect; ]
c = 3. 10^8;
:[font = subsection; inactive; Cclosed; preserveAspect; startGroup; ]
Far-Field Approximation
:[font = text; inactive; preserveAspect; ]
It is customary to examine the far-field case by allowing r to go to a large value. We note that it might be useful to look at an approximation to the distance of each element in this case.
;[s]
3:0,0;57,1;60,0;191,-1;
2:2,13,9,Times,0,12,0,0,0;1,13,9,Times,1,12,0,0,0;
:[font = input; Cclosed; preserveAspect; startGroup; ]
Series[(r - Sqrt[r^2 + ((n-1) d)^2 -
2 r ((n-1) d) Cos[phi]]),{r,Infinity,1}]
:[font = output; output; inactive; preserveAspect; endGroup; ]
SeriesData[r, DirectedInfinity[1],
{d*(-1 + n)*Cos[phi],
-(d^2*(-1 + n)^2 - d^2*(-1 + n)^2*Cos[phi]^2)/2}, 0,
2, 1]
;[o]
d (-1 + n) Cos[phi] -
2 2 2 2 2
d (-1 + n) - d (-1 + n) Cos[phi] 1 2
------------------------------------- + O[-]
2 r r
:[font = text; inactive; preserveAspect; ]
From this, we can create a simpler function, depending on phi, that gives the far-field expression:
:[font = input; preserveAspect; endGroup; endGroup; ]
FarAF[phi_,f_,d_,shift_,elems_] :=
1/elems Sum[
Exp[-I (2 Pi f (n-1) d Cos[phi]/c +
(n-1) shift)],
{n,1,elems}]
:[font = section; inactive; Cclosed; preserveAspect; startGroup; ]
Examples
:[font = text; inactive; preserveAspect; ]
Plots can be generated from these functions. For instance, we might wish to examine the conventional far-field representation. To do this, let us first load a package that defines polar plots:
:[font = input; preserveAspect; ]
Needs["Graphics`Graphics`"]
:[font = subsection; inactive; Cclosed; preserveAspect; startGroup; ]
Standard Far-Field Pattern
:[font = text; inactive; preserveAspect; ]
Let us examine the far field for a linear array of six elements transmitting at 3 MHz, with the antennas spaced a half wavelength apart, with a progressive phase shift of 105 degrees between each element. (The PlotRange option is to make sure that no outlying part of the graph gets cut off, as we are interested in all parts of this graph, not only the densest.)
;[s]
3:0,0;210,1;220,0;365,-1;
2:2,13,9,Times,0,12,0,0,0;1,13,9,Times,1,12,0,0,0;
:[font = input; preserveAspect; startGroup; ]
PolarPlot[Abs[FarAF[phi,3 10^6,50,105 Degree,6]],
{phi,-Pi,Pi},PlotRange->All]
:[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 36; pictureWidth = 201; pictureHeight = 395; pictureID = 790; ]
:[font = output; output; inactive; preserveAspect; endGroup; endGroup; ]
The Unformatted text for this cell was not generated.
Use options in the Actions Settings dialog box to control
when Unformatted text is generated.
;[o]
-Graphics-
:[font = subsection; inactive; Cclosed; preserveAspect; startGroup; ]
Far Field with Coupling to the Earth
:[font = text; inactive; preserveAspect; ]
We can also observe the shape of this pattern given the effects of coupling to the Earth. As a simple approximation, sufficient for far-field analysis, the Earth causes the field to drop off as the sine of the angle above the horizon.
:[font = text; inactive; preserveAspect; ]
This plot looks much nicer without a mesh. Because it is a Graphics3D resulting from a three- dimensional parametric plot, some manipulations have to be performed on the resulting graphics object to get this to come out correctly, as follows:
;[s]
3:0,0;60,1;70,0;244,-1;
2:2,13,9,Times,0,12,0,0,0;1,13,9,Times,1,12,0,0,0;
:[font = input; preserveAspect; ]
<50,
PlotRange->{{-.8,.3},{-.9,.9},{-.5,.5}},
Axes->False,
Boxed->False,
DisplayFunction->Identity];
:[font = input; preserveAspect; startGroup; ]
Show[MapAt[Prepend[#,EdgeForm[]]&,%,{1}],
DisplayFunction->$DisplayFunction]
:[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 36; pictureWidth = 268; pictureHeight = 287; pictureID = 8019; ]
:[font = output; output; inactive; preserveAspect; endGroup; endGroup; ]
The Unformatted text for this cell was not generated.
Use options in the Actions Settings dialog box to control
when Unformatted text is generated.
;[o]
-Graphics3D-
:[font = subsection; inactive; Cclosed; preserveAspect; startGroup; ]
Onset of Far Field
:[font = text; inactive; preserveAspect; ]
It is also interesting to examine the more general expression for the field pattern, dependent on distance. Although it is not strictly accurate, as it ignores secondary terms such as coupling between the antennas, it gives us a view of the onset of the far-field terms.
:[font = text; inactive; preserveAspect; ]
To do this, we need to convert from Cartesian to polar coordinates. It is useful to define a function that determines the arctangent of one number over another properly (the built-in function ArcTan only accepts a single argument, so it will not necessarily give the required answer for each quadrant).
;[s]
3:0,0;193,1;199,0;304,-1;
2:2,13,9,Times,0,12,0,0,0;1,13,9,Times,1,12,0,0,0;
:[font = input; preserveAspect; ]
arctan[x_,y_] :=
Which[x == 0 && y >= 0, Pi/2,
x == 0 && y < 0, -Pi/2,
x < 0 && y >= 0, ArcTan[y/x] + Pi,
x < 0 && y < 0, ArcTan[y/x] - Pi,
True,ArcTan[y/x]]
:[font = text; inactive; preserveAspect; ]
A plot can now be generated from this. Note especially the onset of the far field at approximately 200m from the center of the plot.
:[font = input; preserveAspect; startGroup; ]
ContourPlot[
Abs[AF[Sqrt[x^2 + y^2],arctan[y,x],
3 10^6,50,105,6]],
{x,-500,500},{y,-500,500},
PlotPoints->50,
ColorFunction->(Hue[# .6]&),
AspectRatio->Automatic]
:[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 36; pictureWidth = 282; pictureHeight = 282; pictureID = 28286; ]
:[font = output; output; inactive; preserveAspect; endGroup; endGroup; endGroup; endGroup; ]
The Unformatted text for this cell was not generated.
Use options in the Actions Settings dialog box to control
when Unformatted text is generated.
;[o]
-ContourGraphics-
^*)