SWR bridge with noise source

In this demonstration we measure the standing wave ratio (SWR) of a load, in this case an UHF antenna. A constraint is that we want to do this in a cost-effective way up to 1.7 GHz. My earlier discussed VNA is not capable of doing this, you can get VNAs that can but they rapidly become rather expensive.

In the demonstration video we generate noise with a tool that essentially amplifies the noise of a zener diode, you could make it yourself, but if you google for BG7TBL noise generator then you will soon find out it is easier to order it than to build it yourself. Noise from the BG7TBL tool has the property that it is random phase by frequency and that the amplitude is somewhat constant over the entire spectrum. Put it on the scope and you get what you expect: something that resembles white noise. The tool needs up to 12 Volt to operate, it will get hot, but it also works on a 9 Volt battery.

If you insert noise in the SDR (I used my airspy) then it will fill the entire HF VHF and UHF spectrum, and you may wonder why you would like to do that at all. Please insert attenuators because the output of the BG7TBL tool is rather high, so I added 30 dB attenuation before I did the measurement with the SDR. When I measure the reflection properties of a load then 10dB goes before the bridge, and 20 dB goed after the bridge to prevent that the bridge is influenced too much.

There is a very good reason why you would like to insert artificial noise into your SDR. The reason is that it allows you to measure the performance of filters or loads connected in between the source and the receiver. In the video we inserted a RF bridge between the source and the receiver.

The RF bridge comes from the transverter store on ebay, see the movie, also there the conclusion is, it is easier to buy one than to make one. The bridge has an input, an output, there is a reference port and there is a device under test port. There are only SMA connectors on the PCB, the schematic is as follows:

On the input (left in the schematic) you insert a signal into the RF bridge, and on the reference port (top port in the schematic) you insert a nominal dummy load of 50 Ohm. On the output of the RF bridge (right port in the schematic) you measure the throughput with your SDR (an airspy). There are now several possibilities depending on what you connected to the DUT port (bottom port in the schematic):

  1. Nothing is connected to the DUT port, in this case the signal reflects back into the RF bridge and this is picked up by the receiver. The throughput is called the directivity of the RF bridge. (for details see the discussion on the transverter-store web page).
  2. The DUT port has a dummy load of 50 Ohm (or the same amount of Ohm as the reference port). In this case you will notice that no signal will pass the bridge and that everything is dissipated in the dummy load at the DUT port.
  3. Connect an unknown load to the DUT port, and now you will see that some of the signal is reflected back to the receiver, but that the rest of the signal is dissipated into the load on the DUT port.

With the first and the second measurement you calibrate the set-up, with the third measurement you can see who much dB is dissipated in the unknown load. You can measure this in the waterfall plot, and hence you can measure the so-called reflection loss RL in decibel caused by the unknown load. Next you need to convert the RL into a SWR value, the equation is as folows:

RL = 20 log10( (SWR-1)/(SWR+1) )

I measured on the waterfall a reflection loss of 20 dB near 440 MHz, this is compatible with a SWR of 1.2, the connected antenna is a miniature version of a 70 cm amateur band antenna.

Last update: 23-5-2018

Advertisements

Impedantie 7.451 MHz crystal

So here it is, The impedance of the cruystal measured with the metrovna:

impedantie kristal
Shown: light blue is the impedance in Ohm, and green is the phase, red is the reflection coefficient. Span is 10 kHz, from -5 kHz to +5 kHz centered at 7.447 kHz.

And here, the crystal is used as a filter, we measure the transmission characteristics:

IMG_2050_cleaned
Red: reflection loss, Green: phase, Yellow: transmission loss.

Last update: 22-April-2018

Field day Brouwersdam

Today we (Chris, John, Adri and I) went to Zeeland to check the QRM level near the Ouddorp lighthouse (it was ok), and I wanted to check the performance of a 80m vertical delta loop. Included are some images.

foto1_cleanedfoto2_cleanedfoto3_cleanedfoto4_cleaned

The 80 meter delta loop consists of 80m of wire, and a 1:4 current balun. It has two functions, it does the common mode rejection from a symmetric antenna to an asymmetric transmission line, and it transforms the 200 Ohm impedance to the 50 Ohm. The measured SWR was around 1.7 at the resonance frequency of 3650 kHz. Still confused? This is what we made:

 

