Radio: RadioFax/HF Fax Reception on KiwiSDR with kiwifax.py

If you’ve seen my most recent post with the gallery of JJC Kyodo News HF faxes, you’re probably aware that I quite like receiving such signals off the air. I’ve scoured the Worldwide Marine Radiofacsimile Broadcast Schedules document from US NOAA/NWS in my quest to decode signals through the years, but propagation hasn’t always been kind and the transmissions are seldom intended to reach outside the NAVAREA the charts themselves cover.

With my recent epiphany regarding the existence of WebSDR, OpenWebRX and KiwiSDRs, I realised that my quest to receive HF faxes all around the world may have just gotten a lot easier.

What is RadioFax/WeatherFax/HF Fax?

RadioFax, also sometimes known as WeatherFax for its role in trasmitting weather analysis information to mariners or HF fax as it operates in the HF bands, is a method of image transfer over radio. It can almost be thought of as an SSB transmitter being fed with a tone at 2300Hz for white and 1500Hz for black with greys being the intermediate values. Lines can be sent at a rate of 60, 90 or 120 lines per minute or 1, 1.5 or 2 lines per second. The resulting image is often full of noise and speckles, as there is no error correction, and may be slanted as there is only limited provision for aligning synchronising the receiver clock during phasing.

I quite like receiving and decoding HF fax transmissions because they are almost like their “own” QSL card, especially if the text on the charts are readable. The weather data itself isn’t always interesting (although greyscale satellite images can be quite artistic), but the clarity of the image and the watermark text does serve as a concrete confirmation of the transmission date and station which originated the fax. It is also somewhat musical, especially if you like modem tones or repeating “screeches” at 0.5 second (120LPM) or 1 second (60LPM) intervals. It’s also a very “analog” simple mode of transmission encoding with no error correction/protection, leveraging our brain’s ability to filter noise, giving images their own “charm”.

Decoding HF Fax the Old Fashioned Way

Traditionally, radiofax can be decoded using dedicated printer receivers which you tune to the listed frequency. But these are rather expensive and clunky, intended for use onboard vessels. Instead, with the advent of sound-card based decoding software, radiofax can be decoded using software such as Fldigi (free), MultiPSK (limited resolution in free mode) or MixW (paid) amongst others. A traditional SSB-capable receiver is tuned below the listed frequency by 1.9kHz and the audio is fed into the software to decode the image. If the CPU is not being over-burdened and the sound card clock is relatively stable, a good image can be obtained after determining the slant correction.

Now that we have the possibility of remote reception through WebSDR/KiwiSDRs, the straighforward way would be to use a “virtual” audio cable to connect the output from one of these into the decoding software to produce our images. Unfortunately, things can get a little complicated.

As the internet was not really designed to ensure real-time delivery of data, the audio from online SDRs can occasionally be “choppy” due to packet loss and delays in packet delivery due to retransmissions or congestion. This results in an image which has been “chopped”, losing phase alignment almost on a continual basis, making it rather unusable and a chore to “reassemble” if you wish to try.

Something which more-commonly manifests itself with the UTwente WebSDR has been termed the “Twente Wobble” and is illustrative of another problem with audio outputs from SDRs in general. The problem is that the sample rate of the SDR itself and the sound card (real or virtual) on your computer may not be related by a “fixed” factor as they are not accurately known on starting up and can both drift relative to each other. This results in the need for irrational resampling which may result in slight shifts of the signal back and forth in time (i.e. speed up/slow down playback) to try and maintain a smooth audio flow. Unfortunately, for fax, this has a devastating effect. If you don’t do this, instead you will get gaps in your output resulting in periodic “jumps”.

This can sometimes be made worse by the configuration of the end-users’ computer – say if they have the program playing out at 48000Hz into the virtual cable and the decoder program sampling at 44100Hz, the resampling introduces an additional stage into the pipeline which degrades the signal quality and could result in underflows/overflows which cause the exact desynchronisation noted above. Worse than this, any audio processing (e.g. compression in the SDR, volume mixer scaling) will introduce further degradation to the image.

One approach that avoids most of these issues is to use the inbuilt recording feature provided by the WebSDR/OpenWebRX interface. This buffers the audio data into the browsers’ RAM and writes it out into a .WAV file. Decoding this using Fldigi’s playback feature ensures no playback sample rate mismatches, and having it recorded as just the audio data stream means there is some level of tolerance to network jitters as the recording process doesn’t have to be as close to realtime as the playback process would. It also avoids dynamic resampling as in the case of UTwente’s WebSDR. But now, reception of radiofax takes twice as long since replaying the recording for decoding is a real-time process.

The Integrated Approach

Using KiwiSDRs via the OpenWebRX interface, many of them have enabled the “fax” extension which allows you to decode fax within the web browser itself using the co-operation of the server.

In this mode, it is possible to tune a fax station and immediately begin seeing the data appear on-screen. You can also record the lines to a .png file for saving.

While this method may be sufficient for some users, for true fax aficionados, it does come with a number of significant drawbacks. The first is that it expects 120LPM faxes, thus it cannot properly display 60LPM faxes such as those from Kyodo. The second is that it doesn’t seem to have an easy slant-correction feature that is obvious. Finally, and probably my biggest objection to using this mode, is that it produces images with only 1024 pixels across when it should be 1809 pixels to ensure you get all the resolution. As a result, under good signal conditions, the faxes received through the extension can look a little blurry.

