GSM-TVOID


1. Download

Download: gsm-tvoid-0.0.2.tar.gz

2. Release Notes

A gnu radio GSM implementation. This release focuses on the RF part. (TVOID Notes)

Features:

  1. Recover bursts
  2. Clock the data
  3. Calculate frequency offset from FCCH (!)

  4. Does not use GMSK or M&M.

  5. Live captures & tuning by channel number (-c <ARFCN>)

  6. Offline captures (-I <cfile>)

  7. ff module using M&M (-Df)

  8. Fixed 1-bit DFE (against ISI. Disable with -E none).
  9. Data correlation and alignment against SCH, normal and dummy bursts
  10. Nice GUI with FFT, scopes, ...

What it does not:

  1. Synchornous reception
  2. Viterbi equalization
  3. Anything with burst data (e.g. not channel logic. Pure RF).

After building run:

# /src/python/gsm-scan.py -h

Try the -p option for printing burst information.

3. Usage

Usage: gsm_scan.py [options]
Options:
   -h, --help            show this help message and exit
   -S SCOPES, --scopes=SCOPES
                         Select scopes to display. (N)one,
                         (I)nput,(F)ilter,(d)emod,(c)locked,(b)urst
[default=I]
   -p PRINT_CONSOLE, --print-console=PRINT_CONSOLE
                         What to print on console. [default=s] (n)othing,
                         (e)verything, (s)tatus, (a)ll Types, (k)nown,
                         (u)nknown,  TS(0), (F)CCH, (S)CH, (N)ormal, (D)ummy
                         Usefull (b)its, All TS (B)its, (C)orrelation bits
   -D DECODER, --decoder=DECODER
                         Select decoder block to use. (c)omplex,(f)loat
                         [default=c]
   -d DECIM, --decim=DECIM
                         Set fgpa decimation rate to DECIM [default=112]
   -o OFFSET, --offset=OFFSET
                         Tuning offset frequency
   -C CLOCK_OFFSET, --clock-offset=CLOCK_OFFSET
                         Sample clock offset frequency
   -E EQUALIZER, --equalizer=EQUALIZER
                         Type of equalizer to use.  none, fixed-dfe [default
                         =fixed-dfe]
   -t TIMING, --timing=TIMING
                         Type of timing techniques to use. [default=cq]
                         (n)one, (c)orrelation track, (q)uarter bit,
(f)ull04
   -I INPUTFILE, --inputfile=INPUTFILE
                         Select a capture file to read
   -O OUTPUTFILE, --outputfile=OUTPUTFILE
                         Filename to save burst output
   -l, --fileloop        Continuously loop data from input file
   -R RX_SUBDEV_SPEC, --rx-subdev-spec=RX_SUBDEV_SPEC
                         Select USRP Rx side A or B (default=first one
with a
                         daughterboard)
   -g GAIN, --gain=GAIN  Set gain in dB (default is midpoint)
   -c CHANNEL, --channel=CHANNEL
                         Tune to GSM ARFCN.  Overrides --freq
   -r REGION, --region=REGION
                         Frequency bands to use for channels.  (u)s or
(e)urope
                         [default=u]

4. Example 1

./gsm_scan.py -I ~/gsm-data/GSMSP_20070218_robert_dbsrx_941MHz_112.cfile
-d112 -Df
======== STATS =========
freq_offset: 8573.18847656
sync_loss_count: 0
fcch_count: 74
part_sch_count: 0
sch_count: 74
normal_count: 637
dummy_count: 5212
unknown_count: 0
./gsm_scan.py -I ~/gsm-data/GSMSP_20070218_robert_dbsrx_941MHz_112.cfile
-d112 -o -8500 -Df
======== STATS =========
freq_offset: 124.243438721
sync_loss_count: 0
fcch_count: 74
part_sch_count: 0
sch_count: 74
normal_count: 637
dummy_count: 5212
unknown_count: 0
Not bad...  :-)
Then:
./gsm_scan.py -I ~/gsm-data/GSMSP_20070218_robert_dbsrx_941MHz_112.cfile
-d112 -o -8500 -Df -pa

5. Example 2

./gsm_scan.py -I
~/gsm-data/GSMSP_20070615_pawel_unreadable_signal_64.cfile -d64 -Df
======== STATS =========
freq_offset: -4284.99072266
sync_loss_count: 0
fcch_count: 211
part_sch_count: 0
sch_count: 209
normal_count: 16748
dummy_count: 0
unknown_count: 39
Adjust freq...
./gsm_scan.py -I
~/gsm-data/GSMSP_20070615_pawel_unreadable_signal_64.cfile -d64 -Df -o 4200
======== STATS =========
freq_offset: -27.997838974
sync_loss_count: 0
fcch_count: 211
part_sch_count: 0
sch_count: 210
normal_count: 16750
dummy_count: 0
unknown_count: 36
Nice busy capture, not a single dummy burst!

6. Example 3

./gsm_scan.py -I ~/gsm-data/GSMSP_20070319_tore_957425000_64.cfile -d64 -Df
======== STATS =========
freq_offset: 1436.00976562
sync_loss_count: 2
fcch_count: 20
part_sch_count: 0
sch_count: 13
normal_count: 708
dummy_count: 335
unknown_count: 339
./gsm_scan.py -I ~/gsm-data/GSMSP_20070319_tore_957425000_64.cfile -d64
-Df -o -1300
======== STATS =========
freq_offset: -31.1189861298
sync_loss_count: 1
fcch_count: 21
part_sch_count: 0
sch_count: 14
normal_count: 678
dummy_count: 393
unknown_count: 458
Humm, not great.  Try w/o the DFE.
./gsm_scan.py -I ~/gsm-data/GSMSP_20070319_tore_957425000_64.cfile -d64
-Df -E none
======== STATS =========
freq_offset: -31.1189861298
sync_loss_count: 1
fcch_count: 21
part_sch_count: 0
sch_count: 18
normal_count: 993
dummy_count: 541
unknown_count: 40
Better... Go figure.

7. Example 4

./gsm_scan.py -c 654 -Df -o -14000

Will bring up the window shown in the Screenshot-1.  The first 5 sec stats:

======== STATS =========
freq_offset: 104.362800598
sync_loss_count: 0
fcch_count: 106
part_sch_count: 0
sch_count: 106
normal_count: 1300
dummy_count: 7137
unknown_count: 0

Screenshot-1: