Reading view

There are new articles available, click to refresh the page.

SMA to Whatever

Today on Stupid Solutions to Stupid Problems – a postage stamp sized PCB for putting an SMA port on, well, whatever.

Several times on recent projects I’ve had to try to pass RF around between boards that don’t have footprints for coaxial connectors. I’ve tried various methods such as just soldering a bit of micro-coax to the board or using 0.1″ headers but none of them are satisfactory.

Recently I damaged a 20W amplifier attempting to solder an SMA connection to a footprint that wasn’t meant for one. While debugging and repairing that board I had an epiphany – why not just make a tiny adapter board? So that’s what I did.

It’s a tiny PCB with an SMA footprint on one end and a 0.1″ header footprint on the other. Now I can put an SMA connector anywhere I please.

I made some extras for anyone that needs one (or a few) and of course the design is open source.

73, AI6YM

T41-EP v12 Kits

If you’re interested in a kit to build the T41-EP open source transceiver please send me an email (justin@ai6ym.radio). I’ve been unable to find anything in stock for myself so, with the blessing of the creators, I’ll be running a small batch of them.

The T41-EP is an excellent software defined transceiver (SDT) designed by Al Peter (AC8GY) and Dr. Jack Purdum (W8TEE) and published in their book Digital Signal Processing and Software Defined Radio: Theory and Construction of the T41-EP Software Defined Transceiver.

These things get cheaper the more I order so please let me know if you’re interested so I can place the largest order possible.

Field Day in Review – 2024

Somehow I’ve avoided operating on Field Day for the seven years I’ve been licensed. Life always found a way to keep me busy on the fourth full weekend of June. This year I finally made it out, joining PAARA at Bedwell Bayfront Park.

I’ll admit that I skimmed the announcement so I wasn’t expecting super-stations run out of the back of U-Haul vans or to be operating from a part of the park normally inaccessible to vehicles.

20m HF from a uHaul.
Operating 20m at 11pm on field day.

After seeing my Lightning, David (KD0BTO) pointed out the 100 extra points available for running a station on “natural power”. After a careful review of the rules we determined that since my Lightning was charged from solar at home running the station off the truck’s inverter met the requirements. We couldn’t resist trying it out.

Powering station B from the Lightning for 100 bonus points.

The truck didn’t break a sweat making over 40 contacts in the following half hour or so. I would have run the station longer but I learned the club had permits to camp so I had to run home and get my gear. Many thanks to my XYL for putting up with me dragging her along for a last minute overnight.

Truck bed camping at sunrise, Bedwell Bayfront Park.

I usually don’t enjoy waking up at 4AM but operating such a great station while watching the sunrise over the San Francisco Bay was definitely worth it.

Many thanks to Doug Teter (KG6LWE) for coordinating the event, Harry Cline (K4YR) for getting me up to speed on field day operations, Rob Fenn (KC6TYD) for keeping us all fed, Ben Faershtein (KO6CNT) for his humor when the band wouldn’t cooperate, and all the members of PAARA for making me feel welcome.

73, AI6YM

Simultaneous Multi-Band FT8 Receive

The availability and performance of Software Defined Radios (SDRs) today is incredible. Equally incredible is how poorly us Hams make use of the capabilities at our disposal.

A single HackRF One can simultaneously receive a 20MHz wide slice of spectrum anywhere from 1MHz to 6GHz. That means that a single device can simultaneously receive every amateur band from 20 meters to 10 meters or from 160 meters all the way to 15 meters!

In this post I’ll show you how to receive and decode FT8 on multiple bands simultaneously. These techniques can be expanded to receive WSPR, JT9, and every other digital mode in the received bands. Your CPU is the limit.

Hardware

HackRF One or another SDR with a high sample rate and the capability to receive HF.

Any old PC or Single Board Computer (SBC) – I’m using an old laptop with a quad-core i7 running at 3.5GHz. Nearly anything with a CPU is acceptable. My recommendation for SBCs is currently the Orange Pi 5 Pro, it’s a good balance of cost vs performance but it might not get you all 5 bands like my old i7 will.

