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:
- Recover bursts
- Clock the data
Calculate frequency offset from FCCH
Does not use GMSK or M&M.
Live captures & tuning by channel number (-c <ARFCN>)
Offline captures (-I <cfile>)
ff module using M&M (-Df)
- Fixed 1-bit DFE (against ISI. Disable with -E none).
- Data correlation and alignment against SCH, normal and dummy bursts
- Nice GUI with FFT, scopes, ...
What it does not:
- Synchornous reception
- Viterbi equalization
- 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: