Tips for operating on JS8 at my station
JS8 is currently my favourite amateur radio communication mode. It's designed for extremely weak signals, so it copes well with noisy links, bad antennas, poor propagation conditions, and so on. It takes the very popular FT8 mode and takes it into the realm of keyboard-to-keyboard communications and message relaying. With a group of stations all sharing the same frequency, the result is a decentralised network of station that can easily message each other, be it in real time or via a message inbox.
Getting JS8Call going with my setup was a little bit fiddly, but not too bad. What mostly stood in my way were some very basic mistakes that are worth noting down. This relates to my particular station configuration, but at the very least serves as a checklist for people trying out JS8Call from my house.
Put up the antenna. Pick the antenna for the band you're going to be using. There are currently two. The one with green paracord is cut for the 80m band and the one with the yellow paracord is cut for the 40m band. There are pulleys in the trees which are suitable distances apart, and I enthusiastically recommend the midshipman's hitch for tying the other end around the tree; it slips but stays put (enough) under tension. Hook up the balun to the tuner and check the tuner is hooked up to the radio.
Connecting your computer and radio. Time to hook everything up. The computer has two USB connections to the radio. One is the rig control cable, which Icom call C-IV, but is more commonly called CAT (computer-assisted transceiver). The other is the soundcard, a SignaLink USB. Its jumpers are set up for the IC-718, but you will want to make sure TX and RX are at the centre of the dial and DLY (delay) is at zero, all the way to the left. Inside the software, go into [Preferences → Audio] and check that 'USB Audio CODEC' is the input and output for the Modulation Soundcard. You'll want to make sure that nothing else is using this soundcard, or you'll be playing your music or relaying your Mumble calls (or whatever) out over the air and you won't be popular! While you're here, check rig control; in [Preferences → Radio] select 'Icom IC-718' as the rig and the relevant serial port under CAT Control.
Band and frequency. The main place people hang out on JS8Call is the 40m band, which means tuning your radio to 7.078MHz. If band conditions are favourable, though, it can make things easier to hop onto the 80m band, that is, 3.578MHz. Both of these, and in fact any of the JS8 frequencies, are upper sideband modulation. On my radio, you can select memory 21 or memory 23 for the 80m and 40m bands respectively, but it might be easiest just to select the frequency in the program and let the rig control take over.
Antenna and tuning. Once it's all hooked up, you need to tune it. Choose the RF power you want to use for the session. I find 20W is usually plenty. At night 10W is enough to communicate with stations in the USA. Then, with [TX] on in the program, click [TUNE], and experiment with the knobs on the tuner until there's lots of forward power and not much reflected power. The antennas are pretty resonant on their bands, though, and bypassing the tuner entirely might work a lot better.
Audio gain. The output power bar on the right of the program screen is more important than it seems. It's important when working with digital modes not to send too much audio into the radio. You'll then trigger the automatic gain control (automatic level control or ALC) and the transmitted signal will be distorted. With the tuning still happening, slide the output gain bar on the bottom right of the JS8Call program to just below the highest point at which ALC is not triggered. This isn't a set number; it varies with other aspects of the station's setup. So, you don't want it to be too high, but on the other hand, you don't want the bar to be too low, because you want those signals to get out there! I've noticed that this may need adjusting throughout the day: it's not 'set and forget'.
Pre-amplifier. The pre-amp can be enabled on my radio for receiving weak signals from the antenna. For a mode like JS8, it could help with the received signal-to-noise ratio, so it's worth enabling by pressing the [P.AMP] button. There's a [NB] which stands for 'noise blanker'. This is for reducing 'pulse-type noise such as that generated by automobile ignition systems', but isn't effective against other kinds of noise.
Check your system's clock is accurate. FT8, and therefore JS8Call, relies on you having an up-to-date system clock. An easy way to check this is to go to time.is in your browser. In Linux, ntpstat will tell you. For FT8, your clock must be synchronised to your recipients to within 20ms. You can look at the delta-time reported for other stations to see if you're drifting away from other stations on the network. By accessing the time drift controls you can set time drift relative to the rest of the network to be corrected automatically, stopping after a set number of decodes or just continually tracking and correcting for time drift. Other stations will deviate from you more than you might think!
Send out a heartbeat. With everything set up, you will want to see who out there can hear you. It's time to send out a heartbeat. The [HB] button will send out the message
@HB HEARTBEAT <grid> with <grid> being whatever your grid square is. When other stations hear this, they will reply with a response like
2E0RLZ HEARTBEAT SNR -20 MSG ID 14. This means 'I got your heartbeat transmission, you have a signal-to-noise ratio of -20dB, and I am holding a message for you, with identifier 14'. The combination of all these responses gives you a picture of who you can hear, who can hear you, and at what signal-to-noise ratio. The callsign list on the right is thereby kept fresh.
Speed adjustment. In JS8Call, transmissions can happen at one of four speeds, from slow to turbo. The original intention of slow mode was to start the contact in normal speed and then, if the propagation path is good, you can send subsequent overs at a faster rate. Similarly, you can downgrade the conversation to a slow rate to get the most out of every milliwatt. A slow connection uses 30 second frames, 25Hz of bandwidth, and can be decoded at a -28dB signal-to-noise ratio. At the other end of the scale, a turbo connection uses 6 second frames, 160Hz of bandwidth, and can be decoded at 'only' -18dB. For decoding, you should enable [MULTI] from the mode menu, so your decoder can handle all speeds, all at once.
Useful commands and tricks
A summary of these can be seen by right-clicking on the recipient's callsign. Here are a few commands I didn't quite get the hang of in my first JS8Call session, particularly around relaying and message storage.
@ALLCALL QUERY CALL M0SKF?— this means 'Can anyone confirm they can communicate directly with M0SKF?'. The response will be something like
OH1FEU: 2E0RLZ YES -02 (12H), which means 'Ths is station OH1FEU calling 2E0RLZ (that is, me). Yes, I was communicating 12 hours ago with them at signal-to-noise ratio of -2dB'. If this is recent you can go ahead and start relaying though this station OH1FEU.
OH1FEU >M0SKF HI— this requests the station OH1FEU to relay a message to M0SKF, who hopefully can also communicate with OH1FEU given what you learned from your
@ALLCALL. This message is not stored but if M0SKF is at their computer they'll see it and can reply via OH1FEU (or someone else!)
OH1FEU >M0SKF MSG GOOD MORNING— this means 'Please relay a command to M0SKF to put a message in his inbox saying Good Morning'. The
>M0SKFis the powerful bit. You can use this to relay any message to another station. You'd direct this message to somewhere that could communicate with M0SKF, so station OH1FEU in the previous example. If all went well, the intermediate station will relay the acknowledgement, e.g.
2E0RLZ> ACK *DE* M0SKF, confirming that all four messages made it on their travels back and forth.
- In practice sending messages, especially via relay like this, can be a bit of a gamble. If you send out a
MSGand it is not received, or it was and you didn't get an
ACK, for all you know the message is lost forever. If your JS8 station is on for a while, far better would be to store a message for the recipient on your station. The fact this message is waiting will show up in a heartbeat reply or if the station asks outright with
QUERY MSGS. Related to this, you can store a message for another user on a third party's station. An example of this would be
OH8STN MSG TO:M0SKF HI SAM. This would store a message for M0SKF on OH8STN's station, usually because both your station and the ultimate destination (here M0SKF) can both contact an intermediate (here OH8STN).
- Participating in autoreplies is important for the functioning of the network, but I've often found that they're the number one reason I don't get a full inbox message through. When I'm at the keys and directly using JS8Call, I sometimes disable [AUTO] for this reason. You can also just disable heartbeat acknowledgements and keep the other autoreplies on.
- Other stations might be storing messages for you. Because of this, it's good to do the occasional
@ALLCALL QUERY MSGSto see whether there's anything to retrieve. You'll also see notification of messages in heartbeat responses. If someone has left you a message,
QUERY MSG <number>will retrieve message with id <number> to your inbox.
- An Introduction to JS8Call is a nice article about the commands you can use, and other stuff, once you've set things up.
- The manual is available at the JS8Call download page. It's a Google document, but it contains a lot of detail on what it's possible to do with JS8Call.
- The JS8Call FAQ.
- JS8 at the signal identification wiki.
- OH8STN's posts about JS8Call.