Multi-Band Antenna – I’m using a PAC-12 from QRP Labs. It is not the best choice for this application since it needs to be tuned for each individual band, but it is a great POTA antenna and I already had it hooked up. A good fan dipole or trapped EFHW would be better.

Software

Linux Mint – Most of this will work on any OS that can run the rest of the software but the audio routing bits are specific to Linux & PulseAudio.

PulseAudio – This is already installed with most modern Linux distributions, including Mint. If you’re running another audio server, or an OS without PulseAudio, you get to figure out routing audio between GNU Radio and WSJT-X.

GNU Radio – Manages the SDR, tuning, and demodulating SSB.

WSJT-X – Decodes FT8 from the audio produced by GNU Radio.

Source

All of the code and configuration I used is on GitHub. Please feel free to adapt or build on this work (see the LICENSE file for details).

References & Gratitude

Many thanks to Mark Smith, N6MTS – Mark’s March 2021 QSO Today presentation provided the guiding light for this work. I’m especially grateful that he included links to source material.

Additional inspiration was taken from Corey Koval, K3CPK – Corey’s Automate FT8 GitHub project showed me the way through some interesting bugs.

Thanks to Tushar Jain for uploading an SSB signal capture to their EE304P GitHub repo. All other sources for that file seem to have been scrubbed from the internet.

Problem Outline

The process of extracting useful data from a 20MHz wide chunk of raw RF is a bit daunting but it can be broken down into small steps.

  1. Tune to a Target Signal – 20MHz is too much data to process, the target signals are ~3kHz.
  2. Demodulate SSB – FT8 (and most digital modes) are decoded from audio which has been demodulated from a Single Side Band (SSB) signal.
  3. Decode FT8 – Our demodulated audio stream has to make it to something that can decode FT8.
  4. Multiband Operation – We need multiple parallel instances of the decoding software playing nicely together. Multiple audio streams need to be routed correctly, labelled, and ideally we should have the ability to listen in to each band.

Tuning to a Target Signal

I chose to split tuning into two steps. First, tuning to a specific Amateur band (or at least, a good part of it) and second, tuning in to the specific frequency used for FT8 on that band. The workload to filter and decimate the 20MHz sample of raw RF is very high so splitting this work up allows decoding other digital modes in the future without adding a lot of load to the CPU.

Band Tuning

The Frequency Xlating FIR Filter block.

Allow me to introduce the Frequency Xlating FIR Filter, this is a stock block provided by GNU Radio that provides frequency shifting, filtering, and (optionally) decimation in one step. It’s a bit more CPU efficient than executing each of those steps separately.-

My goal here is to reduce the massive 20MHz sample rate to something more manageable for each amateur band, center the target band in the output, and filter out neighboring signals. I chose to take every band to a 400kHz slice. That slice is large enough to cover the entire CW, digital, and beacon ranges of each HF band. Using the same slice for each band also makes the math easier downstream.

This hier block calculates and executes the filter necessary from a few inputs. The most important bits are the input center frequency, the output center frequency, and the output bandwidth.

This filter was a frequent source of bugs; signals being shifted incorrectly, aliasing, massive energy loss, and more. Configuring the taps incorrectly was usually the problem (the documentation explains essentially NOTHING about that function) but the C++ reference for the firdes class cleared things up.

For a bandpass filter, which is what we need for isolating an Amateur band, firdes.complex_band_pass takes the gain, input sample rate, the low cutoff relative to the center frequency, the high cutoff relative to the center frequency, and the transition bandwidth. Let’s go over each of those.

  • gain is the 1. No need to amplify or reduce the target signals.
  • input sample rate is just the sample rate coming into the block.
  • low cutoff is negative, half of the bandwidth in Hz desired from the bandpass filter.
  • high cutoff is positive, also half the bandwidth desired.
  • transition bandwidth is up to you, smaller values make for greater rejection of signals adjacent to your bandpass but that comes at a high CPU cost. My block defaults to 2kHz but my CPU struggled to keep up, even on a single band. More on that later.

The result is exactly as described, the large chunk of raw RF is taken down to a manageable slice covering the target band.

SSB Tuning