Why is kiwifax.py a Better Alternative?

The better way around all of this is similar to the above integrated approach – using partly the co-operation of the server but also working completely on the samples as data rather than playing them out on a virtual audio card and capturing them again.

The kiwifax.py program as part of the kiwiclient suite of tools definitely does this all digitally working on the demodulated audio data from a KiwiSDR directly. It takes care of connecting to a KiwiSDR and obtaining the audio data (via kiwiclient), finding the peaks and decoding the pixel values (with numpy) and writes the image data at its full resolution to a .png file (using the png library). As it is written in Python, the full source is available for modification and the program is amenable to automation, allowing for multiple parallel instances without worrying about audio routing issues as well. As it works with the raw audio data blocks, there is some tolerance to packet jitter as well. You could even run this on a Raspberry Pi remotely over SSH in a screen session to keep it running even after logout, for example.

The downside to kiwifax.py compared to the other approaches is a lack of graphical interface. I personally find this to be a feature, but it also makes it difficult when trying to tune the slant correction factors or trying to see what is being received. Still, on the whole, the benefits are worth the slight user unfriendliness.

Getting Started

In order to get kiwifax.py working, you need a working Python 2 installation with numpy. If you are on Windows and you haven’t already got an existing Python 2 installation, I would recommend you install WinPython 2.7.10.3 as this contains a self-contained installation of Python and numpy libraries. Once you install it into a folder, open WinPython Command Prompt.exe to access the command prompt.

If you are on Linux, you can check if you already have Python installed by opening a terminal and executing the command “python” –

Python 2.7.13 (default, Sep 26 2018, 18:42:22)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

If you receive something like the above, then congratulations, you already have Python 2 installed. Now you need to check if you have numpy installed, so execute “import numpy as py” and if you are returned to the >>> prompt, then you already have it installed.

>>> import numpy as py
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named numpy

If you don’t have numpy, you can attempt to install it with “sudo apt-get install python-numpy”. To exit the Python shell, use either exit() or Crtl+D.

Now you have a working installation of Python 2 and numpy, you will need to obtain the kiwiclient package. The most up-to-date at this time seems to be the branch maintained by jks-prv here. You can either visit the site, download ZIP and unzip it to a folder, or if you have git installed, use “git clone https://github.com/jks-prv/kiwiclient” to download a copy of the code.

Open up the WinPython Command Prompt or the Linux terminal and change directories to where the kiwiclient code lives. You should be able to issue the command “python kiwifax.py -h” and obtain the help listing below:

Usage: kiwifax.py [options]

Options:
  -h, --help            show this help message and exit
  -k SOCKET_TIMEOUT, --socket-timeout=SOCKET_TIMEOUT, --socket_timeout=SOCKET_TIMEOUT
                        Timeout(sec) for sockets
  -s SERVER_HOST, --server-host=SERVER_HOST, --server_host=SERVER_HOST
                        server host
  -p SERVER_PORT, --server-port=SERVER_PORT, --server_port=SERVER_PORT
                        server port (default 8073)
  --pw=PASSWORD, --password=PASSWORD
                        Kiwi login password (if required)
  -q, --iq              IQ data mode
  -f FREQUENCY, --freq=FREQUENCY
                        Frequency to tune to, in kHz (will be tuned down by
                        1.9kHz)
  --station=STATION, --station=STATION
                        Station ID to be appended to file names
  -F, --force-start     Force the decoding without waiting for start tone or
                        phasing
  --force-offset=FORCE_OFFSET, --force_offset=FORCE_OFFSET
                        When force decoding, apply this tuning offset (bins).
  -i IOC, --ioc=IOC     Index of cooperation; default: 576.
  -l LPM, --lpm=LPM     Lines per minute; default: 120.
  --sr-coeff=SR_COEFF, --sr_coeff=SR_COEFF
                        Sample frequency correction, ppm; positive if the
                        lines are too short; negative otherwise
  --max-height=MAX_HEIGHT, --max_height=MAX_HEIGHT
                        Maximum page height; default: 2300.
  --dump-spectra, --dump-spectra
                        Dump block spectra to a CSV file
  --dump-pixels, --dump-pixels
                        Dump row pixels to a CSV file
  --dump-histo, --dump_histo
                        Dump pixel intensity histograms to a CSV file
  --iq-stream, --iq_stream
                        EXPERIMENTAL: use IQ stream instead of audio
  --tlimit=TLIMIT, --time-limit=TLIMIT
                        Record time limit in seconds

If so, congratulations, you’re basically ready to start using kiwifax.py. If not and instead you receive:

  File "kiwifax.py", line 767
    print "Failed to connect, sleeping and reconnecting"
                                                       ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Failed to connect, sleeping and reconnecting")?

This is because you have Python 3 and not Python 2 installed. Unfortunately, the code has been written targeting Python 2 and requires a number of changes to make it Python 3 compatible.

Using & Modifying kiwifax.py

To use kiwifax.py, you can refer to the help as noted above, but basically you will need at minimum a frequency to tune to and a KiwiSDR server to use as the source. Assuming a frequency of 10000kHz and a server of abc.com, you would invoke it with “python kiwifax.py -f 10000 -s abc.com”. Setting the other options may be important in case you have a server on a non-default port, a password on the server, a different line rate, need to override the maximum height or wish for the data to be exported in a different format.

