Good Evening,

   Conditions were so so.  Moderate, slow QSB with a steady hiss.  On twenty meters the signals were all down a bit, but my reach was better.  Forty meters was noisier with deeper QSB.

   I rewrote some antenna modelling code I created a long time ago.  Unwrapping the dipole algorithm was not too difficult.  Then I got to the 1/4 wave vertical algorithm.  The electric field equation has an exponential raised to an imaginary power.  Euler's identity unwraps that into real and an imaginary parts.  Normally you ignore the imaginary part.  The resulting function creates its own problems by generating some unreal lobes.  I'm trying to figure out how space can have a volume with less than no electric field.  Hence the guards on my output.  However, this code creates the electric field pattern of a 1/4 wave dipole antenna which matches standard antenna modeling images.

  On 14050.5 kHz at 2200z:

W0CZ - Ken - ND

NO8V - John - MI

K4JPN - Steve - GA

K6XK - Roy - IA


  On 7047.5 kHz at 0000z:

K0DTJ - Brian - CA

WM5F - Dwight - ID

K6PJV - Dale - CA


Until next week 73,

   Kevin.  KD5ONS



-





// vertical.c
// K. J. Rock
// August 27, 2023

//  g++ -o vert vertical.c

#include <stdio.h>
#include <math.h>

#define ETA  376.991118308                // characteristic impedance of free space
#define RAD 0.017453293                    // radian to degree
#define PI  3.1415926535                     // cherry, of course
#define TWOPI  6.28318530718            // Katzenjammer feast

struct pt                                                  // 4 space vector
    {
    float w, x, y, z;
    }  arc[20], vert[1300];                // buffers for template and pattern

int main( void )
    {
    int i=0;                                       // template index
    float f = 100;                              // frequency in MHz
    float lambda = 300 / f;               // wavelength in meters
    float l = lambda / 4;                   // length of antenna in meters
    float k = TWOPI / lambda;          // save some space
    float h = 1.0;                              // height of antenna in wavelengths     float I0 = 2;                                // maximum current in amperes     float r = 1000;                            // distance from antenna to observer in meters
    float dTheta = 5.0;                     // azimuth step size
    float dPhi = 5.0;                         // elevation step size
    float scale = 1.0;                        // fudge factor for display purposes     float radius;                                // E(θ,φ)  in Volt/meter  or Newton/Coulomb

   // create one set of points in the X,Y plane at θ = 0
    for (float phi=0; phi<90; phi += dPhi)        // elevation NOT azimuth
      {
      radius = scale * cos(k * r)
               * (k * l * ETA * I0 * cos(phi * RAD) * cos(h * k * sin(phi * RAD)))
               / (TWOPI * r);

         // store X,Y in arc[] of struct pt
      if (radius > 0)                   // remove negative lobes
          {
         printf("%7.4f ", radius );             // E(θ,φ)   where θ = 0
         arc[i].x = radius*cos(phi*RAD);  // store phi, radius in X,Y coordinates
         arc[i].y = radius*sin(phi*RAD);
         arc[i++].z = 0.0;                        // at Z = 0
         }

      radius = scale * sin(k * r)
                  * (k * l * ETA * I0 * cos(phi * RAD) * cos(h * k * sin(phi * RAD)))
                  / (TWOPI * r);

        if (radius > 0)                   // remove negative lobes
         {
         printf("%7.4f ", radius );                // E(θ,φ) where θ = 0
            arc[i].x = radius*cos(phi*RAD);  // store radius in X,Y coordinates with Z = 0
         arc[i].y = radius*sin(phi*RAD);
         arc[i++].z = 0.0;                           // count vertices per slice
         }
      }
   printf("\n%3d points in the template\n", i);

// sweep the X,Y arc[] template around the Y axis
// vert[] is indexed serially, there are no delimiters between slices
      int m = 0;                                // count vertices
   for (int j=0; j<i; j++)                  // step from the bottom to the top (0 to 90 degrees)
      {
      for (float theta=0; theta<360; theta += dTheta)
         {
         vert[m].x = arc[j].x * cos(theta*RAD);
         vert[m].y = arc[j].y;
         vert[m++].z = arc[j].x * sin(theta*RAD);
         }
      }
    printf("%4d vertices in radiation pattern\n", m);     // vertex count
    return m;
    }


______________________________________________________________
Elecraft mailing list
Home: http://mailman.qth.net/mailman/listinfo/elecraft
Help: http://mailman.qth.net/mmfaq.htm
Post: mailto:Elecraft@mailman.qth.net

This list hosted by: http://www.qsl.net
Please help support this email list: http://www.qsl.net/donate.html
Message delivered to arch...@mail-archive.com 

Reply via email to