dabhand.sourceforge.net software

The only software that's here currently, is stuff which I've written to get the device working for study purposes. This is for experienced developers to use, mainly because it's currently no use to end users.

Important point to note: All of the analysis utilities here contain sampling parameters that I've made up given my very limited understanding of what the hardware is producing.

All of this is in CVS, check out the dabhand module if you want to have a play. Let me show you what I've got...

dabmate-detect.C

This scans the USB bus for the DABmate module, and dumps out a few parameters. e.g.

DABmate found.
Manufacturer: dabMate
Product: USB Digital Receiver
Serial no.: 0001-80000000
Device has 3 settings.
Green LED should flash for 5 seconds.
Done.

dabmate-bulkread.C

This configures the DABmate to a particular frequency, and reads the captured signal using USB BULK READ requests. e.g.

./dabmate-bulkread 5d 02 > DUMP.bbc

It runs forever, so you'll want to interrupt it after 10 seconds or so, otherwise your disk will fill. At the moment, the captured data isn't likely to be any use to you. It can be fed to the analysis programs below.

Note: I suspect this method of reading data to be lossy. The dabmate-iso approach uses isochronous transfers, and seems to read more data.

Here's a table of frequncies which I've derived from a USB analyser.

BandFrequency / kHzValue
5a174928d4 d0
5b17664080 d2
5c1783522c d4
5d180064d8 d5
6a181936ac d7
6b18364858 d9
6c1853600d db
6d187072?? ??
7a188928ac d7
7b19064058 d9
7c1923520d db
7d19406480 de
BandFrequency / kHzValue
8a1959362c e0
8b19764884 e3
8c19936058 e5
8d20107204 e7
9a202928b0 e8
9b2046405c ea
9c2063522c ec
9d208064d8 ed
10a20993604 f3
10b211648b0 f4
10c2133605c f6
10d21507208 f8
10n2100962c f3
BandFrequency / kHzValue
11a216928d8 f9
11b21864084 fb
11c22035230 fd
11d222064dc fe
11n21708800 fa
12a223936b1 00?
12b2256485d 02?
12c22763009 04?
12d229072?? ??
12n224096d9 00
13a23078461 07
13b2424960d 09
13c234208b9 0a
13d23577641 0c
13e237488ed 0d
13f23920099 0f

dabmate-iso.C

Very similar to dabmate-bulkread, this configures the DABmate to a particular frequency, and reads the captured signal using USB isochronous transfers. e.g.

./dabmate-iso 5d 02 > DUMP.bbc

It runs forever, so you'll want to interrupt it after 10 seconds or so, otherwise your disk will fill. At the moment, the captured data isn't likely to be any use to you. It can be fed to the analysis programs below.

This utility reads more data than dabmate-bulkread, so I suspect this to be a more reliable way to read the data. The iso transfer method lends itself to better support for realtime capture devices such as this, so it's not too much of a surprise.

dabmate-iso.C uses some very bodged code to support the ISO transfers, so you may have more trouble getting it to compile on your system. The problem here is that I'm using libusb, which doesn't support ISO transfers, yet.

freq-plot.py

This is a Python script, and you run it with one argument, a dump file, as captured by dabmate-bulkread above. e.g.

./dabmate-bulkread DUMP.bbc

This script runs a Fourier transform on a snapshot of data from the capture file, and draw a plot on the screen like this:

The plot above is made from a real capture of a good DAB signal. The line which stands out at x=1169 is of interest. Closer analysis shows that this is likely to be the DAB central frequency. The DAB OFDM scheme does not transmit data on the central carrier, which causes it to stand out.

phase-plot.py

This is a Python script, and you run it with one argument, a dump file, as captured by dabmate-bulkread above.

This script runs Fourier analysis over a small period of time on the data, and plots a particular value of the frequency domain (x=real, y=complex). In other words, the distance from the centre (0,0) represents the amplitude of the signal, the angle around the centre represents the phase. e.g.

The plot above is made from a real capture of a good DAB signal. Since the signal is COFDM, each carrier is moduled using QAM. So, I'd expect to see four clumps of data in the scattergram. Unfortunately, that's not what I'm seeing at the moment.

single-frequency.py

This is a Python script, and you run it with one argument, a dump file, as captured by dabmate-bulkread above.

This script runs Fourier analysis over a small period of time on the data, and plots two values on the Y-axis against time on the X-axis. The two values plotted are the amplitude and phase of a particular value of the frequency domain.