When it is running correctly, it should print its debug messages to the console including the status (idle, printing, phasing, starting, stopping), detected frequency peaks, signal strength and an ascending block number with every block of data received from the KiwiSDR server.

In this situation, the script is working and faxes will be received and written into the folder where the script is with a default name of YYMMDDTHHMMZ_F.png (e.g.20190109T0028Z_7396900.png). It works by sensing the Automatic Picture Transmission (APT) start and stop tones to decide when to start the fax and when to end the fax, terminating also if it reaches the maximum lines (default 2300, but can be set using –max-height= parameter).

There are a few annoyances to kiwifax.py, but because it is open source, anyone can modify it to suit their needs. The first is that it generates a log file that has all of the console output – this causes needless writes to flash memory and can wear out microSD cards (e.g. running on a Raspberry Pi) or SSDs.

As a result, it’s possible to just comment out the file-handler lines so that logging to file is essentially disabled.

Another annoyance is that the default IDs and location settings are probably not what you would wish to send out to the KiwiSDR you are connecting to – so you should probably change these to set the ID to something more descriptive – the last two lines of this function.

Of course, inevitably, you are going to receive some faxes with slants and this may differ depending on the server you have selected as some may not have GPS reference and will be running off a “free running” clock. As a result, it may be very useful to modify this array to add your own corrections, iteratively changing the value until the picture looks straight (enough).

In this case, I added a line to use the VN/SWL KiwiSDR in Hanoi, Vietnam with a correction for HSW64 – Thailand’s HF fax station. Note that other receivers if GPS-synchronised will be able to use the same slope – which is one big advantage of having the GPS in the first place.

This was the HSW64 test-chart prior to slant correction. After adding it in, receiving it a few days later using the “-F” option (as it missed the start tone), it was much straighter although missing part of the chart and phasing.

For receiving Kyodo which has mixed 60LPM and 120LPM broadcasts, the script cannot detect the line rate, so it’s best to set it with -l 60 and have 120LPM faxes received “doubled-up” side by side as the majority of the faxes are 60LPM. By default with zero correction going through BrisSDR, the skew goes the other way but only very slightly.

But the result is extremely sharp and requires no complicated virtual-audio-cable configuration, sample rate matching and suffers much less from image “chop” due to delayed packets. However, I have still experienced chop with kiwifax.py, possibly due to long network latencies, CPU exhaustion on my Asus Tinkerboard appending lines to long faxes or high packet loss scenarios.

Another frustration you may find is that the APT does not properly trigger on the start/stop tones as different stations sometimes use non-standard tone combinations. As a result, it might be useful to see if your target station has any technical specs and modify the code accordingly to better-match what is transmitted over the air. Otherwise, you might find faxes may start receiving correctly but only stop once reaching the maximum height. If another fax were to start, then you would probably find the reception terminates in the middle of the second fax and without another start-tone trigger, the remainder of that fax would be lost. The -F force option starts decoding immediately until a stop tone is encountered or until the maximum height is reached, but does not run a continuous rolling decode. That being said, this might be something you can easily modify the code to do.

While it is tempting to monitor frequencies for the existence of HF fax signals around the clock, please be mindful that public KiwiSDRs are for the benefit of the entire SWL/ham community and should be shared rather than monopolised. It’s best to do your research and limit your use of the receiver to either your own KiwiSDRs, those you have permission to use or use it only for limited periods with public KiwiSDRs. Unfortunately, I don’t think there is an analog of this for the WebSDR … so I am still using the record-and-decode .WAV method with that for now.

Conclusion

HF fax is a relatively old, slow and simple mode of sending an image over the radio. Despite the simplicity of the mode, it is still used to deliver weather and news to mariners who may have no other method of communication. The mode has its charms in noisy, slanted but readable images and is one of my favourite types of services to receive on the air as almost everything is dated and identified with the transmitting station’s logos/name.

Traditional decoding methods were very much time-sensitive real-time processes, meaning that any irregularity in packet jitter that overwhelms the buffer will cause desynchronisation of the receiver and a “chopped” image. This can be made worse by sample-rate mismatches which may result in wavy images on dynamic resampling or further “chopping” as the buffer underruns or overruns.

A much better way is to deal with this purely in the “data” domain, which kiwifax.py does. The Python 2 code is fully provided for modification, highly suited for automation and can even run on a Raspberry Pi. By using it, we can obtain sharper images with less hassles and less potential for image “chopping”. Unfortunately, slant tuning becomes slightly more difficult lacking a GUI or preview and there are a few niggles with debug output and client identification by default that can easily be fixed. It is a very useful tool for the HF fax enthusiast, which offers better decode resolution than the OpenWebRX extension.

The kiwifax.py script is only part of the whole kiwiclient package which also includes kiwirecorder.py which allows for automating recording from a KiwiSDR. In fact, KiwiSDRs and the OpenWebRX ecosystem have even more nifty features to offer, some of which I’m only just discovering. When I have the time, I might write a few articles covering some of those other cool features (such as TDoA).

Posted in Computing, Radio | Tagged , , , , | Leave a comment

Radio: JJC/9VF Kyodo HF Fax *MEGA* Gallery (Aug 2017 – Jan 2019)