With an amateur band isolated into a manageable chunk it’s time to select a single SSB signal. This is just another Frequency Xlating FIR Filter but on a much more manageable quantity of data. The logic is wrapped up in another hier block for easy reuse.

The parameters here allow selecting a specific SSB signal; the interesting bits are the USB / LSB switch and the tuning frequency.

Hams think of frequency in terms of the dial on their radio but an SSB signal is actually above (Upper Side Band) or below (Lower Side Band) the tuning frequency. Our demodulation logic is going to expect the signal to be centered.

The center frequency here is calculated based on the tuning frequency and whether the target signal is USB or LSB. The bandpass filter limits the signal to the desired audio bandwidth. The transition bandwidth of the filter is a compromise at 800Hz, if I was using this for voice signals I’d probably want a tighter filter.

The waterfall below shows an SSB signal on an FT8 frequency after tuning. The content is centered, adjacent signals are strongly attenuated but there is still some out of band leakage.

SSB Demodulation

If you’re expecting a detailed explanation of SSB demodulation mathematics you’re about to be disappointed.

This hier block implements the weaver method for SSB demodulation. I went on a deep dive to understand how it works; I ended up with a headache and a renewed appreciation for people that study advanced mathematics. It’s an interesting subject if you enjoy studying such things.

There’s not much to say about this block. It takes in a tuned, filtered RF signal and it outputs an audio signal at the same sample rate. I chose to sample at 8kHz to allow a bit of head room over the roughly 3kHz audio being demodulated. Remember audio bandwidth is half of the input RF sample rate.

The waterfall below shows the audio content extracted from the FT8 signal shown previously.

Testing

I had to test this demodulation with a known signal, something I could listen to and hear any off-center tuning or inversion (making the wrong LSB / USB choice). Digital signals and the weak audio I could find on the band aren’t great for that. The official GNU Radio documentation provides a captured signal for testing but the link is broken. I eventually found the file and it’s included in my GitHub repo.

The test file is centered at 50.247MHz (that took a while to figure out) and sampled at 256kHz. I built this simple flow to resample it for compatibility with my blocks, tune and demodulate the 50.3MHz LSB signal, and route the audio for playback.

I’m going to make this look easy by showing you the end result and not the hours of debugging my own idiocy. Getting these waterfalls was frustrating and it required a lot of time. If you’re struggling with an SDR problem remember that we take a lot of what our radios do for granted, you’re looking at my result NOT my process.

FT8 Workflow & Decoding

Let’s put these pieces together for a real signal. It’s not much different from the demodulation test workflow. Receiving from the HackRF is one simple block, all I’ve done is make the amplifiers and gain variables accessible from the QT GUI.

That’s RF reception, band tuning, ssb tuning & demodulation, and audio playback. That’s a radio, maybe not a great one, but it’s a radio. If this was a rig sitting in the shack we would connect the audio input and output to our PC, open up WSJT-X, and we’d have FT8 monitoring.

So let’s do just that! PulseAudio has a concept of null sinks and monitors. A null sink is just a virtual audio device any application can play out audio to. A monitor is virtual audio device any application can record audio from, one is automatically created for every real or virtual sink.

$ pactl load-module module-null-sink sink_name=vsink0

One command is all it takes to create the audio devices and routing we need. Now just set GNU Radio and WSJT-X to use the null sink and its monitor.

Start the workflow on your band of choice (I tuned in 20m, because there was a lot of activity) and you’ve got signals.

It would be nice to be able to listen in for debugging and tuning purposes. For that we need a loopback.

$ pactl load-module module-loopback source='vsink0.monitor'

Multiband FT8 Workflow

One band down, how much harder could five be?

All the concepts here are the same. We’re receiving a wider sample of RF (20MHz), and tuning into 5 separate bands, routing each band to an SSB Tune & Demod block, and then resampling the audio for consumption by WSJT-X.

Audio Routing

Each band has its own audio sink, monitor, and loopback. They are all named and I’ve added descriptions which are visible using GUI tools. I added one additional “null” sink which is the default output for the loopbacks. That means that by default we aren’t hearing the audio from every band at once but we can listen in using tools like PulseAudio Volume Control (pavucontrol).