The 1:4 Guanella balun (invented by Gustav Guanella, 1909-1982) was discussed earlier in this blog: link Why this design? I never found an opportunity to test a delta loop in the field,  I didn’t have a good antenna for 80 meter, and I never tested my Guanella Balun. A significant advantage is also that the Delta loop only requires one mast rather than two (or even three) required for the dipole.

The radiation pattern of this design is interesting when you put it in NEC, it appears as if all power is radiated upwards and it has a little bit of directivity, so this is an antenna for NVIS (near vertical incidence skywave) activities. During NVIS you stay under the critical frequency which was about 4 MHz during the event.

Screen Shot 2018-04-16 at 13.59.28
Azimuth pattern, the antenna has 7 dB gain apparently, but it changes by frequency (it sweeps over the full 80 meter band here)
Screen Shot 2018-04-16 at 13.59.17
Charge intensity
Screen Shot 2018-04-16 at 13.58.54
Elevation pattern, NEC suggests that most of the power is going upwards

Here is the log of the QSOs we made, all locally (of course because of the time of day and the frequency):

Screen Shot 2018-04-20 at 10.40.14

For DX contacts on 80m you need to be there around sunrise and sun-set.

Last update: 20-April-2018

Dodecahedron with resistors

IMG_1742

The topology is shown in the image, there are 12 faces, 20 nodes and 30 edges. I started with node 1 as the pole, and compute the resistance at all other nodes with 1000 Ω resistors along the edges. The same MATLAB program found 5 possible solutions:

  • Category 1: drain at nodes 2,3 and 4:  633 1/3 Ω
  • Category 2: drain at nodes 5,6,7,8,9 and 10: 900 Ω
  • Category 3: drain at nodes 11,13,14,17,19:  1066 2/3 Ω
  • Category 4: drain at nodes 12,15,18:  1133 1/3 Ω
  • Category 5: drain at node 20: 1166 2/3 Ω

I guess the code is sufficiently debugged now, the answer agree with what I found on the internet.

Last update: 28-1-2018 15:09

Icosaeder with resistors

If you can do the cube, then you can also do the icosaeder, the topology is as follows:

icosaeder

Enter the topology in the program that I used for the cube, and of course, the Kirchhoff conditions are automatically generated. With 1000 Ω resistors I found:

  • Configuration 1: From node 1 to node 12  : 500 Ω
  • Configuration 2: From node 1 to node 6    : 366 2/3 Ω
  • Configuration 3: From node 1 to node 7    : 466 2/3 Ω

For configuration 1 the current solution shows zero ampere between nodes 2-3, 3-4, 4-5, 5-6 and 6-2 and also between nodes 7-8, 8-9, 9-10, 10-11 and 11-7. For the other configurations this is not the case.

Are there volunteers to solder the “resistor icosaeder” and verify the answers?

Last update: 28-1-2018 11:52

Resistor cube

What is the replacement resistance of this resistor network? There are three possible answers, the original problem I found on stackexchange (and other websites) was like this:

resistorcube

All resistors are the same value, the answer is 5/6 times the value of each resistor. The are also other answers, namely, the resistance along one side or the resistance across a face between two corner nodes.

How to solve this problem

Your friends for this problem are Ohm’s and Kirchhoff’s laws. Both laws are linear and you can build a system of linear equations to be solved. So how does this work? In a network of resistors there are voltage nodes, they are numbered in black, at which there are voltages, and there are currents along links between the nodes, the resistors numbers are in red. The voltage difference between two nodes A and B over a resistor R results in the linear condition Vb – Va = I * R. Also at a node you have the condition that the sum of all incoming currents equals to the sum of all outgoing currents. This is all you need together with two boundary conditions, namely a prescribed voltage at the entrance of the network (node 1) and 0 volt at the exit (node 7). The entrance point is called the source, and the exit point is called the drain.

In the resistor cube problem there are 8 nodes, and 12 links. The MATLAB code creates the matrix A and the vector y and it solves A x = y so that x in the end returns all the voltages and currents in the network. Due to the boundary conditions you need to remove two Kirchhoff law equations. The rationale is that we set voltage of 1 at node 1 and at node 7 we ground the system. The sum of the currents that connect to node 1 results in the replacement resistance for the cube. For the problem posted on stackexchange it becomes 5/6 times the resistors in the cube.

MATLAB code for the problem

In the follow code the Ohm law equations are hand coded, also the Kirchhoff conditions and the boundary conditions are manually inserted.