When it comes to HF fax, sometimes also known as “weatherfax” due to its use in disseminating weather charts to mariners, the Japanese Kyodo News station JJC and its repeater 9VF are a living heritage. I’ve mentioned this before back in 2013, when I first posted some reception examples and signal information. I followed this up in 2014, as a reader was not able to catch JJC/9VF and had some doubts about whether it was on air, thus I derived a “rough” schedule for them and monitored their frequencies nearly continuously from home.

Despite making those postings, I don’t feel like I did Kyodo News any real justice, as the transmissions were unique and worthy of some preservation effort. They are the only HF fax station to still send news on a regular basis and the only to still operate 60LPM mode as far as I know. As a result, I have taken time since then to receive their transmissions. However, the effort needed to fix “chopped” images and choose noteworthy receptions required a lot of time. As a result, while I have been wanting to make this post for years, I kept putting it off and the number of faxes continued to pile up.

The main impetus for this posting, however, was because I went on holiday in 2017 which allowed me to visit Japan where I carried my Sony AN-LP1 and BladeRF with transverter to receive the signal directly. As a result, I felt I should probably do the necessary processing and post it online. While at home, reception was performed with my trusty Icom IC-R75 and Wellbrook ALA1530L active loop antenna.

What follows is a rather large selection of received faxes from Kyodo during the period of 27th August 2017 through to 4th January 2019. The faxes are reproduced for the purposes of documenting the characteristics of JJC/9VF (in case, one day it were to go off-air), the various types of faxed materials that may be received and as proof of radio propagation characteristics for the dates/locations covered. No copyright infringement or damage is intended – the latest faxes from the last week have not been posted and I will remove images if contacted with a legitimate request. Content within the faxes remains copyright of the original sender (likely Kyodo News), content is out of date and not to be used for navigation purposes.

Unfortunately, as I can’t read Japanese, I do not understand the content of most of the longer faxes, but I have included a significant number of examples of their English program for fellow English speakers. Note that the English faxes have been rotated 90 degrees to facilitate easier reading and faxes are presented in order of reception for the day. Small thumbnails are used to represent some of the longer faxes to conserve bandwidth – click to load the full size images.

Faxes Received in Japan (Aug 2017 – Sep 2017)

27/08/2017 (Location: Kyoto, Japan)

The first fax I received on my travels was the Kyodo Furusato News in the evening. I believe Furusato translates as “hometown”, with this being a relatively short fax in 60LPM of about half an hour. This has the JSC Kyodo News header, which differs from the normal header. I’m not entirely sure, but I suspect this is a feature sent on Sunday as this was received on a Sunday.

29/08/2017

This fax has a significant slant along with “noise bands” due to QRM local to the hotel (likely the VFD of the elevator). This fax is at 120LPM and is a repeat of the previous day’s English edition, normally sent in the afternoon, note the date of August 28, 2017. The slant correction in Fldigi varies between the 60/120LPM modes, so this was not properly corrected. Despite being an English edition, header “flash-news” notices in Japanese are inserted.

This would have been received later in the afternoon at 60LPM. Again, banded noise pattern QRM is visible, but this issue is printed at 60LPM taking around 90 minutes to transmit. This includes the Evening edition of Kyodo News for the day of the broadcast consisting of four panels, making full use of the graphics to indicate where a North Korean missile overflew the Japanese territory. This is followed by the Kyodo Kaiun-Suisan News consisting of two panels. Finally an additional segment is included, which I can only seem to understand as either a “supplement to fax” or “fax of the day” or “special feature”.

Traditionally, Kyodo faxes feature a header box which has the round figure in the top left corner, a message imploring users who receive these faxes to pay a subscription fee to maintain the service. However, it seems that receiving the service on different frequencies or at different times results in a different header message. This one has a header of JSC. I wonder if this is an indication that each frequency is operated by a separate entity? Above is Issue 4794, the English edition for Tuesday Aug. 29, 2017 transmitted in 60LPM which includes news of the North Korean missile test. Notice the propagation faded towards the end of the fax, as was common during my stay in Japan.

30/08/2017

On this day, I managed to receive the repeat-broadcast of the English edition for the previous day at 120LPM, but with proper slant correction factor. Faxes received at 120LPM can be distinguished by looking at the spacing of the black-and-white start tone and stop-tone stripes. They also have slightly lower resolution with generally “blurrier” text. It did not prove possible to receive the English edition for this day due to QRM.

31/08/2017

A 60LPM transmission of the English edition for this day received with weakening signal as is normal. Issue 4796 makes mention of Trump’s confused approach with North Korea at the time. This image includes the pre-start area showing a long period of white tuning tone, followed by inverted phasing “ticks” for several minutes before the long start tone. This makes it easy to determine whether you are able to receive a fax before the fax actually begins.

01/09/2017

The above is a partial excerpt of a longer fax with the final panel including JSU News “Sailor Newspaper”. It’s not uncommon in JSU News segments to see foreign language snippets which have some rather general news – English is most common but not the only language featured.

In the evenings, Kyodo News Sports fax is sent. This consists of parts of the same fax as the morning edition, except rearranged so that Sports (panels 5 and 6) are transmitted first, followed by the morning edition news (panels 1 and 2). This is a shorter fax than the full morning edition sent at midnight JST which also usually features news panels 3 and 4 followed by NX and any additional notices.