The plot above is made from a real capture of a good DAB signal. The blue line is amplitude, and the green line is phase. I'd expect the blue line to be much squarer. The phase line should be closer to one of four phases, so I'd expect it to have much clearer transitions between four discrete values. The above plot has some structure but seems to have a strong random flavour.

ofdm-analyse.C

This needs the FFTW3 library, available at www.fftw.org.

This compiles to an executable which reads the standard input for data, a dump file, as captured by dabmate-bulkread above. e.g.

./ofdm-analyse < DUMP.bbc

This script runs Fourier analysis on regular time intervals of the dump data, and dumps out the value of the symbols at a range of frequencies (1165-1179) represented in ASCII on the standard output. Each value is represented as a string of up to 5 characters. The number of characters represents the amplitude, and the characters will be A, B, C or D depending on the phase quadrant each symbol appears in. Here's a snapshot of output:

    1058:DDDD  CCC   AA    AAAAA AAAAA BBBBB AAAA  BBBB  CCCC  CCCCC AAAA  BBB   AAA   AAAA  AAAA  
    1059:CCC   CCC   AA    AAAAA AAAAA AAAAA AAAA  BBBB  CCCC  CCCCC CCCC  BBB   AAAA  AAAA  AAAA  
    1060:CCC   CCC   AAA   BBBBB AAAAA AAAAA AAA   BBBB  AAAAA CCCCC DDDDD BBBB  AAAAA AAA   AAAAA 
    1061:CCC   DDD   AAA   BBBBB AAAAA CCCCC DD    BBB   AAAAA CCCCC DDDDD BBBB  AAAAA DDD   BBBBB 
    1062:CCC   DDD   AAA   DDDDD AAAAA CCCCC BBB   BBB   AAAAA CCCCC DDDDD DDDD  AAAAA DDDD  BBBBB 
    1063:AAA   DDD   AAA   DDDDD AAAAA DDDDD AAA   BBB   BBB   CCCCC BBBBB DDDD  AAAAA DDDD  BBBB  
    1064:AAA   BBB   AAA   CCCCC AAAAA DDDDD AAA   BBB   DDD   CCCCC BBBBB DDDD  AAAAA DDD   BBBB  
    1065:AAAA  BBB   BBBB  CCCCC AAAAA BBBBB AA    BBB   DDDD  CCCCC AAAAA CCCC  AAAAA BBB   BBBB  
    1066:AAAA  BBBB  BBBB  AAAAA BBBBB BBBBB BBB   BBB   CCCC  CCCCC AAAA  CCCC  AAAAA AAAA  BBBB  
    1067:AAA   BBBB  BBB   BBBBB BBBBB BBBBB BBB   BBB   CCCC  CCCCC CCCCC AAA   AAAAA AAAA  BBBB  
    1068:CCC   BBBB  AAA   BBBBB BBBBB AAAAA CC    BBB   AAAAA CCCCC CCCC  AAA   AAAAA CCCC  DDDD  
    1069:CCC   BBBB  AAA   DDDDD BBBBB AAAAA CCC   BBBB  AAAA  CCCCC DDDD  BBB   AAAAA CCCCC DDDD  
    1070:DDDDD BBBB  CCC   DDDDD BBBBB CCCCC CCC   BBBBB AAA   CCCCC DDDD  DDD   AAAAA CCCCC DDDD  
    1071:DDDDD BBBB  CCC   CCCCC BBBBB CCCCC CCCC  BBBBB DDDD  CCCCC BBBB  DDD   AAAAA CCCC  DDD   
    1072:DDDDD AAA   CCC   CCCCC BBBBB DDDDD AAAAA BBBBB DDDDD CCCCC BBBBB DDD   AAAA  DDDD  D     
    1073:DDD   AAA   AA    AAAAA BBBBB DDDDD AAAAA BBBBB DDDDD CCCCC AAAAA CCC   AAA   DDD   A     
    1074:BBB   AAA   AAA   AAAAA BBBBB BBBBB AAAA  BBBBB DDD   CCCCC AAAAA CCC   AA    DDD   DD    
    1075:BBB   AAAA  AAAA  BBBBB BBBBB BBBBB AAAAA BBBBB AAAA  AAAAA CCCCC CCCC  CC    DDD   DDD   
    1076:BBB   AAAA  AAAAA DDDDD BBBBB BBBBB AAAAA AAAA  AAAAA AAAAA CCCCC CCCC  DDD   DD    DDD   
    1077:BBB   AAAA  AAAA  DDDDD BBBBB AAAAA BBBBB AAA   BBBBB AAAAA CCCCC CCCC  DDD   C     DDD   
    1078:BBB   BBBB  CCCC  CCCCC BBBBB AAAAA BBBB  CCC   BBBBB AAAAA CCCC  CCC   DDD   CCC   DDD   
    1079:AAA   BBBB  CCCC  CCCCC BBBBB CCCCC BBBBB CCCC  BBBBB AAAAA BBB   DDD   DDD   CCC   DDD   
    1080:AAAA  BBB   CCC   AAAAA BBBBB CCCCC BBBB  CCCC  DDDD  CCCCC BBBB  BBB   DDD   CCC   DD    
    1081:AAAA  BBB   DDD   AAAAA BBBBB DDDDD BBB   DDD   CCC   CCCCC AAAAA BBB   DDDD  CCC   AAA   
    1082:CCCC        DDD   BBBBB BBBBB DDDDD DDD   DDD   CCCC  AAAAA AAAAA BBBB  DDDD  BB    AAAA  
    1083:CCC   CCC   CCC   BBBBB BBBBB BBBBB DDD   DDD   AAAA  AAAAA CCCCC DDDD  DDDDD BBBB  AAAA  
    1084:AAA   CCCC  DDD   DDDDD BBBBB BBBBB BBB   DDD   BBBBB AAAAA CCCCC DDDDD BBBBB BBBB  AAAA  
    1085:AAA   CCCC  DDD   CCCCC DDDDD BBBBB B     CCC   BBBBB AAAAA CCCCC CCCCC BBBBB AAAA  BBBB  
    1086:AAA   CCCC  DDD   CCCCC DDDDD AAAAA DDD   CCCC  BBBBB AAAAA DDDDD CCCCC BBBBB AAAAA BBBB  
    1087:AAA   CCC   BBBB  AAAAA DDDDD AAAAA BBBBB CCCCC BBBBB AAAAA DDDDD CCCCC BBBBB AAAA  BBBBB 
    1088:AA    AAA   BBBB  AAAAA DDDDD CCCCC BBBBB CCCCC DDDD  AAAAA BBBBB AAAAA BBBBB AAA   DDDDD 
    1089:CC    AAA   DDDD  BBBBB DDDDD CCCCC BBBBB CCCCC CCCCC AAAAA BBBBB AAAAA BBBBB BBBB  DDDDD 
    1090:C     AAA   DDD   BBBBB DDDDD DDDDD BBBB  DDDD  CCCCC AAAAA AAAA  AAAA  BBBBB BBBBB DDDDD 
    1091:BBB   AAA   DDD   DDDDD DDDDD DDDDD DDD   DDDD  AAAA  AAAAA AAAA  BBBB  BBBBB BBBBB DDDD  
    1092:BBBB  CCC   DDD   DDDDD DDDDD BBBBB AAA   DDDDD BBBBB AAAAA CCCC  BBBB  BBBBB BBBBB DDD   
    1093:BBBB  CCCC  DDDD  CCCCC DDDDD BBBBB AAAAA DDDDD BBBBB AAAAA CCCCC BBB   BBBB  BBBBB CCC   
    1094:BBBB  CCCC  DDDD  AAAAA DDDDD BBBBB AAAAA DDDDD BBBBB AAAAA DDDDD AAAA  DDDD  BBBB  CCCC  
    1095:BBB   CCCC  DDDD  AAAAA DDDDD AAAAA AAA   DDDDD DDDDD AAAAA DDDDD AAAAA DDDD  BBB   CCCCC 
    1096:DDD   CCCC  DDD   BBBBB DDDDD AAAAA BBB   DDDDD DDDDD AAAAA DDDDD AAAAA BBBB  DDDD  CCCCC 
    1097:DDD   CCC   DDD   BBBBB DDDDD CCCCC BBBB  DDDDD CCCCC AAAAA BBB   AAAA  BBBBB DDDD  CCCCC 
    1098:BB    CCC   CCC   DDDDD DDDDD CCCCC DDDD  DDDDD CCCCC AAAAA AAAA  AAA   BBBBB DDDDD CCCC  

The columns represent the values of frequencies, and the rows represent time-incremental samples. The frequency range was chosen as it contains the frequency shown in the FFT plot from freq-plot.py. There's a strong pattern here, although I was hoping to see the frequency carrying a static pattern, rather than one which rotates.

If you live in a place where there is VERY strong DAB reception, I'd be interested in the results you get.