By putting this configuration in the PulseAudio config directory (/etc/pulse/default.pa.d) the configuration will persist through reboots and service restarts. My full config file is in the GitHub repo.

WSJT-X

WSJT-X expects to be a singleton, i.e. it will only allow one instance of itself to be running at a time. For most users that’s a good thing but for us it’s a problem.

We can create additional “Rigs”, separate config files for WSJT-X, and spawn multiple instances from the command line.

$ wsjtx --rig-name=20mFT8

Each one needs to be individually configured to use the audio device intended for the band it is monitoring. Once configured they can all be started in parallel. My, mostly correct, configuration files are in the GitHub repo. These are stored in ~/.config on Linux systems.

Only 17m and 20m show any decodes because my antenna was tuned for 20m for this screenshot. One day I’ll build a better multi-band antenna.

Obviously this is not a low intensity task for the PC. I’m running this on a 7 year old laptop with a quad-core i7 processor and it’s barely hanging on with all the waterfalls disabled. I managed to squeeze in room for one WSJT-X waterfall at a time.

Wrap Up

That’s it for now. Five parallel FT8 monitors from a single SDR, running on a single machine. There’s some room for improvement and I still need to get transmitting functional.

Before I sign off I owe one last bit of gratitude to the ancient CPU in this old laptop.

73, AI6YM

Operating from a P3 Orion at Moffett Field Museum

I had a great time on Saturday operating from the P3 Orion preserved at the Moffett Field Museum. In honor of their 91st birthday the museum has opened up their P3 Orion for visitors (and brought out a few other special exhibits I won’t spoil for you). With the help of Mike “The Noisy Kid” Gitschel, K6QFO, CW stations are operating in both the museum and the aircraft.

This is an amazing aircraft with all its original submarine-hunting equipment and it’s usually not open to the public. If you’re nearby take the drive, and bring your kids to type out a few dits and dahs.

Thanks again to Mike for setting up the station and inviting local hams to operate. It was a blast operating from this piece of history; some of those kids picked up morse code quicker than I did.

For any local hams – Mike is still looking for volunteers. His contact information is on his QRZ page or you can drop me a line and I’ll introduce you.

73, AI6YM

A Surprisingly Smooth Assembly of the QRP-Labs Low Pass Filter Kit

Nearly every radio project needs a low pass filter at some point, the QRP-Labs LPF kit is a quick and easy build that can knock out harmonics for nearly any low power HF radio. This is a compact, modular kit implementing a 7-element low pass filter which can handle 10 watts safely. Variants are available for bands from 2200m through 1.25m.

The kit was developed by Hans Summers, G0UPL. With Tor F.I Anderson, SM6FWF, contributing the 2m and 1.25m variants. I’m using these filters as the final filtering stage of a 10-band POTA rig I’m building around the HackRF One.

For details on the kit check out QRP-Labs.com.

Pros

  • Small & Modular
  • Handles full QRP power (10W)
  • Great attenuation, 50dB+ typical at the first harmonic

Cons

  • Closed source hardware
  • Closely spaced components can be a bit difficult

Safety Matters!

Soldering irons are hot. Everything they touch gets hot.

Have a fire extinguisher nearby!

Solder splatters. Your eyes are not easily replaceable.

Wear your PPE!

Fumes from heating the enamel coating on magnet wire can be dangerous.

Work in a well ventilated area!

Tools and Materials

Parts Included

1) 2x 680pf ceramic capacitors
2) 2x 1200pf ceramic capacitors

3) Magnet wire
4) 2x 5 pin header plug

5) 3x T37-2 toroids
6) PCB

Note: These are the parts supplied for the 60m filter kit which I’m building. Part values vary according to the band targeted by the filter.

Assembly

Before you start, check and label your capacitors to figure out which ones are which. Unless you’ve been bitten by a radioactive spider lately, you’ll definitely want to use a jeweler’s loupe for this.

Like most amateur radio kits you’ll be winding toroids. Unspool and cut the supplied wire into thirds.

