Personal tools
Sections

Antenna Radiation Safety Zones Using Scripting in POSTFEKO

Scripting is used to determine the safety zones of a yagi antenna according to INIRC 88 and NRPB 89 standards.

Introduction

A variety of international safety standards for civil and military applications exist to ensure that people do not get exposed to too much electromagnetic radiation.  This example illustrates the safety zones for a simple yagi-uda antenna according to both the INIRC 88 and NRPB 89 standards as they are defined for the operating band.

The antenna is simulated from 400MHz to 1.5GHz, which covers several common GSM bands for mobile communication.  The results will indicate where a person may be at any simulated frequency and still conform to the safety standards.

INIRC 88 and NRPB 89 Safety Standards

INIRC (International Non-ionising Radiation Committee) and NRPB (The UK National Radiological Protection Board) provide standards that determine safe radiation thresholds.  These standards are typically frequency dependent and defined in a piece-wise manner [1].

 

Standards - Magnetic Field

The standards for the operating band 400MHz to 1.5GHz are depicted below.  Note that "f" is the frequency in megahertz (MHz).

Standard Electric
Field
(V/m)
Magnetic
Field
(A/m)
INIRC 88
3*sqrt(f)
0.008*sqrt(f)
NRPB 89
97.1*sqrt(f/1000) 0.258*sqrt(f/1000)

These restrictions can be interpreted as those electric and magnetic field values where a person's safety can no longer be guaranteed.  The remainder of the article will focus on determining where these thresholds are exceeded.

The Antenna

To illustrate the point, a simple yagi-uda antenna is taken.  A near field cloud is simulated in the immediate surrounding area of the antenna to obtain the electric and magnetic field values.

Yagi-uda Antenna

The Calculations

POSTFEKO comes with a scripting capability that is based on the Lua language.  Internal data structures (called "datasets") are directly accessible and can be created or modified in the scripting environment.  Several scripts can be written to calculate these thresholds.

The first script illustrates how the standards can be added as a dataset that allows us to plot the threshold field values on a graph.

Script one: The standards

-- Create a dataset containing the standards formulae for reference
ds = dataset()
axisF = dataset.axis('frequency','Hz',400e6,1.5e9,21)
dataset.addaxis(ds, axisF)
dataset.addquantity(ds, "E_inirc88", "scalar", "V/m")
dataset.addquantity(ds, "E_nrpb89", "scalar", "V/m")
dataset.addquantity(ds, "H_inirc88", "scalar", "A/m")
dataset.addquantity(ds, "H_nrpb89", "scalar", "A/m")

for ff = 1,#axisF do
    local freq = axisF[ff]/1e6 -- frequency in MHz
    -- Electric field limits
    ds[ff].E_inirc88 = 3*math.sqrt(freq)
    ds[ff].E_nrpb89  = 97.1*math.sqrt(freq/1000)
    -- Magnetic field limits
    ds[ff].H_inirc88 = 0.008*math.sqrt(freq)
    ds[ff].H_nrpb89  = 0.258*math.sqrt(freq/1000)
end

return ds

The second and third scripts utilise these limits to calculate the positions where the safety threshold is exceeded.  Each near field value is processed and normalised to the maximum field value that the standard allows for that frequency.  In other words, a value of "1" corresponds to the field threshold according to the standard.  A value higher than "1" is over the limit and a value lower than "1" is a safe zone.

Script two: The normalised threshold as per INIRC 88

-- This example illustrates how advanced calculations
-- can be performed to display radiation hazar zones.

-- The INIRC 88 standards are used.

nf = pf.nearfield.get("yagi.Configuration1.nf")

axisF = nf.axes[1] -- Isolate the frequency axis
axisX = nf.axes[2] -- Isolate the "x" axis
axisY = nf.axes[3] -- Isolate the "y" axis
axisZ = nf.axes[4] -- Isolate the "z" axis

-- declare loop variables to improve performance
freq = 0
EfieldLimit = 0; HfieldLimit = 0
magEx = 0; magEy = 0; magEz = 0
magHx = 0; magHy = 0; magHz = 0

