D-STAR library and utilities in Python
Project description
pydv
Collection of Python code to experiment with D-STAR and the proposed vocoder extension that allows the use of the open source Codec 2 with D-STAR.
Provides Python interfaces to manage DExtra connections (the protocol used by XRF reflectors), convert from network data to D-STAR streams (header and frames) and vice versa, as well as encode and decode voice data using mbelib (decode only) and codec2.
Installs the following executables:
dv-recorder
, which connects to a DExtra-compatible reflector and records traffic in .dvtool files.dv-player
, which plays back a .dvtool file to a DExtra-compatible reflector.dv-decoder
, which converts a .dvtool file using any vocoder to .wav.dv-transcoder
, which converts a .dvtool file using the AMBE vocoder to a .dvtool file using the Codec 2 vocoder.
D-STAR vocoder extension
I propose the use of the "Flag 3" byte of the header, to mark the vocoder type in the voice frames, as follows (in accordance to section 2.1.1, page 4 of the D-STAR specification):
Bit | Meaning | Function |
---|---|---|
0000000x |
Vocoder | 0 : AMBE (backwards compatible)1 : Codec 2 |
000000x1 |
Codec 2 mode | 0 : 3200 (160 samples/20 ms into 64 bits)1 : 2400 (160 samples/20 ms into 48 bits) |
00000x?1 |
Enable FEC | 0 : No1 : Yes |
00001000 to 11111111 |
Undefined | Use for future expansion |
FEC is currently not implemented. The space available in the frame for voice data is 72 bits, so that leaves us with 8 bits in the case of 3200 mode and 24 in the case of 2400 mode. The latter is enough for 22 bits of FEC, as FreeDV does in 2400 and 1850 modes.
The vocoder extension is compatible with all current D-STAR hardware (repeaters, hotspots, etc.) and software (repeater controllers, reflectors, etc.), except - of course - transceivers that assume voice data to be in AMBE format and use the corresponding chip for processing. D-STAR reflectors, like xlxd, can be used to transcode and bridge the two formats.
The open source vocoder, allows homebrewing transceivers using a Rasbperry Pi, an MMDVM modem (even one constructed with through-hole components), and an old radio. Thus, one could use a D-STAR hotspot as a transceiver, assuming a method to attach a microphone and speaker.
dv-decoder
and dv-transcoder
implement the vocoder extension.
Building
To build, you must first build and install mbelib and codec2.
On Mac OS X, I used MacPorts to install cmake
, speexDSP
, and libsamplerate
. mbelib compiles and installes to /usr/local
without problems. To build codec2, I had to export LIBRARY_PATH=$LIBRARY_PATH:/opt/local/lib
before running make
and edit the following files to remove unsupported gcc
flags (from the build
folder):
unittest/CMakeFiles/ofdm_stack.dir/flags.make
, to remove-fstack-usage
unittest/CMakeFiles/ofdm_stack.dir/link.txt
, to remove-Wl,-Map=ofdm_stack.map
Based on ircDDBGateway and xlxd. Tested with xlxd.
73 de SV9OAN
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.