When winding it’s important to wind in the correct direction, in this case all the coils are wound counter-clockwise. If you wind in the wrong direction you may get more inductance than you bargained for.

Each pass through the center of the toroid counts as one turn. This 60m band filter requires two 23 turn inductors and one 24 turn inductor. Follow the chart in the kit’s instructions if you’re building for another band.

Don’t worry about spacing yet, keep the turns tight against the toroid and pack them together every few turns.

Pro-tip: If you’re building multiple filters this is a great place to recruit the help of an unsuspecting friend or loved one!

Keep a small gap at the bottom of the toroid to reduce capacitive effects, evenly space the turns around the toroid once you’ve finished winding.

Always check your work and keep L2 (more turns) separate!

With all the toroids wound and the capacitors identified it’s time to start soldering.

Start with the capacitors since they are the smallest components. I’m using a bit of fun-tak to keep the capacitors in place while I solder from the bottom.

The fun-tak will leave a little residue where it was heated by soldering, this isn’t usually a problem and it’s easily removed with a bit of fresh fun-tak once the board has cooled down.

Next, scratch up the leads of your toroid coils with a bit of brass from your tip cleaner. An emery board or a bit of sandpaper works too but I’m cheap and impatient. (I didn’t have any and I wasn’t going out to get any.)

You don’t need a clean strip, it just has to be scratched up enough to get solder through and burn off the rest of the enamel.

Slip the coil ends through the holes and add fun-tak to secure them.

Trim off most of the excess wire and solder the coil ends. It may take a bit more heat or a few extra seconds to get a good joint. The enamel coating needs time to melt and boil off.

Solder bridges don’t matter between the ends of L1/L2 and L2/L3. These pads are connected on the PCB anyway. Just make sure solder is wicked up the wire and onto the annular ring.

While we’ve got the board upside down, add the headers and fun-tak them into place.

Flip the board over and solder a single pin of each header, check alignment, then solder the rest of the pins.

Remove the fun-tak and clean off the residue with a bit of fresh tak. Some residue is left on my board but not enough for me to care. If you care about the residue feel free to spend all day cleaning your PCBs.

Before we call it a day, check for continuity where we need it and a lack of continuity where we don’t want it.

With this filter design IN should have near-zero resistance to OUT. Both sides have the same GND, and there should not be any connection between IN/OUT and GND.

I’m very surprised that I got through this build with no notable mistakes. I usually try to make at least one but I have nine more of these filters to build so there’s still time. Integration into the rig and testing of the filter’s performance is coming in a future post; until then, see you on the bands!

73, AI6YM

An Unconventional Assembly: QRP-Labs Ultimate Relay Switched LPF Kit

The QRP-Labs Ultimate Relay Switched LPF Kit was developed by Hans Summers, G0UPL, as an extension to the Ultimate 3 and Ultimate 3S transceivers. It allows switching between six different Low Pass Filters (LPFs) and so operating the transceiver on six different bands instead of one.

I’ve used these relay-switched filter boards in several projects now and I’ve been surprised at how easily they can be adapted to uses beyond their design. The build below shows an unconventional use for the kit – switching multiple filter arrays from a single MCU pin. This is a part of a 10-band POTA rig I’m building around the HackRF One.

For details on the kit and more conventional uses of it check out QRP-Labs.com.

Pros

  • Low power consumption, 10W+ switching.
  • Easy to build and integrate into projects.
  • Swappable filter modules.
  • Easily adaptable from an LPF switching array to a BPF (Band-Pass Filter) array and other applications.

Cons

  • Closed source hardware.
  • Uncertain inductances (performance may degrade at frequencies higher than ~30Mhz).
  • No input terminal, output terminal only usable in LPF configuration.
  • Missing thermal reliefs on some ground pads (makes soldering slightly more difficult).

Safety Matters!

Soldering irons are hot. Everything they touch gets hot.

Have a fire extinguisher nearby!

Solder splatters. Your eyes are not easily replaceable.

Wear your PPE!

Tools and Materials

Parts Included

1) 6x G6S-2 5v DPDT relays
2) 6x 1N4148 diodes

