FreeDV 700D – First Over The Air Tests

OK so after several attempts I finally managed to push a 700D signal from my QTH in Adelaide (PF95gc) 1170km to the Manly Warringah Radio Society WebSDR in Sydney (QF56oh). Bumped my power up a little, raised my antenna, and hunted around until I found a relatively birdie-free frequency, as even low level birdies are stronger than my very weak signal.

Have a listen:

Analog SSB 700D modem Decoded 700D DV

Here is a spectrogram (i.e. a waterfall with the water falling from left to right) of the analog then digital signal:

Faint birdies (tones) can be seen as horizontal lines at 1000 and 2000 Hz. You can see the slow fading on the digital signal as it dips beneath the noise every few seconds.

The scatter diagram looks like bugs (bits?) splattered on a windscreen:

The slow fading causes the errors to bounce up and down over time (above). The packet error rate (measured on the 28 bit Codec 2 frames) is 26%. This is rather high, but I would argue we have intelligible speech here, and that the intelligibility is better than SSB.


I used 4 interleaver frames, which is about 640ms. Perhaps a longer interleaver would ride over the fades.

I’m impressed! Conditions were pretty bad on 40m, the band was “closed”. This is day 1 of FreeDV 700D. It will improve from here.

Command Lines

The Octave demodulator doing it’s thing:

octave:56> ofdm_rx("~/Desktop/700d_part2/manly5_4.wav",4, "manly5_4.err")
Coded BER: 0.0206 Tbits: 12544 Terrs:   259 PER: 0.2612 Tpacketerrs:   117 Tpackets:   448
Raw BER..: 0.0381 Tbits: 26432 Terrs:  1007

Not sure if I’m working out raw and coded BER right as they are not usually this close. Will look into that. Maybe all the errors are in the fades, where both the demod and LDPC decoder fall in a heap.

The ofdm_tx/ofdm_rx system transmits test frames of known data, so we can work out the BER. By xor-ing the tx and rx bits we can generate an error pattern that can be used to insert errors into a Codec 2 700C bit stream, using this magic incantation:

~/codec2-dev/build_linux/src$ sox ~/Desktop/cq_freedv_8k.wav ~/Desktop/cq_freedv_8k.wav -t raw -r 8000 -s -2 - | ./c2enc 700C - - | ./insert_errors - - ../../octave/manly5_4.err 28 | ./c2dec 700C - - | sox -t raw -r 8000 -s -2 - ~/Desktop/manly5_4_ldpc224_4.wav

It’s just like the real thing. Trust me. And it gives me a feel for how the system is hanging together earlier rather than after months more development.


Lots of links on the Towards FreeDV 700D post earlier today.

5 thoughts on “FreeDV 700D – First Over The Air Tests”

  1. Awesome! That constellation looks rather sad :-)

    I think the low latency is not so important on “dead” bands. Maybe a second LDPC code for longer interleave mode, at 1/2 second length. Heck, even a 1 second length, for when you need that contact for the contest! ha.

    1. 1 second delay would be fine for poor-condition signals. Even for WICEN stuff where you’re dealing with 5-second overs… I’d sooner wait a second to receive the data than miss it completely.

      I am considering re-purposing the FreeDV 1600 modem as a modem for AX.25 packet… over which we could transmit files such as Codec2 recordings. There might be a second or so’s delay due to framing, FEC overhead and retransmissions, but who cares? So long as there’s immediate feedback that a message is incoming, this would actually make for a very handy comms tool.

      As it happens though, the link to that WebSDR seems to take me back to this page.

  2. I notice the spectrum has large shoulders outside the 1k to 2k center.

    I know the AOR OFDM modem didn’t work well at 2.5 kHz bandwidth. But only because of jammers and spectrum crowding.

    1. I think those shoulders are the band noise in the rx signal, need to look at the tx waveform. The AGC would have adjusted for the RMS level of digital signal too. As it’s OFDM (unfiltered PSK) it might benefit from a bandpass filter on the output.

  3. Can you add the cq_freedv_8k.wav file?

    Just for kicks I hard filtered it, and got:

    Coded BER: 0.0088
    Tbits: 10304
    Terrs: 91
    PER: 0.0870
    Tpacketerrs: 32
    Tpackets: 368

    Raw BER..: 0.0391
    Tbits: 20384
    Terrs: 798
    mx = 1.3873

Comments are closed.