%
% Cube with resistors, when R=1000 Ohm, the replacement resistance becomes
% 833 Ohm, thus 5/6 times R
% 
clear
R = 1000; Vset = 1;
vnode = [1 2 3 4 5 6 7 8];
inode = [1 2 3 4 5 6 7 8 9 10 11 12]; inode = inode + 8;
nlink = 0; njoint = 0; ne = 0;
nlink = nlink + 1; link(nlink,:) = [vnode(1) vnode(2) inode(1)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(2) vnode(3) inode(2)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(3) vnode(4) inode(3)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(4) vnode(1) inode(4)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(5) vnode(6) inode(5)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(6) vnode(7) inode(6)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(7) vnode(8) inode(7)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(8) vnode(5) inode(8)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(5) vnode(1) inode(9)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(2) vnode(6) inode(10)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(3) vnode(7) inode(11)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(8) vnode(4) inode(12)]; resistor(nlink) = R;
% njoint = njoint + 1; joint(njoint,:) = [inode(1) inode(4) inode(9)]; flow(njoint,:) = [ -1 1 1 ];
njoint = njoint + 1; joint(njoint,:) = [inode(1) inode(2) inode(10)]; flow(njoint,:) = [ 1 -1 -1 ];
njoint = njoint + 1; joint(njoint,:) = [inode(2) inode(3) inode(11)]; flow(njoint,:) = [ 1 -1 -1 ];
njoint = njoint + 1; joint(njoint,:) = [inode(3) inode(4) inode(12)]; flow(njoint,:) = [ 1 -1 1 ];
njoint = njoint + 1; joint(njoint,:) = [inode(5) inode(8) inode(9)]; flow(njoint,:) = [ -1 1 -1 ];
njoint = njoint + 1; joint(njoint,:) = [inode(5) inode(6) inode(10)]; flow(njoint,:) = [ 1 -1 1 ];
% njoint = njoint + 1; joint(njoint,:) = [inode(6) inode(7) inode(11)]; flow(njoint,:) = [ 1 -1 1 ];
njoint = njoint + 1; joint(njoint,:) = [inode(7) inode(8) inode(12)]; flow(njoint,:) = [ 1 -1 -1 ];
for i=1:nlink,
 ne = ne + 1;
 idx = [link(i,1) link(i,2) link(i,3)]; 
 A(ne,idx) = [-1 1 resistor(i)];
end
for i=1:njoint,
 ne = ne + 1;
 idx = [joint(i,1) joint(i,2) joint(i,3)]; 
 A(ne,idx) = [flow(i,1) flow(i,2) flow(i,3)];
end
ne = ne + 1; A(ne,vnode(1)) = 1;
ne = ne + 1; A(ne,vnode(7)) = 1;
fprintf('Number of links/joints/equations = %d %d %d\n',nlink,njoint,ne);
y=zeros(ne,1);
y(ne-1) = Vset; y(ne) = 0;
x = A\y;
voltages = x(vnode)'
currents = x(inode)'
Ical = -x(inode(4))+x(inode(1))-x(inode(9));
Replacement = Vset/Ical;
fprintf('R= %f, Replacement resistance = %f\n',R,Replacement);

The outcome of this problem not only depends on the value of the resistors, but also on how we define the boundary conditions of the system. But we can change that, lets keep for simplicity the source at node 1, but select difference nodes where we ground the system. I found this for 1000 Ω resistors along the cube:

  • Ground at node 2, 4, or 5 and the replacement resistance becomes 583 1/3 Ω
  • Ground at node 3, 6, or 8 and the replacement resistance becomes 750 Ω
  • Ground at node 7 and the replacement resistance becomes 833 1/3 Ω

In other words, the problem is very symmetrical and there are only three possible answers.

Automate a part of the equations

Want to play around with code that automatically generates the Kirchhoff and boundary conditions so that you only need to specify the current paths? Try this code, in principle it should be expandable to something like SPICE which is a general tool:

