discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Help for UMTS broadcast reception


From: Nedelin Rusev
Subject: Help for UMTS broadcast reception
Date: Tue, 21 Jun 2022 17:06:11 +0300

Hi,
For several months now, I have been implementing UMTS broadcast receiver. I'd like to be able to detect the SIB and MIB messages sent from the base stations. My current setup is:
- GnuRadio 3.8
- LimeSDR(USB and Mini) for radio reception (actually I stored some radio content in files and then tried to decode it).

For the moment my input files contain data collected from two sources:
1. A real cell (located in the office) ~5m away from the receiver, behind glass walls and behind one wall corner
2. A home setup containing a PC, running OpenBTS-UMTS, and LimeSDR transmitting at 955MHz channel. The receiver is ~25cm away from the transmitter, in an attempt to have as clean a signal as possible.

I think I have implemented all necessary steps for decoding. This is what my current tree looks like:
UMTS_PCCPCH.jpg


The blocks which I have implemented are:
1. sync_psch, sync_ssch, sync_cpich - these are used to detect the radio frame/slot structure and to determine the primary scrambling code (PSC). Basically these blocks are some hybrid of the existing GnuRadio's blocks "correlation estimator" and "peak detector". They also attach tags at the beginning of each slot, which hold UMTS specific data like slot number, PSC group, PSC, etc.
2. descrambler - reads the PSC from the tags and performs "descramble" operation over the radio data
3. data_discard - removes some radio samples/chips, which should not be decoded
4. despreadder - performs the despread operation, which turns the radio data to bits
5. decoder - runs operations like de-interleave, viterbi decode, CRC, etc to recover the actual data

If I run the above graph with the data collected from my home setup (I have to disable the AGC and the equalizer, though) I seem to be able to recover the data I need. The CRC is fine and the recovered bitstrings match with those generated by OpenBTS-UMTS.

Unfortunately this is not the case with the real cell data. Also I fail to decode my home setup with AGC and Equalizer enabled. And here I need some expert assistance.

Bugs in my implementation are not unlikely. I am about to track the work of each block.

But before that, I'd like to make sure that the radio signals I use are in proper shape (properly rotated, with minimized reflections, etc).
So I am following the tutorial https://wiki.gnuradio.org/index.php/Guided_Tutorial_PSK_Demodulation#Phase_and_Fine_Frequency_Correction, because the UMTS broadcast messages are QPSK modulated.
And I think I see some weird constellations. Here are several examples:

1. Correct decoding of home setup (AGC and Equalizer are disabled). But the 4 QPSK dots after Costas Loop (figure "Costas CMA") are very tightly bound to one another. This does not seem right.
Constellations_Home.jpg

2. Incorrect decoding of home setup (AGC and Equalizer are enabled). The 4 QPSK dots after Costas Loop (figure "Costas CMA") seem to be grouped together and to be rotating around the QPSK circle
Constellations_Home_agc_equalizer.jpg

3. Incorrect decoding of office setup (AGC and Equalizer are enabled). The 4 QPSK dots after Costas Loop (figure "Costas CMA") are distinguishable, but there is lots of noise and they are merging together.
Constellations_Office.jpg

I think I have to clean my data, but my attempts seem to fail. Could you propose some ideas of what could go wrong and how to approach the problem?


One more thing - some time ago, following the https://wiki.gnuradio.org/index.php/Guided_Tutorial_PSK_Demodulation#Phase_and_Fine_Frequency_Correction tutorial, I created a grc, in which I was sending QPSK modulated string from one SDR and was receiving it and recovering it with another SDR. To do so I had to configure the "samples per symbol" properties of "PolyPhase Clock Sync", "CMA Equalizer" and "Costas Loop" to be larger than 1. But for my UMTS project I use "samples per symbol" =1, because larger sps breaks my "sync"/correlation blocks. Could this be a problem? If I got it right, according to the tutorial sps should be as small as possible, even 1. Could you explain briefly how sps should be used.

Thank you in advance,
Greetings, Nedelin.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]