SSTV reception on Linux

As a programmer writing obscure little FLOSS projects for fun, having someone actually read and fix my code is a compliment. Recently I got a pull request on slowrx, my somewhat stalled slow-scan television demodulator project, and was inspired to write more.

The project started in 2007 when I was trying to find a SSTV receiver for Linux that could run in "webcam mode" and just save everything it receives. It would use modern stuff like ALSA instead of OSS and Gtk+2/3 instead of 1. Preferably it would work even if the receiver wasn't exactly tuned at the zero-beat frequency. Turned out existing software couldn't do this, so I accepted the challenge.

So here's how slowrx looks today:

slowrx screenshot

FM demodulation is done by a 1024-point Fast Fourier Transform and Gaussian spectrum interpolation. The windowing function adapts to SNR, so the resolution drops under noisy conditions but we get a clearer image (or the user may opt to use a narrow window regardless of noise). Sound card clock mismatch is calculated using a linear Hough transform on the sync channel and fixed by re-running the demodulation at the adjusted rate. The program will detect VIS headers at any in-band frequency and shifts the reception window accordingly. It can decode the FSK callsign after the picture. The program stays up for hours without a segfault. Yeah – it's written in C99!

Pictures I've received using slowrx:

Pictures received

I've noticed the 8- and 12-second black-and-white Robot modes are still in use today. I believe they were the "original" SSTV modes that used to be viewed on a green phosphor screen in a much more analogue environment. So I've been thinking about an optional phosphor filter for B/W modes:

Phosphor filter

14 comments:

  1. Does this work on FreeBSD or are we stuck with Linux?

    ReplyDelete
    Replies
    1. I suppose it would work on other *nixes, too, with only small modifications. Haven't tested! Perhaps someone will? :)

      Delete
    2. Now, the biggest obstacle of course is ALSA, and I need to get more familiar with the FreeBSD sound system first.

      Delete
  2. Hi, Oona:

    Thank you for the contribution to the community.

    I was searching for RDS stuff and found redsea is very useful. Later, I encountered your slowrx.

    I tried to build slowrx on my Debian Jessie box, but have the following error:
    gcc -Wall -Wextra -std=gnu99 -pedantic -g -DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_4 `pkg-config --cflags gtk+-3.0` -O3 -c -o common.o common.c
    Package gtk+-3.0 was not found in the pkg-config search path.
    Perhaps you should add the directory containing `gtk+-3.0.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'gtk+-3.0' found
    common.c:7:21: fatal error: gtk/gtk.h: No such file or directory
    #include
    ^
    compilation terminated.
    Makefile:17: recipe for target 'common.o' failed
    make: *** [common.o] Error 1

    which package should I install to have this gkt.h?

    best regards,
    wxie

    ReplyDelete
  3. The problem is solved.
    aptitude install libgtk-3-dev

    Thanks

    ReplyDelete
  4. what is the capture device? Sound card or external device?

    ReplyDelete
    Replies
    1. Thanks, there must be some special antenna, right?

      Delete
    2. A shortwave receiver and antenna is required.

      Delete
    3. What receiver do you use for this?

      Delete
    4. Thank you.

      If I understand you right: A receiver is a normal shortwave radio, and its output sound signal (e.g. earphone) is feed into the computer sound card as input sound signal (e.g. microphone). slowrx will process the input sound signal as SSTV signal.

      Delete
    5. Yes, further info in the readme.

      Delete

The comments section is pre-moderated; it will take some time for the comment to show up.

You might want to check out the FAQ first.