%
% Cube with resistors, all R=1000 Ohm, 
% Calculate the replacement resistance depending on the boundary conditions
%
clear
R = 1000; 
%
% Here are the voltage nodes and the current links
%
vnode = [1 2 3 4 5 6 7 8]; nv = 8;
inode = [1 2 3 4 5 6 7 8 9 10 11 12]; 
inode = inode + 8; ni = 12;
nlink = 0; njoint = 0; ne = 0;
%
% topology: you only need to specify the voltage current relations
%
nlink = nlink + 1; link(nlink,:) = [vnode(1) vnode(2) inode(1)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(2) vnode(3) inode(2)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(3) vnode(4) inode(3)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(4) vnode(1) inode(4)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(5) vnode(6) inode(5)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(6) vnode(7) inode(6)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(7) vnode(8) inode(7)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(8) vnode(5) inode(8)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(5) vnode(1) inode(9)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(2) vnode(6) inode(10)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(3) vnode(7) inode(11)]; resistor(nlink) = R;
nlink = nlink + 1; link(nlink,:) = [vnode(8) vnode(4) inode(12)]; resistor(nlink) = R;
%
% define here the boundary conditions (where is the source/drain)
%
bc = zeros(nv,1); 
bc(vnode(1)) = 2; Vset(2) = 1; % this is the source condition
bc(vnode(7)) = 1; Vset(1) = 0; % this is the drain condition <<<<< change the drain condition here
to = zeros(1,10); sense = zeros(1,10);
%
% automatically generate the joints (the Kirchhoff relations)
%
njoint = 0;
for i=1:nv,
 if ( bc(vnode(i)) == 0 ),
 from = vnode(i);
 idx = find( (link(:,1) == from) | (link(:,2) == from) );
 nidx = size(idx,1);
 if (nidx > 1),
 nto = 0;
 for jdx = 1:nidx,
 p = idx(jdx);
 if (from == link(p,1)),
 nto = nto + 1;
 to(nto) = link(p,2);
 sense(nto) = 1;
 ipath(nto) = link(p,3);
 end
 if (from == link(p,2)),
 nto = nto + 1;
 to(nto) = link(p,1);
 sense(nto) = -1;
 ipath(nto) = link(p,3); 
 end 
 end
 % [from to(1:nto) sense(1:nto) ipath(1:nto)];
 njoint = njoint + 1;
 joint(njoint,:) = ipath(1:nto); flow(njoint,:) = -sense(1:nto);
 end
 end
end
%
% Insert the Ohm and Kirchhoff relations in the A matrix, add the boundary
% conditions
%
for i=1:nlink,
 ne = ne + 1;
 idx = [link(i,1) link(i,2) link(i,3)]; 
 A(ne,idx) = [-1 1 resistor(i)];
end
for i=1:njoint,
 ne = ne + 1;
 idx = [joint(i,1) joint(i,2) joint(i,3)]; 
 A(ne,idx) = [flow(i,1) flow(i,2) flow(i,3)];
end
y=zeros((ne+2),1);
for i=1:nv,
 j = vnode(i);
 if (bc(j) ~= 0),
 ne = ne + 1; A(ne,j) = 1; 
 if (bc(j) == 1),
 y(ne) = Vset(1); 
 end
 if (bc(j) == 2),
 y(ne) = Vset(2); 
 end
 end
end
%
% The A matrix and the y vector should be complete here
%
fprintf('Number of links/joints/equations = %d %d %d\n',nlink,njoint,ne);
x = A\y;
voltages = x(vnode)'
currents = x(inode)'
Ical = -x(inode(4))+x(inode(1))-x(inode(9));
Replacement = (Vset(2)-Vset(1))/Ical;
fprintf('R= %f, Replacement resistance = %f\n',R,Replacement);

Are my answers correct?

IMG_1740
Soldering this thing is fun, I found twelve 270 Ω resistors with a tolerance of 1%

In order to check the model I made a resistor cube from twelve 270 Ω resistors. Next you take the multi-meter and start to measure a sufficient number of resistances so that the mean and the standard deviation can be determined. With 95% probability I found:

  • 225.50 +/- 0.16 Ω for node 1 to 7 like combination
  • 203.04 +/- 0.34 Ω for node 1 to 3 like combinations
  • 157.88 +/- 0.48 Ω for node 1 to 2 like combinations

The resistors are according to me somewhat larger than 270 Ω, probably they are closer to 271 Ω, in any case, the model predicts:

  • For 270 Ω resistors you get: 225, 202.5 and 157.5 Ω
  • For 271 Ω resistors you get: 225.83, 203.25 and 158.08 Ω
  • For 270.5 Ω resistors you get: 225.42, 202.88 and 157.79 Ω

The last guess is closest to the measured values. The conclusion is that model and data seem to be in agreement.

Have fun and share your ideas

Last update: 28-Jan-2018 00:25