[Lowfer] BPSK31

Stewart Nelson [email protected]
Mon, 2 Jun 2003 01:14:08 +0200


Hi Ed,

> How do you generate the wave file?

Sound card programming in Windows is difficult.  One approach
is to modify an existing open source program.  You keep its
existing logic and just change the data that it is sending.

Another way, suitable for a beacon, is to write a disk file
and use a utility, e.g. Cool Edit or even Media Player,
to play it repeatedly.  A .wav file has some header information
followed by the samples.  You can find documentation on the Web,
or copy the header from another file with the same number of
channels, sample size, sample rate, and length.  Alternatively,
you can write a file with just the samples and convert it with
Cool Edit or similar, or play it with a tool that can handle
raw PCM data.

> and how do you arrange the L & R to be in quadrature?

This is not an easy question.  For Lowfer purposes, it is
probably adequate to just delay the second channel by 1/4 of
the nominal carrier period.  This is easy if you arrange the
carrier period to be an integral multiple of four times the
sample rate.  E.g. if you generate 1 kHz tone at 8000 samples
per second, just delay the second channel by two samples.

For more accurate results, implement the digital equivalent
of your favorite analog phase shift network.

For a precise solution, Google for "Hilbert Transformer".

> Another question.  Is the PC timing accurate enough for the
> various BPSK modes without trying to use an external clock
> as well?

Absolutely.  Even a 1% error in bit rate should not noticeably
degrade most receive software.  The problem is that a normal
user program in Windows suffers large variations in timing,
because the system is running other tasks.  One solution is to
write an interrupt-based driver.  Another is to use an output
device (serial port or sound card) that is buffered and
supplies its own timing.

> I've gotten as far as writing a program which will generate
> the varicode for the various characters and output it from
> the serial port but have never been sure about the timing accuracy.

Sending the varicode directly will not work, because the UART
inserts "start" and "stop" bits over which you have no control.
But sending at a high baud rate, with multiple characters for
each bit, as described in my earlier message, should be ok.
The algorithm suggested has an inherent error of about 0.1%;
there may be another 0.1% error caused by the crystal driving
the baud rate generator.  This is well within the tolerance of
any PSK31 receiver.

> Are you saying that the present sound-card programs can
> generate that high an audio frequency?

Sorry, I don't know.  If you find one, consider yourself
lucky.  However, there are implementations with freely
available source code.  It should not be hard to modify the
sample rate and carrier frequency.

Another possibility (for a beacon) is to record the output
of your PSK31 program, and use Cool Edit or similar software
to increase the sample rate and shift the signal up in
frequency.  Then play that result back repeatedly.

73,

Stewart KK7KA