for ff = 1,#axisF do
    freq = axisF[ff]/1e6 -- Frequency in MHz
    EfieldLimit = 3*math.sqrt(freq)
    HfieldLimit = 0.008*math.sqrt(freq)
   
    for xx = 1,#axisX do
        for yy = 1,#axisY do
            for zz = 1,#axisZ do
               
                -- SCALE THE ELECTRIC FIELD VALUES
                -- Scale the values to indicate percentages.  The percentage represents
                -- the field value relative to the limit of the standard.
                nf[ff][xx][yy][zz].efieldcomp1 = nf[ff][xx][yy][zz].efieldcomp1/(EfieldLimit)
                nf[ff][xx][yy][zz].efieldcomp2 = nf[ff][xx][yy][zz].efieldcomp2/(EfieldLimit)
                nf[ff][xx][yy][zz].efieldcomp3 = nf[ff][xx][yy][zz].efieldcomp3/(EfieldLimit)
               
                -- SCALE THE MAGNETIC FIELD VALUES
                -- Scale the values to indicate percentages.  The percentage represents
                -- the field value relative to the limit of the standard.
                nf[ff][xx][yy][zz].hfieldcomp1 = nf[ff][xx][yy][zz].hfieldcomp1/(HfieldLimit)
                nf[ff][xx][yy][zz].hfieldcomp2 = nf[ff][xx][yy][zz].hfieldcomp2/(HfieldLimit)
                nf[ff][xx][yy][zz].hfieldcomp3 = nf[ff][xx][yy][zz].hfieldcomp3/(HfieldLimit)
            end
        end
    end
end

-- Note that in essence, the values being returned are
-- no longer near fields.  As such, interpret them
-- carefully in POSTFEKO.
return nf

Script three: The normalised threshold as per NRPB 89

-- This example illustrates how advanced calculations 
-- can be performed to display radiation hazar zones.

-- The NRPB 89 standards are used.

nf = pf.nearfield.get("yagi.Configuration1.nf")

axisF = nf.axes[1] -- Isolate the frequency axis
axisX = nf.axes[2] -- Isolate the "x" axis
axisY = nf.axes[3] -- Isolate the "y" axis
axisZ = nf.axes[4] -- Isolate the "z" axis

-- declare loop variables to improve performance
freq = 0
EfieldLimit = 0; HfieldLimit = 0
magEx = 0; magEy = 0; magEz = 0
magHx = 0; magHy = 0; magHz = 0

for ff = 1,#axisF do 
    freq = axisF[ff]/1e9 -- Frequency in GHz
    EfieldLimit = 97.1*math.sqrt(freq)
    HfieldLimit = 0.258*math.sqrt(freq)
    
    for xx = 1,#axisX do
        for yy = 1,#axisY do
            for zz = 1,#axisZ do
                
                -- SCALE THE ELECTRIC FIELD VALUES
                -- Scale the values to indicate percentages.  The percentage represents
                -- the field value relative to the limit of the standard.
                nf[ff][xx][yy][zz].efieldcomp1 = nf[ff][xx][yy][zz].efieldcomp1/(EfieldLimit)
                nf[ff][xx][yy][zz].efieldcomp2 = nf[ff][xx][yy][zz].efieldcomp2/(EfieldLimit)
                nf[ff][xx][yy][zz].efieldcomp3 = nf[ff][xx][yy][zz].efieldcomp3/(EfieldLimit)
                
                -- SCALE THE MAGNETIC FIELD VALUES
                -- Scale the values to indicate percentages.  The percentage represents
                -- the field value relative to the limit of the standard.
                nf[ff][xx][yy][zz].hfieldcomp1 = nf[ff][xx][yy][zz].hfieldcomp1/(HfieldLimit)
                nf[ff][xx][yy][zz].hfieldcomp2 = nf[ff][xx][yy][zz].hfieldcomp2/(HfieldLimit)
                nf[ff][xx][yy][zz].hfieldcomp3 = nf[ff][xx][yy][zz].hfieldcomp3/(HfieldLimit)
            end
        end
    end
end

-- Note that in essence, the values being returned are
-- no longer near fields.  As such, interpret them 
-- carefully in POSTFEKO.
return nf

Note that a working knowledge of Lua is recommended for scripting examples.  An overview of the Lua/POSTFEKO interface is provided in the formal FEKO documentation.

Safety zone thresholds for the INIRC 88 standard

The Results

The resulting "near fields" are now a normalised threshold value.  Plotting the Iso-surfaces for these fields can show the positions where a certain field percentage is reached.  For example, the red surface corresponds to positions where the maximum allowable field value is reached.  Getting any closer to the antenna than the red surface would result in a breach of the INIRC 89 standard.  The yellow surface corresponds to 80% of the maximum field value.

This is a good way to visualise the safety zones for individual frequencies.  With small modifications to the script, the safety zone over the entire band can be calculated by storing only the "worst-case" values.

Fields at a position - NRPB 89

To see whether a specific position is within the safety limits, a simple graph can also be utilised.  By comparing the near field at a given location to the standard (i.e. the results from script one), the entire frequency band can be assessed.  Here it can be seen that the given position is not safe for extended exposure between roughly 1.0 and 1.2 GHz.

The same logic can be applied to any standard over any band.  Scripting provides a fully customisable interface with POSTFEKO data structures so that any calculation can be performed.

References

[1] R. Kitchen, "Radio Frequency Radiation Safety Handbook", Oxford: Butterworth-Heinemann, p. 78, 1993.