Cable Length

cable7001kHz

I am using a 5D-2V calbe for my dipole. V1 and V2 are measured at both ends of the cable.

V2(blue)/V1(green) = 0.926371240154
V2(blue) phase advance against V1(green)= -253.07921443 deg. (V2 is in advance if positive)

The electrical length of the cable is (300.0m/7.001MHz)*(253.08/360.0)=30.12m, and the physical length 20.18m, assuming the velocity factor of 0.67.

cableLength

Measuring the length with different frequencies gives this result, where the numbers 1 through 8 corresponds to the 3.5MHz/7MHz/10MHz/14MHz/18MHz/21MHz/24MHz/28MHz band, respectively.

Antenna Impedance

dummyload

Now we are ready for measuring the antenna impedance. First, a dummy load is used as a DUT.

dummyload2

You see that Z(DUT)=49.64-0.50j [ohm], and VSWR=1.01.

open

The DUT is an open circuit.

open2

Since V2/V1 is 2.0036, which exceeds the maximum value of 2.0, Z(DUT) is not obtained correctly.

dipole

Finally, my dipole antenna for 40m band with stub match removed.

dipole2

Now Z(DUT)=5.21+j14.39 [ohm], and VSWR=10.38.

import numpy as np
import pylab as pl
from scipy.optimize import curve_fit
def sinfunc(x,a,b,c,d):
# positive c means graph in right
    return a*np.sin((x-c)*(2.0*np.pi/b))+d
def findamp(x):
    return (max(x)-min(x))/2.0
def find0cross(x):
    n=0
    while x[n] >= 0: # skip while positive
        n+=1
    while x[n] < 0:  # skip while negative
        n+=1
    n1=n             # 1st neg to pos transition
    n+=10            # skip a little bit
    while x[n] >= 0: # skip while positive
        n+=1
    while x[n] < 0:  # skip while negative
        n+=1         # 2nd neg to pos transition
    n2=n
    return [n1, n2]

t, v1, v2 = np.loadtxt('7026kHzAnt.csv', unpack=True, delimiter=',')

#v1=3456*sin(t*(2.0*np.pi/444)+0.2)-111.1
#v2=4321*cos(t*(2.0*np.pi/444)+0.2)+222.2

fig=pl.figure(figsize=(12,8),dpi=75)
axes=fig.add_axes([0.1,0.1,0.8,0.8])
axes.plot(t,v1,'g--',lw=4)
axes.plot(t,v2,'b--',lw=4)
axes.set_xlabel('time')
axes.set_ylabel('Voltage')
axes.set_title('7MHz Dipole')

a1=findamp(v1)
a2=findamp(v2)
n11, n12 = find0cross(v1)
n21, n22 = find0cross(v2)
p1=n12-n11
p2=n22-n21
pave=(p1+p2)/2
o1=0.0
o2=0.0
guess1=[a1,pave,n11,o1]
guess2=[a2,pave,n21,o2]

fitpars1, covmat1 = curve_fit(sinfunc,t,v1,guess1)
fitpars2, covmat2 = curve_fit(sinfunc,t,v2,guess2)
axes.plot(t,sinfunc(t, *fitpars1),'r')
axes.plot(t,sinfunc(t, *fitpars2),'r')
axes.grid(True)

vratio=fitpars2[0]/fitpars1[0]
# positive c means graph in right, or delay is positive
phase2delay=2.0*np.pi*((fitpars2[2]-fitpars1[2])/((fitpars1[1]+fitpars2[1])/2.0))
phase2advance=-phase2delay

z0=50.0+0.0j
cv1=1.0+0.0j
cv2=vratio*(cos(phase2advance)+sin(phase2advance)*1.0j)
cvr=2.0*cv1-cv2
cz=z0*(cv2/cvr)
gamma=(cz-z0)/(cz+z0)
swr=(1+abs(gamma))/(1-abs(gamma))
print gamma, swr
cvfwd=cv1
cvrfl=cv2-cv1
gamma2=cvrfl/cvfwd
print gamma2

print z0,cv1,cv2,cvr,cz
print n11,n12,p1
print n21,n22,p2
print guess1, guess2
print fitpars1, fitpars2
print np.sqrt(np.diag(covmat1)), np.sqrt(np.diag(covmat2))
print "V2(blue)/V1(green) =",vratio
print "V2(blue) phase advance against V1(green)=",phase2advance*360.0/(2.0*np.pi), "deg. (V2 is in advance if positive)"