3) 10x 4 pin header sockets
4) 1x 2×5 pin header socket
5) 1x 2×5 pin tall plug

6) 4x nylon spacers
7) 1x PCB (not pictured)

One relay and diode, the 2×5 pin header and socket, and the nylon spacers will not be used in my build today. The extra relay and diode were included with the kit to modify the Ultimate 3 transceiver but I’m not building this kit for that purpose. The spacers, header, and plug are intended to attach this board to the Ultimate 3 but don’t fit in my project.

Assembly

Install the diodes first as they the smallest components and will be very difficult to install later.

Align the black band on the symbol with the PCB’s silkscreen. I’m top-soldering to secure the parts before I flip the board over to finish the solder joint.

Finish the diodes by trimming their leads as close to the board as possible. You need these as jumpers to configure the board!

Fold the off-cuts over your pliers to form a tight bend.

Solder the jumpers in place following the kit’s instructions. I’m configuring the board as if it were switching BPFs. Each relay channel will be independent rather than always routing through relay one.

I’m top-soldering these components too, before flipping the board and finishing the joints from the bottom. It may not be the most professional technique, but I don’t feel like chasing little bits of wire that fall off my work bench.

I’ve made my first mistake on this build! At least the first one I’ve noticed.

On the right side of the board three jumpers are very close together and I’ve created a solder bridge. Looking closely the ends of the jumpers are bent out and touching each other too.

It’s time for some flux and the solder sucker. Flux will improve heat transfer and increase the surface tension of melted solder.

Don’t be stingy with the flux! You can always clean the board later.

Once the excess solder was removed I also trimmed the ends of the jumpers a bit to keep them apart.

The solder bridge may be gone but a close inspection shows a lot of solder residue.

A bit more flux and a brief pass around each pin with the soldering iron will pick up that residue.

With the small parts installed the next step is relays.

I use a bit of flux to hold the relay in place and improve flow from the bottom of the board through the joints. Ideally through hole joints have solder all the way through the board.

It’s a good idea to solder a single pin to secure the relay and check for any misalignment before soldering the rest of the pins.

For the second relay flux wasn’t enough to hold it in place but it’s safe to hold the relay with one hand and solder with the other. Just put a bit of solder on the tip of your iron for the first pin.

Yes, I know transferring solder from the iron to the pin isn’t good technique. It’s one pin to hold the part and I’ll improve the joint after the rest of the pins are soldered.

Here’s another mistake. The relay pins connected to the ground plane didn’t form a solid joint. See the bare copper around the solder joint?

This joint needs more heat. The designer didn’t include thermal reliefs on these pins so the ground plane is pulling heat away; solder only flows to hot metal.

Turning up the heat on my iron and adding some flux might have worked but I didn’t want to struggle through all 10 of these pins.

Enter the heat gun! On a low setting for a few seconds the heat gun warms up a large area of the board enough that the soldering iron can get that joint hot enough to flow freely.

Inspection with my loupe again shows a solid joint.

Always inspect your joints! Your eyes aren’t as good as you think they are and even experts make mistakes. If you’re reading my blog you’re probably not an expert anyway (I’m not!)

Entering the home stretch… module headers are next.

I tacked one pin on each header first to secure them and check for alignment while it’s still easy to fix.

Surprise! Surprise! A mistake!

One of my headers is misaligned. Since I’ve only soldered one pin it’s easy to fix the alignment by heating up the joint and nudging the header into place.

If you’ve soldered more than one pin you’re going to need to remove some solder or use the heat gun to heat up all the joints (good luck not melting the plastic while you do that, you might need to replace the header).

Once all the headers are aligned the rest of the pins can be soldered. Be generous with the flux here, solder doesn’t like to flow over oxidized pins without a little help.

Next the board needs control lines and power. I decided not to use the supplied 2×5 pin header and solder wire directly to the board.

This type of header isn’t the most secure choice for wiring. I expect this rig to be bumped around a lot and I really don’t want to be troubleshooting disconnected wires in a park or on the side of the road.

That’s it! In a future post I’ll show how this component fits into the larger project.

Until then, see you on the bands!

73, AI6YM

❌