The Sports fax can be rather interesting, featuring iconography for different sports, but different arrays of score tables. Not being able to read Japanese, it can be hard to understand what is going on especially with the noise in the image, but I suspect something about the World Cup soccer maybe in the top left.

The English edition received that night at 60LPM is Issue 4797 with the JSC header. Some days, the English edition is a little “light” on content with some white space but the headline “Spreading fake news now a crime” seems too good to be true. In this fax, the standard three-column layout is broken up by a horizontal line which happens quite rarely. Propagation, however, has become worse resulting in the loss of the tail end of the fax. Shortwave signals can “fade” away entirely like this, not being helped by the long (~40min) transmission time and noise from urban centres where the hotel was situated in. The Sony AN-LP1 did very well compared to in Sydney, but was not optimal.

06/09/2017

A 120LPM repeat transmission of the previous day’s English edition (Issue 4799). The whole series of English faxes illustrate the increasing tension over North Korea’s actions at the time – while I was trying to have a holiday. Having the same equipment and being located at the same hotel, the reception does vary significantly as propagation and changing guest patterns take their toll on shortwave reception. It should be noted that English editions are sent on weekdays only.

16/09/2017 (Location: Osaka)

The 120LPM repeat of yesterday’s English edition (Issue 4807) again illustrating tensions over ballistic missiles. As usual, the 120LPM mode suffers strongly from noise but also multi-path/doppler causing the text to “wave” as the propagation path changes during transmission.

The afternoon issue of the Evening news shows another map in the top left, which is something rarely seen on a normal day. The “feature” that follows is half-empty, but appears to have some contact details – I wonder what it might be advertising or informing people about?

Depending on the season, it is possible to receive isolated Sumo Match reports as their own fax, but this fax is also trailed by a flash news of sorts.

For regular broadcasts, the flash news is inserted above the remainder of the fax. It seems that Sumo Matches are a big deal given this placement difference. While it is somewhat weak and noisy, the images seem to be slightly better as I get used to the new location and frequencies on offer.

17/09/2017

One fax that is rarely received from home is the Ocean Current Forecastings chart in 60LPM. If anything, this is the only weather/climate related chart that Kyodo broadcasts to my knowledge. This is because Japan has JMH to fill in the weather requirements.

Again, as 17th is a Sunday, we receive Furusato news, but also JSU news and some fax highlights in a single transmission. Kyodo tends to transmit these panels in different mixtures to a schedule of some sort – but I’ve never seen them send a schedule document at all.

Depending on the season, it is possible to receive isolated Sumo Match reports as their own fax. At other times, this is not transmitted at all or is added to the end of an NX warnings transmission.

The same Furusato program was repeated later that same afternoon on its own. All Japanese faxes are sent at 60LPM owing to the delicate nature of the writing.

Kyodo News Sports fax follows the same formula as before, but now showing different sports results with “filled in” bubbles appearing.

As mentioned earlier, Sumo match results can be tacked to the end of an NX warnings transmission, the above being an example of this. Signal conditions for this day were surprisingly good all around, showing that my new location in Osaka was much more suited to reception. I was in Tokyo prior, but unfortunately, the noise levels were completely swamping out all of the signal.

26/09/2017

With that in mind, I attempted to receive the morning edition news as I had a day to rest at the hotel. The signal propagation wasn’t the best, but this fax illustrates a number of key points – namely how long JJC faxes can be, with this one taking about 2h20m to transmit. Further variety in the presentation format for the sports scores can be seen, along with NX warnings. The incorporation of the Kaiun-Suisan News and JSU news, however, seems to be a special feature that added to the length of the fax.

Was that worth getting my BladeRF crushed? Kind of – I’ve always wanted to receive their signals “up close” and while it wasn’t that clean of a reception, it was confirmation that I wasn’t really missing anything from their line-up. I think I know better than to do this again …

Faxes Received at Chester Hill (Nov 2017 – Dec 2017)

29/11/2017

Back home and I’m back to the somewhat “dark” and noisy decode, but it still results in somewhat readable results. ICBM in large bold capitals shows that even after my holiday was over, the tensions were still a concern for both parties. There is a special notice on the top of this fax and I believe it to be scheduling related – it may be telling us times for certain programs, but I can’t understand it.

The 60LPM English service for the evening, issue 4859 documents North Korea’s claim of a successful ICBM launch amongst the other limited headlines. While the English service always looks like this, I can’t help but think they could get more from the page just by reducing the margins slightly – the Japanese services all use up the full width of the printing area!

04/12/2017

English edition 4862 issued Monday Dec 4 around the time of Bali volcanic eruption. Fuzzy as usual but readable.

05/12/2017

English edition 4863 issued Tuesday Dec 5 with headline “N. Korean crew admits to stealing appliances from uninhabited isle” … a rather interesting one. Marginally better than yesterday, but it seems the signals were rather consistent for summer.

06/12/2017

Managed to receive the early-afternoon repeat transmission of issue 4863 in 120LPM mode. The text is notably less clear, with a “halo” effect around the text possibly due to ringing in the filters of the IC-R75 (which had been set tightly to avoid adjacent QRM).

Evening sports edition was received with the header message much clearer – if anyone knows what they are advising (e.g. feature will be broadcast on xth day of the month at y times?), a translation would be quite helpful. The top left seems to have a list of names regarding some team and a baseball logo can be seen in the first sports panel.

