<div dir="ltr"><div><div><div>Hi,<br><br>As a "side product" of this thread: "How to get IQ samples 
from multiple rtl-sdr dongles in a synchronized manner",A scanning tool is released for identifying all available/detectable GSM broadcasting carrier around you quickly.<br><br></div>You can find it here:<br><a href="http://www.mathworks.com/matlabcentral/fileexchange/45152-rtl-sdr-multi-dongles-based-gsm-fcch-scanner">http://www.mathworks.com/matlabcentral/fileexchange/45152-rtl-sdr-multi-dongles-based-gsm-fcch-scanner</a><br>
</div>or<br><a href="https://github.com/JiaoXianjun/multi-rtl-sdr-calibration">https://github.com/JiaoXianjun/multi-rtl-sdr-calibration</a><br><br></div>By using 3 dongles, we can identify all available/detectable GSM broadcasting carrier in the whole PGSM band downlink 935~960MHz in 30s (my intel i7 12-core station) instead of 80s (only one dongles).<br>
<div><br>The original purpose of project multi-rtl-sdr-calibration is that calibrating multiple dongles by the common GSM source.<br>So the first thing need to do is that finding out where is the strongest GSM signal in the air.<br>
This script (multi_rtl_sdr_gsm_FCCH_scanner.m) can identify GSM downlink broadcasting carrier by detecting successive multiple FCCH bursts of all possible carrier in a band you specify, such as PGSM downlink 935~960MHz.<br>
I learn knowledge of GSM frame structure from here: <br><a href="http://www.sharetechnote.com/html/FrameStructure_GSM.html">http://www.sharetechnote.com/html/FrameStructure_GSM.html</a><br>After
 the script is run, quality metrics of detected FCCH channel per frequency will be 
displayed: SNR and number of detected FCCH burst (num of hits).<br>Note:
 for speedup detection algorithm, a large decimation ratio is used, thus
 shown SNR may be lower than actual SNR. But it is enough to help us 
idendify which frequency is best.<br><br>README is also pasted here:<br><br>Multiple rtl-sdr(rtl_tcp) dongles based GSM FCCH scanner. (<a href="mailto:putaoshu@gmail.com">putaoshu@gmail.com</a>; <a href="mailto:putaoshu@msn.com">putaoshu@msn.com</a>)<br>
<br>multi_rtl_sdr_gsm_FCCH_scanner.m<br>Have multiple dongles run concurrently to speedup detecting FCCH(Frequency correction channel) burst in wide GSM band by scanning different sub-band with different dongle.<br><br>This is a sub script of project: <a href="https://github.com/JiaoXianjun/multi-rtl-sdr-calibration">https://github.com/JiaoXianjun/multi-rtl-sdr-calibration</a><br>
<br>------------Purpose------------<br>The original purpose of project multi-rtl-sdr-calibration is that calibrating multiple dongles by the common GSM source.<br>So the first thing need to do is that finding out where is the strongest GSM signal in the air.<br>
This script can identify GSM downlink broadcasting carrier by detecting successive multiple FCCH burst.<br>I learn knowledge of GSM frame structure from here: <a href="http://www.sharetechnote.com/html/FrameStructure_GSM.html">http://www.sharetechnote.com/html/FrameStructure_GSM.html</a><br>
After the script is run, quality metrics of detected FCCH channel will be displayed: SNR and number of detected FCCH burst (num of hits).<br>Note: for speedup detection algorithm, a large decimation ratio is used, thus shown SNR may be lower than actual SNR. But it is enough to help us idendify which frequency is best.<br>
<br>-------------Usage-------------<br>1. Assume that you have installed rtl-sdr<br>(<a href="http://sdr.osmocom.org/trac/wiki/rtl-sdr">http://sdr.osmocom.org/trac/wiki/rtl-sdr</a>) and have those native utilities run correctly already.<br>
<br>For example, you have multiple dongles, please run multiple rtl_tcp in multiple shell respectively as:<br>rtl_tcp -p 1234 -d 0<br>rtl_tcp -p 1235 -d 1<br>rtl_tcp -p 1236 -d 2<br>...<br><br>2. Then run multi_rtl_sdr_gsm_FCCH_scanner.m in MATLAB.<br>
<br>ATTENTION! In some computer, each time before you run script, maybe you need to terminate multiple rtl_tcp and re-launch them again.<br>ATTENTION! Please reduce number of inspected points by reducing frequency range, if your computer hasn't enough memory installed. Because all sigals are stored firstly before processing.<br>
<br>Change following parameters in the script as you need:<br><br>num_dongle = 1; % number of dongles you installed<br>start_freq = 935e6;<br>end_freq = 960e6;<br>freq_step = 0.2e6; % GSM channel spacing<br>gain = 0;<br>...<br>
<br>Some key parameters:<br>% how long signal we try to find multiple FCCH bursts in<br>num_frame = 64; % roughly speaking, there are 1 FCCH burst per 10 frames, but 50 frames plus 1 idle frame construct one multiframe<br>
<br>FCCH_coarse_position.m<br>th = 10; % Peak to average threshold of detecting FCCH in moving averaging SNR(estimated by FFT) stream.<br>max_offset = 5; % +/- range of predicted next postion of FCCH burst.<br><br>------------Algorithm------------<br>
Because FCCH actually is a period of CW signal, we can use FFT to see if there is sharp peak in frequency domain.<br>For the first FCCH detection, a continuous moving FFT is performed. After the first FCCH is hit, the following FCCH will be only detected at predicted position (+/- small range) according to GSM frame structure.<br>
At least 3 successive FCCH need to be detected for we to ensure one donwlink broadcasting carrier is there. See details in FCCH_coarse_position.m.<br><br></div></div>