osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Files

file  fcch.h
 Osmocom GMR-1 FCCH bursts header.
 
file  fcch.c
 Osmocom GMR-1 FCCH bursts implementation.
 

Data Structures

struct  gmr1_fcch_burst
 

Functions

int gmr1_fcch_rough (const struct gmr1_fcch_burst *burst_type, struct osmo_cxvec *search_win_in, int sps, float freq_shift, int *toa)
 Rough FCCH timing acquisition. More...
 
int gmr1_fcch_rough_multi (const struct gmr1_fcch_burst *burst_type, struct osmo_cxvec *search_win_in, int sps, float freq_shift, int *peaks_toa, int N)
 Rough FCCH timing acquisition w/ multiple FCCH detection. More...
 
int gmr1_fcch_fine (const struct gmr1_fcch_burst *burst_type, struct osmo_cxvec *burst_in, int sps, float freq_shift, int *toa, float *freq_error)
 Fine FCCH timing & frequency acquisition. More...
 
int gmr1_fcch_snr (const struct gmr1_fcch_burst *burst_type, struct osmo_cxvec *burst_in, int sps, float freq_shift, float *snr)
 SNR estimation on a FCCH burst. More...
 

Variables

const struct gmr1_fcch_burst gmr1_fcch_burst
 FCCH burst (GMR-1 version) See GMR-1 05.004 (ETSI TS 101 376-5-2 V3.1.1) - Section 8.1.
 
const struct gmr1_fcch_burst gmr1_fcch3_lband_burst
 FCCH3 L-band burst (GMR-1 3G version for L-band) See GMR-1 05.004 (ETSI TS 101 376-5-2 V3.1.1) - Section 8.2.1.
 
const struct gmr1_fcch_burst gmr1_fcch3_sband_burst
 FCCH3 S-band burst (GMR-1 3G version for S-band) See GMR-1 05.004 (ETSI TS 101 376-5-2 V3.1.1) - Section 8.2.2.
 
const struct gmr1_fcch_burst gmr1_fcch_burst
 FCCH burst (GMR-1 version) See GMR-1 05.004 (ETSI TS 101 376-5-2 V3.1.1) - Section 8.1. More...
 
const struct gmr1_fcch_burst gmr1_fcch3_lband_burst
 FCCH3 L-band burst (GMR-1 3G version for L-band) See GMR-1 05.004 (ETSI TS 101 376-5-2 V3.1.1) - Section 8.2.1. More...
 
const struct gmr1_fcch_burst gmr1_fcch3_sband_burst
 FCCH3 S-band burst (GMR-1 3G version for S-band) See GMR-1 05.004 (ETSI TS 101 376-5-2 V3.1.1) - Section 8.2.2. More...
 

Detailed Description

Function Documentation

◆ gmr1_fcch_fine()

int gmr1_fcch_fine ( const struct gmr1_fcch_burst burst_type,
struct osmo_cxvec burst_in,
int  sps,
float  freq_shift,
int *  toa,
float *  freq_error 
)

Fine FCCH timing & frequency acquisition.

Parameters
[in]burst_typeFCCH burst format description
[in]burst_inComplex signal of the FCCH burst
[in]spsOversampling used in the input complex signal
[in]freq_shiftFrequency shift to pre-apply to burst_in (rad/sym)
[out]toaPointer to the toa return variable
[out]freq_errorPointer to the frequency error return variable (rad/sym)
Returns
0 in case of success. -errno for errors.

The input vector must be burst_type->len * sps samples long. The frequency error is doesn't include any correction done with freq_shift.

References osmo_cxvec::len.

◆ gmr1_fcch_rough()

int gmr1_fcch_rough ( const struct gmr1_fcch_burst burst_type,
struct osmo_cxvec search_win_in,
int  sps,
float  freq_shift,
int *  toa 
)

Rough FCCH timing acquisition.

Parameters
[in]burst_typeFCCH burst format description
[in]search_win_inComplex signal where to search for FCCH
[in]spsOversampling used in the input complex signal
[in]freq_shiftFrequency shift to pre-apply to search_win_in (rad/sym)
[out]toaPointer to the toa return variable
Returns
0 in case of success. -errno for errors.

To be sure to acquire the signal, you need more than a single BCCH period. (so more than 320 ms of signal, plus the fcch length itself)

◆ gmr1_fcch_rough_multi()

int gmr1_fcch_rough_multi ( const struct gmr1_fcch_burst burst_type,
struct osmo_cxvec search_win_in,
int  sps,
float  freq_shift,
int *  peaks_toa,
int  N 
)

Rough FCCH timing acquisition w/ multiple FCCH detection.

Parameters
[in]burst_typeFCCH burst format description
[in]search_win_inComplex signal where to search for FCCH
[in]spsOversampling used in the input complex signal
[in]freq_shiftFrequency shift to pre-apply to search_win_in (rad/sym)
[out]peaks_toaArray of floats to store the returned alignements
[in]NMaximum number of alignements to returns
Returns
A positive value of the number of FCCH returned. -errno for errors

This method can detect multiple overlapping FCCH and returns alignements for all of them. To do so it needs at least 650 ms worth of data (two SI cycles plus some margin).

References GMR1_SYM_RATE, and osmo_cxvec::len.

◆ gmr1_fcch_snr()

int gmr1_fcch_snr ( const struct gmr1_fcch_burst burst_type,
struct osmo_cxvec burst_in,
int  sps,
float  freq_shift,
float *  snr 
)

SNR estimation on a FCCH burst.

Parameters
[in]burst_typeFCCH burst format description
[in]burst_inComplex signal of the FCCH burst
[in]spsOversampling used in the input complex signal
[in]freq_shiftFrequency shift to pre-apply to burst_in (rad/sym)
[out]snrPointer to the SNR return variable
Returns
0 in case of success. -errno for errors.

The input vector must be burst_type->len * sps samples long. This method estimated the FFT peak energy over the FFT average energy to estimate SNR.

References osmo_cxvec::len.

Variable Documentation

◆ gmr1_fcch3_lband_burst

const struct gmr1_fcch_burst gmr1_fcch3_lband_burst
Initial value:
= {
.freq = 0.32f,
.len = 12 * 39,
}

FCCH3 L-band burst (GMR-1 3G version for L-band) See GMR-1 05.004 (ETSI TS 101 376-5-2 V3.1.1) - Section 8.2.1.

◆ gmr1_fcch3_sband_burst

const struct gmr1_fcch_burst gmr1_fcch3_sband_burst
Initial value:
= {
.freq = 0.16f,
.len = 12 * 39,
}

FCCH3 S-band burst (GMR-1 3G version for S-band) See GMR-1 05.004 (ETSI TS 101 376-5-2 V3.1.1) - Section 8.2.2.

◆ gmr1_fcch_burst

Initial value:
= {
.freq = 0.32f,
.len = 3 * 39,
}

FCCH burst (GMR-1 version) See GMR-1 05.004 (ETSI TS 101 376-5-2 V3.1.1) - Section 8.1.