The English edition for the day is issue 4864, slightly less readable than previous days, but occasionally one of the headlines is made a little larger than the rest as shown in the above fax – “Duerte declares NPA terrorist entity”.

08/12/2017

As much as I would have liked propagation to improve, the propagation seems to have degraded for the English edition 4866 with notably more image noise, but still readable. The location within the metropolitan area of Sydney does make for high noise floors despite using a magnetic loop antenna.

12/12/2017

An issue of JSU News was received from home. Of interest is that the length of JSU News does not appear to be fixed – there are shorter and longer versions.

Kyodo News Evening edition including Kaiun-Suisan and a feature at the end – the last time I posted this was 29/08/17 and both were Tuesdays, so this must be a Tuesday thing?

It seems that the seasons may be working against us, as the propagation for English service has failed even more to the point of unreadability. Issue 4868 with only one out of the three panels readable.

14/12/2017

The evening Sports fax as usual, but the difference is that this has two important notices stacked before it. The latter one seems to be a recurring schedule change announcement, but the top one is regarding the launch of the JAXA H2A launch of satellites.

25/12/2017

As mentioned earlier, JSU News does not seem to take a fixed length, so an excerpt from a fax shows this JSU News is twice as long as usual. Not knowing whether they had any special observance for Christmas, I thought I’d tune in and just see.

Unfortunately, I was rewarded with some rather poor propagation without much easily readable at all. If this persists, I don’t feel any good reason to continue attempting to receive JJC/9VF until conditions improve.

Faxes Received at Quakers Hill (Mar 2018 – Jan 2019)

It took a while after my house move for me to regain the use of my radio equipment due to the need to set-up antennas and computers. But this was first achieved in March 2018 when I resumed reception of JJC/9VF.

09/03/2018

The move to Quakers Hill along with the time seems to have done the signal some good. Receiving the repeat 120LPM broadcast of the English service (#4929) from the day before, we have some deep fading but still readable text.

Not being able to read Japanese, I’m not sure what this is but it seems like a highlight or diary feature and it was broadcast as its own independent fax along with contact details for an academic institution in Japan.

I was glad to have received this Evening edition which is in quite good condition for what I am normally used to. Two notices are stacked at the top – a rare occurrence, but also JSU News is carrying an English feature as well.

The English service for the day, issue 4930, was still deeply affected by fading towards the latter half of the transmission, but it was a sign of optimism, along with the headline “Trump to meet Kim Jong Un by May for 1st U.S.-N Korea summit”.

13/03/2018

Propagation is, however, a fickle beast along with local QRM sources. The pattern is highly suggestive of electronic interference, affecting the reception of the English service #4932. It is, however, still readable but not comfortably so.

15/03/2018

It must be Sumo season again, with independent Sumo Match bulletins being issued. This one decoded relatively cleanly.

In the early evenings, the sports editions can decode fairly well too, with strings of relatively fine numbers in the fax.

However, by late evening, the noise levels go up and the image quality degrades just in time for the English service, the above being issue #4934 including the Olympic rings in the third column.

17/03/2018

An excerpt from the end of a longer fax showing the Kyodo News Sports panels with a lot of different sports scoring graphics – filled bubbles makes a return, but there is even the illustration of the whole bracket for a competition (it would seem).

The above shows a JSU bulletin on its own, making use of inverted text graphics and being of the “shorter” form.

This version of the Evening edition stood out despite the poor propagation because of the incorporation of the hashtag “#MeToo”.

While reception was possible, the conditions were not so great. Unfortunately, life got in the way and I became too busy to be able to continue decoding. That was, until the tail end of the year when I thought of my unsuccessful reception last year around Christmas time and wondered if it would be any better this year.

11/12/2018

English edition #5126 at 60LPM received very well for December, easily readable. A good start to my return to HF fax decoding.

13/12/2018

Despite my hiatus, it seems nothing much changed regarding the schedule, with decent contrast still received. This fax seems to suggest there are some program schedule changes with the header – if anyone can translate this information, it would be good.

English edition #5128 at 60LPM received almost equally well, which is a good sign. It has me optimistic that I might be able to receive a good quality Christmas and New Year fax.

14/12/2018

Conditions degraded slightly for English edition #5129 with weakening signals towards the end of the fax. Not unreadable, however.

15/12/2018

It seems Kyodo Kaiun-Suisan News is still on the air with an unpredictable schedule. The final panel seems to be related to the horse racing (?) standalone fax that was later seen on 23rd.

18/12/2018

Surprisingly, a reversal of the trend for Tuesday Dec 18’s English edition, #5131 being almost as clear as it’s ever been. There is some warping of the image header as I struggle to restore my previous slant-correction values as I as also chasing some other stations around this time.

20/12/2018

By Thursday (#5133), we’ve taken a step backwards and now it looks a little more like what I am used to – “dirty” faxes but still readable with a slight hint of signal fading towards the end.

21/12/2018

I don’t what it is but the horizontal “rule” seems to have made more frequent appearances in the past few faxes. This one from Friday (#5134) seems to be cleaner at the beginning, but otherwise showing typical propagation as received at home.

22/12/2018

A more recent reception of Kyodo News Sports showing fairly decent propagation this December. I remain hopeful for a good Christmas fax.

23/12/2018

I decided to continue monitoring on a Saturday to see what the faxes are like.

This appears to be a sporting-related fax, perhaps horse-racing. The first time I’ve really noticed it in such clarity.

The morning edition is sent around midnight Japan Standard Time, but propagation is normally problematic resulting in it fading into the noise.

The Ocean Current Forecast chart was also received, with a flash-news heading indicating some volcanic eruption had occurred.

Kyodo Furusato news is still issued and was received – this seems to be a weekend or maybe a particular time-of-month program. I still haven’t deduced the pattern.

Kyodo News Sports was also received, now with two flash news headings.

This was repeated for the NX information, but instead, trailing the NX warnings. Unfortunately, the English program I was hanging out for was so poorly received that it was nearly indistinguishable from the noise and was not worth uploading.

24/12/2018

Christmas Eve saw the shortest NX warnings bulletin I’ve seen in recent years, with just one notice.

The English service (#5135), however, was readable but interfered with by local electrical interference.

25/12/2018

The Christmas day English fax, #5136, unfortunately was received even worse. It is readable, but very much affected by interference. There wasn’t anything too special, so I guess I didn’t miss out.

26/12/2018

As if cursed, the Boxing Day English fax #5137 was much clearer, although fading towards the end.

27/12/2018

With a little progress comes a small regression – a slightly less clear result for English fax #5138.

28/12/2018

Approaching the new year, it seems the signal got slightly better again, issuing a long NX with special alert just prior to the English fax.

The fax #5139 was received slightly blurry but with good contrast.

31/12/2018

The final English fax of the year was received, thankfully, as it was a weekday. The special characteristic of #5140 is an Editor’s Note in the bottom right corner – this is something I haven’t seen in all my history of receiving the English service. The note says “The staff members of Kyodo News with you a Happy New Year. Kyodo News will not be issued on Jan. 1 due to New year’s Day national holiday.”

01/01/2019

To ring in the new year, I decided to decode the Japanese Kyodo News faxes. The faxes include a special banner at the top which roughly translates to “Sincerely wishing for everyone’s safety at sea” or something along those lines. There were occasional interruptions to reception which have been patched up with equivalent lines from another reception – this reception was done via BrisSDR’s KiwiSDR as audio as it was stronger there than at home. As noted in the prior fax, there is no fax in English for the new year. The final notice also seems to be a scheduling information notice, although I can’t understand it, so if anyone can read Japanese can translate that for me, that might give us a good hint as to the program schedule for the upcoming year.

03/01/2019

Attempted to receive the English edition, but curiously it seems not to have been broadcasted on the expected time. The NX prior to that was received, with an alert of an earthquake measuring M5.0.

04/01/2019

The first English edition of 2019 I was able to receive was on Friday 4th Jan, issue #5143. I’m sure judging from the issue number that I’ve missed the ones on the 2nd and 3rd, but again, propagation is weak towards the end of the fax. Kyodo has seen in the new year! Hurray!

Observed Current Weekday Schedule

Kyodo News seems to run a very unusual schedule which seems to vary subtly depending on the day of the week, whether it’s the first week, second week, etc. of the month or whether it’s a weekday or weekend.

However, in general, I find that the 12745.5kHz frequency propagates well compared to the others towards Australia and on weekdays, faxes can be heard at:

  • 0200 to 0400 (UTC+11) – Kyodo News Morning Edition
  • 1000 to 1200 (UTC+11) – Kyodo News Morning Edition (Repeat)
  • 1300 (UTC+11) – 120LPM (?) or Ocean Current Forecasting
  • 1345 (UTC+11) – Kyodo News Morning Edition (Repeat)
  • 1810 (UTC+11) – 120LPM Kyodo News English Edition (Yesterday, Repeat)
  • 1840 to 2020 (UTC+11) – Kyodo News Evening Edition
  • 2120 (UTC+11) – Kyodo News Sports
  • 2230 (UTC+11) – NX Warnings
  • 2300 to 2340 (UTC+11) – Kyodo News English Edition

The schedule above was based on my monitoring and observations, but it’s probably not going to be accurate especially on weekends and for “surprise” once-a-month programs. It’s still fairly easy to monitor JJC/9VF especially through the various KiwiSDRs online – I find that receivers in Korea, Hong Kong, Vietnam, Indonesia and Australia can see strong signals depending on the time of day.

Conclusion

When it comes to HF fax, Kyodo News is a one-of-a-kind living heritage. I’m glad to see it still operational as of 2019, wishing us a safe new year with its relatively strong signal. If you’re wondering whether it is still on the air – chances are it still is and you can check it for yourself with the “rough” schedule above.

I still monitor JJC from time to time when the time permits, but often this manifests as “blocks” of time where I do make an effort to consistently receive their transmissions and others where I’m tuned into something else entirely. It just is reassuring to come back to the HF spectrum and see their signals on the air …

I’m not sure how much longer it will persist, although noting the general state of HF fax, it is probably worth my time to more conscientiously catalog what other stations may have to offer before they go offline. After all, there is an elegant simplicity to the concept of HF fax, along with a slow analog feel to receiving it. Short of having expensive satellite equipment and subscriptions, HF still remains the “bread and butter” for many mariners at sea.

Posted in Radio, Travel | Tagged , , , , , , | Leave a comment

Repair: SteelSeries Sensei “Pro Gaming” Laser Mouse (62150)

I’ve always been partial to laser mice and high-DPI sensors ever since I bought a second-hand Logitech MX1000 Laser Cordless Mouse. When my MX1000 gave in due to battery failure and corroding battery charge contacts, I went to the Mionix NAOS 8200 wired laser mouse in 2014 for a little more resolution and no battery concerns. This served me well for about three years, before having the centre-click button fail (which I remapped for a while) and then the left-click button becoming intermittent. Because of this, the Mionix retired, as the soft-touch rubber coating became somewhat sticky.

When I renewed my workstation, it seems that laser mice have become less popular with gamers returning to more “advanced” optical sensors instead. As a result, I decided to grab whatever was in stock which just so happened to be a SteelSeries Sensei on a discount. It looked to be a decent unit offering 5700dpi, configurable buttons and an LCD + RGB-LED frills. Little did I know that this one would become problematic in slightly more than a year …

The Mouse

Unlike some of the more premium competing designs with deeply sculpted, the Sensei has a symmetrical ambidextrous design which is adequate but not most comfortable. This one came with a reflective silver finish, but just like CDs with disc rot, the lacquer has worn through in a number of spots with the reflective layer being attacked by moisture.

The unit does have a little soft-touch rubber on the sides, but less than that of my old Mionix NAOS 8200, so that’s an improvement.

On the underside, the unit has its laser sensor but also an LCD display to show a logo. A very interesting gimmick, as you can not see it when the mouse is in use, so what’s the real point?

The mouse has a gold-plated outer shell with ferrite bead on the braided USB lead for that premium touch.

On the whole, I’ve been generally pleased with this mouse, but a few months in, the cracks started to appear. The first problem that drove me nuts was the scroll wheel became squeaky. For someone that reads a lot of documents, this was very distracting. I could still live with it, but about nine months in, the left click started to occasionally “double-click” on its own when single-clicked. This was a symptom of switch-bounce which implies contact wear, unusual for a mouse of such a young age. After a bit, it went away only to come back with a vengeance.

I tried to live with it for a bit longer, but then, I broke out in a rage because this double-clicking shenanigans cost me three hours of work in an app which had one button that stops and restarts acquisitions without asking to save unsaved data in the data buffer.

Teardown

To open the mouse, all of the teflon skids need to be removed which damages them slightly. Four screws in the corner hold the shells together.

Inside, the mouse has quite a few PCBs and interconnecting harnesses owing to the scattered LEDs and buttons. I decided not to tear apart more than necessary to repair the mouse, so it’s not quite a full teardown.

The main PCB shows the mouse being powered by an Avago A9500 5000dpi sensor and an STM32F103 ARM microcontroller. The left and right switches are Omron switches (normally a byword for quality), whereas the middle-click button is a YTC switch.

From the side, the faulting switch is Made in China, with a model number D2FC-F-7N (10M). It seems this switch is known to be troublesome in some other models of mice made by Microsoft, Razer and Logitech mice as well.

A look at the mouse top-shell shows all the PCBs there are black in colour.

The Donor

Unfortunately, I didn’t have any of the switches in spare. I could swap in my spare Asus GX950 to tie-over for a while while new switches arrive, but the eBay listings seem to suggest they will provide “compatible” switches. Even the genuine switches might not be preferable – they could be equally poor and fail in short order.

Instead, I raided the drawers and pulled out a relatively modern basic OEM mouse from Acer. There was nothing wrong with the mouse, just that it’s not particularly high DPI.

The large skid can be removed for one screw to separate the shells.

The inside of the mouse is surprisingly simplistic, utilising optical encoding for the scroll-wheel (a rather good idea) with a tactile button for the centre click. This leaves just two Kailh microswitches that can be harvested. This particular unit is a Logitech Bao’An Board 210-001260 Rev.005.

Transplant

To extract the main PCB requires removing the scroll-wheel LED and then removing the scroll wheel carefully. Undoing the flexible cable to the LCD is a good idea as well, but the LCD backlight cables are soldered on.

The underside of the board doesn’t look too great – there seems to be some flux residue and solder splashes left behind.

Switches desoldered from each board ready for transplant. Note that I could have changed left and right-click buttons, I chose just to change the failing one. In hindsight, doing both may help balance the actuation force and travel between left and right click.

The switch is soldered into place …

… and ready to reassemble. In the end, it was reassembled just fine and the mouse works perfectly, so I can get back to work. The teflon skids were somewhat damaged but at least they still adhered well enough to allow them to be used despite some curling and gouges/scratches. I also put some silicone grease on the axle of the scroll wheel to quiet down the squeak.

The Offending Switch

Popping off the cover of the switch and getting out the macro lens allows us to view the internal construction of the switch.

A thin springy piece of metal serves as the contact which is pushed down upon by the plastic pin.

A close look at the contact shows some scoring and a rough surface which could be the source of the contact noise. I don’t expect to see this from such a young switch that is not performing a “power” switching application.

Conclusion

It seems rather disappointing as the SteelSeries Sensei barely lasted a year of use before developing a rather critical fault in the left click button and a squeaky scroll wheel. I was able to repair it by extracting a switch from a donor mouse, but the repair procedure does damage the teflon skid pads and now results in mismatched travel/actuation force between left and right click. I wonder when the other switches may fail … but this is probably the earliest failure of an input device I’ve experienced.

Posted in Computing, Electronics | Tagged , , , , | 4 Comments