html/0000755000175000017500000000000014753471227011016 5ustar buildbuildhtml/group__gsmtap.html0000644000175000017500000001731414753471227014560 0ustar buildbuild osmo-gmr: GMR-1 GSMtap helpers
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
GMR-1 GSMtap helpers

Files

file  gsmtap.h
 Osmocom GMR-1 GSMtap helpers header.
 
file  gsmtap.c
 Osmocom GMR-1 GSMtap helpers header.
 

Functions

struct msgb * gmr1_gsmtap_makemsg (uint8_t chan_type, uint32_t fn, uint8_t tn, const uint8_t *l2, int len)
 Helper to build GSM tap message with GMR-1 payload. More...
 

Detailed Description

Function Documentation

◆ gmr1_gsmtap_makemsg()

struct msgb * gmr1_gsmtap_makemsg ( uint8_t  chan_type,
uint32_t  fn,
uint8_t  tn,
const uint8_t *  l2,
int  len 
)

Helper to build GSM tap message with GMR-1 payload.

Parameters
[in]chan_typeType of channel (one of GSMTAP_GMR1_xxx)
[in]l2Packet of L2 data to encapsulate
[in]lenLength of the l2 data in bytes
html/crc_8h.js0000644000175000017500000000040514753471227012521 0ustar buildbuildvar crc_8h = [ [ "gmr1_crc12", "group__crc.html#ga39976cbbb95bf2ee17510e23e66e9662", null ], [ "gmr1_crc16", "group__crc.html#ga4c203dc885ad2c23dbc5e26457d2b52e", null ], [ "gmr1_crc8", "group__crc.html#ga475488b3214308419d2d8ced50df5257", null ] ];html/codec_8h_source.html0000644000175000017500000003110414753471227014737 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/codec/codec.h Source File
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
codec.h
Go to the documentation of this file.
1/* GMR-1 AMBE vocoder */
2
3/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
4 * All Rights Reserved
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU Affero General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Affero General Public License for more details.
15 *
16 * You should have received a copy of the GNU Affero General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef __OSMO_GMR1_CODEC_H__
21#define __OSMO_GMR1_CODEC_H__
22
32#include <stdint.h>
33
34
35struct gmr1_codec;
36
37struct gmr1_codec *gmr1_codec_alloc(void);
38void gmr1_codec_release(struct gmr1_codec *codec);
39
40int gmr1_codec_decode_frame(struct gmr1_codec *codec,
41 int16_t *audio, int N,
42 const uint8_t *frame, int bad);
43
44int gmr1_codec_decode_dtx(struct gmr1_codec *codec,
45 int16_t *audio, int N);
46
47
50#endif /* __OSMO_GMR1_CODEC_H__ */
int gmr1_codec_decode_dtx(struct gmr1_codec *codec, int16_t *audio, int N)
Generates audio for DTX period.
Definition: codec.c:97
struct gmr1_codec * gmr1_codec_alloc(void)
Allocates and inits a codec object.
Definition: codec.c:48
int gmr1_codec_decode_frame(struct gmr1_codec *codec, int16_t *audio, int N, const uint8_t *frame, int bad)
Decodes an AMBE frame to audio.
Definition: codec.c:84
void gmr1_codec_release(struct gmr1_codec *codec)
Release a codec object created by gmr1_codec_alloc.
Definition: codec.c:65
Structure for GMR1 codec state.
Definition: codec.c:39
html/interleave_8h.html0000644000175000017500000002360014753471227014442 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/interleave.h File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 interleaving header. More...

Go to the source code of this file.

Data Structures

struct  gmr1_interleaver
 GMR1 inter-burst (de)interleaver state. More...
 

Functions

void gmr1_interleave_intra (void *out, const void *in, int N)
 GMR-1 intra burst inteleaver. More...
 
void gmr1_deinterleave_intra (void *out, const void *in, int N)
 GMR-1 intra burst de-interleaver. More...
 
int gmr1_interleaver_init (struct gmr1_interleaver *il, int N, int K)
 GMR-1 inter burst interleaver initializer. More...
 
void gmr1_interleaver_fini (struct gmr1_interleaver *il)
 GMR-1 inter burst interleaver cleanup. More...
 
void gmr1_interleave_inter (struct gmr1_interleaver *il, void *bits_epp, void *bits_ep)
 GMR-1 inter burst interleaver. More...
 
void gmr1_deinterleave_inter (struct gmr1_interleaver *il, void *bits_ep, void *bits_epp)
 GMR-1 inter burst de-interleaver. More...
 

Detailed Description

Osmocom GMR-1 interleaving header.

html/group__nb.js0000644000175000017500000000344314753471227013332 0ustar buildbuildvar group__nb = [ [ "nb.h", "nb_8h.html", null ], [ "nb.c", "nb_8c.html", null ], [ "gmr1_bcch_burst", "group__nb.html#gadb3e07f31ce31edf73ee29cb97ecb27c", null ], [ "gmr1_bcch_burst", "group__nb.html#gadb3e07f31ce31edf73ee29cb97ecb27c", null ], [ "gmr1_dc12_burst", "group__nb.html#ga4dfb2061d86695f527d93c228f7e80cf", null ], [ "gmr1_dc12_burst", "group__nb.html#ga4dfb2061d86695f527d93c228f7e80cf", null ], [ "gmr1_dc2_burst", "group__nb.html#gab4f338ae4b7c91d61f4a1fbd5ddb22db", null ], [ "gmr1_dc2_burst", "group__nb.html#gab4f338ae4b7c91d61f4a1fbd5ddb22db", null ], [ "gmr1_dc6_burst", "group__nb.html#gabcff92c63441c414f2b700abed3ff5e5", null ], [ "gmr1_dc6_burst", "group__nb.html#gabcff92c63441c414f2b700abed3ff5e5", null ], [ "gmr1_nt3_facch_burst", "group__nb.html#gad65ff6135513219615583bf2652905a0", null ], [ "gmr1_nt3_facch_burst", "group__nb.html#gad65ff6135513219615583bf2652905a0", null ], [ "gmr1_nt3_speech_burst", "group__nb.html#ga5b7005d048a228c2fb1689772ec2a02b", null ], [ "gmr1_nt3_speech_burst", "group__nb.html#ga5b7005d048a228c2fb1689772ec2a02b", null ], [ "gmr1_nt6_burst", "group__nb.html#ga0f6b872aea487079770276792b11f024", null ], [ "gmr1_nt6_burst", "group__nb.html#ga0f6b872aea487079770276792b11f024", null ], [ "gmr1_nt9_burst", "group__nb.html#gace85abbda202a99f17800dfe3a449ad8", null ], [ "gmr1_nt9_burst", "group__nb.html#gace85abbda202a99f17800dfe3a449ad8", null ], [ "gmr1_rach_burst", "group__nb.html#ga6efdbfdc0a900c0da7e1ae35157d9d75", null ], [ "gmr1_rach_burst", "group__nb.html#ga6efdbfdc0a900c0da7e1ae35157d9d75", null ], [ "gmr1_sdcch_burst", "group__nb.html#ga8e081ca45a3c928dc97cc56ceb445542", null ], [ "gmr1_sdcch_burst", "group__nb.html#ga8e081ca45a3c928dc97cc56ceb445542", null ] ];html/gsmtap_8h.html0000644000175000017500000001303314753471227013576 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/gsmtap.h File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
gsmtap.h File Reference

Osmocom GMR-1 GSMtap helpers header. More...

#include <stdint.h>

Go to the source code of this file.

Functions

struct msgb * gmr1_gsmtap_makemsg (uint8_t chan_type, uint32_t fn, uint8_t tn, const uint8_t *l2, int len)
 Helper to build GSM tap message with GMR-1 payload. More...
 

Detailed Description

Osmocom GMR-1 GSMtap helpers header.

html/group__dkab.html0000644000175000017500000002442414753471227014166 0ustar buildbuild osmo-gmr: DKAB bursts
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Files

file  dkab.h
 Osmocom GMR-1 DKABs bursts header.
 
file  dkab.c
 Osmocom GMR-1 DKABs bursts implementation.
 

Macros

#define GMR1_DKAB_SYMS   (39*3)
 
#define DKAB_PWR_RATIO_THRESHOLD   10.0f
 Ratio between peak power and valley power for DKAB detection.
 

Functions

int gmr1_dkab_demod (struct osmo_cxvec *burst_in, int sps, float freq_shift, int p, sbit_t *ebits, float *toa_p)
 All-in-one finding and demodulation of DKAB bursts. More...
 

Detailed Description

Function Documentation

◆ gmr1_dkab_demod()

int gmr1_dkab_demod ( struct osmo_cxvec burst_in,
int  sps,
float  freq_shift,
int  p,
sbit_t *  ebits,
float *  toa_p 
)

All-in-one finding and demodulation of DKAB bursts.

Parameters
[in]burst_inComplex signal of the burst
[in]spsOversampling used in the input complex signal
[in]freq_shiftFrequency shift to pre-apply to burst_in (rad/sym)
[in]pDKAB position
[out]ebitsEncoded soft bits return array
[out]toa_pPointer to TOA return variable
Returns
0 for success, 1 if DKAB not found, -errno for fatal errors

burst_in is expected to be longer than necessary. Any extra length will be used as 'search window' to find proper alignement. Good practice is to have a few samples too much in front and a few samples after the expected TOA.

References M_PIf, and osmo_cxvec_sig_normalize().

html/pi4cxpsk_8c.html0000644000175000017500000002647114753471227014055 0ustar buildbuild osmo-gmr: src/sdr/pi4cxpsk.c File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 pi2-CBPSK, pi4-CBPSK and pi4-CQPSK modulation support implementation. More...

#include <complex.h>
#include <math.h>
#include <errno.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <osmocom/core/bits.h>
#include <osmocom/dsp/cxvec.h>
#include <osmocom/dsp/cxvec_math.h>
#include <osmocom/gmr1/sdr/defs.h>
#include <osmocom/gmr1/sdr/pi4cxpsk.h>

Functions

int gmr1_pi4cxpsk_demod (struct gmr1_pi4cxpsk_burst *burst_type, struct osmo_cxvec *burst_in, int sps, float freq_shift, sbit_t *ebits, int *sync_id_p, float *toa_p, float *freq_err_p)
 All-in-one pi4-CxPSK demodulation method. More...
 
int gmr1_pi4cxpsk_detect (struct gmr1_pi4cxpsk_burst **burst_types, float e_toa, struct osmo_cxvec *burst_in, int sps, float freq_shift, int *bt_id_p, int *sync_id_p, float *toa_p)
 Try to identify burst type by matching training sequences. More...
 
int gmr1_pi4cxpsk_mod_order (struct osmo_cxvec *burst_in, int sps, float freq_shift)
 Estimates modulation order by comparing power of x^2 vs x^4. More...
 
int gmr1_pi4cxpsk_mod (struct gmr1_pi4cxpsk_burst *burst_type, ubit_t *ebits, int sync_id, struct osmo_cxvec *burst_out)
 Modulates (currently at 1 sps) More...
 

Variables

struct gmr1_pi4cxpsk_modulation gmr1_pi2cbpsk
 pi2-CBPSK modulation description More...
 
struct gmr1_pi4cxpsk_modulation gmr1_pi4cbpsk
 pi4-CBPSK modulation description More...
 
struct gmr1_pi4cxpsk_modulation gmr1_pi4cqpsk
 pi4-CQPSK modulation description More...
 

Detailed Description

Osmocom GMR-1 pi2-CBPSK, pi4-CBPSK and pi4-CQPSK modulation support implementation.

html/structgmr1__pi4cxpsk__data.html0000644000175000017500000001361414753471227017140 0ustar buildbuild osmo-gmr: gmr1_pi4cxpsk_data Struct Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

pi4-CxPSK Data segment description More...

#include <pi4cxpsk.h>

Data Fields

int pos
 Data chunk position

 
int len
 Data chunk length

 

Detailed Description

pi4-CxPSK Data segment description


The documentation for this struct was generated from the following file:
html/tch9_8c.js0000644000175000017500000000030314753471227012611 0ustar buildbuildvar tch9_8c = [ [ "gmr1_tch9_decode", "group__tch9.html#ga1dc40fc5c18b5f082de485e701db9af4", null ], [ "gmr1_tch9_encode", "group__tch9.html#ga7a8227b3a47497d84316568637b9d732", null ] ];html/folderclosed.png0000644000175000017500000000115014753471227014166 0ustar buildbuild‰PNG  IHDRÚ}\ˆ/IDATxí]MOÔ@~ÚúuØlp]ö¿#›Å]PYECˆ\9ù¼yÑß`ÖÄÿàÿÀÉxóâ¢C &=qÐÄ£—vZçv¶3m؃‡vžLûNç}Þ÷}Þ½ZA@n° OäNp ’xóþK°ññ€xÜj”°8sÑ€“ “€œ_¼[Âíæ§ïD'‚•yye+ø¼û 7#rNŸlïük* ¾0Ь_d«_(àñÖ±àôz=ñxõv§÷h©‰z¹€šØP-äóä’̪uý¼$»\DãJc—B4¯ãÝÖ.:£Ï-ÑÏß}µŠLEíºþ #—ûáºÀÏgN;BŠ€6ïýñ䬜…ö@’Ðåñp&™h>p9¤™EEά¨ÎÊ‘" u¥n€$R"?{¹<˜…ë…%PNtâ$‰߶±úá+^<é"§2 ªDq”q´\¬«Ò™a–Œ‘©Aÿ€"Ôµ ™êŸèP£}#Eàz{û.8i îp³ê(ADwD¦E<ê¬cE¦$ HdÊÄ ”.:Ù GŽ-`ŒL‚ý¾'¢‰Ä<¤CIª½;ÙÇTZd±i};>èôß‚z×;Kק8t ¤Ž q”:uvÿv•Ý›¬²ÙvEân{„M·FXg¼ÌfZÖ¨°¹‰*›ßÌß©±ù©:›j–YqèÜë#3çÏSøWøÿÿÑr'ø Ôùù‚ ©¡IEND®B`‚html/pi4cxpsk_8h.js0000644000175000017500000000167614753471227013532 0ustar buildbuildvar pi4cxpsk_8h = [ [ "GMR1_MAX_SYM_EBITS", "group__pi4cxpsk.html#ga3a551a9ff371809aa32f6bbeaf48fc62", null ], [ "GMR1_MAX_SYNC", "group__pi4cxpsk.html#ga7078b941f0b0a04ff9ddf290452b93a9", null ], [ "GMR1_MAX_SYNC_SYMS", "group__pi4cxpsk.html#gad1c5069c814820ccbc9abcc700fb6193", null ], [ "gmr1_pi4cxpsk_demod", "group__pi4cxpsk.html#ga39685a0ee6daeb04f7ca70bbd6d1fe29", null ], [ "gmr1_pi4cxpsk_detect", "group__pi4cxpsk.html#ga1490fd560c08a9468c40ff69f2cae2bb", null ], [ "gmr1_pi4cxpsk_mod", "group__pi4cxpsk.html#ga554b1c56cd86f4e9c9cbdcc455212770", null ], [ "gmr1_pi4cxpsk_mod_order", "group__pi4cxpsk.html#ga82887564b076046745f705f7c27c930e", null ], [ "gmr1_pi2cbpsk", "group__pi4cxpsk.html#ga37214979bb79f5d23784ba1eda5fa384", null ], [ "gmr1_pi4cbpsk", "group__pi4cxpsk.html#gaeae7cf33a9694b1911deefb535f5c1b8", null ], [ "gmr1_pi4cqpsk", "group__pi4cxpsk.html#ga652dcdb5ad05ce39ebef8a5b97f6d516", null ] ];html/dir_49d8fb8de83b72576102f4228b661ee1.html0000644000175000017500000001502114753471227016775 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/sdr Directory Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
sdr Directory Reference

Files

file  defs.h [code]
 Osmocom GMR-1 SDR global definitions.
 
file  dkab.h [code]
 Osmocom GMR-1 DKABs bursts header.
 
file  fcch.h [code]
 Osmocom GMR-1 FCCH bursts header.
 
file  nb.h [code]
 Osmocom GMR-1 Normal bursts header.
 
file  pi4cxpsk.h [code]
 Osmocom GMR-1 pi2-CBPSK, pi4-CBPSK and pi4-CQPSK modulation support header.
 
html/pi4cxpsk_8h.html0000644000175000017500000003545714753471227014066 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/sdr/pi4cxpsk.h File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 pi2-CBPSK, pi4-CBPSK and pi4-CQPSK modulation support header. More...

#include <stdint.h>
#include <osmocom/core/bits.h>
#include <osmocom/dsp/cxvec.h>

Go to the source code of this file.

Data Structures

struct  gmr1_pi4cxpsk_symbol
 pi4-CxPSK symbol description More...
 
struct  gmr1_pi4cxpsk_modulation
 pi4-CxPSK modulation description More...
 
struct  gmr1_pi4cxpsk_sync
 pi4-CxPSK Synchronization sequence segment description More...
 
struct  gmr1_pi4cxpsk_data
 pi4-CxPSK Data segment description More...
 
struct  gmr1_pi4cxpsk_burst
 pi4-CxPSK Burst format description More...
 

Macros

#define GMR1_MAX_SYM_EBITS   2
 Max e bits in a symbol.
 
#define GMR1_MAX_SYNC   4
 Max diff. sync seqs

 
#define GMR1_MAX_SYNC_SYMS   32
 Max sym in a sync seq

 

Functions

int gmr1_pi4cxpsk_demod (struct gmr1_pi4cxpsk_burst *burst_type, struct osmo_cxvec *burst_in, int sps, float freq_shift, sbit_t *ebits, int *sync_id_p, float *toa_p, float *freq_err_p)
 All-in-one pi4-CxPSK demodulation method. More...
 
int gmr1_pi4cxpsk_detect (struct gmr1_pi4cxpsk_burst **burst_types, float e_toa, struct osmo_cxvec *burst_in, int sps, float freq_shift, int *bt_id_p, int *sync_id_p, float *toa_p)
 Try to identify burst type by matching training sequences. More...
 
int gmr1_pi4cxpsk_mod_order (struct osmo_cxvec *burst_in, int sps, float freq_shift)
 Estimates modulation order by comparing power of x^2 vs x^4. More...
 
int gmr1_pi4cxpsk_mod (struct gmr1_pi4cxpsk_burst *burst_type, ubit_t *ebits, int sync_id, struct osmo_cxvec *burst_out)
 Modulates (currently at 1 sps) More...
 

Variables

struct gmr1_pi4cxpsk_modulation gmr1_pi2cbpsk
 pi2-CBPSK modulation description
 
struct gmr1_pi4cxpsk_modulation gmr1_pi4cbpsk
 pi4-CBPSK modulation description
 
struct gmr1_pi4cxpsk_modulation gmr1_pi4cqpsk
 pi4-CQPSK modulation description
 

Detailed Description

Osmocom GMR-1 pi2-CBPSK, pi4-CBPSK and pi4-CQPSK modulation support header.

html/group__conv.js0000644000175000017500000000322314753471227013674 0ustar buildbuildvar group__conv = [ [ "conv.h", "conv_8h.html", null ], [ "conv.c", "conv_8c.html", null ], [ "gmr1_conv_k5_12", "group__conv.html#gad9e7ba139d8b88117361ce2c069b3ac1", null ], [ "gmr1_conv_k5_12", "group__conv.html#gad9e7ba139d8b88117361ce2c069b3ac1", null ], [ "gmr1_conv_k5_13", "group__conv.html#gae46510aefce08ef3158790186b00a404", null ], [ "gmr1_conv_k5_13", "group__conv.html#gae46510aefce08ef3158790186b00a404", null ], [ "gmr1_conv_k5_14", "group__conv.html#gad0dab5050f72518f948d10b78ee21b2d", null ], [ "gmr1_conv_k5_14", "group__conv.html#gad0dab5050f72518f948d10b78ee21b2d", null ], [ "gmr1_conv_k5_15", "group__conv.html#ga70b8d0dc1e500ff3a1986315e6551a27", null ], [ "gmr1_conv_k5_15", "group__conv.html#ga70b8d0dc1e500ff3a1986315e6551a27", null ], [ "gmr1_conv_k6_14", "group__conv.html#ga6e7732168c9ecb6ad0b14ed8001c4588", null ], [ "gmr1_conv_k6_14", "group__conv.html#ga6e7732168c9ecb6ad0b14ed8001c4588", null ], [ "gmr1_conv_k9_12", "group__conv.html#gaa9043b27694a4c4438b18f7cd60950cd", null ], [ "gmr1_conv_k9_12", "group__conv.html#gaa9043b27694a4c4438b18f7cd60950cd", null ], [ "gmr1_conv_k9_13", "group__conv.html#ga647389b5ecf36c9770b4ecfd57c11fe0", null ], [ "gmr1_conv_k9_13", "group__conv.html#ga647389b5ecf36c9770b4ecfd57c11fe0", null ], [ "gmr1_conv_k9_14", "group__conv.html#ga0aaad5b737b08f90b906fbd369df8ccc", null ], [ "gmr1_conv_k9_14", "group__conv.html#ga0aaad5b737b08f90b906fbd369df8ccc", null ], [ "gmr1_conv_tch3", "group__conv.html#ga622aa845f1ef3258a750b0da2df27d13", null ], [ "gmr1_conv_tch3", "group__conv.html#ga622aa845f1ef3258a750b0da2df27d13", null ] ];html/group__codec__private.js0000644000175000017500000002036314753471227015701 0ustar buildbuildvar group__codec__private = [ [ "ambe.c", "ambe_8c.html", null ], [ "frame.c", "frame_8c.html", null ], [ "math.c", "math_8c.html", null ], [ "private.h", "private_8h.html", null ], [ "synth.c", "synth_8c.html", null ], [ "tables.c", "tables_8c.html", null ], [ "tone.c", "tone_8c.html", null ], [ "ambe_raw_params", "structambe__raw__params.html", [ [ "gain", "structambe__raw__params.html#ac0c99abebb1f2483745b6f5c683fd238", null ], [ "pitch", "structambe__raw__params.html#a7eb51135820d33cbf6a0e4b865bd2a59", null ], [ "pitch_interp", "structambe__raw__params.html#a804fa021dcd25eed72ddeb7421b64375", null ], [ "sf0_mag_interp", "structambe__raw__params.html#a99596e150dafbc4dbefc83c0ebeb402a", null ], [ "sf0_perr_14", "structambe__raw__params.html#a9f9e769e1d5e71979c4591931d8ef031", null ], [ "sf0_perr_58", "structambe__raw__params.html#aefc1cb1dec8794e3ba084b1bef0540be", null ], [ "sf1_hoc", "structambe__raw__params.html#a96e40b2f376d714e5df4538776911192", null ], [ "sf1_prba12", "structambe__raw__params.html#ab5848d979e9ab98ee13df35244186633", null ], [ "sf1_prba34", "structambe__raw__params.html#a719970b8264d5d86e8127731e3b74e95", null ], [ "sf1_prba57", "structambe__raw__params.html#a5723fa985d5a3e403baf93375f6da49b", null ], [ "v_uv", "structambe__raw__params.html#a8019dfc071f9ed84059593433380186e", null ] ] ], [ "ambe_subframe", "structambe__subframe.html", [ [ "f0", "structambe__subframe.html#a62d2a8d54cc973e32e85d9c4735bde1f", null ], [ "f0log", "structambe__subframe.html#a0bd7338941b5a9e13bb9cab48ae41bd6", null ], [ "gain", "structambe__subframe.html#acc926ec6fc259108308513851263c010", null ], [ "L", "structambe__subframe.html#a3ebdc823451ce217e2956ff0eac7442f", null ], [ "Lb", "structambe__subframe.html#af7ffd521bfff7156ae33ba43a893b163", null ], [ "Ml", "structambe__subframe.html#a4a3fa891e79797c2458f0ec01dbe9019", null ], [ "Mlog", "structambe__subframe.html#a56d7cadaf4f6be52366ba2f26983483b", null ], [ "v_uv", "structambe__subframe.html#a760edde0daaceb15506a57379e7ad265", null ], [ "Vl", "structambe__subframe.html#a0fb6c5eab0c8af4a8106e7df6b964702", null ], [ "w0", "structambe__subframe.html#a21676a64ab0ab902b4802d8a347aa227", null ] ] ], [ "ambe_synth", "structambe__synth.html", [ [ "phi", "structambe__synth.html#a5e8d3e37d5ef02db39803a10de1796ce", null ], [ "psi1", "structambe__synth.html#ab03788ec8e6fd99b782ca07ae04d4dc4", null ], [ "SE", "structambe__synth.html#ae9f1fa4f9e9616614f50fa303a3c52ce", null ], [ "u_prev", "structambe__synth.html#a1ec169cb61914f8a61e14e0a2838de6c", null ], [ "uw_prev", "structambe__synth.html#ac555e0a7a4e672f1c8e3ab6873b0bbfd", null ] ] ], [ "ambe_decoder", "structambe__decoder.html", [ [ "sf_prev", "structambe__decoder.html#a7ef287c9fa9a4f4303b8bcf14aa08a10", null ], [ "synth", "structambe__decoder.html#ae182cfa94b3c3f970de386a8d671bbaa", null ], [ "tone_phase_f1", "structambe__decoder.html#aa30d43006212f987798af28cefe6a644", null ], [ "tone_phase_f2", "structambe__decoder.html#ada92b6d6ccd98bea21a205f9f3a91521", null ] ] ], [ "tone_desc", "structtone__desc.html", [ [ "f1", "structtone__desc.html#a9980c6296defda0b97fdc6f0a70a0b8d", null ], [ "f2", "structtone__desc.html#a0367e505d7112a2acbddefaf23feac79", null ], [ "name", "structtone__desc.html#ac264519a39b5ba67b62f0744e993eeca", null ] ] ], [ "AMBE_RATE", "group__codec__private.html#gac1723f2fb63e31519d15815b05cc2a67", null ], [ "M_PIf", "group__codec__private.html#gacbb42dc053fedc161079f0a4d20a64e8", null ], [ "ambe_frame_type", "group__codec__private.html#ga109f07fd3782470868b1d1d2ec099eb6", [ [ "AMBE_SPEECH", "group__codec__private.html#gga109f07fd3782470868b1d1d2ec099eb6a14419c7969d8bb6cf9b2d8b71f30f33b", null ], [ "AMBE_SILENCE", "group__codec__private.html#gga109f07fd3782470868b1d1d2ec099eb6a719fb04a91460753423334efdad424b5", null ], [ "AMBE_TONE", "group__codec__private.html#gga109f07fd3782470868b1d1d2ec099eb6a3ed83bce1686c0614c9377ff191cc8d1", null ] ] ], [ "ambe_decode_dtx", "group__codec__private.html#ga8f0cf32d32bde050a40a3e7087185aad", null ], [ "ambe_decode_fini", "group__codec__private.html#ga8a426acea7ced6d46716695e243462dd", null ], [ "ambe_decode_frame", "group__codec__private.html#ga96427955e6f3174ea846064627843bc3", null ], [ "ambe_decode_init", "group__codec__private.html#gaac2c306e18df0fb45f2487e83ba4f9e9", null ], [ "ambe_decode_tone", "group__codec__private.html#gaf5856df7a0f19188013d6c610a2b7f60", null ], [ "ambe_fdct", "group__codec__private.html#ga83063f9ee0607fe61bacc11bd42d059f", null ], [ "ambe_fdft_fc", "group__codec__private.html#ga9d9e8b11e46bf3ccf14d22be87f1c719", null ], [ "ambe_frame_decode_params", "group__codec__private.html#ga55a71c63c53e21c1d6fc9c91ddf519cd", null ], [ "ambe_frame_unpack_raw", "group__codec__private.html#ga8a4e007b142973be5b44ef1637c9bfee", null ], [ "ambe_idct", "group__codec__private.html#ga0d2a102900214d2ebdab56bf85024cf2", null ], [ "ambe_idft_cf", "group__codec__private.html#gadbfdcbf5186cc1c567112e4edc29a1a1", null ], [ "ambe_subframe_expand", "group__codec__private.html#ga2d3ff962344089d1a44fd0d659c55df8", null ], [ "ambe_synth_audio", "group__codec__private.html#ga7ca25dc5919fcff4c7494eb02d25fda2", null ], [ "ambe_synth_enhance", "group__codec__private.html#ga5fdca2bf0b039f3bb0dd97b0f601fe62", null ], [ "ambe_synth_init", "group__codec__private.html#ga31252750e130d6bf531c483df2ec8a49", null ], [ "cosf_fast", "group__codec__private.html#ga62bc434f8483f0198f86b388ab30ced6", null ], [ "sinf_fast", "group__codec__private.html#gade8a6e65fb5db286835ffd82b0f61dd1", null ], [ "ambe_gain_tbl", "group__codec__private.html#ga8782e94d4fc86ce45ea714a7316eecd4", null ], [ "ambe_gain_tbl", "group__codec__private.html#ga8782e94d4fc86ce45ea714a7316eecd4", null ], [ "ambe_hoc0_tbl", "group__codec__private.html#gac6bf71952dbf30ef32fb5cc91681d8d6", null ], [ "ambe_hoc0_tbl", "group__codec__private.html#gac6bf71952dbf30ef32fb5cc91681d8d6", null ], [ "ambe_hoc1_tbl", "group__codec__private.html#ga934c67cf74ce3f2944594eab3958139c", null ], [ "ambe_hoc1_tbl", "group__codec__private.html#ga934c67cf74ce3f2944594eab3958139c", null ], [ "ambe_hoc2_tbl", "group__codec__private.html#ga8992a95357c191374ac100f76f8b42fe", null ], [ "ambe_hoc2_tbl", "group__codec__private.html#ga8992a95357c191374ac100f76f8b42fe", null ], [ "ambe_hoc3_tbl", "group__codec__private.html#ga616fdb311356f3430ade8e24d45479b4", null ], [ "ambe_hoc3_tbl", "group__codec__private.html#ga616fdb311356f3430ade8e24d45479b4", null ], [ "ambe_hpg_tbl", "group__codec__private.html#gafaaf0c3cc5a7cd0f44133e1f5922a52d", null ], [ "ambe_hpg_tbl", "group__codec__private.html#gafaaf0c3cc5a7cd0f44133e1f5922a52d", null ], [ "ambe_prba12_tbl", "group__codec__private.html#gae5a94c3201e655989c87379268c30623", null ], [ "ambe_prba12_tbl", "group__codec__private.html#gae5a94c3201e655989c87379268c30623", null ], [ "ambe_prba34_tbl", "group__codec__private.html#gaadea447d12d8536738479b549eb42fdf", null ], [ "ambe_prba34_tbl", "group__codec__private.html#gaadea447d12d8536738479b549eb42fdf", null ], [ "ambe_prba57_tbl", "group__codec__private.html#ga35df9825da65a2015f7576c83c9843f4", null ], [ "ambe_prba57_tbl", "group__codec__private.html#ga35df9825da65a2015f7576c83c9843f4", null ], [ "ambe_sf0_interp_tbl", "group__codec__private.html#gab7a7b1219368c43c898cfb24ff3cb5cd", null ], [ "ambe_sf0_interp_tbl", "group__codec__private.html#gab7a7b1219368c43c898cfb24ff3cb5cd", null ], [ "ambe_sf0_perr14_tbl", "group__codec__private.html#ga42a2421d73b8b9021b2b88698057b53b", null ], [ "ambe_sf0_perr14_tbl", "group__codec__private.html#ga42a2421d73b8b9021b2b88698057b53b", null ], [ "ambe_sf0_perr58_tbl", "group__codec__private.html#ga109dca33b432f87d6d6a14a4a0787e06", null ], [ "ambe_sf0_perr58_tbl", "group__codec__private.html#ga109dca33b432f87d6d6a14a4a0787e06", null ], [ "ambe_v_uv_tbl", "group__codec__private.html#ga735cc90f20631506f7a5fc4827f4e8d5", null ], [ "ambe_v_uv_tbl", "group__codec__private.html#ga735cc90f20631506f7a5fc4827f4e8d5", null ] ];html/group__fcch.js0000644000175000017500000000235214753471227013634 0ustar buildbuildvar group__fcch = [ [ "fcch.h", "fcch_8h.html", null ], [ "fcch.c", "fcch_8c.html", null ], [ "gmr1_fcch_burst", "structgmr1__fcch__burst.html", [ [ "freq", "structgmr1__fcch__burst.html#af256a13136949602fd41e4da1c569435", null ], [ "len", "structgmr1__fcch__burst.html#a8f5f11f6f9b9b7aa2b505f7e4d6ca44e", null ] ] ], [ "gmr1_fcch_fine", "group__fcch.html#ga2b1c8329ac1c8cae7414d2ca4619f17f", null ], [ "gmr1_fcch_rough", "group__fcch.html#ga14e6b77fe05bf2ef7600204ba6818a47", null ], [ "gmr1_fcch_rough_multi", "group__fcch.html#ga822f719832670df978c08008c2e7a3df", null ], [ "gmr1_fcch_snr", "group__fcch.html#ga614cf46fe5e868c8b573491736487fba", null ], [ "gmr1_fcch3_lband_burst", "group__fcch.html#ga6598bb31a09a997eaa079838babc2f25", null ], [ "gmr1_fcch3_lband_burst", "group__fcch.html#ga6598bb31a09a997eaa079838babc2f25", null ], [ "gmr1_fcch3_sband_burst", "group__fcch.html#ga20cea569bd20f7c7a3b14420c9301b1b", null ], [ "gmr1_fcch3_sband_burst", "group__fcch.html#ga20cea569bd20f7c7a3b14420c9301b1b", null ], [ "gmr1_fcch_burst", "group__fcch.html#ga09ca32ce9f0bbe6d6d5b7977aae2758f", null ], [ "gmr1_fcch_burst", "group__fcch.html#ga09ca32ce9f0bbe6d6d5b7977aae2758f", null ] ];html/dir_abe9b486a10ccc5afdf8abc29637e0c1.html0000644000175000017500000001065314753471227017476 0ustar buildbuild osmo-gmr: include/osmocom Directory Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
osmocom Directory Reference

Directories

directory  gmr1
 
html/group__sdr.js0000644000175000017500000000064614753471227013525 0ustar buildbuildvar group__sdr = [ [ "DKAB bursts", "group__dkab.html", "group__dkab" ], [ "FCCH bursts", "group__fcch.html", "group__fcch" ], [ "Normal bursts", "group__nb.html", "group__nb" ], [ "pi2-CBPSK, pi4-CBPSK and pi4-CQPSK modulation", "group__pi4cxpsk.html", "group__pi4cxpsk" ], [ "defs.h", "sdr_2defs_8h.html", null ], [ "GMR1_SYM_RATE", "group__sdr.html#ga6e119ab6400ff7407cdd2d9cb87360eb", null ] ];html/facch9_8c.html0000644000175000017500000001557214753471227013445 0ustar buildbuild osmo-gmr: src/l1/facch9.c File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 FACCH9 channel coding implementation. More...

#include <stdint.h>
#include <string.h>
#include <osmocom/core/bits.h>
#include <osmocom/core/conv.h>
#include <osmocom/core/crc16gen.h>
#include <osmocom/gmr1/l1/conv.h>
#include <osmocom/gmr1/l1/crc.h>
#include <osmocom/gmr1/l1/interleave.h>
#include <osmocom/gmr1/l1/scramb.h>

Functions

void gmr1_facch9_encode (ubit_t *bits_e, const uint8_t *l2, const ubit_t *bits_sacch, const ubit_t *bits_status, const ubit_t *ciph)
 Stateless GMR-1 FACCH9 channel coder. More...
 
int gmr1_facch9_decode (uint8_t *l2, sbit_t *bits_sacch, sbit_t *bits_status, const sbit_t *bits_e, const ubit_t *ciph, int *conv_rv)
 Stateless GMR-1 FACCH9 channel decoder. More...
 

Detailed Description

Osmocom GMR-1 FACCH9 channel coding implementation.

html/a5_8c.html0000644000175000017500000003174414753471227012614 0ustar buildbuild osmo-gmr: src/l1/a5.c File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 A5 ciphering algorithm implementation. More...

#include <string.h>
#include <stdint.h>
#include <osmocom/core/bits.h>
#include <osmocom/gmr1/l1/a5.h>

Macros

#define A51_R1_LEN   19
 
#define A51_R2_LEN   22
 
#define A51_R3_LEN   23
 
#define A51_R4_LEN   17
 
#define A51_R1_MASK   ((1<<A51_R1_LEN)-1)
 
#define A51_R2_MASK   ((1<<A51_R2_LEN)-1)
 
#define A51_R3_MASK   ((1<<A51_R3_LEN)-1)
 
#define A51_R4_MASK   ((1<<A51_R4_LEN)-1)
 
#define A51_R1_TAPS   0x072000 /* x^19 + x^18 + x^17 + x^14 + 1 */
 
#define A51_R2_TAPS   0x311000 /* x^22 + x^21 + x^17 + x^13 + 1 */
 
#define A51_R3_TAPS   0x660000 /* x^23 + x^22 + x^19 + x^18 + 1 */
 
#define A51_R4_TAPS   0x013100 /* x^17 + x^14 + x^13 + x^9 + 1 */
 
#define A51_BIT(r, n)   (1 << n)
 
#define MAJ(rnum, rname, a, b, c)
 

Functions

void gmr1_a5 (int n, uint8_t *key, uint32_t fn, int nbits, ubit_t *dl, ubit_t *ul)
 Main method to generate a A5/x cipher stream. More...
 
void gmr1_a5_1 (uint8_t *key, uint32_t fn, int nbits, ubit_t *dl, ubit_t *ul)
 Generate a GMR-1 A5/1 cipher stream. More...
 

Detailed Description

Osmocom GMR-1 A5 ciphering algorithm implementation.

Macro Definition Documentation

◆ MAJ

#define MAJ (   rnum,
  rname,
  a,
  b,
 
)
Value:
m[rnum] = _a5_majority( \
r[rnum] & A51_BIT(rname, a), \
r[rnum] & A51_BIT(rname, b), \
r[rnum] & A51_BIT(rname, c) \
);
html/group__a5.js0000644000175000017500000000037114753471227013235 0ustar buildbuildvar group__a5 = [ [ "a5.h", "a5_8h.html", null ], [ "a5.c", "a5_8c.html", null ], [ "gmr1_a5", "group__a5.html#gaddb4e3e6e4a5b5f91fe9308250a70375", null ], [ "gmr1_a5_1", "group__a5.html#gad385682d03d182ea6e3d0e99fa4ca04e", null ] ];html/globals.html0000644000175000017500000002270014753471227013330 0ustar buildbuild osmo-gmr: Globals
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:

- a -

html/dir_85d85a69dfdae3508530486760177413.html0000644000175000017500000002560514753471227016571 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1 Directory Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
l1 Directory Reference

Files

file  a5.h [code]
 Osmocom GMR-1 A5 ciphering algorithm header.
 
file  bcch.h [code]
 Osmocom GMR-1 BCCH channel coding header.
 
file  ccch.h [code]
 Osmocom GMR-1 CCCH (PCH/AGCH) channel coding header.
 
file  conv.h [code]
 Osmocom GMR-1 convolutional coding header.
 
file  crc.h [code]
 Osmocom GMR-1 CRC header.
 
file  defs.h [code]
 Osmocom GMR-1 L1 global definitions.
 
file  facch3.h [code]
 Osmocom GMR-1 FACCH3 channel coding header.
 
file  facch9.h [code]
 Osmocom GMR-1 FACCH9 channel coding header.
 
file  interleave.h [code]
 Osmocom GMR-1 interleaving header.
 
file  punct.h [code]
 Osmocom GMR-1 puncturing header.
 
file  rach.h [code]
 Osmocom GMR-1 RACH channel coding header.
 
file  scramb.h [code]
 Osmocom GMR-1 scrambling header.
 
file  tch3.h [code]
 Osmocom GMR-1 TCH3 channel coding header.
 
file  tch9.h [code]
 Osmocom GMR-1 TCH9 channel coding header.
 
file  xch_dc12.h [code]
 Osmocom GMR-1 xCH over DC12 channel coding header.
 
html/group__ccch.html0000644000175000017500000002365014753471227014165 0ustar buildbuild osmo-gmr: CCCH (PCH/AGCH) channel coding
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
CCCH (PCH/AGCH) channel coding

Files

file  ccch.h
 Osmocom GMR-1 CCCH (PCH/AGCH) channel coding header.
 
file  ccch.c
 Osmocom GMR-1 CCCH (PCH/AGCH) channel coding implementation.
 

Functions

void gmr1_ccch_encode (ubit_t *bits_e, const uint8_t *l2)
 Stateless GMR-1 CCCH channel coder. More...
 
int gmr1_ccch_decode (uint8_t *l2, const sbit_t *bits_e, int *conv_rv)
 Stateless GMR-1 CCCH channel decoder. More...
 

Detailed Description

Function Documentation

◆ gmr1_ccch_decode()

int gmr1_ccch_decode ( uint8_t *  l2,
const sbit_t *  bits_e,
int *  conv_rv 
)

Stateless GMR-1 CCCH channel decoder.

Parameters
[out]l2L2 packet data
[in]bits_eData bits of a burst
[out]conv_rvReturn of the convolutional decode (can be NULL)
Returns
0 if CRC check pass, any other value for fail.

L2 data is 24 byte long, and bits_e is a 432 soft bit array unmapped from a burst.

References gmr1_deinterleave_intra(), and gmr1_scramble_sbit().

◆ gmr1_ccch_encode()

void gmr1_ccch_encode ( ubit_t *  bits_e,
const uint8_t *  l2 
)

Stateless GMR-1 CCCH channel coder.

Parameters
[out]bits_eData bits of a burst
[in]l2L2 packet data

L2 data is 24 byte long, and bits_e is a 432 hard bit array to be mapped on a burst.

References gmr1_crc16.

html/structgmr1__codec.js0000644000175000017500000000015414753471227014763 0ustar buildbuildvar structgmr1__codec = [ [ "dec", "structgmr1__codec.html#a6c9cdb292f878bd711308d13b6cb0730", null ] ];html/group__codec__private.html0000644000175000017500000022472714753471227016243 0ustar buildbuild osmo-gmr: AMBE vocoder - internal API
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
AMBE vocoder - internal API

Files

file  ambe.c
 Osmocom GMR-1 AMBE internal API.
 
file  frame.c
 Osmocom GMR-1 AMBE speech parameters to/from frame.
 
file  math.c
 Osmocom GMR-1 AMBE vocoder math functions.
 
file  private.h
 Osmocom GMR-1 AMBE vocoder private header.
 
file  synth.c
 Osmocom GMR-1 AMBE vocoder speech synthesis.
 
file  tables.c
 Osmocom GMR-1 AMBE vocoder tables.
 
file  tone.c
 Osmocom GMR-1 AMBE vocoder tone frames handling.
 

Data Structures

struct  ambe_raw_params
 AMBE encoded frame raw parameters. More...
 
struct  ambe_subframe
 AMBE subframe parameters. More...
 
struct  ambe_synth
 AMBE synthesizer state. More...
 
struct  ambe_decoder
 AMBE decoder state. More...
 
struct  tone_desc
 Structure describing a dual-frequency tone. More...
 

Macros

#define AMBE_RATE   8000
 AMBE sample rate (Hz)
 
#define M_PIf   (3.141592653589793f)
 Value of pi as a float.
 

Enumerations

enum  ambe_frame_type { AMBE_SPEECH , AMBE_SILENCE , AMBE_TONE }
 AMBE possible frame types. More...
 

Functions

void ambe_decode_init (struct ambe_decoder *dec)
 Initializes decoder state. More...
 
void ambe_decode_fini (struct ambe_decoder *dec)
 Release all resources associated with a decoder. More...
 
int ambe_decode_frame (struct ambe_decoder *dec, int16_t *audio, int N, const uint8_t *frame, int bad)
 Decodes an AMBE frame to audio. More...
 
int ambe_decode_dtx (struct ambe_decoder *dec, int16_t *audio, int N)
 Generates audio for DTX period. More...
 
void ambe_frame_unpack_raw (struct ambe_raw_params *rp, const uint8_t *frame)
 Unpack a frame into its raw encoded parameters. More...
 
void ambe_frame_decode_params (struct ambe_subframe *sf, struct ambe_subframe *sf_prev, struct ambe_raw_params *rp)
 Decodes the speech parameters for both subframes from raw params. More...
 
void ambe_subframe_expand (struct ambe_subframe *sf)
 Expands the decoded subframe params to prepare for synthesis. More...
 
float cosf_fast (float angle)
 Fast Cosinus approximation using a simple table. More...
 
float sinf_fast (float angle)
 Fast Sinus approximation using a simple table. More...
 
void ambe_fdct (float *out, float *in, int N, int M)
 Forward Discrete Cosine Transform (fDCT) More...
 
void ambe_idct (float *out, float *in, int N, int M)
 Inverse Discrete Cosine Transform (iDCT) More...
 
void ambe_fdft_fc (float *out_i, float *out_q, float *in, int N, int M)
 Forward Discrete Fourrier Transform (float->complex) More...
 
void ambe_idft_cf (float *out, float *in_i, float *in_q, int N, int M)
 Inverse Discret Fourrier Transform (complex->float) More...
 
void ambe_synth_init (struct ambe_synth *synth)
 Initialized Synthesizer state. More...
 
void ambe_synth_enhance (struct ambe_synth *synth, struct ambe_subframe *sf)
 Apply the spectral magnitude enhancement on the subframe. More...
 
void ambe_synth_audio (struct ambe_synth *synth, int16_t *audio, struct ambe_subframe *sf, struct ambe_subframe *sf_prev)
 Generate audio for a given subframe. More...
 
int ambe_decode_tone (struct ambe_decoder *dec, int16_t *audio, int N, const uint8_t *frame)
 Decodes an AMBE tone frame. More...
 

Variables

const uint8_t ambe_hpg_tbl [48][4]
 Number of harmonics per group for a given L (starts at L=9)
 
const float ambe_gain_tbl [256][2]
 Gain (subframe 0, subframe 1)
 
const uint16_t ambe_v_uv_tbl [64]
 V/UV decisions (subframe 0 = low byte. MSBs = low freq)
 
const float ambe_prba12_tbl [128][2]
 PRBA[1:2].
 
const float ambe_prba34_tbl [64][2]
 PRBA[3:4].
 
const float ambe_prba57_tbl [128][3]
 PRBA[5:7].
 
const float ambe_hoc0_tbl [128][4]
 HOC for 1st frequency block.
 
const float ambe_hoc1_tbl [64][4]
 HOC for 2nd frequency block.
 
const float ambe_hoc2_tbl [64][4]
 HOC for 3rd frequency block.
 
const float ambe_hoc3_tbl [64][4]
 HOC for last frequency block.
 
const float ambe_sf0_interp_tbl [4]
 Interpolation ratios for subframe 0 magnitude prediction.
 
const float ambe_sf0_perr14_tbl [64][4]
 Prediction Error [1:4] for subframe 0.
 
const float ambe_sf0_perr58_tbl [32][4]
 Prediction Error [5:8] for subframe 0.
 
const uint8_t ambe_hpg_tbl [48][4]
 Number of harmonics per group for a given L (starts at L=9)
 
const float ambe_gain_tbl [256][2]
 Gain (subframe 0, subframe 1)
 
const uint16_t ambe_v_uv_tbl [64]
 V/UV decisions (subframe 0 = low byte. MSBs = low freq) More...
 
const float ambe_prba12_tbl [128][2]
 PRBA[1:2].
 
const float ambe_prba34_tbl [64][2]
 PRBA[3:4].
 
const float ambe_prba57_tbl [128][3]
 PRBA[5:7].
 
const float ambe_hoc0_tbl [128][4]
 HOC for 1st frequency block.
 
const float ambe_hoc1_tbl [64][4]
 HOC for 2nd frequency block.
 
const float ambe_hoc2_tbl [64][4]
 HOC for 3rd frequency block.
 
const float ambe_hoc3_tbl [64][4]
 HOC for last frequency block.
 
const float ambe_sf0_interp_tbl [4]
 Interpolation ratios for subframe 0 magnitude prediction. More...
 
const float ambe_sf0_perr14_tbl [64][4]
 Prediction Error [1:4] for subframe 0.
 
const float ambe_sf0_perr58_tbl [32][4]
 Prediction Error [5:8] for subframe 0.
 

Detailed Description

Enumeration Type Documentation

◆ ambe_frame_type

AMBE possible frame types.

Enumerator
AMBE_SPEECH 

Speech frame.

AMBE_SILENCE 

Silence indication frame.

AMBE_TONE 

Tone frame

Function Documentation

◆ ambe_decode_dtx()

int ambe_decode_dtx ( struct ambe_decoder dec,
int16_t *  audio,
int  N 
)

Generates audio for DTX period.

Parameters
[in]decDecoder state structure
[out]audioOutput audio buffer
[in]Nnumber of audio samples to produce (152..168)

Referenced by gmr1_codec_decode_dtx().

◆ ambe_decode_fini()

void ambe_decode_fini ( struct ambe_decoder dec)

Release all resources associated with a decoder.

Parameters
[in]decDecoder state structure

Referenced by gmr1_codec_release().

◆ ambe_decode_frame()

int ambe_decode_frame ( struct ambe_decoder dec,
int16_t *  audio,
int  N,
const uint8_t *  frame,
int  bad 
)

Decodes an AMBE frame to audio.

Parameters
[in]decDecoder state structure
[out]audioOutput audio buffer
[in]Nnumber of audio samples to produce (152..168)
[in]frameFrame data (10 bytes = 80 bits)
[in]badBad Frame Indicator. Set to 1 if frame is corrupt
Returns
0 for success. Negative error code otherwise.

Referenced by gmr1_codec_decode_frame().

◆ ambe_decode_init()

void ambe_decode_init ( struct ambe_decoder dec)

Initializes decoder state.

Parameters
[in]decDecoder state structure

References ambe_synth_init(), ambe_subframe::f0, ambe_subframe::L, M_PIf, ambe_decoder::sf_prev, ambe_decoder::synth, and ambe_subframe::w0.

Referenced by gmr1_codec_alloc().

◆ ambe_decode_tone()

int ambe_decode_tone ( struct ambe_decoder dec,
int16_t *  audio,
int  N,
const uint8_t *  frame 
)

Decodes an AMBE tone frame.

Parameters
[in]decAMBE decoder state
[out]audioOutput audio buffer
[in]Nnumber of audio samples to produce (152..168)
[in]frameFrame data (10 bytes = 80 bits). Must be tone frame !
Returns
0 for success. -EINVAL if frame was invalid.

◆ ambe_fdct()

void ambe_fdct ( float *  out,
float *  in,
int  N,
int  M 
)

Forward Discrete Cosine Transform (fDCT)

Parameters
[out]outfDCT result buffer (freq domain, M elements)
[in]infDCT input buffer (time domain, N elements)
[in]NNumber of points of the DCT
[in]MLimit to the number of frequency components (M <= N)

References cosf_fast(), and M_PIf.

◆ ambe_fdft_fc()

void ambe_fdft_fc ( float *  out_i,
float *  out_q,
float *  in,
int  N,
int  M 
)

Forward Discrete Fourrier Transform (float->complex)

Parameters
[out]out_iReal component result buffer (freq domain, N/2+1 elements)
[out]out_qImag component result buffer (freq domain, N/2+1 elements)
[in]inInput buffer (time domain, M elements)
[in]NNumber of points of the DFT
[in]MLimit to to the number of available time domain elements

Since the input is float, the result is symmetric and so only one side is computed. The output index 0 is DC.

References cosf_fast(), M_PIf, and sinf_fast().

◆ ambe_frame_decode_params()

void ambe_frame_decode_params ( struct ambe_subframe sf,
struct ambe_subframe sf_prev,
struct ambe_raw_params rp 
)

Decodes the speech parameters for both subframes from raw params.

Parameters
[out]sfArray of 2 subframes data to fill-in
[in]sf_prevPrevious subframe 1 data
[in]rpEncoded frame raw parameters

References ambe_subframe::f0, ambe_subframe::f0log, and ambe_raw_params::pitch.

◆ ambe_frame_unpack_raw()

void ambe_frame_unpack_raw ( struct ambe_raw_params rp,
const uint8_t *  frame 
)

Unpack a frame into its raw encoded parameters.

Parameters
[out]rpEncoded frame raw parameters to unpack into
[in]frameFrame data (10 bytes = 80 bits)

References ambe_raw_params::pitch.

◆ ambe_idct()

void ambe_idct ( float *  out,
float *  in,
int  N,
int  M 
)

Inverse Discrete Cosine Transform (iDCT)

Parameters
[out]outiDCT result buffer (time domain, N elements)
[in]iniDCT input buffer (freq domain, M elements)
[in]NNumber of points of the DCT
[in]MLimit to the number of frequency components (M <= N)

References cosf_fast(), and M_PIf.

◆ ambe_idft_cf()

void ambe_idft_cf ( float *  out,
float *  in_i,
float *  in_q,
int  N,
int  M 
)

Inverse Discret Fourrier Transform (complex->float)

Parameters
[out]outResult buffer (time domain, M
[in]in_iReal component input buffer (freq domain, N/2+1 elements)
[in]in_qImag component input buffer (freq domain, N/2+1 elements)
[in]NNumber of points of the DFT
[in]MLimit to the number of time domain elements to generate

The input is assumed to be symmetric and so only N/2+1 inputs are needed. DC component must be input index 0.

References cosf_fast(), M_PIf, and sinf_fast().

◆ ambe_subframe_expand()

void ambe_subframe_expand ( struct ambe_subframe sf)

Expands the decoded subframe params to prepare for synthesis.

Parameters
[in]sfThe subframe to expand

References ambe_subframe::f0, ambe_subframe::L, M_PIf, ambe_subframe::Ml, ambe_subframe::Mlog, ambe_subframe::v_uv, ambe_subframe::Vl, and ambe_subframe::w0.

◆ ambe_synth_audio()

void ambe_synth_audio ( struct ambe_synth synth,
int16_t *  audio,
struct ambe_subframe sf,
struct ambe_subframe sf_prev 
)

Generate audio for a given subframe.

Parameters
[in]synthSynthesizer state structure
[out]audioResult buffer (80 samples)
[in]sfExpanded subframe data for current subframe
[in]sf_prevExpanded subframe data for prevous subframe

◆ ambe_synth_enhance()

void ambe_synth_enhance ( struct ambe_synth synth,
struct ambe_subframe sf 
)

Apply the spectral magnitude enhancement on the subframe.

Parameters
[in]synthSynthesizer state structure
[in]sfExpanded subframe data for subframe to enhance

References cosf_fast(), ambe_subframe::L, M_PIf, ambe_subframe::Ml, ambe_synth::SE, and ambe_subframe::w0.

◆ ambe_synth_init()

void ambe_synth_init ( struct ambe_synth synth)

Initialized Synthesizer state.

Parameters
[out]synthThe structure to reset

References ambe_synth::u_prev.

Referenced by ambe_decode_init().

◆ cosf_fast()

float cosf_fast ( float  angle)

Fast Cosinus approximation using a simple table.

Parameters
[in]angleThe angle value
Returns
The cosinus of the angle

References M_PIf.

Referenced by ambe_fdct(), ambe_fdft_fc(), ambe_idct(), ambe_idft_cf(), and ambe_synth_enhance().

◆ sinf_fast()

float sinf_fast ( float  angle)

Fast Sinus approximation using a simple table.

Parameters
[in]angleThe angle value
Returns
The sinus of the angle

References M_PIf.

Referenced by ambe_fdft_fc(), and ambe_idft_cf().

Variable Documentation

◆ ambe_sf0_interp_tbl

const float ambe_sf0_interp_tbl[4]
Initial value:
= {
0.90f,
0.70f,
0.50f,
0.17f,
}

Interpolation ratios for subframe 0 magnitude prediction.

◆ ambe_v_uv_tbl

const uint16_t ambe_v_uv_tbl[64]
Initial value:
= {
0x0000, 0xffff, 0xc0c0, 0xe0e0, 0xf0f0, 0x8080, 0xfefe, 0x0080,
0xfcfc, 0x80c0, 0xf8f8, 0x8000, 0x00c0, 0xfffe, 0xfeff, 0xc000,
0xf0e0, 0xc0e0, 0xfbfb, 0xfcfe, 0xf8f0, 0xfdfd, 0xfffb, 0xe000,
0xe0f0, 0xfcff, 0xfdff, 0xe0c0, 0xfffc, 0xf0f8, 0xfefc, 0xfffd,
0xf8fc, 0xfcf8, 0xfcfd, 0x4000, 0xf0c0, 0xf9f9, 0xfbff, 0xefef,
0xf3f3, 0xc080, 0xf0e0, 0xfff8, 0xf0fc, 0xf1f1, 0x0040, 0xc0d0,
0xc0f0, 0xf7f7, 0xfaf8, 0xfafa, 0xfcf0, 0xfef8, 0x00e0, 0x0100,
0x1000, 0xe0e1, 0xe0f8, 0xf2f0, 0xf8ff, 0xfafe, 0xfff7, 0xdfdf,
}

V/UV decisions (subframe 0 = low byte. MSBs = low freq)

html/navtree.css0000644000175000017500000000407414753471227013201 0ustar buildbuild#nav-tree .children_ul { margin:0; padding:4px; } #nav-tree ul { list-style:none outside none; margin:0px; padding:0px; } #nav-tree li { white-space:nowrap; margin:0px; padding:0px; } #nav-tree .plus { margin:0px; } #nav-tree .selected { background-image: url('tab_a.png'); background-repeat:repeat-x; color: #fff; text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); } #nav-tree img { margin:0px; padding:0px; border:0px; vertical-align: middle; } #nav-tree a { text-decoration:none; padding:0px; margin:0px; outline:none; } #nav-tree .label { margin:0px; padding:0px; font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; } #nav-tree .label a { padding:2px; } #nav-tree .selected a { text-decoration:none; color:#fff; } #nav-tree .children_ul { margin:0px; padding:0px; } #nav-tree .item { margin:0px; padding:0px; } #nav-tree { padding: 0px 0px; background-color: #FAFAFF; font-size:14px; overflow:auto; } #doc-content { overflow:auto; display:block; padding:0px; margin:0px; -webkit-overflow-scrolling : touch; /* iOS 5+ */ } #side-nav { padding:0 6px 0 0; margin: 0px; display:block; position: absolute; left: 0px; width: 250px; overflow : hidden; } .ui-resizable .ui-resizable-handle { display:block; } .ui-resizable-e { background-image:url("splitbar.png"); background-size:100%; background-repeat:repeat-y; background-attachment: scroll; cursor:ew-resize; height:100%; right:0; top:0; width:6px; } .ui-resizable-handle { display:none; font-size:0.1px; position:absolute; z-index:1; } #nav-tree-contents { margin: 6px 0px 0px 0px; } #nav-tree { background-image:url('nav_h.png'); background-repeat:repeat-x; background-color: #F9FAFC; -webkit-overflow-scrolling : touch; /* iOS 5+ */ } #nav-sync { position:absolute; top:5px; right:24px; z-index:0; } #nav-sync img { opacity:0.3; } #nav-sync img:hover { opacity:0.9; } @media print { #nav-tree { display: none; } div.ui-resizable-handle { display: none; position: relative; } } html/globals_func.html0000644000175000017500000002641014753471227014345 0ustar buildbuild osmo-gmr: Globals
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
 

- a -

- c -

- g -

- s -

html/structambe__synth.html0000644000175000017500000001660514753471227015451 0ustar buildbuild osmo-gmr: ambe_synth Struct Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
ambe_synth Struct Reference

AMBE synthesizer state. More...

#include <private.h>

Data Fields

int16_t u_prev
 Last 'u' of previous subframe.
 
float uw_prev [121]
 Unvoiced data from previous subframe.
 
float psi1
 Current PSI angle for fundamental.
 
float phi [56]
 Current phase for each harmonic.
 
float SE
 Current energy parameter.
 

Detailed Description

AMBE synthesizer state.


The documentation for this struct was generated from the following file:
html/punct_8c.html0000644000175000017500000012325114753471227013433 0ustar buildbuild osmo-gmr: src/l1/punct.c File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 puncturing implementation. More...

#include <osmocom/core/conv.h>
#include <osmocom/gmr1/l1/punct.h>
#include <errno.h>
#include <stdlib.h>

Functions

int gmr1_puncturer_generate (struct osmo_conv_code *code, const struct gmr1_puncturer *punct_pre, const struct gmr1_puncturer *punct_main, const struct gmr1_puncturer *punct_post, int repeat)
 Generate convolutional code puncturing array for a osmo_conv_code. More...
 

Variables

const struct gmr1_puncturer gmr1_punct_k5_12_P23
 GMR-1 P(2;3) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_P25
 GMR-1 P(2;5) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_Ps25
 GMR-1 Ps(2;5) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_P311
 GMR-1 P(3;11) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_P412
 GMR-1 P(4;12) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_Ps412
 GMR-1 Ps(4;12) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_P12
 GMR-1 P(1;2) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_Ps12
 GMR-1 Ps(1;2) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_A
 GMR-1 A puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_B
 GMR-1 B puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_C
 GMR-1 C puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_D
 GMR-1 D puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_E
 GMR-1 E puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_P38
 GMR-1 P(3;8) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_P26
 GMR-1 P(2;6) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_P37
 GMR-1 P(3;7) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_13_P16
 GMR-1 P(1;6) puncturing code for the K=5 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_13_P25
 GMR-1 P(2;5) puncturing code for the K=5 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_13_P15
 GMR-1 P(1;5) puncturing code for the K=5 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_13_Ps15
 GMR-1 Ps(1;5) puncturing code for the K=5 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_13_P78
 GMR-1 P(7;8) puncturing code for the K=5 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_15_P23
 GMR-1 P(2;3) puncturing code for the K=5 rate 1/5 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_15_P53
 GMR-1 P(5;3) puncturing code for the K=5 rate 1/5 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_15_Ps53
 GMR-1 Ps(5;3) puncturing code for the K=5 rate 1/5 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k7_12_P23
 GMR-1 P(2;3) puncturing code for the K=7 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k7_12_P410
 GMR-1 P(4;10) puncturing code for the K=7 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k7_12_P512
 GMR-1 P(5;12) puncturing code for the K=7 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k7_12_P116
 GMR-1 P(1;16) puncturing code for the K=7 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k7_12_P148
 GMR-1 P(1;48) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P184
 GMR-1 P(1;84) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P1152
 GMR-1 P(1;152) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P45
 GMR-1 P(4;5) puncturing code for the K=7 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k7_12_P245
 GMR-1 P2(4;5) puncturing code for the K=7 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P13
 GMR-1 P(1;3) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P47
 GMR-1 P(4;7) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P34
 GMR-1 P(3;4) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P17
 GMR-1 P(1;7) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P19
 GMR-1 P(1;9) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P26
 GMR-1 P(2;6) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P110
 GMR-1 P(1;10) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P14
 GMR-1 P(1;4) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P45
 GMR-1 P(4;5) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P234
 GMR-1 P2(3;4) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k6_14_P45
 GMR-1 P(4;5) puncturing code for the K=6 rate 1/4 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_14_P148
 GMR-1 P(14;8) puncturing code for the K=9 rate 1/4 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_14_P65
 GMR-1 P(6;5) puncturing code for the K=9 rate 1/4 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_13_P12
 GMR-1 P(1;2) puncturing code for the K=9 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_13_P1213
 GMR-1 P(12;13) puncturing code for the K=9 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_13_P44
 GMR-1 P(4;4) puncturing code for the K=9 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_13_P33
 GMR-1 P(3;3) puncturing code for the K=9 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_13_P65
 GMR-1 P(6;5) puncturing code for the K=9 rate 1/3 conv coder. More...
 

Detailed Description

Osmocom GMR-1 puncturing implementation.

html/closed.png0000644000175000017500000000020414753471226012770 0ustar buildbuild‰PNG  IHDR à‘KIDATxíÝm @!†ÑGk™É7À-`&séts¦Àñþòð@åk}ª2€… P%Á_Ëþ¿N² .:0Dk¥‹Â›x" Ö›)¡xÒ5õIEND®B`‚html/globals_m.html0000644000175000017500000000766014753471227013654 0ustar buildbuild osmo-gmr: Globals
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:

- m -

html/conv_8h.js0000644000175000017500000000145014753471227012720 0ustar buildbuildvar conv_8h = [ [ "gmr1_conv_k5_12", "group__conv.html#gad9e7ba139d8b88117361ce2c069b3ac1", null ], [ "gmr1_conv_k5_13", "group__conv.html#gae46510aefce08ef3158790186b00a404", null ], [ "gmr1_conv_k5_14", "group__conv.html#gad0dab5050f72518f948d10b78ee21b2d", null ], [ "gmr1_conv_k5_15", "group__conv.html#ga70b8d0dc1e500ff3a1986315e6551a27", null ], [ "gmr1_conv_k6_14", "group__conv.html#ga6e7732168c9ecb6ad0b14ed8001c4588", null ], [ "gmr1_conv_k9_12", "group__conv.html#gaa9043b27694a4c4438b18f7cd60950cd", null ], [ "gmr1_conv_k9_13", "group__conv.html#ga647389b5ecf36c9770b4ecfd57c11fe0", null ], [ "gmr1_conv_k9_14", "group__conv.html#ga0aaad5b737b08f90b906fbd369df8ccc", null ], [ "gmr1_conv_tch3", "group__conv.html#ga622aa845f1ef3258a750b0da2df27d13", null ] ];html/structambe__subframe.html0000644000175000017500000002365714753471227016115 0ustar buildbuild osmo-gmr: ambe_subframe Struct Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
ambe_subframe Struct Reference

AMBE subframe parameters. More...

#include <private.h>

Data Fields

float f0
 fundamental normalized frequency
 
float f0log
 log2(f0)
 
float w0
 fundamental frequency (rad/samp)
 
int L
 Number of harmonics.
 
int Lb [4]
 Harmonics per block.
 
int v_uv [8]
 Voicing state.
 
int Vl [56]
 Per-harmonic voicing state.
 
float gain
 Gain.
 
float Mlog [56]
 log spectral magnitudes
 
float Ml [56]
 spectral magnitudes
 

Detailed Description

AMBE subframe parameters.


The documentation for this struct was generated from the following file:
html/dir_d44c64559bbebec7f509842c48db8b23.html0000644000175000017500000000757314753471227017231 0ustar buildbuild osmo-gmr: include Directory Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
include Directory Reference
html/structtch3__state.html0000644000175000017500000002047514753471227015361 0ustar buildbuild osmo-gmr: tch3_state Struct Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
tch3_state Struct Reference

Data Fields

int active
 
int tn
 
int p
 
int ciph
 
float energy_dkab
 
float energy_burst
 
int weak_cnt
 
sbit_t ebits [104 *4]
 
uint32_t bi_fn [4]
 
int sync_id
 
int burst_cnt
 

The documentation for this struct was generated from the following file:
html/annotated.html0000644000175000017500000002145714753471227013672 0ustar buildbuild osmo-gmr: Data Structures
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
Data Structures
Here are the data structures with brief descriptions:
 Cambe_decoderAMBE decoder state
 Cambe_raw_paramsAMBE encoded frame raw parameters
 Cambe_subframeAMBE subframe parameters
 Cambe_synthAMBE synthesizer state
 Cchan_desc
 Cgmr1_codecStructure for GMR1 codec state
 Cgmr1_fcch_burst
 Cgmr1_interleaverGMR1 inter-burst (de)interleaver state
 Cgmr1_pi4cxpsk_burstPi4-CxPSK Burst format description
 Cgmr1_pi4cxpsk_dataPi4-CxPSK Data segment description
 Cgmr1_pi4cxpsk_modulationPi4-CxPSK modulation description
 Cgmr1_pi4cxpsk_symbolPi4-CxPSK symbol description
 Cgmr1_pi4cxpsk_syncPi4-CxPSK Synchronization sequence segment description
 Cgmr1_puncturerStructure describing a puncturing code
 Ctch3_state
 Ctch9_state
 Ctone_descStructure describing a dual-frequency tone
html/math_8c.html0000644000175000017500000002142714753471227013235 0ustar buildbuild osmo-gmr: src/codec/math.c File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 AMBE vocoder math functions. More...

#include <math.h>
#include "private.h"

Functions

float cosf_fast (float angle)
 Fast Cosinus approximation using a simple table. More...
 
float sinf_fast (float angle)
 Fast Sinus approximation using a simple table. More...
 
void ambe_fdct (float *out, float *in, int N, int M)
 Forward Discrete Cosine Transform (fDCT) More...
 
void ambe_idct (float *out, float *in, int N, int M)
 Inverse Discrete Cosine Transform (iDCT) More...
 
void ambe_fdft_fc (float *out_i, float *out_q, float *in, int N, int M)
 Forward Discrete Fourrier Transform (float->complex) More...
 
void ambe_idft_cf (float *out, float *in_i, float *in_q, int N, int M)
 Inverse Discret Fourrier Transform (complex->float) More...
 

Detailed Description

Osmocom GMR-1 AMBE vocoder math functions.

html/navtreedata.js0000644000175000017500000000442014753471227013652 0ustar buildbuild/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ var NAVTREE = [ [ "osmo-gmr", "index.html", [ [ "Modules", "modules.html", "modules" ], [ "Data Structures", "annotated.html", [ [ "Data Structures", "annotated.html", "annotated_dup" ], [ "Data Fields", "functions.html", [ [ "All", "functions.html", null ], [ "Variables", "functions_vars.html", null ] ] ] ] ], [ "Files", "files.html", [ [ "File List", "files.html", "files_dup" ], [ "Globals", "globals.html", [ [ "All", "globals.html", "globals_dup" ], [ "Functions", "globals_func.html", null ], [ "Variables", "globals_vars.html", null ], [ "Enumerations", "globals_enum.html", null ], [ "Enumerator", "globals_eval.html", null ], [ "Macros", "globals_defs.html", null ] ] ] ] ] ] ] ]; var NAVTREEINDEX = [ "a5_8c.html", "group__punct.html#ga780e4af9db89c4bb51808bd2a35fa593" ]; var SYNCONMSG = 'click to disable panel synchronisation'; var SYNCOFFMSG = 'click to enable panel synchronisation';html/xch__dc12_8c.js0000644000175000017500000000033214753471227013476 0ustar buildbuildvar xch__dc12_8c = [ [ "gmr1_xch_dc12_decode", "group__xch__dc12.html#ga581b9670f04f4a6bf6be69dc78ad2389", null ], [ "gmr1_xch_dc12_encode", "group__xch__dc12.html#ga65507f2a3c6d9b8e681a082ffba157a9", null ] ];html/a5_8h.js0000644000175000017500000000025514753471227012262 0ustar buildbuildvar a5_8h = [ [ "gmr1_a5", "group__a5.html#gaddb4e3e6e4a5b5f91fe9308250a70375", null ], [ "gmr1_a5_1", "group__a5.html#gad385682d03d182ea6e3d0e99fa4ca04e", null ] ];html/group__facch9.js0000644000175000017500000000045114753471227014064 0ustar buildbuildvar group__facch9 = [ [ "facch9.h", "facch9_8h.html", null ], [ "facch9.c", "facch9_8c.html", null ], [ "gmr1_facch9_decode", "group__facch9.html#ga42d1d80d7a1bfab7d92ad0d28d8f87c6", null ], [ "gmr1_facch9_encode", "group__facch9.html#ga8956be2f31fd48853350bc092fd1797f", null ] ];html/l1_2defs_8h.html0000644000175000017500000001116114753471227013702 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/defs.h File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
defs.h File Reference

Osmocom GMR-1 L1 global definitions. More...

Go to the source code of this file.

Detailed Description

Osmocom GMR-1 L1 global definitions.

html/bcch_8h.js0000644000175000017500000000030314753471227012646 0ustar buildbuildvar bcch_8h = [ [ "gmr1_bcch_decode", "group__bcch.html#ga73717708a391d84da44845fbaf2e73a4", null ], [ "gmr1_bcch_encode", "group__bcch.html#ga7a8f900d4c5b81ad9a903ee9b7d6b9e7", null ] ];html/group__l1__chan.js0000644000175000017500000000112314753471227014370 0ustar buildbuildvar group__l1__chan = [ [ "BCCH channel coding", "group__bcch.html", "group__bcch" ], [ "CCCH (PCH/AGCH) channel coding", "group__ccch.html", "group__ccch" ], [ "FACCH3 channel coding", "group__facch3.html", "group__facch3" ], [ "FACCH9 channel coding", "group__facch9.html", "group__facch9" ], [ "RACH channel coding", "group__rach.html", "group__rach" ], [ "TCH3 channel coding", "group__tch3.html", "group__tch3" ], [ "TCH9 channel coding", "group__tch9.html", "group__tch9" ], [ "xCH over DC12 channel coding", "group__xch__dc12.html", "group__xch__dc12" ] ];html/structambe__synth.js0000644000175000017500000000066714753471227015122 0ustar buildbuildvar structambe__synth = [ [ "phi", "structambe__synth.html#a5e8d3e37d5ef02db39803a10de1796ce", null ], [ "psi1", "structambe__synth.html#ab03788ec8e6fd99b782ca07ae04d4dc4", null ], [ "SE", "structambe__synth.html#ae9f1fa4f9e9616614f50fa303a3c52ce", null ], [ "u_prev", "structambe__synth.html#a1ec169cb61914f8a61e14e0a2838de6c", null ], [ "uw_prev", "structambe__synth.html#ac555e0a7a4e672f1c8e3ab6873b0bbfd", null ] ];html/group__crc.html0000644000175000017500000003005214753471227014026 0ustar buildbuild osmo-gmr: Cyclic Redundancy Check
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Files

file  crc.h
 Osmocom GMR-1 CRC header.
 
file  crc.c
 Osmocom GMR-1 CRC implementation.
 

Variables

const struct osmo_crc8gen_code gmr1_crc8
 GMR-1 CRC8 g8(D) = D8 + D7 + D4 + D3 + D + 1.
 
const struct osmo_crc16gen_code gmr1_crc12
 GMR-1 CRC12 g12(D) = D12 + D11 + D3 + D2 + D + 1.
 
const struct osmo_crc16gen_code gmr1_crc16
 GMR-1 CRC16 g16(D) = D16 + D12 + D5 + 1.
 
const struct osmo_crc8gen_code gmr1_crc8
 GMR-1 CRC8 g8(D) = D8 + D7 + D4 + D3 + D + 1. More...
 
const struct osmo_crc16gen_code gmr1_crc12
 GMR-1 CRC12 g12(D) = D12 + D11 + D3 + D2 + D + 1. More...
 
const struct osmo_crc16gen_code gmr1_crc16
 GMR-1 CRC16 g16(D) = D16 + D12 + D5 + 1. More...
 

Detailed Description

Variable Documentation

◆ gmr1_crc12

const struct osmo_crc16gen_code gmr1_crc12
Initial value:
= {
.bits = 12,
.poly = 0x80f,
.init = 0x0000,
.remainder = 0x0000,
}

GMR-1 CRC12 g12(D) = D12 + D11 + D3 + D2 + D + 1.

Referenced by gmr1_rach_encode().

◆ gmr1_crc16

const struct osmo_crc16gen_code gmr1_crc16
Initial value:
= {
.bits = 16,
.poly = 0x1021,
.init = 0x0000,
.remainder = 0x0000,
}

GMR-1 CRC16 g16(D) = D16 + D12 + D5 + 1.

Referenced by gmr1_bcch_encode(), gmr1_ccch_encode(), gmr1_facch3_encode(), gmr1_facch9_encode(), and gmr1_xch_dc12_encode().

◆ gmr1_crc8

const struct osmo_crc8gen_code gmr1_crc8
Initial value:
= {
.bits = 8,
.poly = 0x9b,
.init = 0x00,
.remainder = 0x00,
}

GMR-1 CRC8 g8(D) = D8 + D7 + D4 + D3 + D + 1.

Referenced by gmr1_rach_encode().

html/a5_8h.html0000644000175000017500000001454614753471227012622 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/a5.h File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 A5 ciphering algorithm header. More...

#include <stdint.h>
#include <osmocom/core/bits.h>

Go to the source code of this file.

Functions

void gmr1_a5 (int n, uint8_t *key, uint32_t fn, int nbits, ubit_t *dl, ubit_t *ul)
 Main method to generate a A5/x cipher stream. More...
 
void gmr1_a5_1 (uint8_t *key, uint32_t fn, int nbits, ubit_t *dl, ubit_t *ul)
 Generate a GMR-1 A5/1 cipher stream. More...
 

Detailed Description

Osmocom GMR-1 A5 ciphering algorithm header.

html/dir_8d7fe3e74f1d95a733af486e7566cca0.html0000644000175000017500000001335114753471227017231 0ustar buildbuild osmo-gmr: src/sdr Directory Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
sdr Directory Reference

Files

file  dkab.c
 Osmocom GMR-1 DKABs bursts implementation.
 
file  fcch.c
 Osmocom GMR-1 FCCH bursts implementation.
 
file  nb.c
 Osmocom GMR-1 Normal bursts descriptions.
 
file  pi4cxpsk.c
 Osmocom GMR-1 pi2-CBPSK, pi4-CBPSK and pi4-CQPSK modulation support implementation.
 
html/bcch_8h_source.html0000644000175000017500000002413014753471227014562 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/bcch.h Source File
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
bcch.h
Go to the documentation of this file.
1/* GMR-1 BCCH channel coding */
2/* See GMR-1 05.003 (ETSI TS 101 376-5-3 V1.2.1) - Section 6.1 */
3
4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
5 * All Rights Reserved
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU Affero General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU Affero General Public License for more details.
16 *
17 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21#ifndef __OSMO_GMR1_L1_BCCH_H__
22#define __OSMO_GMR1_L1_BCCH_H__
23
33#include <stdint.h>
34#include <osmocom/core/bits.h>
35
36
37void gmr1_bcch_encode(ubit_t *bits_e, const uint8_t *l2);
38int gmr1_bcch_decode(uint8_t *l2, const sbit_t *bits_e, int *conv_rv);
39
40
43#endif /* __OSMO_GMR1_L1_BCCH_H__ */
int gmr1_bcch_decode(uint8_t *l2, const sbit_t *bits_e, int *conv_rv)
Stateless GMR-1 BCCH channel decoder.
Definition: bcch.c:84
void gmr1_bcch_encode(ubit_t *bits_e, const uint8_t *l2)
Stateless GMR-1 BCCH channel coder.
Definition: bcch.c:61
html/tch9_8c.html0000644000175000017500000001661314753471227013154 0ustar buildbuild osmo-gmr: src/l1/tch9.c File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 TCH9 channel coding implementation. More...

#include <stdint.h>
#include <string.h>
#include <osmocom/core/bits.h>
#include <osmocom/core/conv.h>
#include <osmocom/core/crc16gen.h>
#include <osmocom/gmr1/l1/conv.h>
#include <osmocom/gmr1/l1/crc.h>
#include <osmocom/gmr1/l1/interleave.h>
#include <osmocom/gmr1/l1/punct.h>
#include <osmocom/gmr1/l1/scramb.h>
#include <osmocom/gmr1/l1/tch9.h>

Functions

void gmr1_tch9_encode (ubit_t *bits_e, const uint8_t *l2, enum gmr1_tch9_mode mode, const ubit_t *bits_sacch, const ubit_t *bits_status, const ubit_t *ciph, struct gmr1_interleaver *il)
 GMR-1 TCH9 channel coder. More...
 
void gmr1_tch9_decode (uint8_t *l2, sbit_t *bits_sacch, sbit_t *bits_status, const sbit_t *bits_e, enum gmr1_tch9_mode mode, const ubit_t *ciph, struct gmr1_interleaver *il, int *conv_rv)
 GMR-1 TCH9 channel decoder. More...
 

Detailed Description

Osmocom GMR-1 TCH9 channel coding implementation.

html/group__interleave.html0000644000175000017500000005237514753471227015431 0ustar buildbuild osmo-gmr: Interleaving
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Files

file  interleave.h
 Osmocom GMR-1 interleaving header.
 
file  interleave.c
 Osmocom GMR-1 interleaving implementation.
 

Data Structures

struct  gmr1_interleaver
 GMR1 inter-burst (de)interleaver state. More...
 

Functions

void gmr1_interleave_intra (void *out, const void *in, int N)
 GMR-1 intra burst inteleaver. More...
 
void gmr1_deinterleave_intra (void *out, const void *in, int N)
 GMR-1 intra burst de-interleaver. More...
 
int gmr1_interleaver_init (struct gmr1_interleaver *il, int N, int K)
 GMR-1 inter burst interleaver initializer. More...
 
void gmr1_interleaver_fini (struct gmr1_interleaver *il)
 GMR-1 inter burst interleaver cleanup. More...
 
void gmr1_interleave_inter (struct gmr1_interleaver *il, void *bits_epp, void *bits_ep)
 GMR-1 inter burst interleaver. More...
 
void gmr1_deinterleave_inter (struct gmr1_interleaver *il, void *bits_ep, void *bits_epp)
 GMR-1 inter burst de-interleaver. More...
 

Detailed Description

Function Documentation

◆ gmr1_deinterleave_inter()

void gmr1_deinterleave_inter ( struct gmr1_interleaver il,
void *  bits_ep,
void *  bits_epp 
)

GMR-1 inter burst de-interleaver.

Parameters
[in]ilThe interleaver object
[out]bits_epN bits output from de-interleaver
[in]bits_eppN bits input to de-interleaver

bits_ep and bits_epp can be equal for inplace processing

References gmr1_interleaver::bits_cpp, gmr1_interleaver::K, gmr1_interleaver::N, and gmr1_interleaver::n.

◆ gmr1_deinterleave_intra()

void gmr1_deinterleave_intra ( void *  out,
const void *  in,
int  N 
)

GMR-1 intra burst de-interleaver.

Parameters
[out]outDeinterleaved bit array to write to
[in]inInterleaved bit array to read from
[in]NDimension of the interleaving matrix

Both arrays need to have a length of (8*N). This routine works for any type that has the same size as uint8_t like sbit_t or ubit_t.

Referenced by gmr1_bcch_decode(), gmr1_ccch_decode(), gmr1_facch3_decode(), gmr1_facch9_decode(), gmr1_rach_decode(), and gmr1_xch_dc12_decode().

◆ gmr1_interleave_inter()

void gmr1_interleave_inter ( struct gmr1_interleaver il,
void *  bits_epp,
void *  bits_ep 
)

GMR-1 inter burst interleaver.

Parameters
[in]ilThe interleaver object
[out]bits_eppN bits output of interleaver
[in]bits_epN bits input to interleaver

bits_ep and bits_epp can be equal for inplace processing

References gmr1_interleaver::bits_cpp, gmr1_interleaver::K, gmr1_interleaver::N, and gmr1_interleaver::n.

◆ gmr1_interleave_intra()

void gmr1_interleave_intra ( void *  out,
const void *  in,
int  N 
)

GMR-1 intra burst inteleaver.

Parameters
[out]outInterleaved bit array to write to
[in]inOriginal bit array to read from
[in]NDimension of the interleaving matrix

Both arrays need to have a length of (8*N). This routine works for any type that has the same size as uint8_t like sbit_t or ubit_t.

◆ gmr1_interleaver_fini()

void gmr1_interleaver_fini ( struct gmr1_interleaver il)

GMR-1 inter burst interleaver cleanup.

Parameters
[in]ilThe interleaver object to release

References gmr1_interleaver::bits_cpp.

◆ gmr1_interleaver_init()

int gmr1_interleaver_init ( struct gmr1_interleaver il,
int  N,
int  K 
)

GMR-1 inter burst interleaver initializer.

Parameters
[in]ilThe interleaver object to init
[in]NThe interleaving depth
[in]KThe interleaving width

References gmr1_interleaver::bits_cpp, gmr1_interleaver::K, and gmr1_interleaver::N.

html/structtone__desc.js0000644000175000017500000000041114753471227014717 0ustar buildbuildvar structtone__desc = [ [ "f1", "structtone__desc.html#a9980c6296defda0b97fdc6f0a70a0b8d", null ], [ "f2", "structtone__desc.html#a0367e505d7112a2acbddefaf23feac79", null ], [ "name", "structtone__desc.html#ac264519a39b5ba67b62f0744e993eeca", null ] ];html/tch3_8h.html0000644000175000017500000001506614753471227013154 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/tch3.h File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 TCH3 channel coding header. More...

#include <stdint.h>
#include <osmocom/core/bits.h>

Go to the source code of this file.

Functions

void gmr1_tch3_encode (ubit_t *bits_e, const uint8_t *frame0, const uint8_t *frame1, const ubit_t *bits_s, const ubit_t *ciph, int m)
 Stateless GMR-1 TCH3 channel coder. More...
 
void gmr1_tch3_decode (uint8_t *frame0, uint8_t *frame1, ubit_t *bits_s, const sbit_t *bits_e, const ubit_t *ciph, int m, int *conv0_rv, int *conv1_rv)
 Stateless GMR-1 TCH3 channel decoder. More...
 

Detailed Description

Osmocom GMR-1 TCH3 channel coding header.

html/structtch9__state.html0000644000175000017500000001256214753471227015365 0ustar buildbuild osmo-gmr: tch9_state Struct Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
tch9_state Struct Reference

Data Fields

int active
 
int tn
 
struct gmr1_interleaver il
 

The documentation for this struct was generated from the following file:
html/tch9_8h.js0000644000175000017500000000140414753471227012621 0ustar buildbuildvar tch9_8h = [ [ "gmr1_tch9_mode", "group__tch9.html#ga744d45ed21afcffb14ab1dada9843d45", [ [ "GMR1_TCH9_2k4", "group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45a762585e2143ebf69e4d98938fa20e648", null ], [ "GMR1_TCH9_4k8", "group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45a31ed2ba33bf118dc2d973f7c1db264a2", null ], [ "GMR1_TCH9_9k6", "group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45a47478138efd91b1307e767a674836a18", null ], [ "GMR1_TCH9_MAX", "group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45aada4ebb2664386d79975327200434f3d", null ] ] ], [ "gmr1_tch9_decode", "group__tch9.html#ga1dc40fc5c18b5f082de485e701db9af4", null ], [ "gmr1_tch9_encode", "group__tch9.html#ga7a8227b3a47497d84316568637b9d732", null ] ];html/private_8h.js0000644000175000017500000000705114753471227013430 0ustar buildbuildvar private_8h = [ [ "AMBE_RATE", "group__codec__private.html#gac1723f2fb63e31519d15815b05cc2a67", null ], [ "M_PIf", "group__codec__private.html#gacbb42dc053fedc161079f0a4d20a64e8", null ], [ "ambe_frame_type", "group__codec__private.html#ga109f07fd3782470868b1d1d2ec099eb6", [ [ "AMBE_SPEECH", "group__codec__private.html#gga109f07fd3782470868b1d1d2ec099eb6a14419c7969d8bb6cf9b2d8b71f30f33b", null ], [ "AMBE_SILENCE", "group__codec__private.html#gga109f07fd3782470868b1d1d2ec099eb6a719fb04a91460753423334efdad424b5", null ], [ "AMBE_TONE", "group__codec__private.html#gga109f07fd3782470868b1d1d2ec099eb6a3ed83bce1686c0614c9377ff191cc8d1", null ] ] ], [ "ambe_decode_dtx", "group__codec__private.html#ga8f0cf32d32bde050a40a3e7087185aad", null ], [ "ambe_decode_fini", "group__codec__private.html#ga8a426acea7ced6d46716695e243462dd", null ], [ "ambe_decode_frame", "group__codec__private.html#ga96427955e6f3174ea846064627843bc3", null ], [ "ambe_decode_init", "group__codec__private.html#gaac2c306e18df0fb45f2487e83ba4f9e9", null ], [ "ambe_decode_tone", "group__codec__private.html#gaf5856df7a0f19188013d6c610a2b7f60", null ], [ "ambe_fdct", "group__codec__private.html#ga83063f9ee0607fe61bacc11bd42d059f", null ], [ "ambe_fdft_fc", "group__codec__private.html#ga9d9e8b11e46bf3ccf14d22be87f1c719", null ], [ "ambe_frame_decode_params", "group__codec__private.html#ga55a71c63c53e21c1d6fc9c91ddf519cd", null ], [ "ambe_frame_unpack_raw", "group__codec__private.html#ga8a4e007b142973be5b44ef1637c9bfee", null ], [ "ambe_idct", "group__codec__private.html#ga0d2a102900214d2ebdab56bf85024cf2", null ], [ "ambe_idft_cf", "group__codec__private.html#gadbfdcbf5186cc1c567112e4edc29a1a1", null ], [ "ambe_subframe_expand", "group__codec__private.html#ga2d3ff962344089d1a44fd0d659c55df8", null ], [ "ambe_synth_audio", "group__codec__private.html#ga7ca25dc5919fcff4c7494eb02d25fda2", null ], [ "ambe_synth_enhance", "group__codec__private.html#ga5fdca2bf0b039f3bb0dd97b0f601fe62", null ], [ "ambe_synth_init", "group__codec__private.html#ga31252750e130d6bf531c483df2ec8a49", null ], [ "cosf_fast", "group__codec__private.html#ga62bc434f8483f0198f86b388ab30ced6", null ], [ "sinf_fast", "group__codec__private.html#gade8a6e65fb5db286835ffd82b0f61dd1", null ], [ "ambe_gain_tbl", "group__codec__private.html#ga8782e94d4fc86ce45ea714a7316eecd4", null ], [ "ambe_hoc0_tbl", "group__codec__private.html#gac6bf71952dbf30ef32fb5cc91681d8d6", null ], [ "ambe_hoc1_tbl", "group__codec__private.html#ga934c67cf74ce3f2944594eab3958139c", null ], [ "ambe_hoc2_tbl", "group__codec__private.html#ga8992a95357c191374ac100f76f8b42fe", null ], [ "ambe_hoc3_tbl", "group__codec__private.html#ga616fdb311356f3430ade8e24d45479b4", null ], [ "ambe_hpg_tbl", "group__codec__private.html#gafaaf0c3cc5a7cd0f44133e1f5922a52d", null ], [ "ambe_prba12_tbl", "group__codec__private.html#gae5a94c3201e655989c87379268c30623", null ], [ "ambe_prba34_tbl", "group__codec__private.html#gaadea447d12d8536738479b549eb42fdf", null ], [ "ambe_prba57_tbl", "group__codec__private.html#ga35df9825da65a2015f7576c83c9843f4", null ], [ "ambe_sf0_interp_tbl", "group__codec__private.html#gab7a7b1219368c43c898cfb24ff3cb5cd", null ], [ "ambe_sf0_perr14_tbl", "group__codec__private.html#ga42a2421d73b8b9021b2b88698057b53b", null ], [ "ambe_sf0_perr58_tbl", "group__codec__private.html#ga109dca33b432f87d6d6a14a4a0787e06", null ], [ "ambe_v_uv_tbl", "group__codec__private.html#ga735cc90f20631506f7a5fc4827f4e8d5", null ] ];html/form_0.png0000644000175000017500000000736114753471227012715 0ustar buildbuild‰PNG  IHDRë-jÐàøiCCPdefault_gray.iccH‰•y4ÔýÇ¿¿ßoöÅ23ÆÎXÇ’5Ë ËÛX²¯©hì[Œ]JI*”’d+‘E›%m’RQhF¡<¥E*•GÝ{νçÞÓ¹çÜ×9Ÿó~ýñýœó9ï¾à+Á2°±qI|{¶¿ŸüÁ¼Äx¶››3ø-ŸFô3ïkýþÍoA‡„&ò–³ky6óâùI@VË®–šÿÓ#–¶!ú—gþôh/βïGúçîO”Øü¤È°Ð4†çÆ°¤Ô`~(#ÑžœÎàr8 7þưȘÐÿãºÿARhZÒÏälŒOçG†G$1þë }]=øW§¼~uÑÿ³çŸð’ù)ÿ0Ô¯nr@ ¨- Œ°¶À¸/àÖˆ±€RA&ØrA>Ø‚rPjAhgA;¸®› Ü#à €IðÌO`‚ ,D†¨$$©@š>Ä‚, [Èò€ü¡ (Šƒ’¡Lh;”AåP5Ô.@× ÛÐô‡f ÷ÐWI0 –…Ua˜³a'Ø ^ ‡Ã pœï…Káø$Ü_ƒûàX¿†ç€:¢€h!,„ƒ¸"HÂG¶ yH Rƒ4#H/r ³ÈEE1PZ(3”ÊÅC% ¶  P娨6Tê>j5‡ú&£eКhS4í‡G§¢sÑ%è:t+úz=‰þ„Á`è&Æã€ñÇDa6a 0‡1-˜.Ìf3Åb%±šXs¬+6›„ÍÅ–aOb¯b‡±“ØÏ8"N§³ÃàâpÙ¸\#î n7…[Ä‹àUð¦xW|>_ˆ¯Åwâñ“øE‚(I0'x¢Û¥„f ÂSÂ"‘¨H4!º#‰[‰¥ÄÓÄ[Äqâ…¤AâIɤ½¤zRéé™LV%[‘ÈIä½äòuòsòg!ª¶W(D(K¨B¨MhXè0^XE˜-¼N8C¸Døœð ð¬^DU„#,²E¤Bä‚Șȼ(UTOÔU4V´@´Qô¶è4KQ¥ØRB(9”c”ë” *BU¢r¨<êvj-õu’†¡1i\Z-ŸvŠ6@›£ˆˆùˆ¥‰Uˆ]к*K¡ÒÏÒGé_ÅeÅÙâ¡â»Å›Å‡Å$¤%¬$B%ò$Z$F$¾J2$m%£%÷K¶K>“BIiH¹K¥J‘º!5+M“6“æIçIŸ•~,ËhÈxÈl’9&Ó/3/+'k//[&{]vVŽ.g%%W,wEnFž*o!)_,UþCŒÁfÄ0J=Œ9…d…j……EE¦¢·b¶b‹â3%‚K)L©X©[iNY^ÙE9S¹Iù± ^…¥¡rH¥WeA•©ê«ºSµ]uš)Áä23˜M̧jd5Kµµµêu–z´úaõ{°†¡F„F…Æ &¬i¤©yXshz…ÉŠ¸5+Æ´HZl­­&­qmº¶³v¶v»öeý:½:?t uctkuŸèQôõ²õ:õÞëkèóô+ô¬$¯´[™µ²cå;MƒPƒ# ©†.†; » ¿ñšfŒ•ƒŒ+ÇX4–«€uËmbm’erÉä‹©‘i’éYÓ·fZfÑffÓ«˜«BWÕ®š0W46¯6X0,‚,ŽZ,,ƒ-k,_X)Y…XÕYM±ÕÙQì“ì7ÖºÖ|ëVëŽ)g3§Ë±±·É³°¥ØzÛ–Û>·S´ ·k²›³7´ßdßå€vprØï0Æ•åò¸ Ü9GcÇÍŽ=N$'O§r§ÎÎ|çNØÅÑå€ËÓÕ*«ãV·»W®ë×gnL··‹îw7÷ ÷—z™½žTÏõžžŸ¼¬½ ½žx«y'{wûûú4ø,øÚøù ütü6ûõùKùGúw`|êæ×Ø®9¸f2Ð007pt-smÚÚÛë¤ÖŬ»¼^x}ðúsAè ß Æ oÁ®Á5Áó¸*7Ìñ8¼C¼×!V!Å!3¡æ¡E¡SaæaEaÓáæáÂg",#J"f#9‘å‘ª¢¢]£ë£—b|cZbq±A±â(qÑq=å6¦mŠ×ŒÏ$˜&L˜ã;ñë¡Äµ‰I´åª?Y-yGòxŠEJEÊçTŸÔsi¢iqiýéé»Ó§2ì2ŽoBmâmêÎTÈÜ–9¾™½¹z ´eÖî,¥¬œ¬É­ö[Ol#l‹Þv7[7»(ûãvßí9²9[s&vØïhÊÊåçŽí4ÛYµ µ+r×Àî•»ËvÿÈ É»“¯›_’ÿ­€WpgÞžÒ=K{Ãöهٷot¿åþE¢EE\´3ŠóŠ?\ðv‰AIÕ!¡äC‚RçÒŽ2å²}eßÊ#ÊG*¬+Z*e*wW.9<|ÄêHs•lU~Õ×£‘GVÛW·Õ¨Ö”ÃK9ö²Ö§¶÷8ëxCT]~Ý÷ú¸zÁ = Æ 2…MpSrÓÌÉÀ“÷NÙœêhÖj®n¡·äŸ§“O¿:tfô¬ÓÙîs¬sÍçUÎW¶R[óÚ ¶ô¶¹öˆvA‡ÇÐÇ Ýf­µ/Ö_R¸TqYìrá•œ+KW3®ÎwÅwÍ^ ¿6ѽ¾ûÉu¿ëzÜ{n8ݸuÓîæõ^vïÕ[æ·.Ý6½}áëN{ŸQ_[¿aë]û­FmƒÆƒ÷Lîu­º2l9|í¾Íý›¸úFV z> < y8ý(æÑ»Ç)Ÿl}Š~š÷LäYÉs™ç5¨ÿÑ"0\·ïáùâÉoâõŸ‰~›ÌyI~Y2%?Õ0­?}iÆnæÞ«5¯&_Ç¿^œÍýKô¯Ê7joοµzÛ?ç77ùŽÿné}ÁÉõ >vÏ»Í?ÿûiq!ï³äç_X_z¿ú~ZLý†ýVú]ý{ç§O—b—–þ/Þoàê‹oÀ pHYs¯¯^‘ tEXtSoftwareGPL Ghostscript 10.00.0·Ü0qsIDAThåZÝ™¤*=s¿›‚)°!Ð!0!Ð!`v‚† !h¹J«ø3ö|½3»wÏ“-PTA‚*ûøkðÏw+ð…xµ­i÷bû¨ªþdÏkàå¶^eòZ»h®è.é¹¾Y:ËWÂÚçÇäíË:<©’lQužP'žäK÷µ*ìÓcŠþOзf|RHpìÅ/—úàí•qø"³g‡Üïåaû-X£ ÿY‹©ñîÄƘM¡»B õ?œz©;øg‡øäxH©sÈœ{°#WÆ\^x¹Qä+mÕúD'· ˜ù€àÖ“$]^Éð”Y¶®·*ÊÌ‘„~”hùïjëûÓó9¿C@Üß;H½Õµ¿ØTO¤îŠöX´@¥L¤6·Aò5QU¥ÂûBèß!F$è;™Y7)‡v"[ï«™MubŸHŠasòà/­vtrÓÁ2éQΆm9ðeµÜ{?Lc– &ždn<ÙÂ’,5¹ðr%×>Ü&ûFÃYÚ1LùÞ2üÌÄ®XÜp5h†Ò¤ö$38’µåÒË-üê̹=JÞ$I³Ñ§ZÄÍ~¢6:CµÉ Áw  K€ @ŸW¨ª÷8&ækÕin…®€–K}‡Õê’¡u€R KÕ¤z3а+PÉùûVË ªµ ,0ÒRâZLÊMìÃÊñp1ZëËÑÿ–N[¢$ëDÉD%Ji?¾\ ~D‹z÷”[!í²±\m6{<Ö›Ü!ld«Óä!ábh¸æý}bH¯<3Çé(²!Ô-I>f? ë–Ö.~%'ë³ukP/òá´€æÝï.F.6¹Ö_Œ„*‹IN7žø)ü–Ÿ^¦W2ð6ï´Þ嚘Þ#úÁÖN ‹!M™î# Z_‚û÷L ãLi^b@¶”D¸3nà>Ó Úr É,1£/ÌrŽr~ pmæÃÞÔ$ Išl~7‹D®QÓç{8·ä§‹ÉÝÊé¹FÆM8ØtJ¡9UÓr÷©9ˆ+18¦z$ýEÜÓ4ºB¸‡®‹¡áW‰t/ ¯òÔ.’‚bvý‰§X`Øa¸¼ˆ{¹³>+z‘E»È´½rä¹$Z„E‘rÝè=grLœˆà¸Û±“Œnð$Im–=Êè÷Ž¸ÑV/ÌÜíg„;DYÒ!˜bŽ¯Ï¹žR”€Xí==圱"b¶>Uœ°u aŠîöpûáŽñÞt× osmo-gmr: include/osmocom/gmr1/l1/conv.h Source File
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
conv.h
Go to the documentation of this file.
1/* GMR-1 convolutional coding */
2/* See GMR-1 05.003 (ETSI TS 101 376-5-3 V3.3.1) - Section 4.4 */
3
4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
5 * All Rights Reserved
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU Affero General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU Affero General Public License for more details.
16 *
17 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21#ifndef __OSMO_GMR1_L1_CONV_H__
22#define __OSMO_GMR1_L1_CONV_H__
23
33#include <osmocom/core/conv.h>
34
35
36extern const struct osmo_conv_code gmr1_conv_k5_12;
37extern const struct osmo_conv_code gmr1_conv_k5_13;
38extern const struct osmo_conv_code gmr1_conv_k5_14;
39extern const struct osmo_conv_code gmr1_conv_k5_15;
40extern const struct osmo_conv_code gmr1_conv_k6_14;
41extern const struct osmo_conv_code gmr1_conv_k9_12;
42extern const struct osmo_conv_code gmr1_conv_k9_13;
43extern const struct osmo_conv_code gmr1_conv_k9_14;
44extern const struct osmo_conv_code gmr1_conv_tch3;
45
46
49#endif /* __OSMO_GMR1_L1_CONV_H__ */
const struct osmo_conv_code gmr1_conv_k9_14
GMR-1 constraint length 9, rate 1/4 convolutional code.
Definition: conv.c:508
const struct osmo_conv_code gmr1_conv_tch3
GMR-1 TCH3 speech tail-biting convolutional code.
Definition: conv.c:564
const struct osmo_conv_code gmr1_conv_k9_13
GMR-1 constraint length 9, rate 1/3 convolutional code.
Definition: conv.c:421
const struct osmo_conv_code gmr1_conv_k6_14
GMR-1 constraint length 6, rate 1/4 convolutional code.
Definition: conv.c:250
const struct osmo_conv_code gmr1_conv_k5_15
GMR-1 constraint length 5, rate 1/5 convolutional code.
Definition: conv.c:219
const struct osmo_conv_code gmr1_conv_k9_12
GMR-1 constraint length 9, rate 1/2 convolutional code.
Definition: conv.c:335
const struct osmo_conv_code gmr1_conv_k5_14
GMR-1 constraint length 5, rate 1/4 convolutional code.
Definition: conv.c:191
const struct osmo_conv_code gmr1_conv_k5_12
GMR-1 constraint length 5, rate 1/2 convolutional code.
Definition: conv.c:138
const struct osmo_conv_code gmr1_conv_k5_13
GMR-1 constraint length 5, rate 1/3 convolutional code.
Definition: conv.c:164
html/tone_8c.js0000644000175000017500000000016414753471227012714 0ustar buildbuildvar tone_8c = [ [ "ambe_decode_tone", "group__codec__private.html#gaf5856df7a0f19188013d6c610a2b7f60", null ] ];html/dir_7cd3553532f49ae70e5af4297e6b9642.js0000644000175000017500000000061614753471227016455 0ustar buildbuildvar dir_7cd3553532f49ae70e5af4297e6b9642 = [ [ "codec", "dir_9c8ef0db9d7395bd53b81b89d3ccbcb1.html", "dir_9c8ef0db9d7395bd53b81b89d3ccbcb1" ], [ "l1", "dir_85d85a69dfdae3508530486760177413.html", "dir_85d85a69dfdae3508530486760177413" ], [ "sdr", "dir_49d8fb8de83b72576102f4228b661ee1.html", "dir_49d8fb8de83b72576102f4228b661ee1" ], [ "gsmtap.h", "gsmtap_8h.html", "gsmtap_8h" ] ];html/group__xch__dc12.html0000644000175000017500000002403214753471227015012 0ustar buildbuild osmo-gmr: xCH over DC12 channel coding
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Files

file  xch_dc12.h
 Osmocom GMR-1 xCH over DC12 channel coding header.
 
file  xch_dc12.c
 Osmocom GMR-1 xCH over DC12 channel coding implementation.
 

Functions

int gmr1_xch_dc12_encode (ubit_t *bits_e, const uint8_t *l2)
 Stateless GMR-1 xCH over DC12 channel coder. More...
 
int gmr1_xch_dc12_decode (uint8_t *l2, const sbit_t *bits_e, int *conv_rv)
 Stateless GMR-1 xCH over DC12 channel decoder. More...
 

Detailed Description

Function Documentation

◆ gmr1_xch_dc12_decode()

int gmr1_xch_dc12_decode ( uint8_t *  l2,
const sbit_t *  bits_e,
int *  conv_rv 
)

Stateless GMR-1 xCH over DC12 channel decoder.

Parameters
[out]l2L2 packet data
[in]bits_eData bits of a burst
[out]conv_rvReturn of the convolutional decode (can be NULL)
Returns
0 if CRC check pass, any other value for fail.

L2 data is 24 byte long, and bits_e is a 432 soft bit array unmapped from a burst.

References gmr1_deinterleave_intra(), and gmr1_scramble_sbit().

◆ gmr1_xch_dc12_encode()

void gmr1_xch_dc12_encode ( ubit_t *  bits_e,
const uint8_t *  l2 
)

Stateless GMR-1 xCH over DC12 channel coder.

Parameters
[out]bits_eData bits of a burst
[in]l2L2 packet data

L2 data is 24 byte long, and bits_e is a 432 hard bit array to be mapped on a burst.

References gmr1_crc16.

html/structgmr1__interleaver.js0000644000175000017500000000057414753471227016234 0ustar buildbuildvar structgmr1__interleaver = [ [ "bits_cpp", "structgmr1__interleaver.html#a92db6403eef66c2dff2686364d477262", null ], [ "K", "structgmr1__interleaver.html#a793392c3a32d1573c12038856d7a2fa9", null ], [ "N", "structgmr1__interleaver.html#aefd05afb6eef22e5c8c3f92014d9c6cf", null ], [ "n", "structgmr1__interleaver.html#a8cd1c80e472019802886819ebecd9042", null ] ];html/crc_8h_source.html0000644000175000017500000002504114753471227014434 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/crc.h Source File
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
crc.h
Go to the documentation of this file.
1/* GMR-1 CRC */
2/* See GMR-1 05.003 (ETSI TS 101 376-5-3 V1.2.1) - Section 4.3 */
3
4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
5 * All Rights Reserved
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU Affero General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU Affero General Public License for more details.
16 *
17 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21#ifndef __OSMO_GMR1_L1_CRC_H__
22#define __OSMO_GMR1_L1_CRC_H__
23
33#include <osmocom/core/crcgen.h>
34
35
36extern const struct osmo_crc8gen_code gmr1_crc8;
37extern const struct osmo_crc16gen_code gmr1_crc12;
38extern const struct osmo_crc16gen_code gmr1_crc16;
39
40
43#endif /* __OSMO_GMR1_L1_CRC_H__ */
const struct osmo_crc16gen_code gmr1_crc12
GMR-1 CRC12 g12(D) = D12 + D11 + D3 + D2 + D + 1.
Definition: crc.c:48
const struct osmo_crc8gen_code gmr1_crc8
GMR-1 CRC8 g8(D) = D8 + D7 + D4 + D3 + D + 1.
Definition: crc.c:38
const struct osmo_crc16gen_code gmr1_crc16
GMR-1 CRC16 g16(D) = D16 + D12 + D5 + 1.
Definition: crc.c:58
html/sdr_2defs_8h.html0000644000175000017500000001326514753471227014165 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/sdr/defs.h File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 SDR global definitions. More...

Go to the source code of this file.

Macros

#define GMR1_SYM_RATE   23400
 Base GMR-1 symbol rate.
 
#define DEBUG_SIGNAL(n, v)   do { } while (0)
 

Detailed Description

Osmocom GMR-1 SDR global definitions.

html/fcch_8h.html0000644000175000017500000002573414753471227013221 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/sdr/fcch.h File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 FCCH bursts header. More...

Go to the source code of this file.

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.
 

Detailed Description

Osmocom GMR-1 FCCH bursts header.

html/tch9_8h.html0000644000175000017500000002026514753471227013157 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/tch9.h File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 TCH9 channel coding header. More...

#include <stdint.h>
#include <osmocom/core/bits.h>

Go to the source code of this file.

Enumerations

enum  gmr1_tch9_mode { GMR1_TCH9_2k4 , GMR1_TCH9_4k8 , GMR1_TCH9_9k6 , GMR1_TCH9_MAX }
 TCH9 possible data rates. More...
 

Functions

void gmr1_tch9_encode (ubit_t *bits_e, const uint8_t *l2, enum gmr1_tch9_mode mode, const ubit_t *bits_sacch, const ubit_t *bits_status, const ubit_t *ciph, struct gmr1_interleaver *il)
 GMR-1 TCH9 channel coder. More...
 
void gmr1_tch9_decode (uint8_t *l2, sbit_t *bits_sacch, sbit_t *bits_status, const sbit_t *bits_e, enum gmr1_tch9_mode mode, const ubit_t *ciph, struct gmr1_interleaver *il, int *conv_rv)
 GMR-1 TCH9 channel decoder. More...
 

Detailed Description

Osmocom GMR-1 TCH9 channel coding header.

html/ccch_8h.html0000644000175000017500000001467214753471227013215 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/ccch.h File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 CCCH (PCH/AGCH) channel coding header. More...

#include <stdint.h>
#include <osmocom/core/bits.h>

Go to the source code of this file.

Functions

void gmr1_ccch_encode (ubit_t *bits_e, const uint8_t *l2)
 Stateless GMR-1 CCCH channel coder. More...
 
int gmr1_ccch_decode (uint8_t *l2, const sbit_t *bits_e, int *conv_rv)
 Stateless GMR-1 CCCH channel decoder. More...
 

Detailed Description

Osmocom GMR-1 CCCH (PCH/AGCH) channel coding header.

html/form_1.png0000644000175000017500000000737214753471227012720 0ustar buildbuild‰PNG  IHDRú-¢¼)vøiCCPdefault_gray.iccH‰•y4ÔýÇ¿¿ßoöÅ23ÆÎXÇ’5Ë ËÛX²¯©hì[Œ]JI*”’d+‘E›%m’RQhF¡<¥E*•GÝ{νçÞÓ¹çÜ×9Ÿó~ýñýœó9ï¾à+Á2°±qI|{¶¿ŸüÁ¼Äx¶››3ø-ŸFô3ïkýþÍoA‡„&ò–³ky6óâùI@VË®–šÿÓ#–¶!ú—gþôh/βïGúçîO”Øü¤È°Ð4†çÆ°¤Ô`~(#ÑžœÎàr8 7þưȘÐÿãºÿARhZÒÏälŒOçG†G$1þë }]=øW§¼~uÑÿ³çŸð’ù)ÿ0Ô¯nr@ ¨- Œ°¶À¸/àÖˆ±€RA&ØrA>Ø‚rPjAhgA;¸®› Ü#à €IðÌO`‚ ,D†¨$$©@š>Ä‚, [Èò€ü¡ (Šƒ’¡Lh;”AåP5Ô.@× ÛÐô‡f ÷ÐWI0 –…Ua˜³a'Ø ^ ‡Ã pœï…Káø$Ü_ƒûàX¿†ç€:¢€h!,„ƒ¸"HÂG¶ yH Rƒ4#H/r ³ÈEE1PZ(3”ÊÅC% ¶  P娨6Tê>j5‡ú&£eКhS4í‡G§¢sÑ%è:t+úz=‰þ„Á`è&Æã€ñÇDa6a 0‡1-˜.Ìf3Åb%±šXs¬+6›„ÍÅ–aOb¯b‡±“ØÏ8"N§³ÃàâpÙ¸\#î n7…[Ä‹àUð¦xW|>_ˆ¯Åwâñ“øE‚(I0'x¢Û¥„f ÂSÂ"‘¨H4!º#‰[‰¥ÄÓÄ[Äqâ…¤AâIɤ½¤zRéé™LV%[‘ÈIä½äòuòsòg!ª¶W(D(K¨B¨MhXè0^XE˜-¼N8C¸Døœð ð¬^DU„#,²E¤Bä‚Șȼ(UTOÔU4V´@´Qô¶è4KQ¥ØRB(9”c”ë” *BU¢r¨<êvj-õu’†¡1i\Z-ŸvŠ6@›£ˆˆùˆ¥‰Uˆ]к*K¡ÒÏÒGé_ÅeÅÙâ¡â»Å›Å‡Å$¤%¬$B%ò$Z$F$¾J2$m%£%÷K¶K>“BIiH¹K¥J‘º!5+M“6“æIçIŸ•~,ËhÈxÈl’9&Ó/3/+'k//[&{]vVŽ.g%%W,wEnFž*o!)_,UþCŒÁfÄ0J=Œ9…d…j……EE¦¢·b¶b‹â3%‚K)L©X©[iNY^ÙE9S¹Iù± ^…¥¡rH¥WeA•©ê«ºSµ]uš)Áä23˜M̧jd5Kµµµêu–z´úaõ{°†¡F„F…Æ &¬i¤©yXshz…ÉŠ¸5+Æ´HZl­­&­qmº¶³v¶v»öeý:½:?t uctkuŸèQôõ²õ:õÞëkèóô+ô¬$¯´[™µ²cå;MƒPƒ# ©†.†; » ¿ñšfŒ•ƒŒ+ÇX4–«€uËmbm’erÉä‹©‘i’éYÓ·fZfÑffÓ«˜«BWÕ®š0W46¯6X0,‚,ŽZ,,ƒ-k,_X)Y…XÕYM±ÕÙQì“ì7ÖºÖ|ëVëŽ)g3§Ë±±·É³°¥ØzÛ–Û>·S´ ·k²›³7´ßdßå€vprØï0Æ•åò¸ Ü9GcÇÍŽ=N$'O§r§ÎÎ|çNØÅÑå€ËÓÕ*«ãV·»W®ë×gnL··‹îw7÷ ÷—z™½žTÏõžžŸ¼¬½ ½žx«y'{wûûú4ø,øÚøù ütü6ûõùKùGúw`|êæ×Ø®9¸f2Ð007pt-smÚÚÛë¤ÖŬ»¼^x}ðúsAè ß Æ oÁ®Á5Áó¸*7Ìñ8¼C¼×!V!Å!3¡æ¡E¡SaæaEaÓáæáÂg",#J"f#9‘å‘ª¢¢]£ë£—b|cZbq±A±â(qÑq=å6¦mŠ×ŒÏ$˜&L˜ã;ñë¡Äµ‰I´åª?Y-yGòxŠEJEÊçTŸÔsi¢iqiýéé»Ó§2ì2ŽoBmâmêÎTÈÜ–9¾™½¹z ´eÖî,¥¬œ¬É­ö[Ol#l‹Þv7[7»(ûãvßí9²9[s&vØïhÊÊåçŽí4ÛYµ µ+r×Àî•»ËvÿÈ É»“¯›_’ÿ­€WpgÞžÒ=K{Ãöهٷot¿åþE¢EE\´3ŠóŠ?\ðv‰AIÕ!¡äC‚RçÒŽ2å²}eßÊ#ÊG*¬+Z*e*wW.9<|ÄêHs•lU~Õ×£‘GVÛW·Õ¨Ö”ÃK9ö²Ö§¶÷8ëxCT]~Ý÷ú¸zÁ = Æ 2…MpSrÓÌÉÀ“÷NÙœêhÖj®n¡·äŸ§“O¿:tfô¬ÓÙîs¬sÍçUÎW¶R[óÚ ¶ô¶¹öˆvA‡ÇÐÇ Ýf­µ/Ö_R¸TqYìrá•œ+KW3®ÎwÅwÍ^ ¿6ѽ¾ûÉu¿ëzÜ{n8ݸuÓîæõ^vïÕ[æ·.Ý6½}áëN{ŸQ_[¿aë]û­FmƒÆƒ÷Lîu­º2l9|í¾Íý›¸úFV z> < y8ý(æÑ»Ç)Ÿl}Š~š÷LäYÉs™ç5¨ÿÑ"0\·ïáùâÉoâõŸ‰~›ÌyI~Y2%?Õ0­?}iÆnæÞ«5¯&_Ç¿^œÍýKô¯Ê7joοµzÛ?ç77ùŽÿné}ÁÉõ >vÏ»Í?ÿûiq!ï³äç_X_z¿ú~ZLý†ýVú]ý{ç§O—b—–þ/Þoàê‹oÀ pHYs¯¯^‘ tEXtSoftwareGPL Ghostscript 10.00.0·Ü0q|IDAThåZÛ•¬*Ýs×M€‚)pB C`B CÀè4; ACÐ0„º>|÷º=3gýÓ*TIAÕ†*ûƒð·âŸïÀ÷áݦ§í›_0¡,»“=ï5€·›~çÉ{_0¢¾£½¥çúš´·Þ ­/‹dÍ•ÞE5\ˆ‚¨AµÛyB•8"z몗¹¾*’w—ÜD>ú„`@‚}—ŸB‚Ë€w2ü›‹Ïg±ßá1Z' û]±©íiÙšL:—m.úu¿¬x«Ã[¸‹.9(¤µÆÚ)”2AÓÕ®pJ½Ót)Ot²óøTGÜ ‘Ùb|ć+£©ñ<шXÔX"‚ío 4ôïÂ1º_þúµhxB@÷ܽ{¶àrµkwÓ©œ¡Í›Õ‚¥àA=$ÜQ–bzœ  ûj– k¹Ñœ÷͹Y®ºš½éĪ­€õk— ÞÕHK–¯{£áÅìnZ´Ï¡k8TÓ¨ýÓÄeÊ5ÐDTH¢ $_:|“ìu jÐ--#X 4ƒOw†mªu£Ó.¥< EDÒ‘%¢JSn±¹=®’ò&j1ü~H’z­O9§än”ð²k"ˆÚøŠæ§Ú„¨!t p‡(óñpÉPDZ^¶»Ñy„6‡äÁðû¹l“¾±‡fm*¼½C·9J>{b1+¬\¢ÓÀÀ à÷Üà¨c‡–ö£óvÅଋ(ˆªDðD$BH7>Ëzâ©6Ïe™f\‡ÅrÕÆkZß4,tdº•DûÑyéÆ8µsy—("'K³-OÄR5DD~0;¡¾„ƒŸˆO“a–ãè"‡O ¨?ÝftF¸ùKndl-N»›Ò³@©1SÛ{Íoæ‚þƒŠXùGÐi{ç}ò‰Bê˜t½é-ëûæ}¢5‹Î#ØèžåâàÞ}Ñ««0KcëOLôªAE¬ü,ž~å6_‚ˆÈ$jp”YÚTÌ6Ü+ãÔ;¼S)""e‚døŠÉá+Tä²­Xƶ‰¡™ŽTÁÐ*,ô?Z!{ÒOýi]ª^£ø’õ^,Æ<ª»±gš¦ @› Ï©+ø\rºéÀ‘nü"1oC-@îOeeÜ6G¿.LQ˜<8¾1]‡˜NîŽÑÃË3h-Ù:¸T#%¹¤P[¿LÌu|I®‘‚‹Už³ÈÓh‚‚–èRÑ`çŒóE›s4W«¢ü†MN¾NËDQBDDR…=Šè~] ì`ºcj"³è¼„¢ ‹Ñ4µŸdrJºFÄFlÁðy´³ˆä™ZÆX¥a*oSˆÌ¢ó>ëöž|Á±»;–(YÄ&â¹Þ5B^ÎK5B-m»Þ^Ê—*>dfѹFI½Rx³Úxwv[ì:4k³8…%g6•01'¹ŠÞ¶ŒßiôƱgˈh“ŠÆA)U„z†­ÆZíÇÚ°h›3çï7Ý]`ô¬_O}°F>ìOC.{œ˜Ë—v"¥ˆ@{•ß·šå Ž%DD?š_q9 pââle×¹˜ˆ4çMðÞk ­ÕJŽ²ŠñN]©^I±†àYÓõ,0ÖžZs9Úû­ÿ4^;zXî赊¬8_dV§èö‹áxEDQEöluæôŽŸÝë3»ì×"Íú1ͧãdufÌ°^ ´Ÿ‚Àô“Õ™†DD…|¥‚õs8üÉêL’¥]R¶âàóØOGð¹±ÿlò!Ž«#%’/úpþ>«.à µÞuŽ²ÏƒÅGæî·È¾e$_ŽØôî&/ÿàEdz÷©Å¹RìŸð›[—<¾i,_Œ`Õ»[O_ÿÛÇ€áou )ÍýEø‹ÿ(ú—ÌP8"ÀxIEND®B`‚html/interleave_8h_source.html0000644000175000017500000004320714753471227016027 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/interleave.h Source File
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
interleave.h
Go to the documentation of this file.
1/* GMR-1 interleaving */
2/* See GMR-1 05.003 (ETSI TS 101 376-5-3 V1.2.1) - Section 4.8 */
3
4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
5 * All Rights Reserved
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU Affero General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU Affero General Public License for more details.
16 *
17 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21#ifndef __OSMO_GMR1_L1_INTERLEAVE_H__
22#define __OSMO_GMR1_L1_INTERLEAVE_H__
23
34/* Intra burst interleaving */
35
36void gmr1_interleave_intra(void *out, const void *in, int N);
37void gmr1_deinterleave_intra(void *out, const void *in, int N);
38
39
40/* Inter burst interleaving */
41
44{
45 int N;
46 int K;
47 int n;
48 uint8_t *bits_cpp;
49};
50
51int gmr1_interleaver_init(struct gmr1_interleaver *il, int N, int K);
54 void *bits_epp, void *bits_ep);
56 void *bits_ep, void *bits_epp);
57
58
61#endif /* __OSMO_GMR1_L1_INTERLEAVE_H__ */
void gmr1_deinterleave_intra(void *out, const void *in, int N)
GMR-1 intra burst de-interleaver.
Definition: interleave.c:74
void gmr1_deinterleave_inter(struct gmr1_interleaver *il, void *bits_ep, void *bits_epp)
GMR-1 inter burst de-interleaver.
Definition: interleave.c:168
int gmr1_interleaver_init(struct gmr1_interleaver *il, int N, int K)
GMR-1 inter burst interleaver initializer.
Definition: interleave.c:96
void gmr1_interleaver_fini(struct gmr1_interleaver *il)
GMR-1 inter burst interleaver cleanup.
Definition: interleave.c:121
void gmr1_interleave_inter(struct gmr1_interleaver *il, void *bits_epp, void *bits_ep)
GMR-1 inter burst interleaver.
Definition: interleave.c:136
void gmr1_interleave_intra(void *out, const void *in, int N)
GMR-1 intra burst inteleaver.
Definition: interleave.c:49
GMR1 inter-burst (de)interleaver state.
Definition: interleave.h:44
int K
Interleaver width.
Definition: interleave.h:46
int n
Current burst number.
Definition: interleave.h:47
uint8_t * bits_cpp
c'' bit state storage
Definition: interleave.h:48
int N
Interleaver depth.
Definition: interleave.h:45
html/group__l1__chan.html0000644000175000017500000001461014753471227014725 0ustar buildbuild osmo-gmr: Channel coder / decoders
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
html/index.html0000644000175000017500000000733514753471227013023 0ustar buildbuild osmo-gmr: Main Page
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
osmo-gmr Documentation
html/dkab_8h.js0000644000175000017500000000015114753471227012651 0ustar buildbuildvar dkab_8h = [ [ "gmr1_dkab_demod", "group__dkab.html#ga889c2d34cc3eee7b12b8d88023504e0f", null ] ];html/resize.js0000644000175000017500000001261614753471227012663 0ustar buildbuild/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ function initResizable() { var cookie_namespace = 'doxygen'; var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight; function readCookie(cookie) { var myCookie = cookie_namespace+"_"+cookie+"="; if (document.cookie) { var index = document.cookie.indexOf(myCookie); if (index != -1) { var valStart = index + myCookie.length; var valEnd = document.cookie.indexOf(";", valStart); if (valEnd == -1) { valEnd = document.cookie.length; } var val = document.cookie.substring(valStart, valEnd); return val; } } return 0; } function writeCookie(cookie, val, expiration) { if (val==undefined) return; if (expiration == null) { var date = new Date(); date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week expiration = date.toGMTString(); } document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; SameSite=Lax; expires=" + expiration+"; path=/"; } function resizeWidth() { var windowWidth = $(window).width() + "px"; var sidenavWidth = $(sidenav).outerWidth(); content.css({marginLeft:parseInt(sidenavWidth)+"px"}); writeCookie('width',sidenavWidth-barWidth, null); } function restoreWidth(navWidth) { var windowWidth = $(window).width() + "px"; content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); sidenav.css({width:navWidth + "px"}); } function resizeHeight() { var headerHeight = header.outerHeight(); var footerHeight = footer.outerHeight(); var windowHeight = $(window).height(); var contentHeight,navtreeHeight,sideNavHeight; if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ contentHeight = windowHeight - headerHeight - footerHeight; navtreeHeight = contentHeight; sideNavHeight = contentHeight; } else if (page_layout==1) { /* DISABLE_INDEX=YES */ contentHeight = windowHeight - footerHeight; navtreeHeight = windowHeight - headerHeight; sideNavHeight = windowHeight; } content.css({height:contentHeight + "px"}); navtree.css({height:navtreeHeight + "px"}); sidenav.css({height:sideNavHeight + "px"}); var width=$(window).width(); if (width!=collapsedWidth) { if (width=desktop_vp) { if (!collapsed) { collapseExpand(); } } else if (width>desktop_vp && collapsedWidth0) { restoreWidth(0); collapsed=true; } else { var width = readCookie('width'); if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); } collapsed=false; } } header = $("#top"); sidenav = $("#side-nav"); content = $("#doc-content"); navtree = $("#nav-tree"); footer = $("#nav-path"); $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); $(sidenav).resizable({ minWidth: 0 }); $(window).resize(function() { resizeHeight(); }); var device = navigator.userAgent.toLowerCase(); var touch_device = device.match(/(iphone|ipod|ipad|android)/); if (touch_device) { /* wider split bar for touch only devices */ $(sidenav).css({ paddingRight:'20px' }); $('.ui-resizable-e').css({ width:'20px' }); $('#nav-sync').css({ right:'34px' }); barWidth=20; } var width = readCookie('width'); if (width) { restoreWidth(width); } else { resizeWidth(); } resizeHeight(); var url = location.href; var i=url.indexOf("#"); if (i>=0) window.location.hash=url.substr(i); var _preventDefault = function(evt) { evt.preventDefault(); }; $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); $(".ui-resizable-handle").dblclick(collapseExpand); $(window).on('load',resizeHeight); } /* @license-end */ html/math_8c.js0000644000175000017500000000107714753471227012704 0ustar buildbuildvar math_8c = [ [ "ambe_fdct", "group__codec__private.html#ga83063f9ee0607fe61bacc11bd42d059f", null ], [ "ambe_fdft_fc", "group__codec__private.html#ga9d9e8b11e46bf3ccf14d22be87f1c719", null ], [ "ambe_idct", "group__codec__private.html#ga0d2a102900214d2ebdab56bf85024cf2", null ], [ "ambe_idft_cf", "group__codec__private.html#gadbfdcbf5186cc1c567112e4edc29a1a1", null ], [ "cosf_fast", "group__codec__private.html#ga62bc434f8483f0198f86b388ab30ced6", null ], [ "sinf_fast", "group__codec__private.html#gade8a6e65fb5db286835ffd82b0f61dd1", null ] ];html/group__ccch.js0000644000175000017500000000042714753471227013632 0ustar buildbuildvar group__ccch = [ [ "ccch.h", "ccch_8h.html", null ], [ "ccch.c", "ccch_8c.html", null ], [ "gmr1_ccch_decode", "group__ccch.html#ga2773482e1dd8ea377c2191771f85db11", null ], [ "gmr1_ccch_encode", "group__ccch.html#gaf77ce531802993a1d64bd773215b5d7d", null ] ];html/crc_8h.html0000644000175000017500000001500614753471227013054 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/crc.h File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 CRC header. More...

#include <osmocom/core/crcgen.h>

Go to the source code of this file.

Variables

const struct osmo_crc8gen_code gmr1_crc8
 GMR-1 CRC8 g8(D) = D8 + D7 + D4 + D3 + D + 1.
 
const struct osmo_crc16gen_code gmr1_crc12
 GMR-1 CRC12 g12(D) = D12 + D11 + D3 + D2 + D + 1.
 
const struct osmo_crc16gen_code gmr1_crc16
 GMR-1 CRC16 g16(D) = D16 + D12 + D5 + 1.
 

Detailed Description

Osmocom GMR-1 CRC header.

html/globals_g.html0000644000175000017500000006500714753471227013645 0ustar buildbuild osmo-gmr: Globals
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:

- g -

html/ccch_8h.js0000644000175000017500000000030314753471227012647 0ustar buildbuildvar ccch_8h = [ [ "gmr1_ccch_decode", "group__ccch.html#ga2773482e1dd8ea377c2191771f85db11", null ], [ "gmr1_ccch_encode", "group__ccch.html#gaf77ce531802993a1d64bd773215b5d7d", null ] ];html/dkab_8c.html0000644000175000017500000001562114753471227013204 0ustar buildbuild osmo-gmr: src/sdr/dkab.c File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 DKABs bursts implementation. More...

#include <complex.h>
#include <math.h>
#include <errno.h>
#include <stdint.h>
#include <stdio.h>
#include <osmocom/core/bits.h>
#include <osmocom/dsp/cxvec.h>
#include <osmocom/dsp/cxvec_math.h>
#include <osmocom/gmr1/sdr/defs.h>
#include <osmocom/gmr1/sdr/dkab.h>

Macros

#define DKAB_PWR_RATIO_THRESHOLD   10.0f
 Ratio between peak power and valley power for DKAB detection.
 

Functions

int gmr1_dkab_demod (struct osmo_cxvec *burst_in, int sps, float freq_shift, int p, sbit_t *ebits, float *toa_p)
 All-in-one finding and demodulation of DKAB bursts. More...
 

Detailed Description

Osmocom GMR-1 DKABs bursts implementation.

html/globals_dup.js0000644000175000017500000000036114753471227013647 0ustar buildbuildvar globals_dup = [ [ "a", "globals.html", null ], [ "c", "globals_c.html", null ], [ "d", "globals_d.html", null ], [ "g", "globals_g.html", null ], [ "m", "globals_m.html", null ], [ "s", "globals_s.html", null ] ];html/nb_8h.js0000644000175000017500000000156314753471227012357 0ustar buildbuildvar nb_8h = [ [ "gmr1_bcch_burst", "group__nb.html#gadb3e07f31ce31edf73ee29cb97ecb27c", null ], [ "gmr1_dc12_burst", "group__nb.html#ga4dfb2061d86695f527d93c228f7e80cf", null ], [ "gmr1_dc2_burst", "group__nb.html#gab4f338ae4b7c91d61f4a1fbd5ddb22db", null ], [ "gmr1_dc6_burst", "group__nb.html#gabcff92c63441c414f2b700abed3ff5e5", null ], [ "gmr1_nt3_facch_burst", "group__nb.html#gad65ff6135513219615583bf2652905a0", null ], [ "gmr1_nt3_speech_burst", "group__nb.html#ga5b7005d048a228c2fb1689772ec2a02b", null ], [ "gmr1_nt6_burst", "group__nb.html#ga0f6b872aea487079770276792b11f024", null ], [ "gmr1_nt9_burst", "group__nb.html#gace85abbda202a99f17800dfe3a449ad8", null ], [ "gmr1_rach_burst", "group__nb.html#ga6efdbfdc0a900c0da7e1ae35157d9d75", null ], [ "gmr1_sdcch_burst", "group__nb.html#ga8e081ca45a3c928dc97cc56ceb445542", null ] ];html/tone_8c.html0000644000175000017500000001456014753471227013251 0ustar buildbuild osmo-gmr: src/codec/tone.c File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 AMBE vocoder tone frames handling. More...

#include <errno.h>
#include <math.h>
#include <stdint.h>
#include <string.h>
#include "private.h"

Data Structures

struct  tone_desc
 Structure describing a dual-frequency tone. More...
 

Functions

int ambe_decode_tone (struct ambe_decoder *dec, int16_t *audio, int N, const uint8_t *frame)
 Decodes an AMBE tone frame. More...
 

Detailed Description

Osmocom GMR-1 AMBE vocoder tone frames handling.

html/files_dup.js0000644000175000017500000000033714753471227013331 0ustar buildbuildvar files_dup = [ [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ], [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] ];html/conv_8c.js0000644000175000017500000000145014753471227012713 0ustar buildbuildvar conv_8c = [ [ "gmr1_conv_k5_12", "group__conv.html#gad9e7ba139d8b88117361ce2c069b3ac1", null ], [ "gmr1_conv_k5_13", "group__conv.html#gae46510aefce08ef3158790186b00a404", null ], [ "gmr1_conv_k5_14", "group__conv.html#gad0dab5050f72518f948d10b78ee21b2d", null ], [ "gmr1_conv_k5_15", "group__conv.html#ga70b8d0dc1e500ff3a1986315e6551a27", null ], [ "gmr1_conv_k6_14", "group__conv.html#ga6e7732168c9ecb6ad0b14ed8001c4588", null ], [ "gmr1_conv_k9_12", "group__conv.html#gaa9043b27694a4c4438b18f7cd60950cd", null ], [ "gmr1_conv_k9_13", "group__conv.html#ga647389b5ecf36c9770b4ecfd57c11fe0", null ], [ "gmr1_conv_k9_14", "group__conv.html#ga0aaad5b737b08f90b906fbd369df8ccc", null ], [ "gmr1_conv_tch3", "group__conv.html#ga622aa845f1ef3258a750b0da2df27d13", null ] ];html/dynsections.js0000644000175000017500000001054414753471226013721 0ustar buildbuild/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ function toggleVisibility(linkObj) { var base = $(linkObj).attr('id'); var summary = $('#'+base+'-summary'); var content = $('#'+base+'-content'); var trigger = $('#'+base+'-trigger'); var src=$(trigger).attr('src'); if (content.is(':visible')===true) { content.hide(); summary.show(); $(linkObj).addClass('closed').removeClass('opened'); $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); } else { content.show(); summary.hide(); $(linkObj).removeClass('closed').addClass('opened'); $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); } return false; } function updateStripes() { $('table.directory tr'). removeClass('even').filter(':visible:even').addClass('even'); } function toggleLevel(level) { $('table.directory tr').each(function() { var l = this.id.split('_').length-1; var i = $('#img'+this.id.substring(3)); var a = $('#arr'+this.id.substring(3)); if (l osmo-gmr: src/l1/bcch.c File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 BCCH channel coding implementation. More...

#include <stdint.h>
#include <string.h>
#include <osmocom/core/bits.h>
#include <osmocom/core/conv.h>
#include <osmocom/core/crc16gen.h>
#include <osmocom/gmr1/l1/conv.h>
#include <osmocom/gmr1/l1/crc.h>
#include <osmocom/gmr1/l1/interleave.h>
#include <osmocom/gmr1/l1/scramb.h>

Functions

void gmr1_bcch_encode (ubit_t *bits_e, const uint8_t *l2)
 Stateless GMR-1 BCCH channel coder. More...
 
int gmr1_bcch_decode (uint8_t *l2, const sbit_t *bits_e, int *conv_rv)
 Stateless GMR-1 BCCH channel decoder. More...
 

Detailed Description

Osmocom GMR-1 BCCH channel coding implementation.

html/scramb_8c.html0000644000175000017500000001527014753471227013552 0ustar buildbuild osmo-gmr: src/l1/scramb.c File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 scrambling implementation. More...

#include <stdint.h>
#include <osmocom/core/bits.h>

Macros

#define GMR1_SCRAMBLE_REG_INIT   0x4d4b
 

Functions

void gmr1_scramble_sbit (sbit_t *out, const sbit_t *in, int len)
 Scrambles/Unscrambles a softbit vector. More...
 
void gmr1_scramble_ubit (ubit_t *out, const ubit_t *in, int len)
 Scrambles/Unscrambles an unpacked hard bit vector. More...
 

Detailed Description

Osmocom GMR-1 scrambling implementation.

html/tab_b.png0000644000175000017500000000025114753471226012570 0ustar buildbuild‰PNG  IHDR$ÇÇ[pIDATxíÝMƒ EáÇ»ÐÔ¸¸u`âÀ´V0РÆ}:t]DÁ²s¿ä®‚¶ýËu¥ø|’xùî½À>ÿ1»& mÄ8ÜSÙÑxÜLÀUûšÞ²ÄiE–ŠåOs„¢’nxàÒêÓKN²~jIEND®B`‚html/dir_de2ed61ed77189ce3af8769c70dd3919.js0000644000175000017500000000132014753471227016701 0ustar buildbuildvar dir_de2ed61ed77189ce3af8769c70dd3919 = [ [ "a5.c", "a5_8c.html", "a5_8c" ], [ "bcch.c", "bcch_8c.html", "bcch_8c" ], [ "ccch.c", "ccch_8c.html", "ccch_8c" ], [ "conv.c", "conv_8c.html", "conv_8c" ], [ "crc.c", "crc_8c.html", "crc_8c" ], [ "facch3.c", "facch3_8c.html", "facch3_8c" ], [ "facch9.c", "facch9_8c.html", "facch9_8c" ], [ "interleave.c", "interleave_8c.html", "interleave_8c" ], [ "punct.c", "punct_8c.html", "punct_8c" ], [ "rach.c", "rach_8c.html", "rach_8c" ], [ "scramb.c", "scramb_8c.html", "scramb_8c" ], [ "tch3.c", "tch3_8c.html", "tch3_8c" ], [ "tch9.c", "tch9_8c.html", "tch9_8c" ], [ "xch_dc12.c", "xch__dc12_8c.html", "xch__dc12_8c" ] ];html/facch9_8h.js0000644000175000017500000000031514753471227013107 0ustar buildbuildvar facch9_8h = [ [ "gmr1_facch9_decode", "group__facch9.html#ga42d1d80d7a1bfab7d92ad0d28d8f87c6", null ], [ "gmr1_facch9_encode", "group__facch9.html#ga8956be2f31fd48853350bc092fd1797f", null ] ];html/gsmtap_8c.js0000644000175000017500000000016114753471227013237 0ustar buildbuildvar gsmtap_8c = [ [ "gmr1_gsmtap_makemsg", "group__gsmtap.html#gaade0b34d5438103fb3376d6061b0193d", null ] ];html/structambe__subframe.js0000644000175000017500000000154414753471227015554 0ustar buildbuildvar structambe__subframe = [ [ "f0", "structambe__subframe.html#a62d2a8d54cc973e32e85d9c4735bde1f", null ], [ "f0log", "structambe__subframe.html#a0bd7338941b5a9e13bb9cab48ae41bd6", null ], [ "gain", "structambe__subframe.html#acc926ec6fc259108308513851263c010", null ], [ "L", "structambe__subframe.html#a3ebdc823451ce217e2956ff0eac7442f", null ], [ "Lb", "structambe__subframe.html#af7ffd521bfff7156ae33ba43a893b163", null ], [ "Ml", "structambe__subframe.html#a4a3fa891e79797c2458f0ec01dbe9019", null ], [ "Mlog", "structambe__subframe.html#a56d7cadaf4f6be52366ba2f26983483b", null ], [ "v_uv", "structambe__subframe.html#a760edde0daaceb15506a57379e7ad265", null ], [ "Vl", "structambe__subframe.html#a0fb6c5eab0c8af4a8106e7df6b964702", null ], [ "w0", "structambe__subframe.html#a21676a64ab0ab902b4802d8a347aa227", null ] ];html/tab_a.png0000644000175000017500000000021614753471226012570 0ustar buildbuild‰PNG  IHDR$ÇÇ[UIDATxíK €0C'o¤(Šˆ[Žà%Üxÿ#Ù©­ç ùÁöó¦W¦e# 3t I 3+¼øEã~\D½9¯Ûàè’wM·¿öÿ}Yõ_êA4Yžã}IEND®B`‚html/modules.html0000644000175000017500000002325114753471227013357 0ustar buildbuild osmo-gmr: Modules
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
html/sync_off.png0000644000175000017500000000152514753471226013334 0ustar buildbuild‰PNG  IHDRàw=øIDATxíÝKhTWÀñÿä1I&3™8M¦Iš™†I3Ú©b$cÌ I1V1±-(Tö±±Ð.* t!‚K[¥Ä¥ˆ„¨´f£`l(øl©"Y”¤6ÆgÌTú}·sgîܹ ±d{8?æ̹÷;çÜuíÚ`:!±F¬¢BäŠ?Å°Äm'yÊÅ>ÑlU¯½üý‰è_‹?€Œê ]€Y(ŠNñ±8fý1°Öqún-eâ¨øtºmâÈ Ó0}b›ù%·©µ×Œ®=Ÿ0´³?Š1sŸ‹0€¯8À‘;_ ‹W|%\ Zð— >舽ln¨p©.aÇ{ )t;Ú b nŸš¯›65°¢¡2çÅÔ?Žž>Oдàuönm¤¢Ì`×­Z¬WjC~>‘Ö¾0+á {{©fÝ×Mæ·æÅ•ìÙ¼˜` Ý›%uA6´½ÅÆö¨Á,]k¢ÄW¼™u±›]‹ˆ7§¯iòh€ ¶¶¬ÏÖu1 ló —Ҷ̺–:ÞÍ\ÄcãÏxøhR²Êè‡Qt$¿ß§¨ ª fdºü<4BÿÙ[•f¸d7=.Mé9/—éªÃëù/ÿO Üaàò}€,‘j?Ÿõ.5Úšm?œÿŸ®ŽXÿ2¬#¸d píæ(£?cÛú¼!½›a1¥Þ—ŽòØ©ܾ7dÔK:‚ùÒ‰ì)Ê3‚Ü™àÌà]€,±H€µ+køöäu<|`·LhC7¹ÔeÍ Ÿ×Ÿ˜tÜ‹ óH$^2%l.êaeÐäýE”ÌÉ|ÅÜìî‰Ýsä }¸ýDû^hzé~ðR›¦Ã¡¿]|#ü¯@×—Ö‡[k¹–<|š(Ç*€Ý¹dÇtMé:Ýñø«Ø,êÅû¢]”' øXÓ_nò¡Æ|Øý /c§fžâOIEND®B`‚html/tch3_8h.js0000644000175000017500000000030314753471227012610 0ustar buildbuildvar tch3_8h = [ [ "gmr1_tch3_decode", "group__tch3.html#gaab4229c82b06539cdad3d91d1bd05c32", null ], [ "gmr1_tch3_encode", "group__tch3.html#ga3c7e3f769459eff23c1308eefb565ab9", null ] ];html/group__a5.html0000644000175000017500000004221114753471227013564 0ustar buildbuild osmo-gmr: A5 ciphering algorithm
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
A5 ciphering algorithm

Files

file  a5.h
 Osmocom GMR-1 A5 ciphering algorithm header.
 
file  a5.c
 Osmocom GMR-1 A5 ciphering algorithm implementation.
 

Macros

#define A51_R1_LEN   19
 
#define A51_R2_LEN   22
 
#define A51_R3_LEN   23
 
#define A51_R4_LEN   17
 
#define A51_R1_MASK   ((1<<A51_R1_LEN)-1)
 
#define A51_R2_MASK   ((1<<A51_R2_LEN)-1)
 
#define A51_R3_MASK   ((1<<A51_R3_LEN)-1)
 
#define A51_R4_MASK   ((1<<A51_R4_LEN)-1)
 
#define A51_R1_TAPS   0x072000 /* x^19 + x^18 + x^17 + x^14 + 1 */
 
#define A51_R2_TAPS   0x311000 /* x^22 + x^21 + x^17 + x^13 + 1 */
 
#define A51_R3_TAPS   0x660000 /* x^23 + x^22 + x^19 + x^18 + 1 */
 
#define A51_R4_TAPS   0x013100 /* x^17 + x^14 + x^13 + x^9 + 1 */
 
#define A51_BIT(r, n)   (1 << n)
 

Functions

void gmr1_a5 (int n, uint8_t *key, uint32_t fn, int nbits, ubit_t *dl, ubit_t *ul)
 Main method to generate a A5/x cipher stream. More...
 
void gmr1_a5_1 (uint8_t *key, uint32_t fn, int nbits, ubit_t *dl, ubit_t *ul)
 Generate a GMR-1 A5/1 cipher stream. More...
 

Detailed Description

Function Documentation

◆ gmr1_a5()

void gmr1_a5 ( int  n,
uint8_t *  key,
uint32_t  fn,
int  nbits,
ubit_t *  dl,
ubit_t *  ul 
)

Main method to generate a A5/x cipher stream.

Parameters
[in]nWhich A5/x method to use
[in]key8 byte array for the key (as received from the SIM)
[in]fnFrame number
[in]nbitsHow many bits to generate
[out]dlPointer to array of ubits to return Downlink cipher stream
[out]ulPointer to array of ubits to return Uplink cipher stream

Currently only A5/0 and A5/1. Either (or both) of dl/ul can be NULL if not needed.

References gmr1_a5_1().

◆ gmr1_a5_1()

void gmr1_a5_1 ( uint8_t *  key,
uint32_t  fn,
int  nbits,
ubit_t *  dl,
ubit_t *  ul 
)

Generate a GMR-1 A5/1 cipher stream.

Parameters
[in]key8 byte array for the key (as received from the SIM)
[in]fnFrame number
[in]nbitsHow many bits to generate
[out]dlPointer to array of ubits to return Downlink cipher stream
[out]ulPointer to array of ubits to return Uplink cipher stream

Either (or both) of dl/ul can be NULL if not needed.

Referenced by gmr1_a5().

html/group__interleave.js0000644000175000017500000000220614753471227015065 0ustar buildbuildvar group__interleave = [ [ "interleave.h", "interleave_8h.html", null ], [ "interleave.c", "interleave_8c.html", null ], [ "gmr1_interleaver", "structgmr1__interleaver.html", [ [ "bits_cpp", "structgmr1__interleaver.html#a92db6403eef66c2dff2686364d477262", null ], [ "K", "structgmr1__interleaver.html#a793392c3a32d1573c12038856d7a2fa9", null ], [ "N", "structgmr1__interleaver.html#aefd05afb6eef22e5c8c3f92014d9c6cf", null ], [ "n", "structgmr1__interleaver.html#a8cd1c80e472019802886819ebecd9042", null ] ] ], [ "gmr1_deinterleave_inter", "group__interleave.html#ga342cfe4226b3a193e5944e6a8322d491", null ], [ "gmr1_deinterleave_intra", "group__interleave.html#ga101a51679fedd2c835225608f77ae3d8", null ], [ "gmr1_interleave_inter", "group__interleave.html#gac392346badff10ae6a2abfe8b1e96e32", null ], [ "gmr1_interleave_intra", "group__interleave.html#gaf54dd588068ba4225f190c091352bbc9", null ], [ "gmr1_interleaver_fini", "group__interleave.html#gaaa98a1ab608c6146e9c8974687c75ed7", null ], [ "gmr1_interleaver_init", "group__interleave.html#ga78f48b3938dcda4c06b4d2da3eaedcaf", null ] ];html/private_8h.html0000644000175000017500000006744014753471227013770 0ustar buildbuild osmo-gmr: src/codec/private.h File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 AMBE vocoder private header. More...

#include <stdint.h>

Go to the source code of this file.

Data Structures

struct  ambe_raw_params
 AMBE encoded frame raw parameters. More...
 
struct  ambe_subframe
 AMBE subframe parameters. More...
 
struct  ambe_synth
 AMBE synthesizer state. More...
 
struct  ambe_decoder
 AMBE decoder state. More...
 

Macros

#define AMBE_RATE   8000
 AMBE sample rate (Hz)
 
#define M_PIf   (3.141592653589793f)
 Value of pi as a float.
 

Enumerations

enum  ambe_frame_type { AMBE_SPEECH , AMBE_SILENCE , AMBE_TONE }
 AMBE possible frame types. More...
 

Functions

void ambe_decode_init (struct ambe_decoder *dec)
 Initializes decoder state. More...
 
void ambe_decode_fini (struct ambe_decoder *dec)
 Release all resources associated with a decoder. More...
 
int ambe_decode_frame (struct ambe_decoder *dec, int16_t *audio, int N, const uint8_t *frame, int bad)
 Decodes an AMBE frame to audio. More...
 
int ambe_decode_dtx (struct ambe_decoder *dec, int16_t *audio, int N)
 Generates audio for DTX period. More...
 
void ambe_frame_unpack_raw (struct ambe_raw_params *rp, const uint8_t *frame)
 Unpack a frame into its raw encoded parameters. More...
 
void ambe_frame_decode_params (struct ambe_subframe *sf, struct ambe_subframe *sf_prev, struct ambe_raw_params *rp)
 Decodes the speech parameters for both subframes from raw params. More...
 
void ambe_subframe_expand (struct ambe_subframe *sf)
 Expands the decoded subframe params to prepare for synthesis. More...
 
float cosf_fast (float angle)
 Fast Cosinus approximation using a simple table. More...
 
float sinf_fast (float angle)
 Fast Sinus approximation using a simple table. More...
 
void ambe_fdct (float *out, float *in, int N, int M)
 Forward Discrete Cosine Transform (fDCT) More...
 
void ambe_idct (float *out, float *in, int N, int M)
 Inverse Discrete Cosine Transform (iDCT) More...
 
void ambe_fdft_fc (float *out_i, float *out_q, float *in, int N, int M)
 Forward Discrete Fourrier Transform (float->complex) More...
 
void ambe_idft_cf (float *out, float *in_i, float *in_q, int N, int M)
 Inverse Discret Fourrier Transform (complex->float) More...
 
void ambe_synth_init (struct ambe_synth *synth)
 Initialized Synthesizer state. More...
 
void ambe_synth_enhance (struct ambe_synth *synth, struct ambe_subframe *sf)
 Apply the spectral magnitude enhancement on the subframe. More...
 
void ambe_synth_audio (struct ambe_synth *synth, int16_t *audio, struct ambe_subframe *sf, struct ambe_subframe *sf_prev)
 Generate audio for a given subframe. More...
 
int ambe_decode_tone (struct ambe_decoder *dec, int16_t *audio, int N, const uint8_t *frame)
 Decodes an AMBE tone frame. More...
 

Variables

const uint8_t ambe_hpg_tbl [48][4]
 Number of harmonics per group for a given L (starts at L=9)
 
const float ambe_gain_tbl [256][2]
 Gain (subframe 0, subframe 1)
 
const uint16_t ambe_v_uv_tbl [64]
 V/UV decisions (subframe 0 = low byte. MSBs = low freq)
 
const float ambe_prba12_tbl [128][2]
 PRBA[1:2].
 
const float ambe_prba34_tbl [64][2]
 PRBA[3:4].
 
const float ambe_prba57_tbl [128][3]
 PRBA[5:7].
 
const float ambe_hoc0_tbl [128][4]
 HOC for 1st frequency block.
 
const float ambe_hoc1_tbl [64][4]
 HOC for 2nd frequency block.
 
const float ambe_hoc2_tbl [64][4]
 HOC for 3rd frequency block.
 
const float ambe_hoc3_tbl [64][4]
 HOC for last frequency block.
 
const float ambe_sf0_interp_tbl [4]
 Interpolation ratios for subframe 0 magnitude prediction.
 
const float ambe_sf0_perr14_tbl [64][4]
 Prediction Error [1:4] for subframe 0.
 
const float ambe_sf0_perr58_tbl [32][4]
 Prediction Error [5:8] for subframe 0.
 

Detailed Description

Osmocom GMR-1 AMBE vocoder private header.

html/rach_8c.js0000644000175000017500000000030314753471227012657 0ustar buildbuildvar rach_8c = [ [ "gmr1_rach_decode", "group__rach.html#ga4e3f0c261d715b618e188dd5d2a14391", null ], [ "gmr1_rach_encode", "group__rach.html#gaa55acd1e1d248c2b34a97af389c69e90", null ] ];html/dkab_8h_source.html0000644000175000017500000002532314753471227014571 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/sdr/dkab.h Source File
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
dkab.h
Go to the documentation of this file.
1/* GMR-1 SDR - DKABs bursts */
2/* See GMR-1 05.004 (ETSI TS 101 376-5-4 V1.2.1) - Section 6.1
3 * GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.6 */
4
5/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
6 * All Rights Reserved
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU Affero General Public License as published by
10 * the Free Software Foundation; either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU Affero General Public License for more details.
17 *
18 * You should have received a copy of the GNU Affero General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22#ifndef __OSMO_GMR1_SDR_DKAB_H__
23#define __OSMO_GMR1_SDR_DKAB_H__
24
34#include <stdint.h>
35#include <osmocom/core/bits.h>
36#include <osmocom/dsp/cxvec.h>
37
38#define GMR1_DKAB_SYMS (39*3)
39
40int
41gmr1_dkab_demod(struct osmo_cxvec *burst_in, int sps, float freq_shift, int p,
42 sbit_t *ebits, float *toa_p);
43
44
47#endif /* __OSMO_GMR1_SDR_DKAB_H__ */
int gmr1_dkab_demod(struct osmo_cxvec *burst_in, int sps, float freq_shift, int p, sbit_t *ebits, float *toa_p)
All-in-one finding and demodulation of DKAB bursts.
Definition: dkab.c:188
html/frame_8c.html0000644000175000017500000001643314753471227013377 0ustar buildbuild osmo-gmr: src/codec/frame.c File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 AMBE speech parameters to/from frame. More...

#include <math.h>
#include <stdint.h>
#include <string.h>
#include "private.h"

Functions

void ambe_frame_unpack_raw (struct ambe_raw_params *rp, const uint8_t *frame)
 Unpack a frame into its raw encoded parameters. More...
 
void ambe_frame_decode_params (struct ambe_subframe *sf, struct ambe_subframe *sf_prev, struct ambe_raw_params *rp)
 Decodes the speech parameters for both subframes from raw params. More...
 
void ambe_subframe_expand (struct ambe_subframe *sf)
 Expands the decoded subframe params to prepare for synthesis. More...
 

Detailed Description

Osmocom GMR-1 AMBE speech parameters to/from frame.

html/structambe__decoder.html0000644000175000017500000001573214753471227015711 0ustar buildbuild osmo-gmr: ambe_decoder Struct Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
ambe_decoder Struct Reference

AMBE decoder state. More...

#include <private.h>

Data Fields

float tone_phase_f1
 Phase frequency 1 for tone frames.
 
float tone_phase_f2
 Phase frequency 2 for tone frames.
 
struct ambe_subframe sf_prev
 Previous subframe.
 
struct ambe_synth synth
 Synthesizer state.
 

Detailed Description

AMBE decoder state.


The documentation for this struct was generated from the following file:
html/facch9_8h.html0000644000175000017500000001510314753471227013440 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/facch9.h File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 FACCH9 channel coding header. More...

#include <stdint.h>
#include <osmocom/core/bits.h>

Go to the source code of this file.

Functions

void gmr1_facch9_encode (ubit_t *bits_e, const uint8_t *l2, const ubit_t *bits_sacch, const ubit_t *bits_status, const ubit_t *ciph)
 Stateless GMR-1 FACCH9 channel coder. More...
 
int gmr1_facch9_decode (uint8_t *l2, sbit_t *bits_sacch, sbit_t *bits_status, const sbit_t *bits_e, const ubit_t *ciph, int *conv_rv)
 Stateless GMR-1 FACCH9 channel decoder. More...
 

Detailed Description

Osmocom GMR-1 FACCH9 channel coding header.

html/dir_68267d1309a1af8e8297ef4c3efbcdba.js0000644000175000017500000000061614753471227017026 0ustar buildbuildvar dir_68267d1309a1af8e8297ef4c3efbcdba = [ [ "codec", "dir_b28332b7c67bf5065126b2ebef06f8f3.html", "dir_b28332b7c67bf5065126b2ebef06f8f3" ], [ "l1", "dir_de2ed61ed77189ce3af8769c70dd3919.html", "dir_de2ed61ed77189ce3af8769c70dd3919" ], [ "sdr", "dir_8d7fe3e74f1d95a733af486e7566cca0.html", "dir_8d7fe3e74f1d95a733af486e7566cca0" ], [ "gsmtap.c", "gsmtap_8c.html", "gsmtap_8c" ] ];html/scramb_8h_source.html0000644000175000017500000002402214753471227015132 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/scramb.h Source File
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
scramb.h
Go to the documentation of this file.
1/* GMR-1 scrambling */
2/* See GMR-1 05.003 (ETSI TS 101 376-5-3 V1.2.1) - Section 4.9 */
3
4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
5 * All Rights Reserved
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU Affero General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU Affero General Public License for more details.
16 *
17 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21#ifndef __OSMO_GMR1_L1_SCRAMB_H__
22#define __OSMO_GMR1_L1_SCRAMB_H__
23
33#include <osmocom/core/bits.h>
34
35
36void gmr1_scramble_sbit(sbit_t *out, const sbit_t *in, int len);
37void gmr1_scramble_ubit(ubit_t *out, const ubit_t *in, int len);
38
39
42#endif /* __OSMO_GMR1_L1_SCRAMB_H__ */
void gmr1_scramble_ubit(ubit_t *out, const ubit_t *in, int len)
Scrambles/Unscrambles an unpacked hard bit vector.
Definition: scramb.c:84
void gmr1_scramble_sbit(sbit_t *out, const sbit_t *in, int len)
Scrambles/Unscrambles a softbit vector.
Definition: scramb.c:64
html/modules.js0000644000175000017500000000044614753471227013030 0ustar buildbuildvar modules = [ [ "AMBE vocoder", "group__codec.html", "group__codec" ], [ "GMR-1 GSMtap helpers", "group__gsmtap.html", "group__gsmtap" ], [ "GMR-1 Layer 1 library", "group__l1.html", "group__l1" ], [ "GMR-1 Software Defined Radio library", "group__sdr.html", "group__sdr" ] ];html/group__dkab.js0000644000175000017500000000043614753471227013633 0ustar buildbuildvar group__dkab = [ [ "dkab.h", "dkab_8h.html", null ], [ "dkab.c", "dkab_8c.html", null ], [ "DKAB_PWR_RATIO_THRESHOLD", "group__dkab.html#gadd49926a91b1c3ab8c0b96d2fdd7c6e4", null ], [ "gmr1_dkab_demod", "group__dkab.html#ga889c2d34cc3eee7b12b8d88023504e0f", null ] ];html/structgmr1__pi4cxpsk__burst.html0000644000175000017500000002150514753471227017364 0ustar buildbuild osmo-gmr: gmr1_pi4cxpsk_burst Struct Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

pi4-CxPSK Burst format description More...

#include <pi4cxpsk.h>

Data Fields

struct gmr1_pi4cxpsk_modulationmod
 Modulation scheme

 
int guard_pre
 Beginning guard period.
 
int guard_post
 End guard period

 
int len
 Total len with guard.
 
int ebits
 Number of encoded bits.
 
struct gmr1_pi4cxpsk_syncsync [GMR1_MAX_SYNC]
 Sync sequences.
 
struct gmr1_pi4cxpsk_datadata
 Data chunks.
 

Detailed Description

pi4-CxPSK Burst format description


The documentation for this struct was generated from the following file:
html/group__tch9.js0000644000175000017500000000153014753471227013575 0ustar buildbuildvar group__tch9 = [ [ "tch9.h", "tch9_8h.html", null ], [ "tch9.c", "tch9_8c.html", null ], [ "gmr1_tch9_mode", "group__tch9.html#ga744d45ed21afcffb14ab1dada9843d45", [ [ "GMR1_TCH9_2k4", "group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45a762585e2143ebf69e4d98938fa20e648", null ], [ "GMR1_TCH9_4k8", "group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45a31ed2ba33bf118dc2d973f7c1db264a2", null ], [ "GMR1_TCH9_9k6", "group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45a47478138efd91b1307e767a674836a18", null ], [ "GMR1_TCH9_MAX", "group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45aada4ebb2664386d79975327200434f3d", null ] ] ], [ "gmr1_tch9_decode", "group__tch9.html#ga1dc40fc5c18b5f082de485e701db9af4", null ], [ "gmr1_tch9_encode", "group__tch9.html#ga7a8227b3a47497d84316568637b9d732", null ] ];html/group__codec.js0000644000175000017500000000131114753471227014000 0ustar buildbuildvar group__codec = [ [ "AMBE vocoder - internal API", "group__codec__private.html", "group__codec__private" ], [ "codec.h", "codec_8h.html", null ], [ "codec.c", "codec_8c.html", null ], [ "gmr1_codec", "structgmr1__codec.html", [ [ "dec", "structgmr1__codec.html#a6c9cdb292f878bd711308d13b6cb0730", null ] ] ], [ "gmr1_codec_alloc", "group__codec.html#ga34e0de595c6498ae39695d5909bec094", null ], [ "gmr1_codec_decode_dtx", "group__codec.html#ga23fe43b3790482c7f99d3aa33940f54f", null ], [ "gmr1_codec_decode_frame", "group__codec.html#ga81d71b9b1e226a344a896d926ad4537a", null ], [ "gmr1_codec_release", "group__codec.html#gad1c2b9c16672bcd48076af0b0f162557", null ] ];html/rach_8h.html0000644000175000017500000001471414753471227013227 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/rach.h File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 RACH channel coding header. More...

#include <stdint.h>
#include <osmocom/core/bits.h>

Go to the source code of this file.

Functions

void gmr1_rach_encode (ubit_t *bits_e, const uint8_t *rach, uint8_t sb_mask)
 Stateless GMR-1 RACH channel coder. More...
 
int gmr1_rach_decode (uint8_t *rach, const sbit_t *bits_e, uint8_t sb_mask, int *conv_rv, int *crc_rv)
 Stateless GMR-1 RACH channel decoder. More...
 

Detailed Description

Osmocom GMR-1 RACH channel coding header.

html/rach_8h.js0000644000175000017500000000030314753471227012664 0ustar buildbuildvar rach_8h = [ [ "gmr1_rach_decode", "group__rach.html#ga4e3f0c261d715b618e188dd5d2a14391", null ], [ "gmr1_rach_encode", "group__rach.html#gaa55acd1e1d248c2b34a97af389c69e90", null ] ];html/tch3_8c.html0000644000175000017500000001530314753471227013141 0ustar buildbuild osmo-gmr: src/l1/tch3.c File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 TCH3 channel coding implementation. More...

#include <stdint.h>
#include <string.h>
#include <osmocom/core/bits.h>
#include <osmocom/core/conv.h>
#include <osmocom/gmr1/l1/conv.h>
#include <osmocom/gmr1/l1/punct.h>
#include <osmocom/gmr1/l1/scramb.h>

Functions

void gmr1_tch3_encode (ubit_t *bits_e, const uint8_t *frame0, const uint8_t *frame1, const ubit_t *bits_s, const ubit_t *ciph, int m)
 Stateless GMR-1 TCH3 channel coder. More...
 
void gmr1_tch3_decode (uint8_t *frame0, uint8_t *frame1, ubit_t *bits_s, const sbit_t *bits_e, const ubit_t *ciph, int m, int *conv0_rv, int *conv1_rv)
 Stateless GMR-1 TCH3 channel decoder. More...
 

Detailed Description

Osmocom GMR-1 TCH3 channel coding implementation.

html/fcch_8h.js0000644000175000017500000000121214753471227012652 0ustar buildbuildvar fcch_8h = [ [ "gmr1_fcch_fine", "group__fcch.html#ga2b1c8329ac1c8cae7414d2ca4619f17f", null ], [ "gmr1_fcch_rough", "group__fcch.html#ga14e6b77fe05bf2ef7600204ba6818a47", null ], [ "gmr1_fcch_rough_multi", "group__fcch.html#ga822f719832670df978c08008c2e7a3df", null ], [ "gmr1_fcch_snr", "group__fcch.html#ga614cf46fe5e868c8b573491736487fba", null ], [ "gmr1_fcch3_lband_burst", "group__fcch.html#ga6598bb31a09a997eaa079838babc2f25", null ], [ "gmr1_fcch3_sband_burst", "group__fcch.html#ga20cea569bd20f7c7a3b14420c9301b1b", null ], [ "gmr1_fcch_burst", "group__fcch.html#ga09ca32ce9f0bbe6d6d5b7977aae2758f", null ] ];html/tabs.css0000644000175000017500000002334514753471226012467 0ustar buildbuild.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#666;-webkit-transition:all 0.25s;transition:all 0.25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px, 1px, 1px, 1px)}#main-menu-state:not(:checked)~#main-menu{display:none}#main-menu-state:checked~#main-menu{display:block}@media (min-width: 768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked)~#main-menu{display:block}}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} html/gsmtap_8c.html0000644000175000017500000001305314753471227013573 0ustar buildbuild osmo-gmr: src/gsmtap.c File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
gsmtap.c File Reference

Osmocom GMR-1 GSMtap helpers header. More...

#include <stdint.h>
#include <string.h>
#include <arpa/inet.h>
#include <osmocom/core/msgb.h>
#include <osmocom/core/gsmtap.h>
#include <osmocom/gmr1/gsmtap.h>

Functions

struct msgb * gmr1_gsmtap_makemsg (uint8_t chan_type, uint32_t fn, uint8_t tn, const uint8_t *l2, int len)
 Helper to build GSM tap message with GMR-1 payload. More...
 

Detailed Description

Osmocom GMR-1 GSMtap helpers header.

html/facch3_8h.html0000644000175000017500000001501314753471227013432 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/facch3.h File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 FACCH3 channel coding header. More...

#include <stdint.h>
#include <osmocom/core/bits.h>

Go to the source code of this file.

Functions

void gmr1_facch3_encode (ubit_t *bits_e, const uint8_t *l2, const ubit_t *bits_s, const ubit_t *ciph)
 Stateless GMR-1 FACCH3 channel coder. More...
 
int gmr1_facch3_decode (uint8_t *l2, ubit_t *bits_s, const sbit_t *bits_e, const ubit_t *ciph, int *conv_rv)
 Stateless GMR-1 FACCH3 channel decoder. More...
 

Detailed Description

Osmocom GMR-1 FACCH3 channel coding header.

html/structambe__decoder.js0000644000175000017500000000060314753471227015350 0ustar buildbuildvar structambe__decoder = [ [ "sf_prev", "structambe__decoder.html#a7ef287c9fa9a4f4303b8bcf14aa08a10", null ], [ "synth", "structambe__decoder.html#ae182cfa94b3c3f970de386a8d671bbaa", null ], [ "tone_phase_f1", "structambe__decoder.html#aa30d43006212f987798af28cefe6a644", null ], [ "tone_phase_f2", "structambe__decoder.html#ada92b6d6ccd98bea21a205f9f3a91521", null ] ];html/group__fcch.html0000644000175000017500000006734014753471227014174 0ustar buildbuild osmo-gmr: FCCH bursts
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.

html/punct_8h.html0000644000175000017500000010720314753471227013437 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/punct.h File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 puncturing header. More...

#include <stdint.h>

Go to the source code of this file.

Data Structures

struct  gmr1_puncturer
 structure describing a puncturing code More...
 

Functions

int gmr1_puncturer_generate (struct osmo_conv_code *code, const struct gmr1_puncturer *punct_pre, const struct gmr1_puncturer *punct_main, const struct gmr1_puncturer *punct_post, int repeat)
 Generate convolutional code puncturing array for a osmo_conv_code. More...
 

Variables

const struct gmr1_puncturer gmr1_punct_k5_12_P23
 GMR-1 P(2;3) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_P25
 GMR-1 P(2;5) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_Ps25
 GMR-1 Ps(2;5) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_P311
 GMR-1 P(3;11) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_P412
 GMR-1 P(4;12) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_Ps412
 GMR-1 Ps(4;12) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_P12
 GMR-1 P(1;2) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_Ps12
 GMR-1 Ps(1;2) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_A
 GMR-1 A puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_B
 GMR-1 B puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_C
 GMR-1 C puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_D
 GMR-1 D puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_E
 GMR-1 E puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_P38
 GMR-1 P(3;8) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_P26
 GMR-1 P(2;6) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_P37
 GMR-1 P(3;7) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_13_P16
 GMR-1 P(1;6) puncturing code for the K=5 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_13_P25
 GMR-1 P(2;5) puncturing code for the K=5 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_13_P15
 GMR-1 P(1;5) puncturing code for the K=5 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_13_Ps15
 GMR-1 Ps(1;5) puncturing code for the K=5 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_13_P78
 GMR-1 P(7;8) puncturing code for the K=5 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_15_P23
 GMR-1 P(2;3) puncturing code for the K=5 rate 1/5 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_15_P53
 GMR-1 P(5;3) puncturing code for the K=5 rate 1/5 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_15_Ps53
 GMR-1 Ps(5;3) puncturing code for the K=5 rate 1/5 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P23
 GMR-1 P(2;3) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P410
 GMR-1 P(4;10) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P512
 GMR-1 P(5;12) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P116
 GMR-1 P(1;16) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P148
 GMR-1 P(1;48) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P184
 GMR-1 P(1;84) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P1152
 GMR-1 P(1;152) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P45
 GMR-1 P(4;5) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P245
 GMR-1 P2(4;5) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P13
 GMR-1 P(1;3) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P47
 GMR-1 P(4;7) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P34
 GMR-1 P(3;4) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P17
 GMR-1 P(1;7) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P19
 GMR-1 P(1;9) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P26
 GMR-1 P(2;6) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P110
 GMR-1 P(1;10) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P14
 GMR-1 P(1;4) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P45
 GMR-1 P(4;5) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P234
 GMR-1 P2(3;4) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k6_14_P45
 GMR-1 P(4;5) puncturing code for the K=6 rate 1/4 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_14_P148
 GMR-1 P(14;8) puncturing code for the K=9 rate 1/4 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_14_P65
 GMR-1 P(6;5) puncturing code for the K=9 rate 1/4 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_13_P12
 GMR-1 P(1;2) puncturing code for the K=9 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_13_P1213
 GMR-1 P(12;13) puncturing code for the K=9 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_13_P44
 GMR-1 P(4;4) puncturing code for the K=9 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_13_P33
 GMR-1 P(3;3) puncturing code for the K=9 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_13_P65
 GMR-1 P(6;5) puncturing code for the K=9 rate 1/3 conv coder.
 

Detailed Description

Osmocom GMR-1 puncturing header.

html/files.html0000644000175000017500000005351114753471227013013 0ustar buildbuild osmo-gmr: File List
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
File List
Here is a list of all documented files with brief descriptions:
[detail level 12345]
  include
  osmocom
  gmr1
  codec
 codec.hOsmocom GMR-1 AMBE vocoder header
  l1
 a5.hOsmocom GMR-1 A5 ciphering algorithm header
 bcch.hOsmocom GMR-1 BCCH channel coding header
 ccch.hOsmocom GMR-1 CCCH (PCH/AGCH) channel coding header
 conv.hOsmocom GMR-1 convolutional coding header
 crc.hOsmocom GMR-1 CRC header
 defs.hOsmocom GMR-1 L1 global definitions
 facch3.hOsmocom GMR-1 FACCH3 channel coding header
 facch9.hOsmocom GMR-1 FACCH9 channel coding header
 interleave.hOsmocom GMR-1 interleaving header
 punct.hOsmocom GMR-1 puncturing header
 rach.hOsmocom GMR-1 RACH channel coding header
 scramb.hOsmocom GMR-1 scrambling header
 tch3.hOsmocom GMR-1 TCH3 channel coding header
 tch9.hOsmocom GMR-1 TCH9 channel coding header
 xch_dc12.hOsmocom GMR-1 xCH over DC12 channel coding header
  sdr
 defs.hOsmocom GMR-1 SDR global definitions
 dkab.hOsmocom GMR-1 DKABs bursts header
 fcch.hOsmocom GMR-1 FCCH bursts header
 nb.hOsmocom GMR-1 Normal bursts header
 pi4cxpsk.hOsmocom GMR-1 pi2-CBPSK, pi4-CBPSK and pi4-CQPSK modulation support header
 gsmtap.hOsmocom GMR-1 GSMtap helpers header
  src
  codec
 ambe.cOsmocom GMR-1 AMBE internal API
 codec.cOsmocom GMR-1 AMBE vocoder public API implementation
 frame.cOsmocom GMR-1 AMBE speech parameters to/from frame
 math.cOsmocom GMR-1 AMBE vocoder math functions
 private.hOsmocom GMR-1 AMBE vocoder private header
 synth.cOsmocom GMR-1 AMBE vocoder speech synthesis
 tables.cOsmocom GMR-1 AMBE vocoder tables
 tone.cOsmocom GMR-1 AMBE vocoder tone frames handling
  l1
 a5.cOsmocom GMR-1 A5 ciphering algorithm implementation
 bcch.cOsmocom GMR-1 BCCH channel coding implementation
 ccch.cOsmocom GMR-1 CCCH (PCH/AGCH) channel coding implementation
 conv.cOsmocom GMR-1 convolutional coding implementation
 crc.cOsmocom GMR-1 CRC implementation
 facch3.cOsmocom GMR-1 FACCH3 channel coding implementation
 facch9.cOsmocom GMR-1 FACCH9 channel coding implementation
 interleave.cOsmocom GMR-1 interleaving implementation
 punct.cOsmocom GMR-1 puncturing implementation
 rach.cOsmocom GMR-1 RACH channel coding implementation
 scramb.cOsmocom GMR-1 scrambling implementation
 tch3.cOsmocom GMR-1 TCH3 channel coding implementation
 tch9.cOsmocom GMR-1 TCH9 channel coding implementation
 xch_dc12.cOsmocom GMR-1 xCH over DC12 channel coding implementation
  sdr
 dkab.cOsmocom GMR-1 DKABs bursts implementation
 fcch.cOsmocom GMR-1 FCCH bursts implementation
 nb.cOsmocom GMR-1 Normal bursts descriptions
 pi4cxpsk.cOsmocom GMR-1 pi2-CBPSK, pi4-CBPSK and pi4-CQPSK modulation support implementation
 gsmtap.cOsmocom GMR-1 GSMtap helpers header
html/group__bcch.html0000644000175000017500000002357414753471227014171 0ustar buildbuild osmo-gmr: BCCH channel coding
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Files

file  bcch.h
 Osmocom GMR-1 BCCH channel coding header.
 
file  bcch.c
 Osmocom GMR-1 BCCH channel coding implementation.
 

Functions

void gmr1_bcch_encode (ubit_t *bits_e, const uint8_t *l2)
 Stateless GMR-1 BCCH channel coder. More...
 
int gmr1_bcch_decode (uint8_t *l2, const sbit_t *bits_e, int *conv_rv)
 Stateless GMR-1 BCCH channel decoder. More...
 

Detailed Description

Function Documentation

◆ gmr1_bcch_decode()

int gmr1_bcch_decode ( uint8_t *  l2,
const sbit_t *  bits_e,
int *  conv_rv 
)

Stateless GMR-1 BCCH channel decoder.

Parameters
[out]l2L2 packet data
[in]bits_eData bits of a burst
[out]conv_rvReturn of the convolutional decode (can be NULL)
Returns
0 if CRC check pass, any other value for fail.

L2 data is 24 byte long, and bits_e is a 424 soft bit array unmapped from a burst.

References gmr1_deinterleave_intra(), and gmr1_scramble_sbit().

◆ gmr1_bcch_encode()

void gmr1_bcch_encode ( ubit_t *  bits_e,
const uint8_t *  l2 
)

Stateless GMR-1 BCCH channel coder.

Parameters
[out]bits_eData bits of a burst
[in]l2L2 packet data

L2 data is 24 byte long, and bits_e is a 424 hard bit array to be mapped on a burst.

References gmr1_crc16.

html/tables_8c.js0000644000175000017500000000241214753471227013217 0ustar buildbuildvar tables_8c = [ [ "ambe_gain_tbl", "group__codec__private.html#ga8782e94d4fc86ce45ea714a7316eecd4", null ], [ "ambe_hoc0_tbl", "group__codec__private.html#gac6bf71952dbf30ef32fb5cc91681d8d6", null ], [ "ambe_hoc1_tbl", "group__codec__private.html#ga934c67cf74ce3f2944594eab3958139c", null ], [ "ambe_hoc2_tbl", "group__codec__private.html#ga8992a95357c191374ac100f76f8b42fe", null ], [ "ambe_hoc3_tbl", "group__codec__private.html#ga616fdb311356f3430ade8e24d45479b4", null ], [ "ambe_hpg_tbl", "group__codec__private.html#gafaaf0c3cc5a7cd0f44133e1f5922a52d", null ], [ "ambe_prba12_tbl", "group__codec__private.html#gae5a94c3201e655989c87379268c30623", null ], [ "ambe_prba34_tbl", "group__codec__private.html#gaadea447d12d8536738479b549eb42fdf", null ], [ "ambe_prba57_tbl", "group__codec__private.html#ga35df9825da65a2015f7576c83c9843f4", null ], [ "ambe_sf0_interp_tbl", "group__codec__private.html#gab7a7b1219368c43c898cfb24ff3cb5cd", null ], [ "ambe_sf0_perr14_tbl", "group__codec__private.html#ga42a2421d73b8b9021b2b88698057b53b", null ], [ "ambe_sf0_perr58_tbl", "group__codec__private.html#ga109dca33b432f87d6d6a14a4a0787e06", null ], [ "ambe_v_uv_tbl", "group__codec__private.html#ga735cc90f20631506f7a5fc4827f4e8d5", null ] ];html/pi4cxpsk_8c.js0000644000175000017500000000124614753471227013516 0ustar buildbuildvar pi4cxpsk_8c = [ [ "gmr1_pi4cxpsk_demod", "group__pi4cxpsk.html#ga39685a0ee6daeb04f7ca70bbd6d1fe29", null ], [ "gmr1_pi4cxpsk_detect", "group__pi4cxpsk.html#ga1490fd560c08a9468c40ff69f2cae2bb", null ], [ "gmr1_pi4cxpsk_mod", "group__pi4cxpsk.html#ga554b1c56cd86f4e9c9cbdcc455212770", null ], [ "gmr1_pi4cxpsk_mod_order", "group__pi4cxpsk.html#ga82887564b076046745f705f7c27c930e", null ], [ "gmr1_pi2cbpsk", "group__pi4cxpsk.html#ga37214979bb79f5d23784ba1eda5fa384", null ], [ "gmr1_pi4cbpsk", "group__pi4cxpsk.html#gaeae7cf33a9694b1911deefb535f5c1b8", null ], [ "gmr1_pi4cqpsk", "group__pi4cxpsk.html#ga652dcdb5ad05ce39ebef8a5b97f6d516", null ] ];html/scramb_8c.js0000644000175000017500000000031514753471227013214 0ustar buildbuildvar scramb_8c = [ [ "gmr1_scramble_sbit", "group__scramb.html#gab5ef50c3520bc0213858a6894d989e1e", null ], [ "gmr1_scramble_ubit", "group__scramb.html#ga2243e4f721439956fe9b81ec7e40490c", null ] ];html/punct_8h.js0000644000175000017500000001147014753471227013107 0ustar buildbuildvar punct_8h = [ [ "gmr1_puncturer_generate", "group__punct.html#ga95a97b9c89435bf6826fdeb21d881ff2", null ], [ "gmr1_punct_k5_12_A", "group__punct.html#ga6b3c25e254784f342165a138f7b000a4", null ], [ "gmr1_punct_k5_12_B", "group__punct.html#ga5fba7e4ebdfdf45715b68bc77ad55b56", null ], [ "gmr1_punct_k5_12_C", "group__punct.html#ga3d7fe225e1e537f88f58220d8dd68076", null ], [ "gmr1_punct_k5_12_D", "group__punct.html#gad04e1754667748acd42c3fb6867dc09d", null ], [ "gmr1_punct_k5_12_E", "group__punct.html#ga94c4d51e0dfe595be3d2505f64c3ea5c", null ], [ "gmr1_punct_k5_12_P12", "group__punct.html#gaa8bce8b6ca73fc45c3c0c596037c1849", null ], [ "gmr1_punct_k5_12_P23", "group__punct.html#gaa03eb3f46b3027767323ccc546414c5b", null ], [ "gmr1_punct_k5_12_P25", "group__punct.html#gabea6708a946be5c940ac734ef6a0238f", null ], [ "gmr1_punct_k5_12_P26", "group__punct.html#gac052cb5f0bd3f9f828b1c23d03ea4f22", null ], [ "gmr1_punct_k5_12_P311", "group__punct.html#ga77ed0b501d05b89717919e77cb66f55c", null ], [ "gmr1_punct_k5_12_P37", "group__punct.html#ga04fe577ed7854a24812ccc020b7777cc", null ], [ "gmr1_punct_k5_12_P38", "group__punct.html#gadd9a431fb84f6c100472f428642cece3", null ], [ "gmr1_punct_k5_12_P412", "group__punct.html#gae61e6323084580be44337702851f0560", null ], [ "gmr1_punct_k5_12_Ps12", "group__punct.html#gaf6f62025e6ad2089904f214fea702a49", null ], [ "gmr1_punct_k5_12_Ps25", "group__punct.html#gaecda3c501174763dac7c5c646ea44690", null ], [ "gmr1_punct_k5_12_Ps412", "group__punct.html#ga134d1e54bfe1d47a0841e6dbe9b27cd8", null ], [ "gmr1_punct_k5_13_P15", "group__punct.html#ga8f444be2364421750572d3b2b3e4d442", null ], [ "gmr1_punct_k5_13_P16", "group__punct.html#ga6288534135f6da5447232a7b5337448f", null ], [ "gmr1_punct_k5_13_P25", "group__punct.html#ga9118d1c2fa81fdaf5f15ffc633e66a88", null ], [ "gmr1_punct_k5_13_P78", "group__punct.html#gaa4798a84b9662a863f7cfeaa6206aba5", null ], [ "gmr1_punct_k5_13_Ps15", "group__punct.html#gaa4d4874e4d1a51d70b1d67113f0bfeb2", null ], [ "gmr1_punct_k5_15_P23", "group__punct.html#ga9d6d7b1b48148bb4cc4678790a68b5ff", null ], [ "gmr1_punct_k5_15_P53", "group__punct.html#ga0c42fa663dd288c81566d1616420e3fb", null ], [ "gmr1_punct_k5_15_Ps53", "group__punct.html#ga589d0f7c6ab25753c32664969414f1fd", null ], [ "gmr1_punct_k6_14_P45", "group__punct.html#ga780e4af9db89c4bb51808bd2a35fa593", null ], [ "gmr1_punct_k7_12_P1152", "group__punct.html#gafecfb0fbfb4f49c8a370362b98bb5aff", null ], [ "gmr1_punct_k7_12_P116", "group__punct.html#gac001aebb5c9026aa629a95146427736a", null ], [ "gmr1_punct_k7_12_P148", "group__punct.html#gad360cd4e2a33eedc63954a5a8731d1ac", null ], [ "gmr1_punct_k7_12_P184", "group__punct.html#ga642a5293a4366ad2c0eddadc92cac23b", null ], [ "gmr1_punct_k7_12_P23", "group__punct.html#ga97a416384feb6b6e73215576b377faa5", null ], [ "gmr1_punct_k7_12_P245", "group__punct.html#ga6ec3a6b25235d2e5bac464c1f7a1fe85", null ], [ "gmr1_punct_k7_12_P410", "group__punct.html#ga2db6a1bba45111d8398a77a8ea8dc72d", null ], [ "gmr1_punct_k7_12_P45", "group__punct.html#ga0eb3ce9d40905c17c808223aac3a5543", null ], [ "gmr1_punct_k7_12_P512", "group__punct.html#ga069c9fc93f97ac8f81874ad3486d8e2c", null ], [ "gmr1_punct_k9_12_P110", "group__punct.html#gaa7ef8a86ffc3fe190ba8e501cc161208", null ], [ "gmr1_punct_k9_12_P13", "group__punct.html#ga6de89b61b5d5cd075a2edfa5da3acb8d", null ], [ "gmr1_punct_k9_12_P14", "group__punct.html#ga78cb3a5553a7c084c637e1845049c2a3", null ], [ "gmr1_punct_k9_12_P17", "group__punct.html#ga793c265d459c6c7d263edfd9fa5d82c8", null ], [ "gmr1_punct_k9_12_P19", "group__punct.html#ga2864cbf423bbdf1aa723b865aa5670cf", null ], [ "gmr1_punct_k9_12_P234", "group__punct.html#ga2d84992ac096d9b4fe041d0a9aaf33df", null ], [ "gmr1_punct_k9_12_P26", "group__punct.html#gaca082b213957ed2b9f2ea17c74ff76c5", null ], [ "gmr1_punct_k9_12_P34", "group__punct.html#gaf7fd0ce78be41fd48a1509a477ff7c0c", null ], [ "gmr1_punct_k9_12_P45", "group__punct.html#gaac0e2e21cdb173c9f7b8ce64b4fcad3a", null ], [ "gmr1_punct_k9_12_P47", "group__punct.html#ga4aefdbb9d3ed87e0e57bff3289700de1", null ], [ "gmr1_punct_k9_13_P12", "group__punct.html#ga3221eef995a6154b1a5976b64e17f269", null ], [ "gmr1_punct_k9_13_P1213", "group__punct.html#ga868634869b605e0b4ab7694d11f816da", null ], [ "gmr1_punct_k9_13_P33", "group__punct.html#ga5cc77e83e90a1186a931981b40aa9f1e", null ], [ "gmr1_punct_k9_13_P44", "group__punct.html#ga073c0a4550a5f828a5eac48b9e3ca06c", null ], [ "gmr1_punct_k9_13_P65", "group__punct.html#gaa9d92cbd0a8bbeedb9cd7860e3422f17", null ], [ "gmr1_punct_k9_14_P148", "group__punct.html#gadf567a87a9c00c73dbb132863871c24c", null ], [ "gmr1_punct_k9_14_P65", "group__punct.html#ga767c7a63fdd42bcf8e9e3b8da7e8dbe7", null ] ];html/doc.png0000644000175000017500000000135214753471227012272 0ustar buildbuild‰PNG  IHDRÚ}\ˆ±IDATxíMOS[…Ÿžsúa?-XZ(PD4‚ AWbu`b 77wäHFÆCËÔÂÿà/`vo„ˆAPòq‹P @ ­ûÝè980 îà¤+»§Ýy×^ïZï9SW¹\83g‰3'°Nâçl¹¸_b¯p ïåûÆVÜÖ¡€Ÿ×"¬Ö†X€d]Ðà3“ÉÃÄÌ™xŸ ßMàœ[<çSPkvc—hÈ'…™˜^Åm™hØ7 `Û™¦ èÀåráq›‘œ¾!daeKŸþÆÕ˜:Ì*³_דâèi?I–eP*B7Ÿ¿åô!¹Ýgr6Ër6oKbëþãðôrI”ËTˆüªŒ¨xóö=›ù¢&‰(e+ßóÄkýÇ`ëÁÜb.“¸ÐW×w0¥°jÑzN™¬|©WEãµ¢a¯6[öX†AkÓù*/œ¨‰€ÉY­ ÿV’§–u²jÂ>1W *½·°PGŽzÿ¨/Eg{ ŸÇâaoŠÁVú:è¿™¤1$ôR§W,–ªà¨@ŠË56¾ÀÔÜ-¾,mê¸Î/æè¹– òr5¥T*S(Vf8ö9u’ Õ£w›ùóa=Í<{Ò¡UŒ÷r¯+ÉådDÏF$è°…£é¿`zþ»ÎúöN‘µÜ®0Q3£~_^Ëóâ¯N=ˆvpTà±LžT}ˆîkq†Òm<¼ÎÓ?Zh¿X£ï_þÝ¥[)ƒ `gêÃa_Ô*äÔ2`'=õ´Fÿ2EâÁPú ÷»›l=8‹Wv°%THqÉ¿<"¤ïG¾ÆxH{#ÆÖ«aÔJÕÞ‡—m‹„ çñKsÿàñVŠØ¡°·MâÒ^ TÁ– Ý›r¥ß½ømüÿ_™?ªWÄ°÷#uIEND®B`‚html/crc_8c.js0000644000175000017500000000040514753471227012514 0ustar buildbuildvar crc_8c = [ [ "gmr1_crc12", "group__crc.html#ga39976cbbb95bf2ee17510e23e66e9662", null ], [ "gmr1_crc16", "group__crc.html#ga4c203dc885ad2c23dbc5e26457d2b52e", null ], [ "gmr1_crc8", "group__crc.html#ga475488b3214308419d2d8ced50df5257", null ] ];html/doxygen.css0000644000175000017500000010161414753471226013207 0ustar buildbuild/* The standard CSS for doxygen 1.9.4 */ body, table, div, p, dl { font: 400 14px/22px Roboto,sans-serif; } p.reference, p.definition { font: 400 14px/22px Roboto,sans-serif; } /* @group Heading Levels */ h1.groupheader { font-size: 150%; } .title { font: 400 14px/28px Roboto,sans-serif; font-size: 150%; font-weight: bold; margin: 10px 2px; } h2.groupheader { border-bottom: 1px solid #879ECB; color: #354C7B; font-size: 150%; font-weight: normal; margin-top: 1.75em; padding-top: 8px; padding-bottom: 4px; width: 100%; } h3.groupheader { font-size: 100%; } h1, h2, h3, h4, h5, h6 { -webkit-transition: text-shadow 0.5s linear; -moz-transition: text-shadow 0.5s linear; -ms-transition: text-shadow 0.5s linear; -o-transition: text-shadow 0.5s linear; transition: text-shadow 0.5s linear; margin-right: 15px; } h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { text-shadow: 0 0 15px cyan; } dt { font-weight: bold; } ul.multicol { -moz-column-gap: 1em; -webkit-column-gap: 1em; column-gap: 1em; -moz-column-count: 3; -webkit-column-count: 3; column-count: 3; } p.startli, p.startdd { margin-top: 2px; } th p.starttd, th p.intertd, th p.endtd { font-size: 100%; font-weight: 700; } p.starttd { margin-top: 0px; } p.endli { margin-bottom: 0px; } p.enddd { margin-bottom: 4px; } p.endtd { margin-bottom: 2px; } p.interli { } p.interdd { } p.intertd { } /* @end */ caption { font-weight: bold; } span.legend { font-size: 70%; text-align: center; } h3.version { font-size: 90%; text-align: center; } div.navtab { border-right: 1px solid #A3B4D7; padding-right: 15px; text-align: right; line-height: 110%; } div.navtab table { border-spacing: 0; } td.navtab { padding-right: 6px; padding-left: 6px; } td.navtabHL { background-image: url('tab_a.png'); background-repeat:repeat-x; padding-right: 6px; padding-left: 6px; } td.navtabHL a, td.navtabHL a:visited { color: #fff; text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); } a.navtab { font-weight: bold; } div.qindex{ text-align: center; width: 100%; line-height: 140%; font-size: 130%; color: #A0A0A0; } dt.alphachar{ font-size: 180%; font-weight: bold; } .alphachar a{ color: black; } .alphachar a:hover, .alphachar a:visited{ text-decoration: none; } .classindex dl { padding: 25px; column-count:1 } .classindex dd { display:inline-block; margin-left: 50px; width: 90%; line-height: 1.15em; } .classindex dl.odd { background-color: #F8F9FC; } @media(min-width: 1120px) { .classindex dl { column-count:2 } } @media(min-width: 1320px) { .classindex dl { column-count:3 } } /* @group Link Styling */ a { color: #3D578C; font-weight: normal; text-decoration: none; } .contents a:visited { color: #4665A2; } a:hover { text-decoration: underline; } .contents a.qindexHL:visited { color: #FFFFFF; } a.el { font-weight: bold; } a.elRef { } a.code, a.code:visited, a.line, a.line:visited { color: #4665A2; } a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { color: #4665A2; } a.code.hl_class { /* style for links to class names in code snippets */ } a.code.hl_struct { /* style for links to struct names in code snippets */ } a.code.hl_union { /* style for links to union names in code snippets */ } a.code.hl_interface { /* style for links to interface names in code snippets */ } a.code.hl_protocol { /* style for links to protocol names in code snippets */ } a.code.hl_category { /* style for links to category names in code snippets */ } a.code.hl_exception { /* style for links to exception names in code snippets */ } a.code.hl_service { /* style for links to service names in code snippets */ } a.code.hl_singleton { /* style for links to singleton names in code snippets */ } a.code.hl_concept { /* style for links to concept names in code snippets */ } a.code.hl_namespace { /* style for links to namespace names in code snippets */ } a.code.hl_package { /* style for links to package names in code snippets */ } a.code.hl_define { /* style for links to macro names in code snippets */ } a.code.hl_function { /* style for links to function names in code snippets */ } a.code.hl_variable { /* style for links to variable names in code snippets */ } a.code.hl_typedef { /* style for links to typedef names in code snippets */ } a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } a.code.hl_friend { /* style for links to friend names in code snippets */ } a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } a.code.hl_property { /* style for links to property names in code snippets */ } a.code.hl_event { /* style for links to event names in code snippets */ } a.code.hl_sequence { /* style for links to sequence names in code snippets */ } a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } /* @end */ dl.el { margin-left: -1cm; } ul { overflow: visible; } #side-nav ul { overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ } #main-nav ul { overflow: visible; /* reset ul rule for the navigation bar drop down lists */ } .fragment { text-align: left; direction: ltr; overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ overflow-y: hidden; } pre.fragment { border: 1px solid #C4CFE5; background-color: #FBFCFD; padding: 4px 6px; margin: 4px 8px 4px 2px; overflow: auto; word-wrap: break-word; font-size: 9pt; line-height: 125%; font-family: monospace, fixed; font-size: 105%; } div.fragment { padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ margin: 4px 8px 4px 2px; background-color: #FBFCFD; border: 1px solid #C4CFE5; } div.line { font-family: monospace, fixed; font-size: 13px; min-height: 13px; line-height: 1.0; text-wrap: unrestricted; white-space: -moz-pre-wrap; /* Moz */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ white-space: pre-wrap; /* CSS3 */ word-wrap: break-word; /* IE 5.5+ */ text-indent: -53px; padding-left: 53px; padding-bottom: 0px; margin: 0px; -webkit-transition-property: background-color, box-shadow; -webkit-transition-duration: 0.5s; -moz-transition-property: background-color, box-shadow; -moz-transition-duration: 0.5s; -ms-transition-property: background-color, box-shadow; -ms-transition-duration: 0.5s; -o-transition-property: background-color, box-shadow; -o-transition-duration: 0.5s; transition-property: background-color, box-shadow; transition-duration: 0.5s; } div.line:after { content:"\000A"; white-space: pre; } div.line.glow { background-color: cyan; box-shadow: 0 0 10px cyan; } span.lineno { padding-right: 4px; margin-right: 9px; text-align: right; border-right: 2px solid #0F0; background-color: #E8E8E8; white-space: pre; } span.lineno a { background-color: #D8D8D8; } span.lineno a:hover { background-color: #C8C8C8; } .lineno { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } div.ah, span.ah { background-color: black; font-weight: bold; color: #FFFFFF; margin-bottom: 3px; margin-top: 3px; padding: 0.2em; border: solid thin #333; border-radius: 0.5em; -webkit-border-radius: .5em; -moz-border-radius: .5em; box-shadow: 2px 2px 3px #999; -webkit-box-shadow: 2px 2px 3px #999; -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); } div.classindex ul { list-style: none; padding-left: 0; } div.classindex span.ai { display: inline-block; } div.groupHeader { margin-left: 16px; margin-top: 12px; font-weight: bold; } div.groupText { margin-left: 16px; font-style: italic; } body { background-color: white; color: black; margin: 0; } div.contents { margin-top: 10px; margin-left: 12px; margin-right: 8px; } td.indexkey { background-color: #EBEFF6; font-weight: bold; border: 1px solid #C4CFE5; margin: 2px 0px 2px 0; padding: 2px 10px; white-space: nowrap; vertical-align: top; } td.indexvalue { background-color: #EBEFF6; border: 1px solid #C4CFE5; padding: 2px 10px; margin: 2px 0px; } tr.memlist { background-color: #EEF1F7; } p.formulaDsp { text-align: center; } img.formulaDsp { } img.formulaInl, img.inline { vertical-align: middle; } div.center { text-align: center; margin-top: 0px; margin-bottom: 0px; padding: 0px; } div.center img { border: 0px; } address.footer { text-align: right; padding-right: 12px; } img.footer { border: 0px; vertical-align: middle; } .compoundTemplParams { color: #4665A2; font-size: 80%; line-height: 120%; } /* @group Code Colorization */ span.keyword { color: #008000 } span.keywordtype { color: #604020 } span.keywordflow { color: #e08000 } span.comment { color: #800000 } span.preprocessor { color: #806020 } span.stringliteral { color: #002080 } span.charliteral { color: #008080 } span.vhdldigit { color: #ff00ff } span.vhdlchar { color: #000000 } span.vhdlkeyword { color: #700070 } span.vhdllogic { color: #ff0000 } blockquote { background-color: #F7F8FB; border-left: 2px solid #9CAFD4; margin: 0 24px 0 4px; padding: 0 12px 0 16px; } blockquote.DocNodeRTL { border-left: 0; border-right: 2px solid #9CAFD4; margin: 0 4px 0 24px; padding: 0 16px 0 12px; } /* @end */ /* .search { color: #003399; font-weight: bold; } form.search { margin-bottom: 0px; margin-top: 0px; } input.search { font-size: 75%; color: #000080; font-weight: normal; background-color: #e8eef2; } */ td.tiny { font-size: 75%; } .dirtab { padding: 4px; border-collapse: collapse; border: 1px solid #A3B4D7; } th.dirtab { background: #EBEFF6; font-weight: bold; } hr { height: 0px; border: none; border-top: 1px solid #4A6AAA; } hr.footer { height: 1px; } /* @group Member Descriptions */ table.memberdecls { border-spacing: 0px; padding: 0px; } .memberdecls td, .fieldtable tr { -webkit-transition-property: background-color, box-shadow; -webkit-transition-duration: 0.5s; -moz-transition-property: background-color, box-shadow; -moz-transition-duration: 0.5s; -ms-transition-property: background-color, box-shadow; -ms-transition-duration: 0.5s; -o-transition-property: background-color, box-shadow; -o-transition-duration: 0.5s; transition-property: background-color, box-shadow; transition-duration: 0.5s; } .memberdecls td.glow, .fieldtable tr.glow { background-color: cyan; box-shadow: 0 0 15px cyan; } .mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams { background-color: #F9FAFC; border: none; margin: 4px; padding: 1px 0 0 8px; } .mdescLeft, .mdescRight { padding: 0px 8px 4px 8px; color: #555; } .memSeparator { border-bottom: 1px solid #DEE4F0; line-height: 1px; margin: 0px; padding: 0px; } .memItemLeft, .memTemplItemLeft { white-space: nowrap; } .memItemRight, .memTemplItemRight { width: 100%; } .memTemplParams { color: #4665A2; white-space: nowrap; font-size: 80%; } /* @end */ /* @group Member Details */ /* Styles for detailed member documentation */ .memtitle { padding: 8px; border-top: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; border-right: 1px solid #A8B8D9; border-top-right-radius: 4px; border-top-left-radius: 4px; margin-bottom: -1px; background-image: url('nav_f.png'); background-repeat: repeat-x; background-color: #E2E8F2; line-height: 1.25; font-weight: 300; float:left; } .permalink { font-size: 65%; display: inline-block; vertical-align: middle; } .memtemplate { font-size: 80%; color: #4665A2; font-weight: normal; margin-left: 9px; } .memnav { background-color: #EBEFF6; border: 1px solid #A3B4D7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } .mempage { width: 100%; } .memitem { padding: 0; margin-bottom: 10px; margin-right: 5px; -webkit-transition: box-shadow 0.5s linear; -moz-transition: box-shadow 0.5s linear; -ms-transition: box-shadow 0.5s linear; -o-transition: box-shadow 0.5s linear; transition: box-shadow 0.5s linear; display: table !important; width: 100%; } .memitem.glow { box-shadow: 0 0 15px cyan; } .memname { font-weight: 400; margin-left: 6px; } .memname td { vertical-align: bottom; } .memproto, dl.reflist dt { border-top: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; border-right: 1px solid #A8B8D9; padding: 6px 0px 6px 0px; color: #253555; font-weight: bold; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); background-color: #DFE5F1; /* opera specific markup */ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); border-top-right-radius: 4px; /* firefox specific markup */ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; -moz-border-radius-topright: 4px; /* webkit specific markup */ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -webkit-border-top-right-radius: 4px; } .overload { font-family: "courier new",courier,monospace; font-size: 65%; } .memdoc, dl.reflist dd { border-bottom: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; border-right: 1px solid #A8B8D9; padding: 6px 10px 2px 10px; background-color: #FBFCFD; border-top-width: 0; background-image:url('nav_g.png'); background-repeat:repeat-x; background-color: #FFFFFF; /* opera specific markup */ border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); /* firefox specific markup */ -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; /* webkit specific markup */ -webkit-border-bottom-left-radius: 4px; -webkit-border-bottom-right-radius: 4px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); } dl.reflist dt { padding: 5px; } dl.reflist dd { margin: 0px 0px 10px 0px; padding: 5px; } .paramkey { text-align: right; } .paramtype { white-space: nowrap; } .paramname { color: #602020; white-space: nowrap; } .paramname em { font-style: normal; } .paramname code { line-height: 14px; } .params, .retval, .exception, .tparams { margin-left: 0px; padding-left: 0px; } .params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { font-weight: bold; vertical-align: top; } .params .paramtype, .tparams .paramtype { font-style: italic; vertical-align: top; } .params .paramdir, .tparams .paramdir { font-family: "courier new",courier,monospace; vertical-align: top; } table.mlabels { border-spacing: 0px; } td.mlabels-left { width: 100%; padding: 0px; } td.mlabels-right { vertical-align: bottom; padding: 0px; white-space: nowrap; } span.mlabels { margin-left: 8px; } span.mlabel { background-color: #728DC1; border-top:1px solid #5373B4; border-left:1px solid #5373B4; border-right:1px solid #C4CFE5; border-bottom:1px solid #C4CFE5; text-shadow: none; color: white; margin-right: 4px; padding: 2px 3px; border-radius: 3px; font-size: 7pt; white-space: nowrap; vertical-align: middle; } /* @end */ /* these are for tree view inside a (index) page */ div.directory { margin: 10px 0px; border-top: 1px solid #9CAFD4; border-bottom: 1px solid #9CAFD4; width: 100%; } .directory table { border-collapse:collapse; } .directory td { margin: 0px; padding: 0px; vertical-align: top; } .directory td.entry { white-space: nowrap; padding-right: 6px; padding-top: 3px; } .directory td.entry a { outline:none; } .directory td.entry a img { border: none; } .directory td.desc { width: 100%; padding-left: 6px; padding-right: 6px; padding-top: 3px; border-left: 1px solid rgba(0,0,0,0.05); } .directory tr.even { padding-left: 6px; background-color: #F7F8FB; } .directory img { vertical-align: -30%; } .directory .levels { white-space: nowrap; width: 100%; text-align: right; font-size: 9pt; } .directory .levels span { cursor: pointer; padding-left: 2px; padding-right: 2px; color: #3D578C; } .arrow { color: #9CAFD4; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: pointer; font-size: 80%; display: inline-block; width: 16px; height: 22px; } .icon { font-family: Arial, Helvetica; font-weight: bold; font-size: 12px; height: 14px; width: 16px; display: inline-block; background-color: #728DC1; color: white; text-align: center; border-radius: 4px; margin-left: 2px; margin-right: 2px; } .icona { width: 24px; height: 22px; display: inline-block; } .iconfopen { width: 24px; height: 18px; margin-bottom: 4px; background-image:url('folderopen.png'); background-position: 0px -4px; background-repeat: repeat-y; vertical-align:top; display: inline-block; } .iconfclosed { width: 24px; height: 18px; margin-bottom: 4px; background-image:url('folderclosed.png'); background-position: 0px -4px; background-repeat: repeat-y; vertical-align:top; display: inline-block; } .icondoc { width: 24px; height: 18px; margin-bottom: 4px; background-image:url('doc.png'); background-position: 0px -4px; background-repeat: repeat-y; vertical-align:top; display: inline-block; } table.directory { font: 400 14px Roboto,sans-serif; } /* @end */ div.dynheader { margin-top: 8px; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } address { font-style: normal; color: #2A3D61; } table.doxtable caption { caption-side: top; } table.doxtable { border-collapse:collapse; margin-top: 4px; margin-bottom: 4px; } table.doxtable td, table.doxtable th { border: 1px solid #2D4068; padding: 3px 7px 2px; } table.doxtable th { background-color: #374F7F; color: #FFFFFF; font-size: 110%; padding-bottom: 4px; padding-top: 5px; } table.fieldtable { /*width: 100%;*/ margin-bottom: 10px; border: 1px solid #A8B8D9; border-spacing: 0px; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); } .fieldtable td, .fieldtable th { padding: 3px 7px 2px; } .fieldtable td.fieldtype, .fieldtable td.fieldname { white-space: nowrap; border-right: 1px solid #A8B8D9; border-bottom: 1px solid #A8B8D9; vertical-align: top; } .fieldtable td.fieldname { padding-top: 3px; } .fieldtable td.fielddoc { border-bottom: 1px solid #A8B8D9; /*width: 100%;*/ } .fieldtable td.fielddoc p:first-child { margin-top: 0px; } .fieldtable td.fielddoc p:last-child { margin-bottom: 2px; } .fieldtable tr:last-child td { border-bottom: none; } .fieldtable th { background-image:url('nav_f.png'); background-repeat:repeat-x; background-color: #E2E8F2; font-size: 90%; color: #253555; padding-bottom: 4px; padding-top: 5px; text-align:left; font-weight: 400; -moz-border-radius-topleft: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-left-radius: 4px; -webkit-border-top-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom: 1px solid #A8B8D9; } .tabsearch { top: 0px; left: 10px; height: 36px; background-image: url('tab_b.png'); z-index: 101; overflow: hidden; font-size: 13px; } .navpath ul { font-size: 11px; background-image:url('tab_b.png'); background-repeat:repeat-x; background-position: 0 -5px; height:30px; line-height:30px; color:#8AA0CC; border:solid 1px #C2CDE4; overflow:hidden; margin:0px; padding:0px; } .navpath li { list-style-type:none; float:left; padding-left:10px; padding-right:15px; background-image:url('bc_s.png'); background-repeat:no-repeat; background-position:right; color:#364D7C; } .navpath li.navelem a { height:32px; display:block; text-decoration: none; outline: none; color: #283A5D; font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); text-decoration: none; } .navpath li.navelem a:hover { color:#6884BD; } .navpath li.footer { list-style-type:none; float:right; padding-left:10px; padding-right:15px; background-image:none; background-repeat:no-repeat; background-position:right; color:#364D7C; font-size: 8pt; } div.summary { float: right; font-size: 8pt; padding-right: 5px; width: 50%; text-align: right; } div.summary a { white-space: nowrap; } table.classindex { margin: 10px; white-space: nowrap; margin-left: 3%; margin-right: 3%; width: 94%; border: 0; border-spacing: 0; padding: 0; } div.ingroups { font-size: 8pt; width: 50%; text-align: left; } div.ingroups a { white-space: nowrap; } div.header { background-image:url('nav_h.png'); background-repeat:repeat-x; background-color: #F9FAFC; margin: 0px; border-bottom: 1px solid #C4CFE5; } div.headertitle { padding: 5px 5px 5px 10px; } .PageDocRTL-title div.headertitle { text-align: right; direction: rtl; } dl { padding: 0 0 0 0; } /* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ dl.section { margin-left: 0px; padding-left: 0px; } dl.section.DocNodeRTL { margin-right: 0px; padding-right: 0px; } dl.note { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #D0C000; } dl.note.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #D0C000; } dl.warning, dl.attention { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #FF0000; } dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #FF0000; } dl.pre, dl.post, dl.invariant { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #00D000; } dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #00D000; } dl.deprecated { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #505050; } dl.deprecated.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #505050; } dl.todo { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #00C0E0; } dl.todo.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #00C0E0; } dl.test { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #3030E0; } dl.test.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #3030E0; } dl.bug { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #C08050; } dl.bug.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #C08050; } dl.section dd { margin-bottom: 6px; } #projectrow { height: 56px; } #projectlogo { text-align: center; vertical-align: bottom; border-collapse: separate; } #projectlogo img { border: 0px none; } #projectalign { vertical-align: middle; padding-left: 0.5em; } #projectname { font: 200% Tahoma, Arial,sans-serif; margin: 0px; padding: 2px 0px; } #projectbrief { font: 90% Tahoma, Arial,sans-serif; margin: 0px; padding: 0px; } #projectnumber { font: 50% Tahoma, Arial,sans-serif; margin: 0px; padding: 0px; } #titlearea { padding: 0px; margin: 0px; width: 100%; border-bottom: 1px solid #5373B4; } .image { text-align: center; } .dotgraph { text-align: center; } .mscgraph { text-align: center; } .plantumlgraph { text-align: center; } .diagraph { text-align: center; } .caption { font-weight: bold; } div.zoom { border: 1px solid #90A5CE; } dl.citelist { margin-bottom:50px; } dl.citelist dt { color:#334975; float:left; font-weight:bold; margin-right:10px; padding:5px; text-align:right; width:52px; } dl.citelist dd { margin:2px 0 2px 72px; padding:5px 0; } div.toc { padding: 14px 25px; background-color: #F4F6FA; border: 1px solid #D8DFEE; border-radius: 7px 7px 7px 7px; float: right; height: auto; margin: 0 8px 10px 10px; width: 200px; } .PageDocRTL-title div.toc { float: left !important; text-align: right; } div.toc li { background: url("bdwn.png") no-repeat scroll 0 5px transparent; font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; margin-top: 5px; padding-left: 10px; padding-top: 2px; } .PageDocRTL-title div.toc li { background-position-x: right !important; padding-left: 0 !important; padding-right: 10px; } div.toc h3 { font: bold 12px/1.2 Arial,FreeSans,sans-serif; color: #4665A2; border-bottom: 0 none; margin: 0; } div.toc ul { list-style: none outside none; border: medium none; padding: 0px; } div.toc li.level1 { margin-left: 0px; } div.toc li.level2 { margin-left: 15px; } div.toc li.level3 { margin-left: 30px; } div.toc li.level4 { margin-left: 45px; } span.emoji { /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; */ } span.obfuscator { display: none; } .PageDocRTL-title div.toc li.level1 { margin-left: 0 !important; margin-right: 0; } .PageDocRTL-title div.toc li.level2 { margin-left: 0 !important; margin-right: 15px; } .PageDocRTL-title div.toc li.level3 { margin-left: 0 !important; margin-right: 30px; } .PageDocRTL-title div.toc li.level4 { margin-left: 0 !important; margin-right: 45px; } .inherit_header { font-weight: bold; color: gray; cursor: pointer; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .inherit_header td { padding: 6px 0px 2px 5px; } .inherit { display: none; } tr.heading h2 { margin-top: 12px; margin-bottom: 4px; } /* tooltip related style info */ .ttc { position: absolute; display: none; } #powerTip { cursor: default; /*white-space: nowrap;*/ background-color: white; border: 1px solid gray; border-radius: 4px 4px 4px 4px; box-shadow: 1px 1px 7px gray; display: none; font-size: smaller; max-width: 80%; opacity: 0.9; padding: 1ex 1em 1em; position: absolute; z-index: 2147483647; } #powerTip div.ttdoc { color: grey; font-style: italic; } #powerTip div.ttname a { font-weight: bold; } #powerTip div.ttname { font-weight: bold; } #powerTip div.ttdeci { color: #006318; } #powerTip div { margin: 0px; padding: 0px; font: 12px/16px Roboto,sans-serif; } #powerTip:before, #powerTip:after { content: ""; position: absolute; margin: 0px; } #powerTip.n:after, #powerTip.n:before, #powerTip.s:after, #powerTip.s:before, #powerTip.w:after, #powerTip.w:before, #powerTip.e:after, #powerTip.e:before, #powerTip.ne:after, #powerTip.ne:before, #powerTip.se:after, #powerTip.se:before, #powerTip.nw:after, #powerTip.nw:before, #powerTip.sw:after, #powerTip.sw:before { border: solid transparent; content: " "; height: 0; width: 0; position: absolute; } #powerTip.n:after, #powerTip.s:after, #powerTip.w:after, #powerTip.e:after, #powerTip.nw:after, #powerTip.ne:after, #powerTip.sw:after, #powerTip.se:after { border-color: rgba(255, 255, 255, 0); } #powerTip.n:before, #powerTip.s:before, #powerTip.w:before, #powerTip.e:before, #powerTip.nw:before, #powerTip.ne:before, #powerTip.sw:before, #powerTip.se:before { border-color: rgba(128, 128, 128, 0); } #powerTip.n:after, #powerTip.n:before, #powerTip.ne:after, #powerTip.ne:before, #powerTip.nw:after, #powerTip.nw:before { top: 100%; } #powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { border-top-color: #FFFFFF; border-width: 10px; margin: 0px -10px; } #powerTip.n:before { border-top-color: #808080; border-width: 11px; margin: 0px -11px; } #powerTip.n:after, #powerTip.n:before { left: 50%; } #powerTip.nw:after, #powerTip.nw:before { right: 14px; } #powerTip.ne:after, #powerTip.ne:before { left: 14px; } #powerTip.s:after, #powerTip.s:before, #powerTip.se:after, #powerTip.se:before, #powerTip.sw:after, #powerTip.sw:before { bottom: 100%; } #powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { border-bottom-color: #FFFFFF; border-width: 10px; margin: 0px -10px; } #powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { border-bottom-color: #808080; border-width: 11px; margin: 0px -11px; } #powerTip.s:after, #powerTip.s:before { left: 50%; } #powerTip.sw:after, #powerTip.sw:before { right: 14px; } #powerTip.se:after, #powerTip.se:before { left: 14px; } #powerTip.e:after, #powerTip.e:before { left: 100%; } #powerTip.e:after { border-left-color: #FFFFFF; border-width: 10px; top: 50%; margin-top: -10px; } #powerTip.e:before { border-left-color: #808080; border-width: 11px; top: 50%; margin-top: -11px; } #powerTip.w:after, #powerTip.w:before { right: 100%; } #powerTip.w:after { border-right-color: #FFFFFF; border-width: 10px; top: 50%; margin-top: -10px; } #powerTip.w:before { border-right-color: #808080; border-width: 11px; top: 50%; margin-top: -11px; } @media print { #top { display: none; } #side-nav { display: none; } #nav-path { display: none; } body { overflow:visible; } h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } .summary { display: none; } .memitem { page-break-inside: avoid; } #doc-content { margin-left:0 !important; height:auto !important; width:auto !important; overflow:inherit; display:inline; } } /* @group Markdown */ table.markdownTable { border-collapse:collapse; margin-top: 4px; margin-bottom: 4px; } table.markdownTable td, table.markdownTable th { border: 1px solid #2D4068; padding: 3px 7px 2px; } table.markdownTable tr { } th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { background-color: #374F7F; color: #FFFFFF; font-size: 110%; padding-bottom: 4px; padding-top: 5px; } th.markdownTableHeadLeft, td.markdownTableBodyLeft { text-align: left } th.markdownTableHeadRight, td.markdownTableBodyRight { text-align: right } th.markdownTableHeadCenter, td.markdownTableBodyCenter { text-align: center } .DocNodeRTL { text-align: right; direction: rtl; } .DocNodeLTR { text-align: left; direction: ltr; } table.DocNodeRTL { width: auto; margin-right: 0; margin-left: auto; } table.DocNodeLTR { width: auto; margin-right: auto; margin-left: 0; } code.JavaDocCode { direction:ltr; } tt, code, kbd, samp { display: inline-block; direction:ltr; } /* @end */ u { text-decoration: underline; } html/ambe_8c.js0000644000175000017500000000063514753471227012656 0ustar buildbuildvar ambe_8c = [ [ "ambe_decode_dtx", "group__codec__private.html#ga8f0cf32d32bde050a40a3e7087185aad", null ], [ "ambe_decode_fini", "group__codec__private.html#ga8a426acea7ced6d46716695e243462dd", null ], [ "ambe_decode_frame", "group__codec__private.html#ga96427955e6f3174ea846064627843bc3", null ], [ "ambe_decode_init", "group__codec__private.html#gaac2c306e18df0fb45f2487e83ba4f9e9", null ] ];html/group__gsmtap.js0000644000175000017500000000031514753471227014221 0ustar buildbuildvar group__gsmtap = [ [ "gsmtap.h", "gsmtap_8h.html", null ], [ "gsmtap.c", "gsmtap_8c.html", null ], [ "gmr1_gsmtap_makemsg", "group__gsmtap.html#gaade0b34d5438103fb3376d6061b0193d", null ] ];html/structambe__raw__params.html0000644000175000017500000002512214753471227016571 0ustar buildbuild osmo-gmr: ambe_raw_params Struct Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
ambe_raw_params Struct Reference

AMBE encoded frame raw parameters. More...

#include <private.h>

Data Fields

uint8_t pitch
 Pitch.
 
uint8_t pitch_interp
 Pitch interpolation selection.
 
uint8_t gain
 Gain VQ.
 
uint8_t v_uv
 V/UV decision VQ.
 
uint8_t sf1_prba12
 sf1 PRBA[1,2] VQ

 
uint8_t sf1_prba34
 sf1 PRBA[3,4] VQ

 
uint8_t sf1_prba57
 sf1 PRBA[5,6,7] VQ
 
uint8_t sf1_hoc [4]
 sf1 HOCs VQ

 
uint8_t sf0_mag_interp
 sf0 mag interpolation selection

 
uint8_t sf0_perr_14
 sf0 mag prediction error VQ [1,4]
 
uint8_t sf0_perr_58
 sf0 mag prediction error VQ [5,8]
 

Detailed Description

AMBE encoded frame raw parameters.


The documentation for this struct was generated from the following file:
html/bc_s.png0000644000175000017500000000124414753471226012432 0ustar buildbuild‰PNG  IHDR€_ kIDATxíËkQÆϹÉ̤I&“¦mš&156*nÄ…”ܸR,4 +Hµ(U­b”ª1‚ŠˆJ.º(E·mßúhëJmKS'C›(‚èäÑ…¤ï &äÖþ ‡ïrÎåü3gö(z÷ýÒ&_9ó}’ÕŸ@‰mÚu ` Øh`ñ÷Ô¯  „ú&·ññ×Ù~“½—Üò‡ÎÝÑM4¸%‰3²§?Êêh)€ÿù™\ÄYi>Jb @gûßiÞˆú²Ñkg§ãê\è½­šEUæv+?E€î"pæÖÛB\ƒY&ðØó$vM+ê’Dn¼)}òþ:§Xoâ ƒ3ŠÚ¯'¯¿.‚fÁ0ìuŠ9òLýj€f6¸%«3Gf”Ô#Ôsm(,ùÃk*Ê’³Jª…¯¼JË¢o䆔¼u_~ °r]%%mnu]z°r5[ÍÆ°«Úò•Xeµ’†Iù<ÈèÐÅg@IÔÚÞàµë3‚:/<JÇ’ÐQ) ñ¹…tÚß÷(Mû\63éCgl!ýí;ÿ¸4Ùhâñ=÷Zë29­w’ÝÒ´·ˆV;ÊL3ƒj&7©·º½÷a!I†)ëë$-öÇÓú³›‹7tIV¾VàñÔübf¨8¡ÈƒB<﫵imnÿœÈ‡„ lߣù‡ÛD —#É5“­'Æ4?쬲øM’™›°»g¬‚|5Åçµ½GNdÓÐr|ô”Ã&„ì"7+'³@ 5‡Gâž‘Ç…âɬ^;õã–.3Òr"ý_R³¿Â@²oI¾å$IEND®B`‚html/gsmtap_8h_source.html0000644000175000017500000002276314753471227015170 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/gsmtap.h Source File
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
gsmtap.h
Go to the documentation of this file.
1/* GMR-1 GSMtap helpers */
2
3/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
4 * All Rights Reserved
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU Affero General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Affero General Public License for more details.
15 *
16 * You should have received a copy of the GNU Affero General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef __OSMO_GMR1_GSMTAP_H__
21#define __OSMO_GMR1_GSMTAP_H__
22
31#include <stdint.h>
32
33struct msgb;
34
35
36struct msgb *gmr1_gsmtap_makemsg(
37 uint8_t chan_type, uint32_t fn, uint8_t tn,
38 const uint8_t *l2, int len);
39
40
43#endif /* __OSMO_GMR1_GSMTAP_H__ */
struct msgb * gmr1_gsmtap_makemsg(uint8_t chan_type, uint32_t fn, uint8_t tn, const uint8_t *l2, int len)
Helper to build GSM tap message with GMR-1 payload.
Definition: gsmtap.c:44
html/group__rach.js0000644000175000017500000000042714753471227013647 0ustar buildbuildvar group__rach = [ [ "rach.h", "rach_8h.html", null ], [ "rach.c", "rach_8c.html", null ], [ "gmr1_rach_decode", "group__rach.html#ga4e3f0c261d715b618e188dd5d2a14391", null ], [ "gmr1_rach_encode", "group__rach.html#gaa55acd1e1d248c2b34a97af389c69e90", null ] ];html/nb_8c.html0000644000175000017500000002772714753471227012714 0ustar buildbuild osmo-gmr: src/sdr/nb.c File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 Normal bursts descriptions. More...

#include <stdlib.h>
#include <osmocom/gmr1/sdr/pi4cxpsk.h>

Variables

struct gmr1_pi4cxpsk_burst gmr1_bcch_burst
 BCCH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.2. More...
 
struct gmr1_pi4cxpsk_burst gmr1_dc2_burst
 DC2 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.4. More...
 
struct gmr1_pi4cxpsk_burst gmr1_dc6_burst
 DC6 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.5. More...
 
struct gmr1_pi4cxpsk_burst gmr1_dc12_burst
 DC12 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V3.1.1) - Section 7.4.16. More...
 
struct gmr1_pi4cxpsk_burst gmr1_nt3_speech_burst
 NT3 bursts for encoded speech See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.8.1. More...
 
struct gmr1_pi4cxpsk_burst gmr1_nt3_facch_burst
 NT3 bursts for FACCH See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.8.2. More...
 
struct gmr1_pi4cxpsk_burst gmr1_nt6_burst
 NT6 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.9. More...
 
struct gmr1_pi4cxpsk_burst gmr1_nt9_burst
 NT9 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.10. More...
 
struct gmr1_pi4cxpsk_burst gmr1_rach_burst
 RACH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.11. More...
 
struct gmr1_pi4cxpsk_burst gmr1_sdcch_burst
 SDCCH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.12. More...
 

Detailed Description

Osmocom GMR-1 Normal bursts descriptions.

html/punct_8c.js0000644000175000017500000001147014753471227013102 0ustar buildbuildvar punct_8c = [ [ "gmr1_puncturer_generate", "group__punct.html#ga95a97b9c89435bf6826fdeb21d881ff2", null ], [ "gmr1_punct_k5_12_A", "group__punct.html#ga6b3c25e254784f342165a138f7b000a4", null ], [ "gmr1_punct_k5_12_B", "group__punct.html#ga5fba7e4ebdfdf45715b68bc77ad55b56", null ], [ "gmr1_punct_k5_12_C", "group__punct.html#ga3d7fe225e1e537f88f58220d8dd68076", null ], [ "gmr1_punct_k5_12_D", "group__punct.html#gad04e1754667748acd42c3fb6867dc09d", null ], [ "gmr1_punct_k5_12_E", "group__punct.html#ga94c4d51e0dfe595be3d2505f64c3ea5c", null ], [ "gmr1_punct_k5_12_P12", "group__punct.html#gaa8bce8b6ca73fc45c3c0c596037c1849", null ], [ "gmr1_punct_k5_12_P23", "group__punct.html#gaa03eb3f46b3027767323ccc546414c5b", null ], [ "gmr1_punct_k5_12_P25", "group__punct.html#gabea6708a946be5c940ac734ef6a0238f", null ], [ "gmr1_punct_k5_12_P26", "group__punct.html#gac052cb5f0bd3f9f828b1c23d03ea4f22", null ], [ "gmr1_punct_k5_12_P311", "group__punct.html#ga77ed0b501d05b89717919e77cb66f55c", null ], [ "gmr1_punct_k5_12_P37", "group__punct.html#ga04fe577ed7854a24812ccc020b7777cc", null ], [ "gmr1_punct_k5_12_P38", "group__punct.html#gadd9a431fb84f6c100472f428642cece3", null ], [ "gmr1_punct_k5_12_P412", "group__punct.html#gae61e6323084580be44337702851f0560", null ], [ "gmr1_punct_k5_12_Ps12", "group__punct.html#gaf6f62025e6ad2089904f214fea702a49", null ], [ "gmr1_punct_k5_12_Ps25", "group__punct.html#gaecda3c501174763dac7c5c646ea44690", null ], [ "gmr1_punct_k5_12_Ps412", "group__punct.html#ga134d1e54bfe1d47a0841e6dbe9b27cd8", null ], [ "gmr1_punct_k5_13_P15", "group__punct.html#ga8f444be2364421750572d3b2b3e4d442", null ], [ "gmr1_punct_k5_13_P16", "group__punct.html#ga6288534135f6da5447232a7b5337448f", null ], [ "gmr1_punct_k5_13_P25", "group__punct.html#ga9118d1c2fa81fdaf5f15ffc633e66a88", null ], [ "gmr1_punct_k5_13_P78", "group__punct.html#gaa4798a84b9662a863f7cfeaa6206aba5", null ], [ "gmr1_punct_k5_13_Ps15", "group__punct.html#gaa4d4874e4d1a51d70b1d67113f0bfeb2", null ], [ "gmr1_punct_k5_15_P23", "group__punct.html#ga9d6d7b1b48148bb4cc4678790a68b5ff", null ], [ "gmr1_punct_k5_15_P53", "group__punct.html#ga0c42fa663dd288c81566d1616420e3fb", null ], [ "gmr1_punct_k5_15_Ps53", "group__punct.html#ga589d0f7c6ab25753c32664969414f1fd", null ], [ "gmr1_punct_k6_14_P45", "group__punct.html#ga780e4af9db89c4bb51808bd2a35fa593", null ], [ "gmr1_punct_k7_12_P1152", "group__punct.html#gafecfb0fbfb4f49c8a370362b98bb5aff", null ], [ "gmr1_punct_k7_12_P116", "group__punct.html#gac001aebb5c9026aa629a95146427736a", null ], [ "gmr1_punct_k7_12_P148", "group__punct.html#gad360cd4e2a33eedc63954a5a8731d1ac", null ], [ "gmr1_punct_k7_12_P184", "group__punct.html#ga642a5293a4366ad2c0eddadc92cac23b", null ], [ "gmr1_punct_k7_12_P23", "group__punct.html#ga97a416384feb6b6e73215576b377faa5", null ], [ "gmr1_punct_k7_12_P245", "group__punct.html#ga6ec3a6b25235d2e5bac464c1f7a1fe85", null ], [ "gmr1_punct_k7_12_P410", "group__punct.html#ga2db6a1bba45111d8398a77a8ea8dc72d", null ], [ "gmr1_punct_k7_12_P45", "group__punct.html#ga0eb3ce9d40905c17c808223aac3a5543", null ], [ "gmr1_punct_k7_12_P512", "group__punct.html#ga069c9fc93f97ac8f81874ad3486d8e2c", null ], [ "gmr1_punct_k9_12_P110", "group__punct.html#gaa7ef8a86ffc3fe190ba8e501cc161208", null ], [ "gmr1_punct_k9_12_P13", "group__punct.html#ga6de89b61b5d5cd075a2edfa5da3acb8d", null ], [ "gmr1_punct_k9_12_P14", "group__punct.html#ga78cb3a5553a7c084c637e1845049c2a3", null ], [ "gmr1_punct_k9_12_P17", "group__punct.html#ga793c265d459c6c7d263edfd9fa5d82c8", null ], [ "gmr1_punct_k9_12_P19", "group__punct.html#ga2864cbf423bbdf1aa723b865aa5670cf", null ], [ "gmr1_punct_k9_12_P234", "group__punct.html#ga2d84992ac096d9b4fe041d0a9aaf33df", null ], [ "gmr1_punct_k9_12_P26", "group__punct.html#gaca082b213957ed2b9f2ea17c74ff76c5", null ], [ "gmr1_punct_k9_12_P34", "group__punct.html#gaf7fd0ce78be41fd48a1509a477ff7c0c", null ], [ "gmr1_punct_k9_12_P45", "group__punct.html#gaac0e2e21cdb173c9f7b8ce64b4fcad3a", null ], [ "gmr1_punct_k9_12_P47", "group__punct.html#ga4aefdbb9d3ed87e0e57bff3289700de1", null ], [ "gmr1_punct_k9_13_P12", "group__punct.html#ga3221eef995a6154b1a5976b64e17f269", null ], [ "gmr1_punct_k9_13_P1213", "group__punct.html#ga868634869b605e0b4ab7694d11f816da", null ], [ "gmr1_punct_k9_13_P33", "group__punct.html#ga5cc77e83e90a1186a931981b40aa9f1e", null ], [ "gmr1_punct_k9_13_P44", "group__punct.html#ga073c0a4550a5f828a5eac48b9e3ca06c", null ], [ "gmr1_punct_k9_13_P65", "group__punct.html#gaa9d92cbd0a8bbeedb9cd7860e3422f17", null ], [ "gmr1_punct_k9_14_P148", "group__punct.html#gadf567a87a9c00c73dbb132863871c24c", null ], [ "gmr1_punct_k9_14_P65", "group__punct.html#ga767c7a63fdd42bcf8e9e3b8da7e8dbe7", null ] ];html/globals_s.html0000644000175000017500000000766314753471227013665 0ustar buildbuild osmo-gmr: Globals
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:

- s -

html/interleave_8h.js0000644000175000017500000000116314753471227014112 0ustar buildbuildvar interleave_8h = [ [ "gmr1_deinterleave_inter", "group__interleave.html#ga342cfe4226b3a193e5944e6a8322d491", null ], [ "gmr1_deinterleave_intra", "group__interleave.html#ga101a51679fedd2c835225608f77ae3d8", null ], [ "gmr1_interleave_inter", "group__interleave.html#gac392346badff10ae6a2abfe8b1e96e32", null ], [ "gmr1_interleave_intra", "group__interleave.html#gaf54dd588068ba4225f190c091352bbc9", null ], [ "gmr1_interleaver_fini", "group__interleave.html#gaaa98a1ab608c6146e9c8974687c75ed7", null ], [ "gmr1_interleaver_init", "group__interleave.html#ga78f48b3938dcda4c06b4d2da3eaedcaf", null ] ];html/structgmr1__pi4cxpsk__burst.js0000644000175000017500000000126314753471227017033 0ustar buildbuildvar structgmr1__pi4cxpsk__burst = [ [ "data", "structgmr1__pi4cxpsk__burst.html#a743e2058421775d2033d5e455e7be163", null ], [ "ebits", "structgmr1__pi4cxpsk__burst.html#a8205aeb2d88053361619f1baa0593a89", null ], [ "guard_post", "structgmr1__pi4cxpsk__burst.html#a5985baf01b937f381470bb0d5810ea00", null ], [ "guard_pre", "structgmr1__pi4cxpsk__burst.html#a30a0e6c90559f9b66def7814fe8f9af2", null ], [ "len", "structgmr1__pi4cxpsk__burst.html#ad164674725c949673b0a2ec24e0f0000", null ], [ "mod", "structgmr1__pi4cxpsk__burst.html#a835af391ae1715b41cbdd52efd1b378a", null ], [ "sync", "structgmr1__pi4cxpsk__burst.html#a68e57bf2eeee31d4a9f5efb2dfb7a145", null ] ];html/fcch_8c.html0000644000175000017500000002624514753471227013212 0ustar buildbuild osmo-gmr: src/sdr/fcch.c File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 FCCH bursts implementation. More...

#include <complex.h>
#include <math.h>
#include <errno.h>
#include <stdlib.h>
#include <fftw3.h>
#include <osmocom/dsp/cxvec.h>
#include <osmocom/dsp/cxvec_math.h>
#include <osmocom/gmr1/sdr/defs.h>
#include <osmocom/gmr1/sdr/fcch.h>

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. 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

Osmocom GMR-1 FCCH bursts implementation.

html/doxygen.svg0000644000175000017500000003602614753471226013222 0ustar buildbuild html/navtreeindex0.js0000644000175000017500000003531714753471227014141 0ustar buildbuildvar NAVTREEINDEX0 = { "a5_8c.html":[0,2,0,1], "a5_8h.html":[0,2,0,0], "ambe_8c.html":[0,0,0,0], "annotated.html":[1,0], "bcch_8c.html":[0,2,2,0,1], "bcch_8h.html":[0,2,2,0,0], "ccch_8c.html":[0,2,2,1,1], "ccch_8h.html":[0,2,2,1,0], "codec_8c.html":[0,0,2], "codec_8h.html":[0,0,1], "conv_8c.html":[0,2,1,0,1], "conv_8h.html":[0,2,1,0,0], "crc_8c.html":[0,2,1,1,1], "crc_8h.html":[0,2,1,1,0], "dir_49d8fb8de83b72576102f4228b661ee1.html":[2,0,0,0,0,2], "dir_68267d1309a1af8e8297ef4c3efbcdba.html":[2,0,1], "dir_7cd3553532f49ae70e5af4297e6b9642.html":[2,0,0,0,0], "dir_85d85a69dfdae3508530486760177413.html":[2,0,0,0,0,1], "dir_8d7fe3e74f1d95a733af486e7566cca0.html":[2,0,1,2], "dir_9c8ef0db9d7395bd53b81b89d3ccbcb1.html":[2,0,0,0,0,0], "dir_abe9b486a10ccc5afdf8abc29637e0c1.html":[2,0,0,0], "dir_b28332b7c67bf5065126b2ebef06f8f3.html":[2,0,1,0], "dir_d44c64559bbebec7f509842c48db8b23.html":[2,0,0], "dir_de2ed61ed77189ce3af8769c70dd3919.html":[2,0,1,1], "dkab_8c.html":[0,3,0,1], "dkab_8h.html":[0,3,0,0], "facch3_8c.html":[0,2,2,2,1], "facch3_8h.html":[0,2,2,2,0], "facch9_8c.html":[0,2,2,3,1], "facch9_8h.html":[0,2,2,3,0], "fcch_8c.html":[0,3,1,1], "fcch_8h.html":[0,3,1,0], "files.html":[2,0], "frame_8c.html":[0,0,0,1], "functions.html":[1,1,0], "functions_vars.html":[1,1,1], "globals.html":[2,1,0,0], "globals.html":[2,1,0], "globals_c.html":[2,1,0,1], "globals_d.html":[2,1,0,2], "globals_defs.html":[2,1,5], "globals_enum.html":[2,1,3], "globals_eval.html":[2,1,4], "globals_func.html":[2,1,1], "globals_g.html":[2,1,0,3], "globals_m.html":[2,1,0,4], "globals_s.html":[2,1,0,5], "globals_vars.html":[2,1,2], "group__a5.html":[0,2,0], "group__a5.html#gad385682d03d182ea6e3d0e99fa4ca04e":[0,2,0,3], "group__a5.html#gaddb4e3e6e4a5b5f91fe9308250a70375":[0,2,0,2], "group__bcch.html":[0,2,2,0], "group__bcch.html#ga73717708a391d84da44845fbaf2e73a4":[0,2,2,0,2], "group__bcch.html#ga7a8f900d4c5b81ad9a903ee9b7d6b9e7":[0,2,2,0,3], "group__ccch.html":[0,2,2,1], "group__ccch.html#ga2773482e1dd8ea377c2191771f85db11":[0,2,2,1,2], "group__ccch.html#gaf77ce531802993a1d64bd773215b5d7d":[0,2,2,1,3], "group__codec.html":[0,0], "group__codec.html#ga23fe43b3790482c7f99d3aa33940f54f":[0,0,5], "group__codec.html#ga34e0de595c6498ae39695d5909bec094":[0,0,4], "group__codec.html#ga81d71b9b1e226a344a896d926ad4537a":[0,0,6], "group__codec.html#gad1c2b9c16672bcd48076af0b0f162557":[0,0,7], "group__codec__private.html":[0,0,0], "group__codec__private.html#ga0d2a102900214d2ebdab56bf85024cf2":[0,0,0,24], "group__codec__private.html#ga109dca33b432f87d6d6a14a4a0787e06":[0,0,0,55], "group__codec__private.html#ga109dca33b432f87d6d6a14a4a0787e06":[0,0,0,54], "group__codec__private.html#ga109f07fd3782470868b1d1d2ec099eb6":[0,0,0,14], "group__codec__private.html#ga2d3ff962344089d1a44fd0d659c55df8":[0,0,0,26], "group__codec__private.html#ga31252750e130d6bf531c483df2ec8a49":[0,0,0,29], "group__codec__private.html#ga35df9825da65a2015f7576c83c9843f4":[0,0,0,48], "group__codec__private.html#ga35df9825da65a2015f7576c83c9843f4":[0,0,0,49], "group__codec__private.html#ga42a2421d73b8b9021b2b88698057b53b":[0,0,0,53], "group__codec__private.html#ga42a2421d73b8b9021b2b88698057b53b":[0,0,0,52], "group__codec__private.html#ga55a71c63c53e21c1d6fc9c91ddf519cd":[0,0,0,22], "group__codec__private.html#ga5fdca2bf0b039f3bb0dd97b0f601fe62":[0,0,0,28], "group__codec__private.html#ga616fdb311356f3430ade8e24d45479b4":[0,0,0,40], "group__codec__private.html#ga616fdb311356f3430ade8e24d45479b4":[0,0,0,41], "group__codec__private.html#ga62bc434f8483f0198f86b388ab30ced6":[0,0,0,30], "group__codec__private.html#ga735cc90f20631506f7a5fc4827f4e8d5":[0,0,0,57], "group__codec__private.html#ga735cc90f20631506f7a5fc4827f4e8d5":[0,0,0,56], "group__codec__private.html#ga7ca25dc5919fcff4c7494eb02d25fda2":[0,0,0,27], "group__codec__private.html#ga83063f9ee0607fe61bacc11bd42d059f":[0,0,0,20], "group__codec__private.html#ga8782e94d4fc86ce45ea714a7316eecd4":[0,0,0,32], "group__codec__private.html#ga8782e94d4fc86ce45ea714a7316eecd4":[0,0,0,33], "group__codec__private.html#ga8992a95357c191374ac100f76f8b42fe":[0,0,0,38], "group__codec__private.html#ga8992a95357c191374ac100f76f8b42fe":[0,0,0,39], "group__codec__private.html#ga8a426acea7ced6d46716695e243462dd":[0,0,0,16], "group__codec__private.html#ga8a4e007b142973be5b44ef1637c9bfee":[0,0,0,23], "group__codec__private.html#ga8f0cf32d32bde050a40a3e7087185aad":[0,0,0,15], "group__codec__private.html#ga934c67cf74ce3f2944594eab3958139c":[0,0,0,37], "group__codec__private.html#ga934c67cf74ce3f2944594eab3958139c":[0,0,0,36], "group__codec__private.html#ga96427955e6f3174ea846064627843bc3":[0,0,0,17], "group__codec__private.html#ga9d9e8b11e46bf3ccf14d22be87f1c719":[0,0,0,21], "group__codec__private.html#gaac2c306e18df0fb45f2487e83ba4f9e9":[0,0,0,18], "group__codec__private.html#gaadea447d12d8536738479b549eb42fdf":[0,0,0,47], "group__codec__private.html#gaadea447d12d8536738479b549eb42fdf":[0,0,0,46], "group__codec__private.html#gab7a7b1219368c43c898cfb24ff3cb5cd":[0,0,0,50], "group__codec__private.html#gab7a7b1219368c43c898cfb24ff3cb5cd":[0,0,0,51], "group__codec__private.html#gac1723f2fb63e31519d15815b05cc2a67":[0,0,0,12], "group__codec__private.html#gac6bf71952dbf30ef32fb5cc91681d8d6":[0,0,0,35], "group__codec__private.html#gac6bf71952dbf30ef32fb5cc91681d8d6":[0,0,0,34], "group__codec__private.html#gacbb42dc053fedc161079f0a4d20a64e8":[0,0,0,13], "group__codec__private.html#gadbfdcbf5186cc1c567112e4edc29a1a1":[0,0,0,25], "group__codec__private.html#gade8a6e65fb5db286835ffd82b0f61dd1":[0,0,0,31], "group__codec__private.html#gae5a94c3201e655989c87379268c30623":[0,0,0,44], "group__codec__private.html#gae5a94c3201e655989c87379268c30623":[0,0,0,45], "group__codec__private.html#gaf5856df7a0f19188013d6c610a2b7f60":[0,0,0,19], "group__codec__private.html#gafaaf0c3cc5a7cd0f44133e1f5922a52d":[0,0,0,43], "group__codec__private.html#gafaaf0c3cc5a7cd0f44133e1f5922a52d":[0,0,0,42], "group__codec__private.html#gga109f07fd3782470868b1d1d2ec099eb6a14419c7969d8bb6cf9b2d8b71f30f33b":[0,0,0,14,0], "group__codec__private.html#gga109f07fd3782470868b1d1d2ec099eb6a3ed83bce1686c0614c9377ff191cc8d1":[0,0,0,14,2], "group__codec__private.html#gga109f07fd3782470868b1d1d2ec099eb6a719fb04a91460753423334efdad424b5":[0,0,0,14,1], "group__conv.html":[0,2,1,0], "group__conv.html#ga0aaad5b737b08f90b906fbd369df8ccc":[0,2,1,0,16], "group__conv.html#ga0aaad5b737b08f90b906fbd369df8ccc":[0,2,1,0,17], "group__conv.html#ga622aa845f1ef3258a750b0da2df27d13":[0,2,1,0,19], "group__conv.html#ga622aa845f1ef3258a750b0da2df27d13":[0,2,1,0,18], "group__conv.html#ga647389b5ecf36c9770b4ecfd57c11fe0":[0,2,1,0,15], "group__conv.html#ga647389b5ecf36c9770b4ecfd57c11fe0":[0,2,1,0,14], "group__conv.html#ga6e7732168c9ecb6ad0b14ed8001c4588":[0,2,1,0,10], "group__conv.html#ga6e7732168c9ecb6ad0b14ed8001c4588":[0,2,1,0,11], "group__conv.html#ga70b8d0dc1e500ff3a1986315e6551a27":[0,2,1,0,8], "group__conv.html#ga70b8d0dc1e500ff3a1986315e6551a27":[0,2,1,0,9], "group__conv.html#gaa9043b27694a4c4438b18f7cd60950cd":[0,2,1,0,12], "group__conv.html#gaa9043b27694a4c4438b18f7cd60950cd":[0,2,1,0,13], "group__conv.html#gad0dab5050f72518f948d10b78ee21b2d":[0,2,1,0,6], "group__conv.html#gad0dab5050f72518f948d10b78ee21b2d":[0,2,1,0,7], "group__conv.html#gad9e7ba139d8b88117361ce2c069b3ac1":[0,2,1,0,2], "group__conv.html#gad9e7ba139d8b88117361ce2c069b3ac1":[0,2,1,0,3], "group__conv.html#gae46510aefce08ef3158790186b00a404":[0,2,1,0,4], "group__conv.html#gae46510aefce08ef3158790186b00a404":[0,2,1,0,5], "group__crc.html":[0,2,1,1], "group__crc.html#ga39976cbbb95bf2ee17510e23e66e9662":[0,2,1,1,2], "group__crc.html#ga39976cbbb95bf2ee17510e23e66e9662":[0,2,1,1,3], "group__crc.html#ga475488b3214308419d2d8ced50df5257":[0,2,1,1,7], "group__crc.html#ga475488b3214308419d2d8ced50df5257":[0,2,1,1,6], "group__crc.html#ga4c203dc885ad2c23dbc5e26457d2b52e":[0,2,1,1,4], "group__crc.html#ga4c203dc885ad2c23dbc5e26457d2b52e":[0,2,1,1,5], "group__dkab.html":[0,3,0], "group__dkab.html#ga889c2d34cc3eee7b12b8d88023504e0f":[0,3,0,3], "group__dkab.html#gadd49926a91b1c3ab8c0b96d2fdd7c6e4":[0,3,0,2], "group__facch3.html":[0,2,2,2], "group__facch3.html#ga8f2a10c4a2203e69460dbf7f8345cd26":[0,2,2,2,2], "group__facch3.html#gae7fb89197eae0f343d38c3c70b2d6ada":[0,2,2,2,3], "group__facch9.html":[0,2,2,3], "group__facch9.html#ga42d1d80d7a1bfab7d92ad0d28d8f87c6":[0,2,2,3,2], "group__facch9.html#ga8956be2f31fd48853350bc092fd1797f":[0,2,2,3,3], "group__fcch.html":[0,3,1], "group__fcch.html#ga09ca32ce9f0bbe6d6d5b7977aae2758f":[0,3,1,12], "group__fcch.html#ga09ca32ce9f0bbe6d6d5b7977aae2758f":[0,3,1,11], "group__fcch.html#ga14e6b77fe05bf2ef7600204ba6818a47":[0,3,1,4], "group__fcch.html#ga20cea569bd20f7c7a3b14420c9301b1b":[0,3,1,10], "group__fcch.html#ga20cea569bd20f7c7a3b14420c9301b1b":[0,3,1,9], "group__fcch.html#ga2b1c8329ac1c8cae7414d2ca4619f17f":[0,3,1,3], "group__fcch.html#ga614cf46fe5e868c8b573491736487fba":[0,3,1,6], "group__fcch.html#ga6598bb31a09a997eaa079838babc2f25":[0,3,1,8], "group__fcch.html#ga6598bb31a09a997eaa079838babc2f25":[0,3,1,7], "group__fcch.html#ga822f719832670df978c08008c2e7a3df":[0,3,1,5], "group__gsmtap.html":[0,1], "group__gsmtap.html#gaade0b34d5438103fb3376d6061b0193d":[0,1,2], "group__interleave.html":[0,2,1,2], "group__interleave.html#ga101a51679fedd2c835225608f77ae3d8":[0,2,1,2,4], "group__interleave.html#ga342cfe4226b3a193e5944e6a8322d491":[0,2,1,2,3], "group__interleave.html#ga78f48b3938dcda4c06b4d2da3eaedcaf":[0,2,1,2,8], "group__interleave.html#gaaa98a1ab608c6146e9c8974687c75ed7":[0,2,1,2,7], "group__interleave.html#gac392346badff10ae6a2abfe8b1e96e32":[0,2,1,2,5], "group__interleave.html#gaf54dd588068ba4225f190c091352bbc9":[0,2,1,2,6], "group__l1.html":[0,2], "group__l1__chan.html":[0,2,2], "group__l1__prim.html":[0,2,1], "group__nb.html":[0,3,2], "group__nb.html#ga0f6b872aea487079770276792b11f024":[0,3,2,14], "group__nb.html#ga0f6b872aea487079770276792b11f024":[0,3,2,15], "group__nb.html#ga4dfb2061d86695f527d93c228f7e80cf":[0,3,2,4], "group__nb.html#ga4dfb2061d86695f527d93c228f7e80cf":[0,3,2,5], "group__nb.html#ga5b7005d048a228c2fb1689772ec2a02b":[0,3,2,13], "group__nb.html#ga5b7005d048a228c2fb1689772ec2a02b":[0,3,2,12], "group__nb.html#ga6efdbfdc0a900c0da7e1ae35157d9d75":[0,3,2,18], "group__nb.html#ga6efdbfdc0a900c0da7e1ae35157d9d75":[0,3,2,19], "group__nb.html#ga8e081ca45a3c928dc97cc56ceb445542":[0,3,2,20], "group__nb.html#ga8e081ca45a3c928dc97cc56ceb445542":[0,3,2,21], "group__nb.html#gab4f338ae4b7c91d61f4a1fbd5ddb22db":[0,3,2,6], "group__nb.html#gab4f338ae4b7c91d61f4a1fbd5ddb22db":[0,3,2,7], "group__nb.html#gabcff92c63441c414f2b700abed3ff5e5":[0,3,2,9], "group__nb.html#gabcff92c63441c414f2b700abed3ff5e5":[0,3,2,8], "group__nb.html#gace85abbda202a99f17800dfe3a449ad8":[0,3,2,17], "group__nb.html#gace85abbda202a99f17800dfe3a449ad8":[0,3,2,16], "group__nb.html#gad65ff6135513219615583bf2652905a0":[0,3,2,11], "group__nb.html#gad65ff6135513219615583bf2652905a0":[0,3,2,10], "group__nb.html#gadb3e07f31ce31edf73ee29cb97ecb27c":[0,3,2,2], "group__nb.html#gadb3e07f31ce31edf73ee29cb97ecb27c":[0,3,2,3], "group__pi4cxpsk.html":[0,3,3], "group__pi4cxpsk.html#ga1490fd560c08a9468c40ff69f2cae2bb":[0,3,3,11], "group__pi4cxpsk.html#ga37214979bb79f5d23784ba1eda5fa384":[0,3,3,15], "group__pi4cxpsk.html#ga37214979bb79f5d23784ba1eda5fa384":[0,3,3,14], "group__pi4cxpsk.html#ga39685a0ee6daeb04f7ca70bbd6d1fe29":[0,3,3,10], "group__pi4cxpsk.html#ga3a551a9ff371809aa32f6bbeaf48fc62":[0,3,3,7], "group__pi4cxpsk.html#ga554b1c56cd86f4e9c9cbdcc455212770":[0,3,3,12], "group__pi4cxpsk.html#ga652dcdb5ad05ce39ebef8a5b97f6d516":[0,3,3,18], "group__pi4cxpsk.html#ga652dcdb5ad05ce39ebef8a5b97f6d516":[0,3,3,19], "group__pi4cxpsk.html#ga7078b941f0b0a04ff9ddf290452b93a9":[0,3,3,8], "group__pi4cxpsk.html#ga82887564b076046745f705f7c27c930e":[0,3,3,13], "group__pi4cxpsk.html#gad1c5069c814820ccbc9abcc700fb6193":[0,3,3,9], "group__pi4cxpsk.html#gaeae7cf33a9694b1911deefb535f5c1b8":[0,3,3,17], "group__pi4cxpsk.html#gaeae7cf33a9694b1911deefb535f5c1b8":[0,3,3,16], "group__punct.html":[0,2,1,3], "group__punct.html#ga04fe577ed7854a24812ccc020b7777cc":[0,2,1,3,24], "group__punct.html#ga04fe577ed7854a24812ccc020b7777cc":[0,2,1,3,25], "group__punct.html#ga069c9fc93f97ac8f81874ad3486d8e2c":[0,2,1,3,70], "group__punct.html#ga069c9fc93f97ac8f81874ad3486d8e2c":[0,2,1,3,71], "group__punct.html#ga073c0a4550a5f828a5eac48b9e3ca06c":[0,2,1,3,99], "group__punct.html#ga073c0a4550a5f828a5eac48b9e3ca06c":[0,2,1,3,98], "group__punct.html#ga0c42fa663dd288c81566d1616420e3fb":[0,2,1,3,48], "group__punct.html#ga0c42fa663dd288c81566d1616420e3fb":[0,2,1,3,49], "group__punct.html#ga0eb3ce9d40905c17c808223aac3a5543":[0,2,1,3,69], "group__punct.html#ga0eb3ce9d40905c17c808223aac3a5543":[0,2,1,3,68], "group__punct.html#ga134d1e54bfe1d47a0841e6dbe9b27cd8":[0,2,1,3,34], "group__punct.html#ga134d1e54bfe1d47a0841e6dbe9b27cd8":[0,2,1,3,35], "group__punct.html#ga2864cbf423bbdf1aa723b865aa5670cf":[0,2,1,3,80], "group__punct.html#ga2864cbf423bbdf1aa723b865aa5670cf":[0,2,1,3,81], "group__punct.html#ga2d84992ac096d9b4fe041d0a9aaf33df":[0,2,1,3,82], "group__punct.html#ga2d84992ac096d9b4fe041d0a9aaf33df":[0,2,1,3,83], "group__punct.html#ga2db6a1bba45111d8398a77a8ea8dc72d":[0,2,1,3,67], "group__punct.html#ga2db6a1bba45111d8398a77a8ea8dc72d":[0,2,1,3,66], "group__punct.html#ga3221eef995a6154b1a5976b64e17f269":[0,2,1,3,93], "group__punct.html#ga3221eef995a6154b1a5976b64e17f269":[0,2,1,3,92], "group__punct.html#ga3d7fe225e1e537f88f58220d8dd68076":[0,2,1,3,9], "group__punct.html#ga3d7fe225e1e537f88f58220d8dd68076":[0,2,1,3,8], "group__punct.html#ga4aefdbb9d3ed87e0e57bff3289700de1":[0,2,1,3,90], "group__punct.html#ga4aefdbb9d3ed87e0e57bff3289700de1":[0,2,1,3,91], "group__punct.html#ga589d0f7c6ab25753c32664969414f1fd":[0,2,1,3,51], "group__punct.html#ga589d0f7c6ab25753c32664969414f1fd":[0,2,1,3,50], "group__punct.html#ga5cc77e83e90a1186a931981b40aa9f1e":[0,2,1,3,97], "group__punct.html#ga5cc77e83e90a1186a931981b40aa9f1e":[0,2,1,3,96], "group__punct.html#ga5fba7e4ebdfdf45715b68bc77ad55b56":[0,2,1,3,6], "group__punct.html#ga5fba7e4ebdfdf45715b68bc77ad55b56":[0,2,1,3,7], "group__punct.html#ga6288534135f6da5447232a7b5337448f":[0,2,1,3,38], "group__punct.html#ga6288534135f6da5447232a7b5337448f":[0,2,1,3,39], "group__punct.html#ga642a5293a4366ad2c0eddadc92cac23b":[0,2,1,3,61], "group__punct.html#ga642a5293a4366ad2c0eddadc92cac23b":[0,2,1,3,60], "group__punct.html#ga6b3c25e254784f342165a138f7b000a4":[0,2,1,3,4], "group__punct.html#ga6b3c25e254784f342165a138f7b000a4":[0,2,1,3,5], "group__punct.html#ga6de89b61b5d5cd075a2edfa5da3acb8d":[0,2,1,3,74], "group__punct.html#ga6de89b61b5d5cd075a2edfa5da3acb8d":[0,2,1,3,75], "group__punct.html#ga6ec3a6b25235d2e5bac464c1f7a1fe85":[0,2,1,3,64], "group__punct.html#ga6ec3a6b25235d2e5bac464c1f7a1fe85":[0,2,1,3,65], "group__punct.html#ga767c7a63fdd42bcf8e9e3b8da7e8dbe7":[0,2,1,3,105], "group__punct.html#ga767c7a63fdd42bcf8e9e3b8da7e8dbe7":[0,2,1,3,104], "group__punct.html#ga77ed0b501d05b89717919e77cb66f55c":[0,2,1,3,23], "group__punct.html#ga77ed0b501d05b89717919e77cb66f55c":[0,2,1,3,22] }; html/menudata.js0000644000175000017500000001006614753471227013155 0ustar buildbuild/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ var menudata={children:[ {text:"Main Page",url:"index.html"}, {text:"Modules",url:"modules.html"}, {text:"Data Structures",url:"annotated.html",children:[ {text:"Data Structures",url:"annotated.html"}, {text:"Data Fields",url:"functions.html",children:[ {text:"All",url:"functions.html",children:[ {text:"_",url:"functions.html#index__5F"}, {text:"b",url:"functions.html#index_b"}, {text:"d",url:"functions.html#index_d"}, {text:"e",url:"functions.html#index_e"}, {text:"f",url:"functions.html#index_f"}, {text:"g",url:"functions.html#index_g"}, {text:"i",url:"functions.html#index_i"}, {text:"k",url:"functions.html#index_k"}, {text:"l",url:"functions.html#index_l"}, {text:"m",url:"functions.html#index_m"}, {text:"n",url:"functions.html#index_n"}, {text:"p",url:"functions.html#index_p"}, {text:"r",url:"functions.html#index_r"}, {text:"s",url:"functions.html#index_s"}, {text:"t",url:"functions.html#index_t"}, {text:"u",url:"functions.html#index_u"}, {text:"v",url:"functions.html#index_v"}, {text:"w",url:"functions.html#index_w"}]}, {text:"Variables",url:"functions_vars.html",children:[ {text:"_",url:"functions_vars.html#index__5F"}, {text:"b",url:"functions_vars.html#index_b"}, {text:"d",url:"functions_vars.html#index_d"}, {text:"e",url:"functions_vars.html#index_e"}, {text:"f",url:"functions_vars.html#index_f"}, {text:"g",url:"functions_vars.html#index_g"}, {text:"i",url:"functions_vars.html#index_i"}, {text:"k",url:"functions_vars.html#index_k"}, {text:"l",url:"functions_vars.html#index_l"}, {text:"m",url:"functions_vars.html#index_m"}, {text:"n",url:"functions_vars.html#index_n"}, {text:"p",url:"functions_vars.html#index_p"}, {text:"r",url:"functions_vars.html#index_r"}, {text:"s",url:"functions_vars.html#index_s"}, {text:"t",url:"functions_vars.html#index_t"}, {text:"u",url:"functions_vars.html#index_u"}, {text:"v",url:"functions_vars.html#index_v"}, {text:"w",url:"functions_vars.html#index_w"}]}]}]}, {text:"Files",url:"files.html",children:[ {text:"File List",url:"files.html"}, {text:"Globals",url:"globals.html",children:[ {text:"All",url:"globals.html",children:[ {text:"a",url:"globals.html#index_a"}, {text:"c",url:"globals_c.html#index_c"}, {text:"d",url:"globals_d.html#index_d"}, {text:"g",url:"globals_g.html#index_g"}, {text:"m",url:"globals_m.html#index_m"}, {text:"s",url:"globals_s.html#index_s"}]}, {text:"Functions",url:"globals_func.html",children:[ {text:"a",url:"globals_func.html#index_a"}, {text:"c",url:"globals_func.html#index_c"}, {text:"g",url:"globals_func.html#index_g"}, {text:"s",url:"globals_func.html#index_s"}]}, {text:"Variables",url:"globals_vars.html",children:[ {text:"a",url:"globals_vars.html#index_a"}, {text:"g",url:"globals_vars.html#index_g"}]}, {text:"Enumerations",url:"globals_enum.html"}, {text:"Enumerator",url:"globals_eval.html"}, {text:"Macros",url:"globals_defs.html"}]}]}]} html/structgmr1__pi4cxpsk__symbol.html0000644000175000017500000001605514753471227017536 0ustar buildbuild osmo-gmr: gmr1_pi4cxpsk_symbol Struct Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

pi4-CxPSK symbol description More...

#include <pi4cxpsk.h>

Data Fields

short idx
 Symbol number

 
ubit_t data [GMR1_MAX_SYM_EBITS]
 Encoded data bits

 
float mod_phase
 Phase used during mod.
 
float complex mod_val
 e^(1j*mod_phase)

 

Detailed Description

pi4-CxPSK symbol description


The documentation for this struct was generated from the following file:
html/group__pi4cxpsk.html0000644000175000017500000010173614753471227015034 0ustar buildbuild osmo-gmr: pi2-CBPSK, pi4-CBPSK and pi4-CQPSK modulation
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
pi2-CBPSK, pi4-CBPSK and pi4-CQPSK modulation

Files

file  pi4cxpsk.h
 Osmocom GMR-1 pi2-CBPSK, pi4-CBPSK and pi4-CQPSK modulation support header.
 
file  pi4cxpsk.c
 Osmocom GMR-1 pi2-CBPSK, pi4-CBPSK and pi4-CQPSK modulation support implementation.
 

Data Structures

struct  gmr1_pi4cxpsk_symbol
 pi4-CxPSK symbol description More...
 
struct  gmr1_pi4cxpsk_modulation
 pi4-CxPSK modulation description More...
 
struct  gmr1_pi4cxpsk_sync
 pi4-CxPSK Synchronization sequence segment description More...
 
struct  gmr1_pi4cxpsk_data
 pi4-CxPSK Data segment description More...
 
struct  gmr1_pi4cxpsk_burst
 pi4-CxPSK Burst format description More...
 

Macros

#define GMR1_MAX_SYM_EBITS   2
 Max e bits in a symbol.
 
#define GMR1_MAX_SYNC   4
 Max diff. sync seqs

 
#define GMR1_MAX_SYNC_SYMS   32
 Max sym in a sync seq

 

Functions

int gmr1_pi4cxpsk_demod (struct gmr1_pi4cxpsk_burst *burst_type, struct osmo_cxvec *burst_in, int sps, float freq_shift, sbit_t *ebits, int *sync_id_p, float *toa_p, float *freq_err_p)
 All-in-one pi4-CxPSK demodulation method. More...
 
int gmr1_pi4cxpsk_detect (struct gmr1_pi4cxpsk_burst **burst_types, float e_toa, struct osmo_cxvec *burst_in, int sps, float freq_shift, int *bt_id_p, int *sync_id_p, float *toa_p)
 Try to identify burst type by matching training sequences. More...
 
int gmr1_pi4cxpsk_mod_order (struct osmo_cxvec *burst_in, int sps, float freq_shift)
 Estimates modulation order by comparing power of x^2 vs x^4. More...
 
int gmr1_pi4cxpsk_mod (struct gmr1_pi4cxpsk_burst *burst_type, ubit_t *ebits, int sync_id, struct osmo_cxvec *burst_out)
 Modulates (currently at 1 sps) More...
 

Variables

struct gmr1_pi4cxpsk_modulation gmr1_pi2cbpsk
 pi2-CBPSK modulation description
 
struct gmr1_pi4cxpsk_modulation gmr1_pi4cbpsk
 pi4-CBPSK modulation description
 
struct gmr1_pi4cxpsk_modulation gmr1_pi4cqpsk
 pi4-CQPSK modulation description
 
struct gmr1_pi4cxpsk_modulation gmr1_pi2cbpsk
 pi2-CBPSK modulation description More...
 
struct gmr1_pi4cxpsk_modulation gmr1_pi4cbpsk
 pi4-CBPSK modulation description More...
 
struct gmr1_pi4cxpsk_modulation gmr1_pi4cqpsk
 pi4-CQPSK modulation description More...
 

Detailed Description

Function Documentation

◆ gmr1_pi4cxpsk_demod()

int gmr1_pi4cxpsk_demod ( struct gmr1_pi4cxpsk_burst burst_type,
struct osmo_cxvec burst_in,
int  sps,
float  freq_shift,
sbit_t *  ebits,
int *  sync_id_p,
float *  toa_p,
float *  freq_err_p 
)

All-in-one pi4-CxPSK demodulation method.

Parameters
[in]burst_typeBurst format description
[in]burst_inComplex signal of the burst
[in]spsOversampling used in the input complex signal
[in]freq_shiftFrequency shift to pre-apply to burst_in (rad/sym)
[out]ebitsEncoded soft bits return array
[out]sync_id_pPointer to sync sequence id return variable
[out]toa_pPointer to TOA return variable
[out]freq_err_pPointer to frequency error return variable (rad/sym)
Returns
0 for success. -errno for errors

burst_in is expected to be longer than necessary. Any extra length will be used as 'search window' to find proper alignement. Good practice is to have a few samples too much in front and a few samples after the expected TOA.

◆ gmr1_pi4cxpsk_detect()

int gmr1_pi4cxpsk_detect ( struct gmr1_pi4cxpsk_burst **  burst_types,
float  e_toa,
struct osmo_cxvec burst_in,
int  sps,
float  freq_shift,
int *  bt_id_p,
int *  sync_id_p,
float *  toa_p 
)

Try to identify burst type by matching training sequences.

Parameters
[in]burst_typesArray of burst types to test (NULL terminated)
[in]e_toaExpected time of arrival
[in]burst_inComplex signal of the burst
[in]spsOversampling used in the input complex signal
[in]freq_shiftFrequency shift to pre-apply to burst_in (rad/sym)
[out]bt_id_pPointer to burst type ID return variable
[out]sync_id_pPointer to sync sequence id return variable
[out]toa_pPointer to TOA return variable
Returns
-errno for errors, 0 for success

The various burst types must be compatible in length and modulation !

References osmo_cxvec_sig_normalize(), and gmr1_pi4cxpsk_modulation::rotation.

◆ gmr1_pi4cxpsk_mod()

int gmr1_pi4cxpsk_mod ( struct gmr1_pi4cxpsk_burst burst_type,
ubit_t *  ebits,
int  sync_id,
struct osmo_cxvec burst_out 
)

Modulates (currently at 1 sps)

Parameters
[in]burst_typeBurst format description
[in]ebitsEncoded hard bits to pack in the burst
[in]sync_idThe sequence id to use (0 if burst_type only has one)
[out]burst_outComplex signal to fill with modulated symbols
Returns
0 for success. -errno for errors

burst_out is expected to be long enough to contains the resulting symbols see the burst_type structure for how long that is.

References osmo_cxvec::len, gmr1_pi4cxpsk_burst::len, osmo_cxvec::max_len, and gmr1_pi4cxpsk_burst::mod.

◆ gmr1_pi4cxpsk_mod_order()

int gmr1_pi4cxpsk_mod_order ( struct osmo_cxvec burst_in,
int  sps,
float  freq_shift 
)

Estimates modulation order by comparing power of x^2 vs x^4.

Parameters
[in]burst_inComplex signal of the burst
[in]spsOversampling used in the input complex signal
[in]freq_shiftFrequency shift to pre-apply to burst_in (rad/sym)
Returns
<0 for error. 2 for BPSK, 4 for QPSK.

Since x^4 only make sense for pi/4 variant, the pi/4 counter rotation is always applied.

References M_PIf, and osmo_cxvec_sig_normalize().

Variable Documentation

◆ gmr1_pi2cbpsk

struct gmr1_pi4cxpsk_modulation gmr1_pi2cbpsk
Initial value:
= {
.rotation = M_PIf/2,
.nbits = 1,
.syms = gmr1_piNcbpsk_syms_bits,
.bits = gmr1_piNcbpsk_syms_bits,
}
#define M_PIf
Value of pi as a float.
Definition: private.h:118

pi2-CBPSK modulation description

◆ gmr1_pi4cbpsk

struct gmr1_pi4cxpsk_modulation gmr1_pi4cbpsk
Initial value:
= {
.rotation = M_PIf/4,
.nbits = 1,
.syms = gmr1_piNcbpsk_syms_bits,
.bits = gmr1_piNcbpsk_syms_bits,
}

pi4-CBPSK modulation description

◆ gmr1_pi4cqpsk

struct gmr1_pi4cxpsk_modulation gmr1_pi4cqpsk
Initial value:
= {
.rotation = M_PIf/4,
.nbits = 2,
.syms = gmr1_pi4cqpsk_syms,
.bits = gmr1_pi4cqpsk_bits,
}

pi4-CQPSK modulation description

html/dir_b28332b7c67bf5065126b2ebef06f8f3.html0000644000175000017500000001654414753471227017134 0ustar buildbuild osmo-gmr: src/codec Directory Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
codec Directory Reference

Files

file  ambe.c
 Osmocom GMR-1 AMBE internal API.
 
file  codec.c
 Osmocom GMR-1 AMBE vocoder public API implementation.
 
file  frame.c
 Osmocom GMR-1 AMBE speech parameters to/from frame.
 
file  math.c
 Osmocom GMR-1 AMBE vocoder math functions.
 
file  private.h [code]
 Osmocom GMR-1 AMBE vocoder private header.
 
file  synth.c
 Osmocom GMR-1 AMBE vocoder speech synthesis.
 
file  tables.c
 Osmocom GMR-1 AMBE vocoder tables.
 
file  tone.c
 Osmocom GMR-1 AMBE vocoder tone frames handling.
 
html/interleave_8c.js0000644000175000017500000000116314753471227014105 0ustar buildbuildvar interleave_8c = [ [ "gmr1_deinterleave_inter", "group__interleave.html#ga342cfe4226b3a193e5944e6a8322d491", null ], [ "gmr1_deinterleave_intra", "group__interleave.html#ga101a51679fedd2c835225608f77ae3d8", null ], [ "gmr1_interleave_inter", "group__interleave.html#gac392346badff10ae6a2abfe8b1e96e32", null ], [ "gmr1_interleave_intra", "group__interleave.html#gaf54dd588068ba4225f190c091352bbc9", null ], [ "gmr1_interleaver_fini", "group__interleave.html#gaaa98a1ab608c6146e9c8974687c75ed7", null ], [ "gmr1_interleaver_init", "group__interleave.html#ga78f48b3938dcda4c06b4d2da3eaedcaf", null ] ];html/dkab_8c.js0000644000175000017500000000031214753471227012643 0ustar buildbuildvar dkab_8c = [ [ "DKAB_PWR_RATIO_THRESHOLD", "group__dkab.html#gadd49926a91b1c3ab8c0b96d2fdd7c6e4", null ], [ "gmr1_dkab_demod", "group__dkab.html#ga889c2d34cc3eee7b12b8d88023504e0f", null ] ];html/group__rach.html0000644000175000017500000002613614753471227014204 0ustar buildbuild osmo-gmr: RACH channel coding
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Files

file  rach.h
 Osmocom GMR-1 RACH channel coding header.
 
file  rach.c
 Osmocom GMR-1 RACH channel coding implementation.
 

Functions

void gmr1_rach_encode (ubit_t *bits_e, const uint8_t *rach, uint8_t sb_mask)
 Stateless GMR-1 RACH channel coder. More...
 
int gmr1_rach_decode (uint8_t *rach, const sbit_t *bits_e, uint8_t sb_mask, int *conv_rv, int *crc_rv)
 Stateless GMR-1 RACH channel decoder. More...
 

Detailed Description

Function Documentation

◆ gmr1_rach_decode()

int gmr1_rach_decode ( uint8_t *  rach,
const sbit_t *  bits_e,
uint8_t  sb_mask,
int *  conv_rv,
int *  crc_rv 
)

Stateless GMR-1 RACH channel decoder.

Parameters
[out]rachRACH packet data (2 class-1 bytes, 16 class-2 bytes)
[in]bits_eData bits of a burst
[in]sb_maskRACH SB Mask value (see GMR-1 04.008)
[out]conv_rvReturn of the convolutional decode (can be NULL)
[out]crc_rvReturn array of the 2 CRC checks (can be NULL)
Returns
0 if all CRC check pass, any other value for fail.

RACH data is 18 bytes long (2 class-1, 16 class-2), and bits_e is a 494 soft bits array unmapped from a RACH burst.

References gmr1_deinterleave_intra(), and gmr1_scramble_sbit().

◆ gmr1_rach_encode()

void gmr1_rach_encode ( ubit_t *  bits_e,
const uint8_t *  rach,
uint8_t  sb_mask 
)

Stateless GMR-1 RACH channel coder.

Parameters
[out]bits_eData bits of a burst
[in]rachRACH packet data (2 class-1 bytes, 16 class-2 bytes)
[in]sb_maskRACH SB Mask value (see GMR-1 04.008)

RACH data is 18 bytes long (2 class-1, 16 class-2), and bits_e is a 494 hard bits array to be mapped on a RACH burst.

References gmr1_crc12, and gmr1_crc8.

html/group__tch3.js0000644000175000017500000000042714753471227013573 0ustar buildbuildvar group__tch3 = [ [ "tch3.h", "tch3_8h.html", null ], [ "tch3.c", "tch3_8c.html", null ], [ "gmr1_tch3_decode", "group__tch3.html#gaab4229c82b06539cdad3d91d1bd05c32", null ], [ "gmr1_tch3_encode", "group__tch3.html#ga3c7e3f769459eff23c1308eefb565ab9", null ] ];html/group__tch9.html0000644000175000017500000004043014753471227014127 0ustar buildbuild osmo-gmr: TCH9 channel coding
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Files

file  tch9.h
 Osmocom GMR-1 TCH9 channel coding header.
 
file  tch9.c
 Osmocom GMR-1 TCH9 channel coding implementation.
 

Enumerations

enum  gmr1_tch9_mode { GMR1_TCH9_2k4 , GMR1_TCH9_4k8 , GMR1_TCH9_9k6 , GMR1_TCH9_MAX }
 TCH9 possible data rates. More...
 

Functions

void gmr1_tch9_encode (ubit_t *bits_e, const uint8_t *l2, enum gmr1_tch9_mode mode, const ubit_t *bits_sacch, const ubit_t *bits_status, const ubit_t *ciph, struct gmr1_interleaver *il)
 GMR-1 TCH9 channel coder. More...
 
void gmr1_tch9_decode (uint8_t *l2, sbit_t *bits_sacch, sbit_t *bits_status, const sbit_t *bits_e, enum gmr1_tch9_mode mode, const ubit_t *ciph, struct gmr1_interleaver *il, int *conv_rv)
 GMR-1 TCH9 channel decoder. More...
 

Detailed Description

Enumeration Type Documentation

◆ gmr1_tch9_mode

TCH9 possible data rates.

Enumerator
GMR1_TCH9_2k4 

TCH9 with 2.4k data rate.

GMR1_TCH9_4k8 

TCH9 with 4.8k data rate.

GMR1_TCH9_9k6 

TCH9 with 9.6k data rate.

GMR1_TCH9_MAX 

Dummy value.

Function Documentation

◆ gmr1_tch9_decode()

void gmr1_tch9_decode ( uint8_t *  l2,
sbit_t *  bits_sacch,
sbit_t *  bits_status,
const sbit_t *  bits_e,
enum gmr1_tch9_mode  mode,
const ubit_t *  ciph,
struct gmr1_interleaver il,
int *  conv_rv 
)

GMR-1 TCH9 channel decoder.

Parameters
[out]l2L2 packet data
[out]bits_sacch10 saach bits demultiplexed
[out]bits_status4 status bits demultiplexed
[in]bits_e662 encoded bits of one NT9 burst
[in]modeChannel encoding mode
[in]ciph658 bits of cipher stream (can be NULL)
[in,out]ilInter-burst interleaver state
[out]conv_rvReturn of the convolutional decode (can be NULL)

L2 data size depends on the mode (18 bytes for 2k4, 30 bytes for 4k8, 60 bytes for 9k6).

◆ gmr1_tch9_encode()

void gmr1_tch9_encode ( ubit_t *  bits_e,
const uint8_t *  l2,
enum gmr1_tch9_mode  mode,
const ubit_t *  bits_sacch,
const ubit_t *  bits_status,
const ubit_t *  ciph,
struct gmr1_interleaver il 
)

GMR-1 TCH9 channel coder.

Parameters
[out]bits_e662 encoded bits of one NT9 burst
[in]l2L2 packet data
[in]modeChannel encoding mode
[in]bits_sacch10 saach bits to be multiplexed
[in]bits_status4 status bits to be multiplexed
[in]ciph658 bits of cipher stream (can be NULL)
[in,out]ilInter-burst interleaver state

L2 data size depends on the mode (18 bytes for 2k4, 30 bytes for 4k8, 60 bytes for 9k6).

html/globals_enum.html0000644000175000017500000000756714753471227014372 0ustar buildbuild osmo-gmr: Globals
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
 
html/scramb_8h.html0000644000175000017500000001457214753471227013563 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/scramb.h File Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Osmocom GMR-1 scrambling header. More...

#include <osmocom/core/bits.h>

Go to the source code of this file.

Functions

void gmr1_scramble_sbit (sbit_t *out, const sbit_t *in, int len)
 Scrambles/Unscrambles a softbit vector. More...
 
void gmr1_scramble_ubit (ubit_t *out, const ubit_t *in, int len)
 Scrambles/Unscrambles an unpacked hard bit vector. More...
 

Detailed Description

Osmocom GMR-1 scrambling header.

html/facch3_8h.js0000644000175000017500000000031514753471227013101 0ustar buildbuildvar facch3_8h = [ [ "gmr1_facch3_decode", "group__facch3.html#ga8f2a10c4a2203e69460dbf7f8345cd26", null ], [ "gmr1_facch3_encode", "group__facch3.html#gae7fb89197eae0f343d38c3c70b2d6ada", null ] ];html/sdr_2defs_8h.js0000644000175000017500000000015314753471227013625 0ustar buildbuildvar sdr_2defs_8h = [ [ "GMR1_SYM_RATE", "group__sdr.html#ga6e119ab6400ff7407cdd2d9cb87360eb", null ] ];html/structgmr1__pi4cxpsk__modulation.js0000644000175000017500000000066314753471227020052 0ustar buildbuildvar structgmr1__pi4cxpsk__modulation = [ [ "bits", "structgmr1__pi4cxpsk__modulation.html#a3519a1238c0cc46cc075724f8677c556", null ], [ "nbits", "structgmr1__pi4cxpsk__modulation.html#ad8affe9f19908748ed8c0e3865434201", null ], [ "rotation", "structgmr1__pi4cxpsk__modulation.html#a6fff12a91ce1a4168ac7e87e4c864aa6", null ], [ "syms", "structgmr1__pi4cxpsk__modulation.html#ad9c4201e4495b6894945a5fc4285e96c", null ] ];html/codec_8c.js0000644000175000017500000000061014753471227013020 0ustar buildbuildvar codec_8c = [ [ "gmr1_codec_alloc", "group__codec.html#ga34e0de595c6498ae39695d5909bec094", null ], [ "gmr1_codec_decode_dtx", "group__codec.html#ga23fe43b3790482c7f99d3aa33940f54f", null ], [ "gmr1_codec_decode_frame", "group__codec.html#ga81d71b9b1e226a344a896d926ad4537a", null ], [ "gmr1_codec_release", "group__codec.html#gad1c2b9c16672bcd48076af0b0f162557", null ] ];html/structgmr1__pi4cxpsk__symbol.js0000644000175000017500000000064114753471227017200 0ustar buildbuildvar structgmr1__pi4cxpsk__symbol = [ [ "data", "structgmr1__pi4cxpsk__symbol.html#a2fb97bf5773d1491eb1359e92d4832f6", null ], [ "idx", "structgmr1__pi4cxpsk__symbol.html#a6df1e39fbb19bd1adb54638c3bf705fe", null ], [ "mod_phase", "structgmr1__pi4cxpsk__symbol.html#ac3639293117223030a399cdb947bf22b", null ], [ "mod_val", "structgmr1__pi4cxpsk__symbol.html#a62299b3758847f06baa14861572d6160", null ] ];html/tab_s.png0000644000175000017500000000027014753471226012612 0ustar buildbuild‰PNG  IHDR$ÇÇ[IDATxíÝ ‚@@Ñ£?Q…¤"š¢%¦I‘—Šf–6[´HÃäQƒ<Þâõþ]ždr Í’s?ˆO=Ñññw'ÌF‡Ž íðö-~rÃ[œèŠ­ì¬mƒÖ¬ƒݯнŠÕF)Yº% §`nÌ,9B ™’©!ÑŒ\ý<Å#üîî•IEND®B`‚html/a5_8c.js0000644000175000017500000000025514753471227012255 0ustar buildbuildvar a5_8c = [ [ "gmr1_a5", "group__a5.html#gaddb4e3e6e4a5b5f91fe9308250a70375", null ], [ "gmr1_a5_1", "group__a5.html#gad385682d03d182ea6e3d0e99fa4ca04e", null ] ];html/group__punct.html0000644000175000017500000041650014753471227014416 0ustar buildbuild osmo-gmr: Puncturing
osmo-gmr 0.2.104-2b98
Osmocom GMR-1

Files

file  punct.h
 Osmocom GMR-1 puncturing header.
 
file  punct.c
 Osmocom GMR-1 puncturing implementation.
 

Data Structures

struct  gmr1_puncturer
 structure describing a puncturing code More...
 

Functions

int gmr1_puncturer_generate (struct osmo_conv_code *code, const struct gmr1_puncturer *punct_pre, const struct gmr1_puncturer *punct_main, const struct gmr1_puncturer *punct_post, int repeat)
 Generate convolutional code puncturing array for a osmo_conv_code. More...
 

Variables

const struct gmr1_puncturer gmr1_punct_k5_12_P23
 GMR-1 P(2;3) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_P25
 GMR-1 P(2;5) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_Ps25
 GMR-1 Ps(2;5) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_P311
 GMR-1 P(3;11) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_P412
 GMR-1 P(4;12) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_Ps412
 GMR-1 Ps(4;12) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_P12
 GMR-1 P(1;2) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_Ps12
 GMR-1 Ps(1;2) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_A
 GMR-1 A puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_B
 GMR-1 B puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_C
 GMR-1 C puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_D
 GMR-1 D puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_E
 GMR-1 E puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_P38
 GMR-1 P(3;8) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_P26
 GMR-1 P(2;6) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_P37
 GMR-1 P(3;7) puncturing code for the K=5 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_13_P16
 GMR-1 P(1;6) puncturing code for the K=5 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_13_P25
 GMR-1 P(2;5) puncturing code for the K=5 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_13_P15
 GMR-1 P(1;5) puncturing code for the K=5 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_13_Ps15
 GMR-1 Ps(1;5) puncturing code for the K=5 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_13_P78
 GMR-1 P(7;8) puncturing code for the K=5 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_15_P23
 GMR-1 P(2;3) puncturing code for the K=5 rate 1/5 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_15_P53
 GMR-1 P(5;3) puncturing code for the K=5 rate 1/5 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_15_Ps53
 GMR-1 Ps(5;3) puncturing code for the K=5 rate 1/5 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P23
 GMR-1 P(2;3) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P410
 GMR-1 P(4;10) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P512
 GMR-1 P(5;12) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P116
 GMR-1 P(1;16) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P148
 GMR-1 P(1;48) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P184
 GMR-1 P(1;84) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P1152
 GMR-1 P(1;152) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P45
 GMR-1 P(4;5) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P245
 GMR-1 P2(4;5) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P13
 GMR-1 P(1;3) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P47
 GMR-1 P(4;7) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P34
 GMR-1 P(3;4) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P17
 GMR-1 P(1;7) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P19
 GMR-1 P(1;9) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P26
 GMR-1 P(2;6) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P110
 GMR-1 P(1;10) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P14
 GMR-1 P(1;4) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P45
 GMR-1 P(4;5) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_12_P234
 GMR-1 P2(3;4) puncturing code for the K=9 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k6_14_P45
 GMR-1 P(4;5) puncturing code for the K=6 rate 1/4 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_14_P148
 GMR-1 P(14;8) puncturing code for the K=9 rate 1/4 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_14_P65
 GMR-1 P(6;5) puncturing code for the K=9 rate 1/4 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_13_P12
 GMR-1 P(1;2) puncturing code for the K=9 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_13_P1213
 GMR-1 P(12;13) puncturing code for the K=9 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_13_P44
 GMR-1 P(4;4) puncturing code for the K=9 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_13_P33
 GMR-1 P(3;3) puncturing code for the K=9 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k9_13_P65
 GMR-1 P(6;5) puncturing code for the K=9 rate 1/3 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k5_12_P23
 GMR-1 P(2;3) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_P25
 GMR-1 P(2;5) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_Ps25
 GMR-1 Ps(2;5) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_P311
 GMR-1 P(3;11) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_P412
 GMR-1 P(4;12) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_Ps412
 GMR-1 Ps(4;12) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_P12
 GMR-1 P(1;2) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_Ps12
 GMR-1 Ps(1;2) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_A
 GMR-1 A puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_B
 GMR-1 B puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_C
 GMR-1 C puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_D
 GMR-1 D puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_E
 GMR-1 E puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_P38
 GMR-1 P(3;8) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_P26
 GMR-1 P(2;6) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_12_P37
 GMR-1 P(3;7) puncturing code for the K=5 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_13_P16
 GMR-1 P(1;6) puncturing code for the K=5 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_13_P25
 GMR-1 P(2;5) puncturing code for the K=5 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_13_P15
 GMR-1 P(1;5) puncturing code for the K=5 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_13_Ps15
 GMR-1 Ps(1;5) puncturing code for the K=5 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_13_P78
 GMR-1 P(7;8) puncturing code for the K=5 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_15_P23
 GMR-1 P(2;3) puncturing code for the K=5 rate 1/5 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_15_P53
 GMR-1 P(5;3) puncturing code for the K=5 rate 1/5 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k5_15_Ps53
 GMR-1 Ps(5;3) puncturing code for the K=5 rate 1/5 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k7_12_P23
 GMR-1 P(2;3) puncturing code for the K=7 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k7_12_P410
 GMR-1 P(4;10) puncturing code for the K=7 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k7_12_P512
 GMR-1 P(5;12) puncturing code for the K=7 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k7_12_P116
 GMR-1 P(1;16) puncturing code for the K=7 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k7_12_P148
 GMR-1 P(1;48) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P184
 GMR-1 P(1;84) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P1152
 GMR-1 P(1;152) puncturing code for the K=7 rate 1/2 conv coder.
 
const struct gmr1_puncturer gmr1_punct_k7_12_P45
 GMR-1 P(4;5) puncturing code for the K=7 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k7_12_P245
 GMR-1 P2(4;5) puncturing code for the K=7 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P13
 GMR-1 P(1;3) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P47
 GMR-1 P(4;7) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P34
 GMR-1 P(3;4) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P17
 GMR-1 P(1;7) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P19
 GMR-1 P(1;9) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P26
 GMR-1 P(2;6) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P110
 GMR-1 P(1;10) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P14
 GMR-1 P(1;4) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P45
 GMR-1 P(4;5) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_12_P234
 GMR-1 P2(3;4) puncturing code for the K=9 rate 1/2 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k6_14_P45
 GMR-1 P(4;5) puncturing code for the K=6 rate 1/4 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_14_P148
 GMR-1 P(14;8) puncturing code for the K=9 rate 1/4 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_14_P65
 GMR-1 P(6;5) puncturing code for the K=9 rate 1/4 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_13_P12
 GMR-1 P(1;2) puncturing code for the K=9 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_13_P1213
 GMR-1 P(12;13) puncturing code for the K=9 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_13_P44
 GMR-1 P(4;4) puncturing code for the K=9 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_13_P33
 GMR-1 P(3;3) puncturing code for the K=9 rate 1/3 conv coder. More...
 
const struct gmr1_puncturer gmr1_punct_k9_13_P65
 GMR-1 P(6;5) puncturing code for the K=9 rate 1/3 conv coder. More...
 

Detailed Description

Function Documentation

◆ gmr1_puncturer_generate()

int gmr1_puncturer_generate ( struct osmo_conv_code *  code,
const struct gmr1_puncturer punct_pre,
const struct gmr1_puncturer punct_main,
const struct gmr1_puncturer punct_post,
int  repeat 
)

Generate convolutional code puncturing array for a osmo_conv_code.

Parameters
[in,out]codeThe code for which to generate the puncturing array
[in]punct_preThe puncturing scheme for first block (can be NULL)
[in]punct_mainThe puncturing scheme
[in]punct_postThe puncturing scheme for last block (can be NULL)
[in]repeatHow many time to apply main punctured (0 = auto)
Returns
0 for success, <0 for error codes.

The array is allocated with malloc and must be free'd by the caller when no longer required.

References gmr1_puncturer::L, gmr1_puncturer::mask, gmr1_puncturer::N, and gmr1_puncturer::r.

Variable Documentation

◆ gmr1_punct_k5_12_A

const struct gmr1_puncturer gmr1_punct_k5_12_A
Initial value:
= {
.r = 0,
.L = 4,
.N = 2,
.mask = {
1, 1,
1, 1,
1, 1,
1, 1,
},
}

GMR-1 A puncturing code for the K=5 rate 1/2 conv coder.

◆ gmr1_punct_k5_12_B

const struct gmr1_puncturer gmr1_punct_k5_12_B
Initial value:
= {
.r = 1,
.L = 4,
.N = 2,
.mask = {
1, 0,
1, 1,
1, 1,
1, 1,
},
}

GMR-1 B puncturing code for the K=5 rate 1/2 conv coder.

◆ gmr1_punct_k5_12_C

const struct gmr1_puncturer gmr1_punct_k5_12_C
Initial value:
= {
.r = 2,
.L = 4,
.N = 2,
.mask = {
1, 0,
1, 1,
1, 0,
1, 1,
},
}

GMR-1 C puncturing code for the K=5 rate 1/2 conv coder.

◆ gmr1_punct_k5_12_D

const struct gmr1_puncturer gmr1_punct_k5_12_D
Initial value:
= {
.r = 3,
.L = 4,
.N = 2,
.mask = {
0, 1,
1, 0,
0, 1,
1, 1,
},
}

GMR-1 D puncturing code for the K=5 rate 1/2 conv coder.

◆ gmr1_punct_k5_12_E

const struct gmr1_puncturer gmr1_punct_k5_12_E
Initial value:
= {
.r = 1,
.L = 4,
.N = 2,
.mask = {
1, 2,
1, 1,
1, 1,
1, 1,
},
}

GMR-1 E puncturing code for the K=5 rate 1/2 conv coder.

◆ gmr1_punct_k5_12_P12

const struct gmr1_puncturer gmr1_punct_k5_12_P12
Initial value:
= {
.r = 1,
.L = 2,
.N = 2,
.mask = {
1, 1,
1, 0,
},
}

GMR-1 P(1;2) puncturing code for the K=5 rate 1/2 conv coder.

◆ gmr1_punct_k5_12_P23

const struct gmr1_puncturer gmr1_punct_k5_12_P23
Initial value:
= {
.r = 2,
.L = 3,
.N = 2,
.mask = {
0, 1,
1, 0,
1, 1,
},
}

GMR-1 P(2;3) puncturing code for the K=5 rate 1/2 conv coder.

◆ gmr1_punct_k5_12_P25

const struct gmr1_puncturer gmr1_punct_k5_12_P25
Initial value:
= {
.r = 2,
.L = 5,
.N = 2,
.mask = {
1, 0,
1, 1,
1, 0,
1, 1,
1, 1,
},
}

GMR-1 P(2;5) puncturing code for the K=5 rate 1/2 conv coder.

◆ gmr1_punct_k5_12_P26

const struct gmr1_puncturer gmr1_punct_k5_12_P26
Initial value:
= {
.r = 2,
.L = 6,
.N = 2,
.mask = {
1, 0,
1, 1,
1, 1,
1, 0,
1, 1,
1, 1,
},
}

GMR-1 P(2;6) puncturing code for the K=5 rate 1/2 conv coder.

◆ gmr1_punct_k5_12_P311

const struct gmr1_puncturer gmr1_punct_k5_12_P311
Initial value:
= {
.r = 3,
.L = 11,
.N = 2,
.mask = {
1, 0,
1, 1,
1, 0,
1, 1,
1, 1,
1, 0,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
},
}

GMR-1 P(3;11) puncturing code for the K=5 rate 1/2 conv coder.

◆ gmr1_punct_k5_12_P37

const struct gmr1_puncturer gmr1_punct_k5_12_P37
Initial value:
= {
.r = 3,
.L = 7,
.N = 2,
.mask = {
1, 0,
1, 1,
1, 0,
1, 1,
1, 0,
1, 1,
1, 1,
},
}

GMR-1 P(3;7) puncturing code for the K=5 rate 1/2 conv coder.

◆ gmr1_punct_k5_12_P38

const struct gmr1_puncturer gmr1_punct_k5_12_P38
Initial value:
= {
.r = 3,
.L = 8,
.N = 2,
.mask = {
0, 1,
1, 1,
0, 1,
1, 1,
1, 1,
1, 1,
1, 0,
1, 1,
},
}

GMR-1 P(3;8) puncturing code for the K=5 rate 1/2 conv coder.

◆ gmr1_punct_k5_12_P412

const struct gmr1_puncturer gmr1_punct_k5_12_P412
Initial value:
= {
.r = 4,
.L = 12,
.N = 2,
.mask = {
1, 0,
1, 1,
1, 0,
1, 1,
1, 0,
1, 1,
1, 0,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
},
}

GMR-1 P(4;12) puncturing code for the K=5 rate 1/2 conv coder.

◆ gmr1_punct_k5_12_Ps12

const struct gmr1_puncturer gmr1_punct_k5_12_Ps12
Initial value:
= {
.r = 1,
.L = 2,
.N = 2,
.mask = {
1, 0,
1, 1,
},
}

GMR-1 Ps(1;2) puncturing code for the K=5 rate 1/2 conv coder.

◆ gmr1_punct_k5_12_Ps25

const struct gmr1_puncturer gmr1_punct_k5_12_Ps25
Initial value:
= {
.r = 2,
.L = 5,
.N = 2,
.mask = {
1, 1,
1, 1,
1, 0,
1, 1,
1, 0,
},
}

GMR-1 Ps(2;5) puncturing code for the K=5 rate 1/2 conv coder.

◆ gmr1_punct_k5_12_Ps412

const struct gmr1_puncturer gmr1_punct_k5_12_Ps412
Initial value:
= {
.r = 4,
.L = 12,
.N = 2,
.mask = {
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 0,
1, 1,
1, 0,
1, 1,
1, 0,
1, 1,
1, 0,
},
}

GMR-1 Ps(4;12) puncturing code for the K=5 rate 1/2 conv coder.

◆ gmr1_punct_k5_13_P15

const struct gmr1_puncturer gmr1_punct_k5_13_P15
Initial value:
= {
.r = 1,
.L = 5,
.N = 3,
.mask = {
1, 0, 1,
1, 1, 1,
1, 1, 1,
1, 1, 1,
1, 1, 1,
},
}

GMR-1 P(1;5) puncturing code for the K=5 rate 1/3 conv coder.

◆ gmr1_punct_k5_13_P16

const struct gmr1_puncturer gmr1_punct_k5_13_P16
Initial value:
= {
.r = 1,
.L = 6,
.N = 3,
.mask = {
1, 1, 0,
1, 1, 1,
1, 1, 1,
1, 1, 1,
1, 1, 1,
1, 1, 1,
},
}

GMR-1 P(1;6) puncturing code for the K=5 rate 1/3 conv coder.

◆ gmr1_punct_k5_13_P25

const struct gmr1_puncturer gmr1_punct_k5_13_P25
Initial value:
= {
.r = 2,
.L = 5,
.N = 3,
.mask = {
1, 1, 1,
1, 1, 1,
1, 0, 1,
1, 1, 1,
1, 0, 1,
},
}

GMR-1 P(2;5) puncturing code for the K=5 rate 1/3 conv coder.

◆ gmr1_punct_k5_13_P78

const struct gmr1_puncturer gmr1_punct_k5_13_P78
Initial value:
= {
.r = 7,
.L = 8,
.N = 3,
.mask = {
0, 0, 1,
1, 1, 0,
1, 1, 1,
0, 1, 1,
1, 1, 1,
1, 1, 0,
1, 0, 1,
1, 0, 1,
},
}

GMR-1 P(7;8) puncturing code for the K=5 rate 1/3 conv coder.

◆ gmr1_punct_k5_13_Ps15

const struct gmr1_puncturer gmr1_punct_k5_13_Ps15
Initial value:
= {
.r = 1,
.L = 5,
.N = 3,
.mask = {
1, 1, 1,
1, 1, 1,
1, 1, 1,
1, 1, 1,
1, 0, 1,
},
}

GMR-1 Ps(1;5) puncturing code for the K=5 rate 1/3 conv coder.

◆ gmr1_punct_k5_15_P23

const struct gmr1_puncturer gmr1_punct_k5_15_P23
Initial value:
= {
.r = 2,
.L = 3,
.N = 5,
.mask = {
1, 1, 1, 1, 1,
1, 1, 0, 1, 1,
1, 1, 1, 1, 0,
},
}

GMR-1 P(2;3) puncturing code for the K=5 rate 1/5 conv coder.

◆ gmr1_punct_k5_15_P53

const struct gmr1_puncturer gmr1_punct_k5_15_P53
Initial value:
= {
.r = 5,
.L = 3,
.N = 5,
.mask = {
1, 1, 1, 0, 1,
1, 0, 0, 1, 1,
1, 1, 1, 0, 0,
},
}

GMR-1 P(5;3) puncturing code for the K=5 rate 1/5 conv coder.

◆ gmr1_punct_k5_15_Ps53

const struct gmr1_puncturer gmr1_punct_k5_15_Ps53
Initial value:
= {
.r = 5,
.L = 3,
.N = 5,
.mask = {
1, 1, 1, 0, 0,
1, 0, 0, 1, 1,
1, 1, 1, 0, 1,
},
}

GMR-1 Ps(5;3) puncturing code for the K=5 rate 1/5 conv coder.

◆ gmr1_punct_k6_14_P45

const struct gmr1_puncturer gmr1_punct_k6_14_P45
Initial value:
= {
.r = 4,
.L = 5,
.N = 4,
.mask = {
1, 0, 1, 1,
1, 0, 1, 1,
1, 1, 1, 0,
1, 1, 1, 1,
1, 1, 1, 0,
},
}

GMR-1 P(4;5) puncturing code for the K=6 rate 1/4 conv coder.

◆ gmr1_punct_k7_12_P116

const struct gmr1_puncturer gmr1_punct_k7_12_P116
Initial value:
= {
.r = 1,
.L = 16,
.N = 2,
.mask = {
1, 0,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
},
}

GMR-1 P(1;16) puncturing code for the K=7 rate 1/2 conv coder.

◆ gmr1_punct_k7_12_P23

const struct gmr1_puncturer gmr1_punct_k7_12_P23
Initial value:
= {
.r = 2,
.L = 3,
.N = 2,
.mask = {
1, 1,
1, 0,
0, 1,
},
}

GMR-1 P(2;3) puncturing code for the K=7 rate 1/2 conv coder.

◆ gmr1_punct_k7_12_P245

const struct gmr1_puncturer gmr1_punct_k7_12_P245
Initial value:
= {
.r = 4,
.L = 5,
.N = 2,
.mask = {
1, 0,
0, 1,
1, 0,
0, 1,
1, 1,
},
}

GMR-1 P2(4;5) puncturing code for the K=7 rate 1/2 conv coder.

◆ gmr1_punct_k7_12_P410

const struct gmr1_puncturer gmr1_punct_k7_12_P410
Initial value:
= {
.r = 4,
.L = 10,
.N = 2,
.mask = {
1, 0,
1, 1,
1, 0,
1, 1,
1, 0,
1, 1,
1, 1,
1, 1,
1, 0,
1, 1,
},
}

GMR-1 P(4;10) puncturing code for the K=7 rate 1/2 conv coder.

◆ gmr1_punct_k7_12_P45

const struct gmr1_puncturer gmr1_punct_k7_12_P45
Initial value:
= {
.r = 4,
.L = 5,
.N = 2,
.mask = {
0, 1,
1, 1,
1, 0,
0, 1,
1, 0,
},
}

GMR-1 P(4;5) puncturing code for the K=7 rate 1/2 conv coder.

◆ gmr1_punct_k7_12_P512

const struct gmr1_puncturer gmr1_punct_k7_12_P512
Initial value:
= {
.r = 5,
.L = 12,
.N = 2,
.mask = {
1, 1,
1, 0,
1, 1,
1, 0,
1, 1,
1, 1,
1, 1,
1, 0,
1, 1,
1, 0,
1, 1,
1, 0,
},
}

GMR-1 P(5;12) puncturing code for the K=7 rate 1/2 conv coder.

◆ gmr1_punct_k9_12_P110

const struct gmr1_puncturer gmr1_punct_k9_12_P110
Initial value:
= {
.r = 1,
.L = 10,
.N = 2,
.mask = {
0, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
},
}

GMR-1 P(1;10) puncturing code for the K=9 rate 1/2 conv coder.

◆ gmr1_punct_k9_12_P13

const struct gmr1_puncturer gmr1_punct_k9_12_P13
Initial value:
= {
.r = 1,
.L = 3,
.N = 2,
.mask = {
1, 0,
1, 1,
1, 1,
},
}

GMR-1 P(1;3) puncturing code for the K=9 rate 1/2 conv coder.

◆ gmr1_punct_k9_12_P14

const struct gmr1_puncturer gmr1_punct_k9_12_P14
Initial value:
= {
.r = 1,
.L = 4,
.N = 2,
.mask = {
1, 0,
1, 1,
1, 1,
1, 1,
},
}

GMR-1 P(1;4) puncturing code for the K=9 rate 1/2 conv coder.

◆ gmr1_punct_k9_12_P17

const struct gmr1_puncturer gmr1_punct_k9_12_P17
Initial value:
= {
.r = 1,
.L = 7,
.N = 2,
.mask = {
1, 0,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
},
}

GMR-1 P(1;7) puncturing code for the K=9 rate 1/2 conv coder.

◆ gmr1_punct_k9_12_P19

const struct gmr1_puncturer gmr1_punct_k9_12_P19
Initial value:
= {
.r = 1,
.L = 9,
.N = 2,
.mask = {
0, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
1, 1,
},
}

GMR-1 P(1;9) puncturing code for the K=9 rate 1/2 conv coder.

◆ gmr1_punct_k9_12_P234

const struct gmr1_puncturer gmr1_punct_k9_12_P234
Initial value:
= {
.r = 3,
.L = 4,
.N = 2,
.mask = {
1, 0,
0, 1,
1, 0,
1, 1,
},
}

GMR-1 P2(3;4) puncturing code for the K=9 rate 1/2 conv coder.

◆ gmr1_punct_k9_12_P26

const struct gmr1_puncturer gmr1_punct_k9_12_P26
Initial value:
= {
.r = 2,
.L = 6,
.N = 2,
.mask = {
1, 0,
1, 1,
1, 1,
1, 0,
1, 1,
1, 1,
},
}

GMR-1 P(2;6) puncturing code for the K=9 rate 1/2 conv coder.

◆ gmr1_punct_k9_12_P34

const struct gmr1_puncturer gmr1_punct_k9_12_P34
Initial value:
= {
.r = 3,
.L = 4,
.N = 2,
.mask = {
1, 1,
1, 0,
0, 1,
1, 0,
},
}

GMR-1 P(3;4) puncturing code for the K=9 rate 1/2 conv coder.

◆ gmr1_punct_k9_12_P45

const struct gmr1_puncturer gmr1_punct_k9_12_P45
Initial value:
= {
.r = 4,
.L = 5,
.N = 2,
.mask = {
0, 1,
1, 1,
0, 1,
1, 0,
1, 0,
},
}

GMR-1 P(4;5) puncturing code for the K=9 rate 1/2 conv coder.

◆ gmr1_punct_k9_12_P47

const struct gmr1_puncturer gmr1_punct_k9_12_P47
Initial value:
= {
.r = 4,
.L = 7,
.N = 2,
.mask = {
0, 1,
1, 1,
1, 0,
1, 1,
1, 0,
1, 1,
1, 0,
},
}

GMR-1 P(4;7) puncturing code for the K=9 rate 1/2 conv coder.

◆ gmr1_punct_k9_13_P12

const struct gmr1_puncturer gmr1_punct_k9_13_P12
Initial value:
= {
.r = 1,
.L = 2,
.N = 3,
.mask = {
1, 1, 1,
0, 1, 1,
},
}

GMR-1 P(1;2) puncturing code for the K=9 rate 1/3 conv coder.

◆ gmr1_punct_k9_13_P1213

const struct gmr1_puncturer gmr1_punct_k9_13_P1213
Initial value:
= {
.r = 12,
.L = 13,
.N = 3,
.mask = {
1, 1, 0,
1, 0, 1,
0, 1, 1,
1, 1, 0,
1, 0, 1,
0, 1, 1,
1, 1, 0,
1, 0, 1,
0, 1, 1,
1, 1, 0,
1, 0, 1,
0, 1, 1,
1, 1, 1,
},
}

GMR-1 P(12;13) puncturing code for the K=9 rate 1/3 conv coder.

◆ gmr1_punct_k9_13_P33

const struct gmr1_puncturer gmr1_punct_k9_13_P33
Initial value:
= {
.r = 3,
.L = 3,
.N = 3,
.mask = {
0, 1, 1,
1, 0, 1,
1, 1, 0,
},
}

GMR-1 P(3;3) puncturing code for the K=9 rate 1/3 conv coder.

◆ gmr1_punct_k9_13_P44

const struct gmr1_puncturer gmr1_punct_k9_13_P44
Initial value:
= {
.r = 4,
.L = 4,
.N = 3,
.mask = {
1, 1, 0,
0, 1, 1,
1, 0, 1,
1, 1, 0,
},
}

GMR-1 P(4;4) puncturing code for the K=9 rate 1/3 conv coder.

◆ gmr1_punct_k9_13_P65

const struct gmr1_puncturer gmr1_punct_k9_13_P65
Initial value:
= {
.r = 6,
.L = 5,
.N = 3,
.mask = {
1, 0, 1,
0, 1, 1,
1, 0, 0,
0, 1, 1,
1, 1, 0,
},
}

GMR-1 P(6;5) puncturing code for the K=9 rate 1/3 conv coder.

◆ gmr1_punct_k9_14_P148

const struct gmr1_puncturer gmr1_punct_k9_14_P148
Initial value:
= {
.r = 14,
.L = 8,
.N = 4,
.mask = {
1, 0, 0, 1,
1, 0, 1, 0,
1, 0, 1, 0,
1, 0, 0, 1,
1, 1, 0, 1,
1, 0, 0, 1,
1, 0, 0, 1,
1, 1, 0, 1,
},
}

GMR-1 P(14;8) puncturing code for the K=9 rate 1/4 conv coder.

◆ gmr1_punct_k9_14_P65

const struct gmr1_puncturer gmr1_punct_k9_14_P65
Initial value:
= {
.r = 6,
.L = 5,
.N = 4,
.mask = {
0, 1, 1, 1,
1, 0, 1, 1,
1, 1, 1, 1,
0, 0, 1, 0,
1, 0, 1, 1,
},
}

GMR-1 P(6;5) puncturing code for the K=9 rate 1/4 conv coder.

html/dir_68267d1309a1af8e8297ef4c3efbcdba.html0000644000175000017500000001264614753471227017364 0ustar buildbuild osmo-gmr: src Directory Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
src Directory Reference

Directories

directory  codec
 
directory  l1
 
directory  sdr
 

Files

file  gsmtap.c
 Osmocom GMR-1 GSMtap helpers header.
 
html/structgmr1__fcch__burst.html0000644000175000017500000001274014753471227016523 0ustar buildbuild osmo-gmr: gmr1_fcch_burst Struct Reference
osmo-gmr 0.2.104-2b98
Osmocom GMR-1
gmr1_fcch_burst Struct Reference

Data Fields

float freq
 Frequency sweep range.
 
int len
 Burst duration in symbols.
 

The documentation for this struct was generated from the following file:
  • include/osmocom/gmr1/sdr/fcch.h
html/open.png0000644000175000017500000000017314753471226012465 0ustar buildbuild‰PNG  IHDR à‘BIDATxíÝÁ €0 Ð׬ՙ\Àº€39—b!©9{|ðI>$#Àß´ý8/¨ÄØzƒ/Ï>2À[ÎgiU,/¬~¼Ï\ Ä9Ù¸IEND®B`‚html/nb_8c.js0000644000175000017500000000156314753471227012352 0ustar buildbuildvar nb_8c = [ [ "gmr1_bcch_burst", "group__nb.html#gadb3e07f31ce31edf73ee29cb97ecb27c", null ], [ "gmr1_dc12_burst", "group__nb.html#ga4dfb2061d86695f527d93c228f7e80cf", null ], [ "gmr1_dc2_burst", "group__nb.html#gab4f338ae4b7c91d61f4a1fbd5ddb22db", null ], [ "gmr1_dc6_burst", "group__nb.html#gabcff92c63441c414f2b700abed3ff5e5", null ], [ "gmr1_nt3_facch_burst", "group__nb.html#gad65ff6135513219615583bf2652905a0", null ], [ "gmr1_nt3_speech_burst", "group__nb.html#ga5b7005d048a228c2fb1689772ec2a02b", null ], [ "gmr1_nt6_burst", "group__nb.html#ga0f6b872aea487079770276792b11f024", null ], [ "gmr1_nt9_burst", "group__nb.html#gace85abbda202a99f17800dfe3a449ad8", null ], [ "gmr1_rach_burst", "group__nb.html#ga6efdbfdc0a900c0da7e1ae35157d9d75", null ], [ "gmr1_sdcch_burst", "group__nb.html#ga8e081ca45a3c928dc97cc56ceb445542", null ] ];html/sync_on.png0000644000175000017500000000151514753471226013175 0ustar buildbuild‰PNG  IHDRàw=øIDATxíÝ_HTYÀñï8ã¤ó§i§4-g6ÆËÕ&kQ)¨Ô!Š0ÒURKÚ…„ê¡/»PEÁ>ìK-+KÁ²Ñ.Y”¾dEPaA‰ø°¥¶›ZSÓïÜ;3wºŠ–¯—߯gfîïœsçœWKÇñ.€ÉøD­¨a‘'¬âq_ôˆk¢ÀŒ ÀDŽøQ´ÄïC¨¶åñÏÿgÅ ñ 0„Y‚:qZ¦Á)~õâ€èLý0HVñ× žz-¿‰C“%¨g¦˜6€é8%Úõ¬ëwêÙUÏ¿˜ª³Ä }? ?€·3ÀÀž©Š À”K• @hà a±ðaÇæUe‹ sù~ë2²ì“&Ú&B*AÄljæºììi*˨,Ëçí»÷oÆ£T”,d[˜¼3-*ÁÀ…>å‡Ë çLÉŸçfk˜Ò éw#*AEjKUy>ûšËÉõ&{µ¢8—m5Ki¬ jjƒD*¿NŽÖigwÃ7Dª’mz骹úKÛ¾±ˆ¶M!æ¤ÍkÐ?šoý¬_åÓlXí#Ò~–¸¬ê×ÒÑXŠÓ‘ùRÙ*Eû‚ՂדðEÜ;6«e"Q(²Ù=–¿Ezæ5Kؼָ_ 1òzBªJë ±XŒì96åªjL^7{ùãJÑ÷1½i@%8'7M©_\Qœ#ÓUŒËñýÿyõ Wo Éx8¼s¥v¯ªì|×SnÜ q_m Ýé î>bèÕí[JX,½4[Tú{R£ë¼ôˆ¾þa€tÝjjzzÅ'ÅìȶiIžŽòwÏs ¡€—ÕKøõâC^ŽŒ˜Y­¨µÉ%6¨´êˆº]vÛðhâ½iWv–hôëê°Ò¨¾'æÌ‚·ñ|[ßìúÅ^€YrD=<ýDû]äÇ÷s€Ïõ‹8™ºCì? À ¨—t4õá©Ž¡Jã‡W‹É± îr¼cjMɘìx| šE©øNÔ‰œøA¢þ«–€Z¼ñ‡jó î#™§¢¢4gIEND®B`‚html/search/0000755000175000017500000000000014753471226012262 5ustar buildbuildhtml/search/all_f.html0000644000175000017500000000263314753471226014231 0ustar buildbuild
Loading...
Searching...
No Matches
html/search/variables_6.html0000644000175000017500000000264114753471226015350 0ustar buildbuild
Loading...
Searching...
No Matches
html/search/variables_9.html0000644000175000017500000000264114753471226015353 0ustar buildbuild
Loading...
Searching...
No Matches
html/search/variables_f.js0000644000175000017500000000040714753471226015076 0ustar buildbuildvar searchData= [ ['r_0',['r',['../structgmr1__puncturer.html#a6bad988cd142c8d0e30bfe457fd2c062',1,'gmr1_puncturer']]], ['rotation_1',['rotation',['../structgmr1__pi4cxpsk__modulation.html#a6fff12a91ce1a4168ac7e87e4c864aa6',1,'gmr1_pi4cxpsk_modulation']]] ]; html/search/search.css0000644000175000017500000001072214753471226014243 0ustar buildbuild/*---------------- Search Box */ #MSearchBox { white-space : nowrap; background: white; border-radius: 0.65em; box-shadow: inset 0.5px 0.5px 3px 0px #555; z-index: 102; } #MSearchBox .left { display: inline-block; vertical-align: middle; height: 1.4em; } #MSearchSelect { display: inline-block; vertical-align: middle; height: 19px; padding: 0 0 0 0.3em; margin: 0; } #MSearchField { display: inline-block; vertical-align: middle; width: 7.5em; height: 19px; margin: 0 0.15em; padding: 0; line-height: 1em; border:none; color: #909090; outline: none; font-family: Arial, Verdana, sans-serif; -webkit-border-radius: 0px; border-radius: 0px; background: none; } @media(hover: none) { /* to avoid zooming on iOS */ #MSearchField { font-size: 16px; } } #MSearchBox .right { display: inline-block; vertical-align: middle; width: 1.4em; height: 1.4em; } #MSearchClose { display: none; font-size: inherit; background : none; border: none; margin: 0; padding: 0; outline: none; } #MSearchCloseImg { height: 1.4em; padding: 0.3em; margin: 0; } .MSearchBoxActive #MSearchField { color: #000000; } #main-menu > li:last-child { /* This
  • object is the parent of the search bar */ display: flex; justify-content: center; align-items: center; height: 36px; margin-right: 1em; } /*---------------- Search filter selection */ #MSearchSelectWindow { display: none; position: absolute; left: 0; top: 0; border: 1px solid #90A5CE; background-color: #F9FAFC; z-index: 10001; padding-top: 4px; padding-bottom: 4px; -moz-border-radius: 4px; -webkit-border-top-left-radius: 4px; -webkit-border-top-right-radius: 4px; -webkit-border-bottom-left-radius: 4px; -webkit-border-bottom-right-radius: 4px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); } .SelectItem { font: 8pt Arial, Verdana, sans-serif; padding-left: 2px; padding-right: 12px; border: 0px; } span.SelectionMark { margin-right: 4px; font-family: monospace; outline-style: none; text-decoration: none; } a.SelectItem { display: block; outline-style: none; color: #000000; text-decoration: none; padding-left: 6px; padding-right: 12px; } a.SelectItem:focus, a.SelectItem:active { color: #000000; outline-style: none; text-decoration: none; } a.SelectItem:hover { color: #FFFFFF; background-color: #3D578C; outline-style: none; text-decoration: none; cursor: pointer; display: block; } /*---------------- Search results window */ iframe#MSearchResults { /*width: 60ex;*/ height: 15em; } #MSearchResultsWindow { display: none; position: absolute; left: 0; top: 0; border: 1px solid #000; background-color: #EEF1F7; z-index:10000; } /* ----------------------------------- */ #SRIndex { clear:both; padding-bottom: 15px; } .SREntry { font-size: 10pt; padding-left: 1ex; } .SRPage .SREntry { font-size: 8pt; padding: 1px 5px; } body.SRPage { margin: 5px 2px; } .SRChildren { padding-left: 3ex; padding-bottom: .5em } .SRPage .SRChildren { display: none; } .SRSymbol { font-weight: bold; color: #425E97; font-family: Arial, Verdana, sans-serif; text-decoration: none; outline: none; } a.SRScope { display: block; color: #425E97; font-family: Arial, Verdana, sans-serif; text-decoration: none; outline: none; } a.SRSymbol:focus, a.SRSymbol:active, a.SRScope:focus, a.SRScope:active { text-decoration: underline; } span.SRScope { padding-left: 4px; font-family: Arial, Verdana, sans-serif; } .SRPage .SRStatus { padding: 2px 5px; font-size: 8pt; font-style: italic; font-family: Arial, Verdana, sans-serif; } .SRResult { display: none; } div.searchresults { margin-left: 10px; margin-right: 10px; } /*---------------- External search page results */ .searchresult { background-color: #F0F3F8; } .pages b { color: white; padding: 5px 5px 3px 5px; background-image: url("../tab_a.png"); background-repeat: repeat-x; text-shadow: 0 1px 1px #000000; } .pages { line-height: 17px; margin-left: 4px; text-decoration: none; } .hl { font-weight: bold; } #searchresults { margin-bottom: 20px; } .searchpages { margin-top: 10px; } html/search/groups_b.html0000644000175000017500000000263614753471226014777 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_0.js0000644000175000017500000000141214753471226015045 0ustar buildbuildvar searchData= [ ['_5fiqbal_5fobjfn_5fgradient_0',['_iqbal_objfn_gradient',['../../../libosmodsp/html/group__iqbal.html#ga169a1a71bbe3ff22192dca26f4d9ef8d',1,]]], ['_5fiqbal_5fobjfn_5fval_5fgradient_1',['_iqbal_objfn_val_gradient',['../../../libosmodsp/html/group__iqbal.html#ga62f9a247afbb52d576a1763ccd47397f',1,]]], ['_5fiqbal_5fobjfn_5fvalue_2',['_iqbal_objfn_value',['../../../libosmodsp/html/group__iqbal.html#ga743af26acca4fa90afcf1e67dda95dba',1,]]], ['_5fosmo_5fiqbal_5festimate_3',['_osmo_iqbal_estimate',['../../../libosmodsp/html/group__iqbal.html#ga129881cae54362d61dd2b4460f8af248',1,]]], ['_5fosmo_5fiqbal_5festimate_5frelease_4',['_osmo_iqbal_estimate_release',['../../../libosmodsp/html/group__iqbal.html#ga5ece20030938ef8e8f9e1c3f2d91482a',1,]]] ]; html/search/close.svg0000644000175000017500000000240414753471226014110 0ustar buildbuild image/svg+xml html/search/variables_c.html0000644000175000017500000000264114753471226015425 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_d.js0000644000175000017500000000023614753471226014226 0ustar buildbuildvar searchData= [ ['xch_5fdc12_2ec_0',['xch_dc12.c',['../xch__dc12_8c.html',1,'']]], ['xch_5fdc12_2eh_1',['xch_dc12.h',['../xch__dc12_8h.html',1,'']]] ]; html/search/groups_1.js0000644000175000017500000000045314753471226014361 0ustar buildbuildvar searchData= [ ['a5_20ciphering_20algorithm_0',['A5 ciphering algorithm',['../group__a5.html',1,'']]], ['ambe_20vocoder_1',['AMBE vocoder',['../group__codec.html',1,'']]], ['ambe_20vocoder_20_2d_20internal_20api_2',['AMBE vocoder - internal API',['../group__codec__private.html',1,'']]] ]; html/search/all_1.js0000644000175000017500000000254414753471226013615 0ustar buildbuildvar searchData= [ ['_5fblen_0',['_blen',['../../../libosmodsp/html/structcfile.html#ad3d6965e1039aa1f648361b2f83b034a',1,'cfile']]], ['_5fdata_1',['_data',['../../../libosmodsp/html/structosmo__cxvec.html#aa8a9de0ef88d44caa1c07bc91b99bffd',1,'osmo_cxvec']]], ['_5fiqbal_5festimate_5fstate_2',['_iqbal_estimate_state',['../../../libosmodsp/html/struct__iqbal__estimate__state.html',1,'']]], ['_5fiqbal_5fobjfn_5fgradient_3',['_iqbal_objfn_gradient',['../../../libosmodsp/html/group__iqbal.html#ga169a1a71bbe3ff22192dca26f4d9ef8d',1,]]], ['_5fiqbal_5fobjfn_5fval_5fgradient_4',['_iqbal_objfn_val_gradient',['../../../libosmodsp/html/group__iqbal.html#ga62f9a247afbb52d576a1763ccd47397f',1,]]], ['_5fiqbal_5fobjfn_5fvalue_5',['_iqbal_objfn_value',['../../../libosmodsp/html/group__iqbal.html#ga743af26acca4fa90afcf1e67dda95dba',1,]]], ['_5fiqbal_5fstate_6',['_iqbal_state',['../../../libosmodsp/html/struct__iqbal__state.html',1,'']]], ['_5fosmo_5fiqbal_5festimate_7',['_osmo_iqbal_estimate',['../../../libosmodsp/html/group__iqbal.html#ga129881cae54362d61dd2b4460f8af248',1,]]], ['_5fosmo_5fiqbal_5festimate_5frelease_8',['_osmo_iqbal_estimate_release',['../../../libosmodsp/html/group__iqbal.html#ga5ece20030938ef8e8f9e1c3f2d91482a',1,]]], ['_5fref_9',['_ref',['../structgmr1__pi4cxpsk__sync.html#a291c9b0776495cfb3c3f3a2fb4f87333',1,'gmr1_pi4cxpsk_sync']]] ]; html/search/groups_1.html0000644000175000017500000000263614753471226014716 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_11.js0000644000175000017500000000062314753471226015072 0ustar buildbuildvar searchData= [ ['tmp_0',['tmp',['../../../libosmodsp/html/struct__iqbal__state.html#a03100dde8b80dacdd0a4936511c5ab10',1,'_iqbal_state']]], ['tone_5fphase_5ff1_1',['tone_phase_f1',['../structambe__decoder.html#aa30d43006212f987798af28cefe6a644',1,'ambe_decoder']]], ['tone_5fphase_5ff2_2',['tone_phase_f2',['../structambe__decoder.html#ada92b6d6ccd98bea21a205f9f3a91521',1,'ambe_decoder']]] ]; html/search/all_6.html0000644000175000017500000000263314753471226014151 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_b.html0000644000175000017500000000264114753471226015424 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_6.html0000644000175000017500000000263514753471226014505 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_2.js0000644000175000017500000001532714753471226013621 0ustar buildbuildvar searchData= [ ['a5_20ciphering_20algorithm_0',['A5 ciphering algorithm',['../group__a5.html',1,'']]], ['a5_2ec_1',['a5.c',['../a5_8c.html',1,'']]], ['a5_2eh_2',['a5.h',['../a5_8h.html',1,'']]], ['ambe_20vocoder_3',['AMBE vocoder',['../group__codec.html',1,'']]], ['ambe_20vocoder_20_2d_20internal_20api_4',['AMBE vocoder - internal API',['../group__codec__private.html',1,'']]], ['ambe_2ec_5',['ambe.c',['../ambe_8c.html',1,'']]], ['ambe_5fdecode_5fdtx_6',['ambe_decode_dtx',['../group__codec__private.html#ga8f0cf32d32bde050a40a3e7087185aad',1,'ambe.c']]], ['ambe_5fdecode_5ffini_7',['ambe_decode_fini',['../group__codec__private.html#ga8a426acea7ced6d46716695e243462dd',1,'ambe.c']]], ['ambe_5fdecode_5fframe_8',['ambe_decode_frame',['../group__codec__private.html#ga96427955e6f3174ea846064627843bc3',1,'ambe.c']]], ['ambe_5fdecode_5finit_9',['ambe_decode_init',['../group__codec__private.html#gaac2c306e18df0fb45f2487e83ba4f9e9',1,'ambe.c']]], ['ambe_5fdecode_5ftone_10',['ambe_decode_tone',['../group__codec__private.html#gaf5856df7a0f19188013d6c610a2b7f60',1,'tone.c']]], ['ambe_5fdecoder_11',['ambe_decoder',['../structambe__decoder.html',1,'']]], ['ambe_5ffdct_12',['ambe_fdct',['../group__codec__private.html#ga83063f9ee0607fe61bacc11bd42d059f',1,'math.c']]], ['ambe_5ffdft_5ffc_13',['ambe_fdft_fc',['../group__codec__private.html#ga9d9e8b11e46bf3ccf14d22be87f1c719',1,'math.c']]], ['ambe_5fframe_5fdecode_5fparams_14',['ambe_frame_decode_params',['../group__codec__private.html#ga55a71c63c53e21c1d6fc9c91ddf519cd',1,'frame.c']]], ['ambe_5fframe_5ftype_15',['ambe_frame_type',['../group__codec__private.html#ga109f07fd3782470868b1d1d2ec099eb6',1,'private.h']]], ['ambe_5fframe_5funpack_5fraw_16',['ambe_frame_unpack_raw',['../group__codec__private.html#ga8a4e007b142973be5b44ef1637c9bfee',1,'frame.c']]], ['ambe_5fgain_5ftbl_17',['ambe_gain_tbl',['../group__codec__private.html#ga8782e94d4fc86ce45ea714a7316eecd4',1,'ambe_gain_tbl(): tables.c'],['../group__codec__private.html#ga8782e94d4fc86ce45ea714a7316eecd4',1,'ambe_gain_tbl(): tables.c']]], ['ambe_5fhoc0_5ftbl_18',['ambe_hoc0_tbl',['../group__codec__private.html#gac6bf71952dbf30ef32fb5cc91681d8d6',1,'ambe_hoc0_tbl(): tables.c'],['../group__codec__private.html#gac6bf71952dbf30ef32fb5cc91681d8d6',1,'ambe_hoc0_tbl(): tables.c']]], ['ambe_5fhoc1_5ftbl_19',['ambe_hoc1_tbl',['../group__codec__private.html#ga934c67cf74ce3f2944594eab3958139c',1,'ambe_hoc1_tbl(): tables.c'],['../group__codec__private.html#ga934c67cf74ce3f2944594eab3958139c',1,'ambe_hoc1_tbl(): tables.c']]], ['ambe_5fhoc2_5ftbl_20',['ambe_hoc2_tbl',['../group__codec__private.html#ga8992a95357c191374ac100f76f8b42fe',1,'ambe_hoc2_tbl(): tables.c'],['../group__codec__private.html#ga8992a95357c191374ac100f76f8b42fe',1,'ambe_hoc2_tbl(): tables.c']]], ['ambe_5fhoc3_5ftbl_21',['ambe_hoc3_tbl',['../group__codec__private.html#ga616fdb311356f3430ade8e24d45479b4',1,'ambe_hoc3_tbl(): tables.c'],['../group__codec__private.html#ga616fdb311356f3430ade8e24d45479b4',1,'ambe_hoc3_tbl(): tables.c']]], ['ambe_5fhpg_5ftbl_22',['ambe_hpg_tbl',['../group__codec__private.html#gafaaf0c3cc5a7cd0f44133e1f5922a52d',1,'ambe_hpg_tbl(): tables.c'],['../group__codec__private.html#gafaaf0c3cc5a7cd0f44133e1f5922a52d',1,'ambe_hpg_tbl(): tables.c']]], ['ambe_5fidct_23',['ambe_idct',['../group__codec__private.html#ga0d2a102900214d2ebdab56bf85024cf2',1,'math.c']]], ['ambe_5fidft_5fcf_24',['ambe_idft_cf',['../group__codec__private.html#gadbfdcbf5186cc1c567112e4edc29a1a1',1,'math.c']]], ['ambe_5fprba12_5ftbl_25',['ambe_prba12_tbl',['../group__codec__private.html#gae5a94c3201e655989c87379268c30623',1,'ambe_prba12_tbl(): tables.c'],['../group__codec__private.html#gae5a94c3201e655989c87379268c30623',1,'ambe_prba12_tbl(): tables.c']]], ['ambe_5fprba34_5ftbl_26',['ambe_prba34_tbl',['../group__codec__private.html#gaadea447d12d8536738479b549eb42fdf',1,'ambe_prba34_tbl(): tables.c'],['../group__codec__private.html#gaadea447d12d8536738479b549eb42fdf',1,'ambe_prba34_tbl(): tables.c']]], ['ambe_5fprba57_5ftbl_27',['ambe_prba57_tbl',['../group__codec__private.html#ga35df9825da65a2015f7576c83c9843f4',1,'ambe_prba57_tbl(): tables.c'],['../group__codec__private.html#ga35df9825da65a2015f7576c83c9843f4',1,'ambe_prba57_tbl(): tables.c']]], ['ambe_5frate_28',['AMBE_RATE',['../group__codec__private.html#gac1723f2fb63e31519d15815b05cc2a67',1,'private.h']]], ['ambe_5fraw_5fparams_29',['ambe_raw_params',['../structambe__raw__params.html',1,'']]], ['ambe_5fsf0_5finterp_5ftbl_30',['ambe_sf0_interp_tbl',['../group__codec__private.html#gab7a7b1219368c43c898cfb24ff3cb5cd',1,'ambe_sf0_interp_tbl(): tables.c'],['../group__codec__private.html#gab7a7b1219368c43c898cfb24ff3cb5cd',1,'ambe_sf0_interp_tbl(): tables.c']]], ['ambe_5fsf0_5fperr14_5ftbl_31',['ambe_sf0_perr14_tbl',['../group__codec__private.html#ga42a2421d73b8b9021b2b88698057b53b',1,'ambe_sf0_perr14_tbl(): tables.c'],['../group__codec__private.html#ga42a2421d73b8b9021b2b88698057b53b',1,'ambe_sf0_perr14_tbl(): tables.c']]], ['ambe_5fsf0_5fperr58_5ftbl_32',['ambe_sf0_perr58_tbl',['../group__codec__private.html#ga109dca33b432f87d6d6a14a4a0787e06',1,'ambe_sf0_perr58_tbl(): tables.c'],['../group__codec__private.html#ga109dca33b432f87d6d6a14a4a0787e06',1,'ambe_sf0_perr58_tbl(): tables.c']]], ['ambe_5fsilence_33',['AMBE_SILENCE',['../group__codec__private.html#gga109f07fd3782470868b1d1d2ec099eb6a719fb04a91460753423334efdad424b5',1,'private.h']]], ['ambe_5fspeech_34',['AMBE_SPEECH',['../group__codec__private.html#gga109f07fd3782470868b1d1d2ec099eb6a14419c7969d8bb6cf9b2d8b71f30f33b',1,'private.h']]], ['ambe_5fsubframe_35',['ambe_subframe',['../structambe__subframe.html',1,'']]], ['ambe_5fsubframe_5fexpand_36',['ambe_subframe_expand',['../group__codec__private.html#ga2d3ff962344089d1a44fd0d659c55df8',1,'frame.c']]], ['ambe_5fsynth_37',['ambe_synth',['../structambe__synth.html',1,'']]], ['ambe_5fsynth_5faudio_38',['ambe_synth_audio',['../group__codec__private.html#ga7ca25dc5919fcff4c7494eb02d25fda2',1,'synth.c']]], ['ambe_5fsynth_5fenhance_39',['ambe_synth_enhance',['../group__codec__private.html#ga5fdca2bf0b039f3bb0dd97b0f601fe62',1,'synth.c']]], ['ambe_5fsynth_5finit_40',['ambe_synth_init',['../group__codec__private.html#ga31252750e130d6bf531c483df2ec8a49',1,'synth.c']]], ['ambe_5ftone_41',['AMBE_TONE',['../group__codec__private.html#gga109f07fd3782470868b1d1d2ec099eb6a3ed83bce1686c0614c9377ff191cc8d1',1,'private.h']]], ['ambe_5fv_5fuv_5ftbl_42',['ambe_v_uv_tbl',['../group__codec__private.html#ga735cc90f20631506f7a5fc4827f4e8d5',1,'ambe_v_uv_tbl(): tables.c'],['../group__codec__private.html#ga735cc90f20631506f7a5fc4827f4e8d5',1,'ambe_v_uv_tbl(): tables.c']]] ]; html/search/all_c.js0000644000175000017500000000222014753471226013666 0ustar buildbuildvar searchData= [ ['m_5fpif_0',['M_PIf',['../group__codec__private.html#gacbb42dc053fedc161079f0a4d20a64e8',1,'private.h']]], ['mask_1',['mask',['../structgmr1__puncturer.html#af98900595177fbe9bf6c08ee652ab739',1,'gmr1_puncturer']]], ['math_2ec_2',['math.c',['../math_8c.html',1,'']]], ['max_5fiter_3',['max_iter',['../../../libosmodsp/html/structosmo__iqbal__opts.html#ac6dc907d8a810172970426cac913f2b0',1,'osmo_iqbal_opts']]], ['max_5flen_4',['max_len',['../../../libosmodsp/html/structosmo__cxvec.html#a42469c5c904c26c45af3ff557ccd203f',1,'osmo_cxvec']]], ['ml_5',['Ml',['../structambe__subframe.html#a4a3fa891e79797c2458f0ec01dbe9019',1,'ambe_subframe']]], ['mlog_6',['Mlog',['../structambe__subframe.html#a56d7cadaf4f6be52366ba2f26983483b',1,'ambe_subframe']]], ['mod_7',['mod',['../structgmr1__pi4cxpsk__burst.html#a835af391ae1715b41cbdd52efd1b378a',1,'gmr1_pi4cxpsk_burst']]], ['mod_5fphase_8',['mod_phase',['../structgmr1__pi4cxpsk__symbol.html#ac3639293117223030a399cdb947bf22b',1,'gmr1_pi4cxpsk_symbol']]], ['mod_5fval_9',['mod_val',['../structgmr1__pi4cxpsk__symbol.html#a62299b3758847f06baa14861572d6160',1,'gmr1_pi4cxpsk_symbol']]] ]; html/search/variables_4.js0000644000175000017500000000106414753471226015014 0ustar buildbuildvar searchData= [ ['data_0',['data',['../../../libosmodsp/html/structcfile.html#aeeb1105659968baae5df24026bf1d281',1,'cfile::data()'],['../../../libosmodsp/html/structosmo__cxvec.html#aec620e4391a60de801eb23dec73e4d12',1,'osmo_cxvec::data()'],['../structgmr1__pi4cxpsk__symbol.html#a2fb97bf5773d1491eb1359e92d4832f6',1,'gmr1_pi4cxpsk_symbol::data()'],['../structgmr1__pi4cxpsk__burst.html#a743e2058421775d2033d5e455e7be163',1,'gmr1_pi4cxpsk_burst::data()']]], ['dec_1',['dec',['../structgmr1__codec.html#a6c9cdb292f878bd711308d13b6cb0730',1,'gmr1_codec']]] ]; html/search/files_1.js0000644000175000017500000000020014753471226014132 0ustar buildbuildvar searchData= [ ['bcch_2ec_0',['bcch.c',['../bcch_8c.html',1,'']]], ['bcch_2eh_1',['bcch.h',['../bcch_8h.html',1,'']]] ]; html/search/functions_4.js0000644000175000017500000000607114753471226015057 0ustar buildbuildvar searchData= [ ['osmo_5fcxvec_5falloc_0',['osmo_cxvec_alloc',['../../../libosmodsp/html/group__cxvec.html#ga9461ac13f1d77ca832b140461e599caa',1,]]], ['osmo_5fcxvec_5falloc_5ffrom_5fdata_1',['osmo_cxvec_alloc_from_data',['../../../libosmodsp/html/group__cxvec.html#ga4edecda809e91f11cf88b53a1db8d62a',1,]]], ['osmo_5fcxvec_5fconvolve_2',['osmo_cxvec_convolve',['../../../libosmodsp/html/group__cxvec__math.html#ga2ebadb16e25768896013420a98ec666f',1,]]], ['osmo_5fcxvec_5fcorrelate_3',['osmo_cxvec_correlate',['../../../libosmodsp/html/group__cxvec__math.html#ga99ff6e3baec3253f4e431b156f042a0f',1,]]], ['osmo_5fcxvec_5fdbg_5fdump_4',['osmo_cxvec_dbg_dump',['../../../libosmodsp/html/group__cxvec.html#ga69e6d1ea3d468954cedf7d6f8d44f825',1,]]], ['osmo_5fcxvec_5fdelay_5',['osmo_cxvec_delay',['../../../libosmodsp/html/group__cxvec__math.html#ga9fa20d926f9d313a4751cef1eff740ba',1,]]], ['osmo_5fcxvec_5ffree_6',['osmo_cxvec_free',['../../../libosmodsp/html/group__cxvec.html#gaa57240ff2299122f9375e901b9700e7d',1,]]], ['osmo_5fcxvec_5finit_5ffrom_5fdata_7',['osmo_cxvec_init_from_data',['../../../libosmodsp/html/group__cxvec.html#gaa03ae6bbc24d094b8955d905832f0c36',1,]]], ['osmo_5fcxvec_5finterpolate_5fpoint_8',['osmo_cxvec_interpolate_point',['../../../libosmodsp/html/group__cxvec__math.html#gacb1c646e03a09b51b617467501639763',1,]]], ['osmo_5fcxvec_5fpeak_5fenergy_5ffind_9',['osmo_cxvec_peak_energy_find',['../../../libosmodsp/html/group__cxvec__math.html#ga495219ee953336e15cd68c9b22d3850c',1,]]], ['osmo_5fcxvec_5fpeaks_5fscan_10',['osmo_cxvec_peaks_scan',['../../../libosmodsp/html/group__cxvec__math.html#gad25b04feb1cd30b24fe7de8f76e56c23',1,]]], ['osmo_5fcxvec_5frotate_11',['osmo_cxvec_rotate',['../../../libosmodsp/html/group__cxvec__math.html#ga49125f3c259da9d7eec7fa4d98d609d4',1,]]], ['osmo_5fcxvec_5fscale_12',['osmo_cxvec_scale',['../../../libosmodsp/html/group__cxvec__math.html#ga5ac0adb49726087258381582582ef654',1,]]], ['osmo_5fcxvec_5fsig_5fnormalize_13',['osmo_cxvec_sig_normalize',['../../../libosmodsp/html/group__cxvec__math.html#ga4579583a658fc33afd24a1d8508b212f',1,]]], ['osmo_5fiqbal_5fcxvec_5festimate_14',['osmo_iqbal_cxvec_estimate',['../../../libosmodsp/html/group__iqbal.html#ga19298f48b07828c19bc54038d5abe5ad',1,]]], ['osmo_5fiqbal_5fcxvec_5ffix_15',['osmo_iqbal_cxvec_fix',['../../../libosmodsp/html/group__iqbal.html#ga978fbf1c9f01694852c561c95d5ceb9d',1,]]], ['osmo_5fiqbal_5fcxvec_5foptimize_16',['osmo_iqbal_cxvec_optimize',['../../../libosmodsp/html/group__iqbal.html#gac74f9d37e2153fdf954e592b36f7c7c0',1,]]], ['osmo_5fiqbal_5festimate_17',['osmo_iqbal_estimate',['../../../libosmodsp/html/group__iqbal.html#ga23c6972ae206b4a60dbe49d954fc9caa',1,]]], ['osmo_5fiqbal_5ffix_18',['osmo_iqbal_fix',['../../../libosmodsp/html/group__iqbal.html#gaaca46bab25fe24148c3cb3c4d2158c79',1,]]], ['osmo_5fnormsqf_19',['osmo_normsqf',['../../../libosmodsp/html/group__cxvec__math.html#ga1b169ec31cb01111c0def0c12d65f3a2',1,]]], ['osmo_5fsinc_20',['osmo_sinc',['../../../libosmodsp/html/group__cxvec__math.html#ga4e7a7183dc4e5ce77d72d2986495f348',1,]]] ]; html/search/files_2.js0000644000175000017500000000170614753471226014147 0ustar buildbuildvar searchData= [ ['ccch_2ec_0',['ccch.c',['../ccch_8c.html',1,'']]], ['ccch_2eh_1',['ccch.h',['../ccch_8h.html',1,'']]], ['cfile_2ec_2',['cfile.c',['../../../libosmodsp/html/cfile_8c.html',1,'']]], ['cfile_2eh_3',['cfile.h',['../../../libosmodsp/html/cfile_8h.html',1,'']]], ['codec_2ec_4',['codec.c',['../codec_8c.html',1,'']]], ['codec_2eh_5',['codec.h',['../codec_8h.html',1,'']]], ['conv_2ec_6',['conv.c',['../conv_8c.html',1,'']]], ['conv_2eh_7',['conv.h',['../conv_8h.html',1,'']]], ['crc_2ec_8',['crc.c',['../crc_8c.html',1,'']]], ['crc_2eh_9',['crc.h',['../crc_8h.html',1,'']]], ['cxvec_2ec_10',['cxvec.c',['../../../libosmodsp/html/cxvec_8c.html',1,'']]], ['cxvec_2eh_11',['cxvec.h',['../../../libosmodsp/html/cxvec_8h.html',1,'']]], ['cxvec_5fmath_2ec_12',['cxvec_math.c',['../../../libosmodsp/html/cxvec__math_8c.html',1,'']]], ['cxvec_5fmath_2eh_13',['cxvec_math.h',['../../../libosmodsp/html/cxvec__math_8h.html',1,'']]] ]; html/search/variables_8.html0000644000175000017500000000264114753471226015352 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_c.js0000644000175000017500000000030014753471226014432 0ustar buildbuildvar searchData= [ ['tch3_20channel_20coding_0',['TCH3 channel coding',['../group__tch3.html',1,'']]], ['tch9_20channel_20coding_1',['TCH9 channel coding',['../group__tch9.html',1,'']]] ]; html/search/all_3.html0000644000175000017500000000263314753471226014146 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_0.html0000644000175000017500000000264114753471226015342 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_4.html0000644000175000017500000000263614753471226014721 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_b.js0000644000175000017500000000012614753471226014437 0ustar buildbuildvar searchData= [ ['scrambling_0',['Scrambling',['../group__scramb.html',1,'']]] ]; html/search/files_a.js0000644000175000017500000000020014753471226014212 0ustar buildbuildvar searchData= [ ['rach_2ec_0',['rach.c',['../rach_8c.html',1,'']]], ['rach_2eh_1',['rach.h',['../rach_8h.html',1,'']]] ]; html/search/variables_3.html0000644000175000017500000000264114753471226015345 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_a.html0000644000175000017500000000264114753471226015423 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_2.html0000644000175000017500000000263614753471226014717 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_6.js0000644000175000017500000000050214753471226014144 0ustar buildbuildvar searchData= [ ['interleave_2ec_0',['interleave.c',['../interleave_8c.html',1,'']]], ['interleave_2eh_1',['interleave.h',['../interleave_8h.html',1,'']]], ['iqbal_2ec_2',['iqbal.c',['../../../libosmodsp/html/iqbal_8c.html',1,'']]], ['iqbal_2eh_3',['iqbal.h',['../../../libosmodsp/html/iqbal_8h.html',1,'']]] ]; html/search/variables_13.html0000644000175000017500000000264214753471226015427 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_0.html0000644000175000017500000000263514753471226014477 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_c.js0000644000175000017500000000053614753471226014230 0ustar buildbuildvar searchData= [ ['tables_2ec_0',['tables.c',['../tables_8c.html',1,'']]], ['tch3_2ec_1',['tch3.c',['../tch3_8c.html',1,'']]], ['tch3_2eh_2',['tch3.h',['../tch3_8h.html',1,'']]], ['tch9_2ec_3',['tch9.c',['../tch9_8c.html',1,'']]], ['tch9_2eh_4',['tch9.h',['../tch9_8h.html',1,'']]], ['tone_2ec_5',['tone.c',['../tone_8c.html',1,'']]] ]; html/search/all_b.html0000644000175000017500000000263314753471226014225 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_0.js0000644000175000017500000000016714753471226014362 0ustar buildbuildvar searchData= [ ['_2ecfile_20helpers_0',['.cfile helpers',['../../../libosmodsp/html/group__cfile.html',1,'']]] ]; html/search/files_9.js0000644000175000017500000000051114753471226014147 0ustar buildbuildvar searchData= [ ['pi4cxpsk_2ec_0',['pi4cxpsk.c',['../pi4cxpsk_8c.html',1,'']]], ['pi4cxpsk_2eh_1',['pi4cxpsk.h',['../pi4cxpsk_8h.html',1,'']]], ['private_2eh_2',['private.h',['../private_8h.html',1,'']]], ['punct_2ec_3',['punct.c',['../punct_8c.html',1,'']]], ['punct_2eh_4',['punct.h',['../punct_8h.html',1,'']]] ]; html/search/all_b.js0000644000175000017500000000167514753471226013702 0ustar buildbuildvar searchData= [ ['l_0',['L',['../structgmr1__puncturer.html#a56ab639ebbf577886ec36db783b8ef34',1,'gmr1_puncturer::L()'],['../structambe__subframe.html#a3ebdc823451ce217e2956ff0eac7442f',1,'ambe_subframe::L()']]], ['lb_1',['Lb',['../structambe__subframe.html#af7ffd521bfff7156ae33ba43a893b163',1,'ambe_subframe']]], ['len_2',['len',['../../../libosmodsp/html/structcfile.html#a2c856227c89a929b863da15951fcaef4',1,'cfile::len()'],['../../../libosmodsp/html/structosmo__cxvec.html#a03722af5764b41c9151a7542546e3739',1,'osmo_cxvec::len()'],['../structgmr1__fcch__burst.html#a8f5f11f6f9b9b7aa2b505f7e4d6ca44e',1,'gmr1_fcch_burst::len()'],['../structgmr1__pi4cxpsk__sync.html#a67853f80e05c48b01dad6e7f7bc6e39a',1,'gmr1_pi4cxpsk_sync::len()'],['../structgmr1__pi4cxpsk__data.html#a14bc0a4787038e79298c46fa85784f13',1,'gmr1_pi4cxpsk_data::len()'],['../structgmr1__pi4cxpsk__burst.html#ad164674725c949673b0a2ec24e0f0000',1,'gmr1_pi4cxpsk_burst::len()']]] ]; html/search/groups_a.js0000644000175000017500000000015214753471226014435 0ustar buildbuildvar searchData= [ ['rach_20channel_20coding_0',['RACH channel coding',['../group__rach.html',1,'']]] ]; html/search/all_16.html0000644000175000017500000000263414753471226014233 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_5.js0000644000175000017500000000035114753471226014500 0ustar buildbuildvar searchData= [ ['tch3_5fstate_0',['tch3_state',['../structtch3__state.html',1,'']]], ['tch9_5fstate_1',['tch9_state',['../structtch9__state.html',1,'']]], ['tone_5fdesc_2',['tone_desc',['../structtone__desc.html',1,'']]] ]; html/search/functions_1.html0000644000175000017500000000264114753471226015403 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_10.html0000644000175000017500000000264214753471226015424 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_2.js0000644000175000017500000000042314753471226015010 0ustar buildbuildvar searchData= [ ['bits_0',['bits',['../structgmr1__pi4cxpsk__modulation.html#a3519a1238c0cc46cc075724f8677c556',1,'gmr1_pi4cxpsk_modulation']]], ['bits_5fcpp_1',['bits_cpp',['../structgmr1__interleaver.html#a92db6403eef66c2dff2686364d477262',1,'gmr1_interleaver']]] ]; html/search/files_5.js0000644000175000017500000000021414753471226014143 0ustar buildbuildvar searchData= [ ['gsmtap_2ec_0',['gsmtap.c',['../gsmtap_8c.html',1,'']]], ['gsmtap_2eh_1',['gsmtap.h',['../gsmtap_8h.html',1,'']]] ]; html/search/groups_7.js0000644000175000017500000000031514753471226014364 0ustar buildbuildvar searchData= [ ['interleaving_0',['Interleaving',['../group__interleave.html',1,'']]], ['iq_20balance_20utilities_1',['IQ balance utilities',['../../../libosmodsp/html/group__iqbal.html',1,'']]] ]; html/search/variables_1.js0000644000175000017500000000652414753471226015017 0ustar buildbuildvar searchData= [ ['ambe_5fgain_5ftbl_0',['ambe_gain_tbl',['../group__codec__private.html#ga8782e94d4fc86ce45ea714a7316eecd4',1,'ambe_gain_tbl(): tables.c'],['../group__codec__private.html#ga8782e94d4fc86ce45ea714a7316eecd4',1,'ambe_gain_tbl(): tables.c']]], ['ambe_5fhoc0_5ftbl_1',['ambe_hoc0_tbl',['../group__codec__private.html#gac6bf71952dbf30ef32fb5cc91681d8d6',1,'ambe_hoc0_tbl(): tables.c'],['../group__codec__private.html#gac6bf71952dbf30ef32fb5cc91681d8d6',1,'ambe_hoc0_tbl(): tables.c']]], ['ambe_5fhoc1_5ftbl_2',['ambe_hoc1_tbl',['../group__codec__private.html#ga934c67cf74ce3f2944594eab3958139c',1,'ambe_hoc1_tbl(): tables.c'],['../group__codec__private.html#ga934c67cf74ce3f2944594eab3958139c',1,'ambe_hoc1_tbl(): tables.c']]], ['ambe_5fhoc2_5ftbl_3',['ambe_hoc2_tbl',['../group__codec__private.html#ga8992a95357c191374ac100f76f8b42fe',1,'ambe_hoc2_tbl(): tables.c'],['../group__codec__private.html#ga8992a95357c191374ac100f76f8b42fe',1,'ambe_hoc2_tbl(): tables.c']]], ['ambe_5fhoc3_5ftbl_4',['ambe_hoc3_tbl',['../group__codec__private.html#ga616fdb311356f3430ade8e24d45479b4',1,'ambe_hoc3_tbl(): tables.c'],['../group__codec__private.html#ga616fdb311356f3430ade8e24d45479b4',1,'ambe_hoc3_tbl(): tables.c']]], ['ambe_5fhpg_5ftbl_5',['ambe_hpg_tbl',['../group__codec__private.html#gafaaf0c3cc5a7cd0f44133e1f5922a52d',1,'ambe_hpg_tbl(): tables.c'],['../group__codec__private.html#gafaaf0c3cc5a7cd0f44133e1f5922a52d',1,'ambe_hpg_tbl(): tables.c']]], ['ambe_5fprba12_5ftbl_6',['ambe_prba12_tbl',['../group__codec__private.html#gae5a94c3201e655989c87379268c30623',1,'ambe_prba12_tbl(): tables.c'],['../group__codec__private.html#gae5a94c3201e655989c87379268c30623',1,'ambe_prba12_tbl(): tables.c']]], ['ambe_5fprba34_5ftbl_7',['ambe_prba34_tbl',['../group__codec__private.html#gaadea447d12d8536738479b549eb42fdf',1,'ambe_prba34_tbl(): tables.c'],['../group__codec__private.html#gaadea447d12d8536738479b549eb42fdf',1,'ambe_prba34_tbl(): tables.c']]], ['ambe_5fprba57_5ftbl_8',['ambe_prba57_tbl',['../group__codec__private.html#ga35df9825da65a2015f7576c83c9843f4',1,'ambe_prba57_tbl(): tables.c'],['../group__codec__private.html#ga35df9825da65a2015f7576c83c9843f4',1,'ambe_prba57_tbl(): tables.c']]], ['ambe_5fsf0_5finterp_5ftbl_9',['ambe_sf0_interp_tbl',['../group__codec__private.html#gab7a7b1219368c43c898cfb24ff3cb5cd',1,'ambe_sf0_interp_tbl(): tables.c'],['../group__codec__private.html#gab7a7b1219368c43c898cfb24ff3cb5cd',1,'ambe_sf0_interp_tbl(): tables.c']]], ['ambe_5fsf0_5fperr14_5ftbl_10',['ambe_sf0_perr14_tbl',['../group__codec__private.html#ga42a2421d73b8b9021b2b88698057b53b',1,'ambe_sf0_perr14_tbl(): tables.c'],['../group__codec__private.html#ga42a2421d73b8b9021b2b88698057b53b',1,'ambe_sf0_perr14_tbl(): tables.c']]], ['ambe_5fsf0_5fperr58_5ftbl_11',['ambe_sf0_perr58_tbl',['../group__codec__private.html#ga109dca33b432f87d6d6a14a4a0787e06',1,'ambe_sf0_perr58_tbl(): tables.c'],['../group__codec__private.html#ga109dca33b432f87d6d6a14a4a0787e06',1,'ambe_sf0_perr58_tbl(): tables.c']]], ['ambe_5fv_5fuv_5ftbl_12',['ambe_v_uv_tbl',['../group__codec__private.html#ga735cc90f20631506f7a5fc4827f4e8d5',1,'ambe_v_uv_tbl(): tables.c'],['../group__codec__private.html#ga735cc90f20631506f7a5fc4827f4e8d5',1,'ambe_v_uv_tbl(): tables.c']]] ]; html/search/all_c.html0000644000175000017500000000263314753471226014226 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_8.html0000644000175000017500000000263514753471226014507 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/nomatches.html0000644000175000017500000000076414753471226015140 0ustar buildbuild
    No Matches
    html/search/functions_5.js0000644000175000017500000000020714753471226015053 0ustar buildbuildvar searchData= [ ['sinf_5ffast_0',['sinf_fast',['../group__codec__private.html#gade8a6e65fb5db286835ffd82b0f61dd1',1,'math.c']]] ]; html/search/groups_d.js0000644000175000017500000000020514753471226014437 0ustar buildbuildvar searchData= [ ['xch_20over_20dc12_20channel_20coding_0',['xCH over DC12 channel coding',['../group__xch__dc12.html',1,'']]] ]; html/search/functions_4.html0000644000175000017500000000264114753471226015406 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_5.js0000644000175000017500000000175314753471226013622 0ustar buildbuildvar searchData= [ ['data_0',['data',['../../../libosmodsp/html/structcfile.html#aeeb1105659968baae5df24026bf1d281',1,'cfile::data()'],['../../../libosmodsp/html/structosmo__cxvec.html#aec620e4391a60de801eb23dec73e4d12',1,'osmo_cxvec::data()'],['../structgmr1__pi4cxpsk__symbol.html#a2fb97bf5773d1491eb1359e92d4832f6',1,'gmr1_pi4cxpsk_symbol::data()'],['../structgmr1__pi4cxpsk__burst.html#a743e2058421775d2033d5e455e7be163',1,'gmr1_pi4cxpsk_burst::data()']]], ['dec_1',['dec',['../structgmr1__codec.html#a6c9cdb292f878bd711308d13b6cb0730',1,'gmr1_codec']]], ['defs_2eh_2',['defs.h',['../l1_2defs_8h.html',1,'(Global Namespace)'],['../sdr_2defs_8h.html',1,'(Global Namespace)']]], ['dkab_20bursts_3',['DKAB bursts',['../group__dkab.html',1,'']]], ['dkab_2ec_4',['dkab.c',['../dkab_8c.html',1,'']]], ['dkab_2eh_5',['dkab.h',['../dkab_8h.html',1,'']]], ['dkab_5fpwr_5fratio_5fthreshold_6',['DKAB_PWR_RATIO_THRESHOLD',['../group__dkab.html#gadd49926a91b1c3ab8c0b96d2fdd7c6e4',1,'dkab.c']]] ]; html/search/enums_0.js0000644000175000017500000000023014753471226014161 0ustar buildbuildvar searchData= [ ['ambe_5fframe_5ftype_0',['ambe_frame_type',['../group__codec__private.html#ga109f07fd3782470868b1d1d2ec099eb6',1,'private.h']]] ]; html/search/functions_0.html0000644000175000017500000000264114753471226015402 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_5.js0000644000175000017500000000042014753471226014357 0ustar buildbuildvar searchData= [ ['facch3_20channel_20coding_0',['FACCH3 channel coding',['../group__facch3.html',1,'']]], ['facch9_20channel_20coding_1',['FACCH9 channel coding',['../group__facch9.html',1,'']]], ['fcch_20bursts_2',['FCCH bursts',['../group__fcch.html',1,'']]] ]; html/search/variables_6.js0000644000175000017500000000256114753471226015021 0ustar buildbuildvar searchData= [ ['f0_0',['f0',['../structambe__subframe.html#a62d2a8d54cc973e32e85d9c4735bde1f',1,'ambe_subframe']]], ['f0log_1',['f0log',['../structambe__subframe.html#a0bd7338941b5a9e13bb9cab48ae41bd6',1,'ambe_subframe']]], ['f1_2',['f1',['../structtone__desc.html#a9980c6296defda0b97fdc6f0a70a0b8d',1,'tone_desc']]], ['f2_3',['f2',['../structtone__desc.html#a0367e505d7112a2acbddefaf23feac79',1,'tone_desc']]], ['feval_4',['feval',['../../../libosmodsp/html/struct__iqbal__state.html#ad82cbcec2dc9e52f4816cbe9a0af757f',1,'_iqbal_state']]], ['fft_5',['fft',['../../../libosmodsp/html/struct__iqbal__estimate__state.html#aa44240271f4835c080793da0b816bc1c',1,'_iqbal_estimate_state']]], ['fft_5fcount_6',['fft_count',['../../../libosmodsp/html/structosmo__iqbal__opts.html#abb7854c9f674bf12022ce0b5485fd2a7',1,'osmo_iqbal_opts']]], ['fft_5fplan_7',['fft_plan',['../../../libosmodsp/html/struct__iqbal__estimate__state.html#a0a1a4f9083a6228f38e78702b8f710e9',1,'_iqbal_estimate_state']]], ['fft_5fsize_8',['fft_size',['../../../libosmodsp/html/structosmo__iqbal__opts.html#a76e529e63af98a524caa8cf61c4de828',1,'osmo_iqbal_opts']]], ['flags_9',['flags',['../../../libosmodsp/html/structosmo__cxvec.html#ab3bd5fac3c3a84df65bc82d1cae223ab',1,'osmo_cxvec']]], ['freq_10',['freq',['../structgmr1__fcch__burst.html#af256a13136949602fd41e4da1c569435',1,'gmr1_fcch_burst']]] ]; html/search/all_8.html0000644000175000017500000000263314753471226014153 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_0.js0000644000175000017500000000025214753471226014140 0ustar buildbuildvar searchData= [ ['a5_2ec_0',['a5.c',['../a5_8c.html',1,'']]], ['a5_2eh_1',['a5.h',['../a5_8h.html',1,'']]], ['ambe_2ec_2',['ambe.c',['../ambe_8c.html',1,'']]] ]; html/search/all_15.html0000644000175000017500000000263414753471226014232 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_2.html0000644000175000017500000000264114753471226015344 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_9.html0000644000175000017500000000263314753471226014154 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/search.js0000644000175000017500000005500414753471226014071 0ustar buildbuild/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ function convertToId(search) { var result = ''; for (i=0;i do a search { this.Search(); } } this.OnSearchSelectKey = function(evt) { var e = (evt) ? evt : window.event; // for IE if (e.keyCode==40 && this.searchIndex0) // Up { this.searchIndex--; this.OnSelectItem(this.searchIndex); } else if (e.keyCode==13 || e.keyCode==27) { this.OnSelectItem(this.searchIndex); this.CloseSelectionWindow(); this.DOMSearchField().focus(); } return false; } // --------- Actions // Closes the results window. this.CloseResultsWindow = function() { this.DOMPopupSearchResultsWindow().style.display = 'none'; this.DOMSearchClose().style.display = 'none'; this.Activate(false); } this.CloseSelectionWindow = function() { this.DOMSearchSelectWindow().style.display = 'none'; } // Performs a search. this.Search = function() { this.keyTimeout = 0; // strip leading whitespace var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); var code = searchValue.toLowerCase().charCodeAt(0); var idxChar = searchValue.substr(0, 1).toLowerCase(); if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair { idxChar = searchValue.substr(0, 2); } var resultsPage; var resultsPageWithSearch; var hasResultsPage; var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); if (idx!=-1) { var hexCode=idx.toString(16); resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; resultsPageWithSearch = resultsPage+'?'+escape(searchValue); hasResultsPage = true; } else // nothing available for this search term { resultsPage = this.resultsPath + '/nomatches' + this.extension; resultsPageWithSearch = resultsPage; hasResultsPage = false; } window.frames.MSearchResults.location = resultsPageWithSearch; var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); if (domPopupSearchResultsWindow.style.display!='block') { var domSearchBox = this.DOMSearchBox(); this.DOMSearchClose().style.display = 'inline-block'; var domPopupSearchResults = this.DOMPopupSearchResults(); var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; domPopupSearchResultsWindow.style.display = 'block'; left -= domPopupSearchResults.offsetWidth; var maxWidth = document.body.clientWidth; var width = 400; if (left<10) left=10; if (width+left+8>maxWidth) width=maxWidth-left-8; domPopupSearchResultsWindow.style.top = top + 'px'; domPopupSearchResultsWindow.style.left = left + 'px'; domPopupSearchResultsWindow.style.width = width + 'px'; } this.lastSearchValue = searchValue; this.lastResultsPage = resultsPage; } // -------- Activation Functions // Activates or deactivates the search panel, resetting things to // their default values if necessary. this.Activate = function(isActive) { if (isActive || // open it this.DOMPopupSearchResultsWindow().style.display == 'block' ) { this.DOMSearchBox().className = 'MSearchBoxActive'; var searchField = this.DOMSearchField(); if (searchField.value == this.searchLabel) // clear "Search" term upon entry { searchField.value = ''; this.searchActive = true; } } else if (!isActive) // directly remove the panel { this.DOMSearchBox().className = 'MSearchBoxInactive'; this.DOMSearchField().value = this.searchLabel; this.searchActive = false; this.lastSearchValue = '' this.lastResultsPage = ''; } } } // ----------------------------------------------------------------------- // The class that handles everything on the search results page. function SearchResults(name) { // The number of matches from the last run of . this.lastMatchCount = 0; this.lastKey = 0; this.repeatOn = false; // Toggles the visibility of the passed element ID. this.FindChildElement = function(id) { var parentElement = document.getElementById(id); var element = parentElement.firstChild; while (element && element!=parentElement) { if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { return element; } if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { element = element.firstChild; } else if (element.nextSibling) { element = element.nextSibling; } else { do { element = element.parentNode; } while (element && element!=parentElement && !element.nextSibling); if (element && element!=parentElement) { element = element.nextSibling; } } } } this.Toggle = function(id) { var element = this.FindChildElement(id); if (element) { if (element.style.display == 'block') { element.style.display = 'none'; } else { element.style.display = 'block'; } } } // Searches for the passed string. If there is no parameter, // it takes it from the URL query. // // Always returns true, since other documents may try to call it // and that may or may not be possible. this.Search = function(search) { if (!search) // get search word from URL { search = window.location.search; search = search.substring(1); // Remove the leading '?' search = unescape(search); } search = search.replace(/^ +/, ""); // strip leading spaces search = search.replace(/ +$/, ""); // strip trailing spaces search = search.toLowerCase(); search = convertToId(search); var resultRows = document.getElementsByTagName("div"); var matches = 0; var i = 0; while (i < resultRows.length) { var row = resultRows.item(i); if (row.className == "SRResult") { var rowMatchName = row.id.toLowerCase(); rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' if (search.length<=rowMatchName.length && rowMatchName.substr(0, search.length)==search) { row.style.display = 'block'; matches++; } else { row.style.display = 'none'; } } i++; } document.getElementById("Searching").style.display='none'; if (matches == 0) // no results { document.getElementById("NoMatches").style.display='block'; } else // at least one result { document.getElementById("NoMatches").style.display='none'; } this.lastMatchCount = matches; return true; } // return the first item with index index or higher that is visible this.NavNext = function(index) { var focusItem; while (1) { var focusName = 'Item'+index; focusItem = document.getElementById(focusName); if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { break; } else if (!focusItem) // last element { break; } focusItem=null; index++; } return focusItem; } this.NavPrev = function(index) { var focusItem; while (1) { var focusName = 'Item'+index; focusItem = document.getElementById(focusName); if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { break; } else if (!focusItem) // last element { break; } focusItem=null; index--; } return focusItem; } this.ProcessKeys = function(e) { if (e.type == "keydown") { this.repeatOn = false; this.lastKey = e.keyCode; } else if (e.type == "keypress") { if (!this.repeatOn) { if (this.lastKey) this.repeatOn = true; return false; // ignore first keypress after keydown } } else if (e.type == "keyup") { this.lastKey = 0; this.repeatOn = false; } return this.lastKey!=0; } this.Nav = function(evt,itemIndex) { var e = (evt) ? evt : window.event; // for IE if (e.keyCode==13) return true; if (!this.ProcessKeys(e)) return false; if (this.lastKey==38) // Up { var newIndex = itemIndex-1; var focusItem = this.NavPrev(newIndex); if (focusItem) { var child = this.FindChildElement(focusItem.parentNode.parentNode.id); if (child && child.style.display == 'block') // children visible { var n=0; var tmpElem; while (1) // search for last child { tmpElem = document.getElementById('Item'+newIndex+'_c'+n); if (tmpElem) { focusItem = tmpElem; } else // found it! { break; } n++; } } } if (focusItem) { focusItem.focus(); } else // return focus to search field { parent.document.getElementById("MSearchField").focus(); } } else if (this.lastKey==40) // Down { var newIndex = itemIndex+1; var focusItem; var item = document.getElementById('Item'+itemIndex); var elem = this.FindChildElement(item.parentNode.parentNode.id); if (elem && elem.style.display == 'block') // children visible { focusItem = document.getElementById('Item'+itemIndex+'_c0'); } if (!focusItem) focusItem = this.NavNext(newIndex); if (focusItem) focusItem.focus(); } else if (this.lastKey==39) // Right { var item = document.getElementById('Item'+itemIndex); var elem = this.FindChildElement(item.parentNode.parentNode.id); if (elem) elem.style.display = 'block'; } else if (this.lastKey==37) // Left { var item = document.getElementById('Item'+itemIndex); var elem = this.FindChildElement(item.parentNode.parentNode.id); if (elem) elem.style.display = 'none'; } else if (this.lastKey==27) // Escape { parent.searchBox.CloseResultsWindow(); parent.document.getElementById("MSearchField").focus(); } else if (this.lastKey==13) // Enter { return true; } return false; } this.NavChild = function(evt,itemIndex,childIndex) { var e = (evt) ? evt : window.event; // for IE if (e.keyCode==13) return true; if (!this.ProcessKeys(e)) return false; if (this.lastKey==38) // Up { if (childIndex>0) { var newIndex = childIndex-1; document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); } else // already at first child, jump to parent { document.getElementById('Item'+itemIndex).focus(); } } else if (this.lastKey==40) // Down { var newIndex = childIndex+1; var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); if (!elem) // last child, jump to parent next parent { elem = this.NavNext(itemIndex+1); } if (elem) { elem.focus(); } } else if (this.lastKey==27) // Escape { parent.searchBox.CloseResultsWindow(); parent.document.getElementById("MSearchField").focus(); } else if (this.lastKey==13) // Enter { return true; } return false; } } function setKeyActions(elem,action) { elem.setAttribute('onkeydown',action); elem.setAttribute('onkeypress',action); elem.setAttribute('onkeyup',action); } function setClassAttr(elem,attr) { elem.setAttribute('class',attr); elem.setAttribute('className',attr); } function createResults() { var results = document.getElementById("SRResults"); for (var e=0; e
    Loading...
    Searching...
    No Matches
    html/search/files_9.html0000644000175000017500000000263514753471226014510 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_10.js0000644000175000017500000000334514753471226015075 0ustar buildbuildvar searchData= [ ['se_0',['SE',['../structambe__synth.html#ae9f1fa4f9e9616614f50fa303a3c52ce',1,'ambe_synth']]], ['sf0_5fmag_5finterp_1',['sf0_mag_interp',['../structambe__raw__params.html#a99596e150dafbc4dbefc83c0ebeb402a',1,'ambe_raw_params']]], ['sf0_5fperr_5f14_2',['sf0_perr_14',['../structambe__raw__params.html#a9f9e769e1d5e71979c4591931d8ef031',1,'ambe_raw_params']]], ['sf0_5fperr_5f58_3',['sf0_perr_58',['../structambe__raw__params.html#aefc1cb1dec8794e3ba084b1bef0540be',1,'ambe_raw_params']]], ['sf1_5fhoc_4',['sf1_hoc',['../structambe__raw__params.html#a96e40b2f376d714e5df4538776911192',1,'ambe_raw_params']]], ['sf1_5fprba12_5',['sf1_prba12',['../structambe__raw__params.html#ab5848d979e9ab98ee13df35244186633',1,'ambe_raw_params']]], ['sf1_5fprba34_6',['sf1_prba34',['../structambe__raw__params.html#a719970b8264d5d86e8127731e3b74e95',1,'ambe_raw_params']]], ['sf1_5fprba57_7',['sf1_prba57',['../structambe__raw__params.html#a5723fa985d5a3e403baf93375f6da49b',1,'ambe_raw_params']]], ['sf_5fprev_8',['sf_prev',['../structambe__decoder.html#a7ef287c9fa9a4f4303b8bcf14aa08a10',1,'ambe_decoder']]], ['start_5fat_5fprev_9',['start_at_prev',['../../../libosmodsp/html/structosmo__iqbal__opts.html#ad36e80298fe63cb9f985401e30f768fc',1,'osmo_iqbal_opts']]], ['syms_10',['syms',['../structgmr1__pi4cxpsk__modulation.html#ad9c4201e4495b6894945a5fc4285e96c',1,'gmr1_pi4cxpsk_modulation::syms()'],['../structgmr1__pi4cxpsk__sync.html#a89f2352b308757e77cab30d1153fdb8b',1,'gmr1_pi4cxpsk_sync::syms()']]], ['sync_11',['sync',['../structgmr1__pi4cxpsk__burst.html#a68e57bf2eeee31d4a9f5efb2dfb7a145',1,'gmr1_pi4cxpsk_burst']]], ['synth_12',['synth',['../structambe__decoder.html#ae182cfa94b3c3f970de386a8d671bbaa',1,'ambe_decoder']]] ]; html/search/files_a.html0000644000175000017500000000263514753471226014560 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/enums_0.html0000644000175000017500000000263514753471226014524 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/mag_sel.svg0000644000175000017500000000451214753471226014414 0ustar buildbuild image/svg+xml html/search/functions_2.html0000644000175000017500000000264114753471226015404 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_4.js0000644000175000017500000000013014753471226014354 0ustar buildbuildvar searchData= [ ['dkab_20bursts_0',['DKAB bursts',['../group__dkab.html',1,'']]] ]; html/search/variables_f.html0000644000175000017500000000264114753471226015430 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/enumvalues_0.html0000644000175000017500000000264214753471226015557 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_1.html0000644000175000017500000000264114753471226015343 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/enums_1.js0000644000175000017500000000021114753471226014161 0ustar buildbuildvar searchData= [ ['gmr1_5ftch9_5fmode_0',['gmr1_tch9_mode',['../group__tch9.html#ga744d45ed21afcffb14ab1dada9843d45',1,'tch9.h']]] ]; html/search/groups_6.html0000644000175000017500000000263614753471226014723 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_2.js0000644000175000017500000000060114753471226015046 0ustar buildbuildvar searchData= [ ['cfile_5fload_0',['cfile_load',['../../../libosmodsp/html/group__cfile.html#gacb0304d89096222df64f3f9a10f22167',1,]]], ['cfile_5frelease_1',['cfile_release',['../../../libosmodsp/html/group__cfile.html#ga7728a89f370281e5da16ff27d8657b3d',1,]]], ['cosf_5ffast_2',['cosf_fast',['../group__codec__private.html#ga62bc434f8483f0198f86b388ab30ced6',1,'math.c']]] ]; html/search/groups_9.html0000644000175000017500000000263614753471226014726 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_5.js0000644000175000017500000000021714753471226015014 0ustar buildbuildvar searchData= [ ['ebits_0',['ebits',['../structgmr1__pi4cxpsk__burst.html#a8205aeb2d88053361619f1baa0593a89',1,'gmr1_pi4cxpsk_burst']]] ]; html/search/files_4.html0000644000175000017500000000263514753471226014503 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_13.js0000644000175000017500000000035614753471226013677 0ustar buildbuildvar searchData= [ ['u_5fprev_0',['u_prev',['../structambe__synth.html#a1ec169cb61914f8a61e14e0a2838de6c',1,'ambe_synth']]], ['uw_5fprev_1',['uw_prev',['../structambe__synth.html#ac555e0a7a4e672f1c8e3ab6873b0bbfd',1,'ambe_synth']]] ]; html/search/variables_e.js0000644000175000017500000000231514753471226015075 0ustar buildbuildvar searchData= [ ['peak_5fearly_5flate_0',['PEAK_EARLY_LATE',['../../../libosmodsp/html/group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78aa8df843abc147bca5860fee1ddff1378',1,]]], ['peak_5fweigh_5fwin_1',['PEAK_WEIGH_WIN',['../../../libosmodsp/html/group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78abb4b91d1bfa5bd51ff0e48633d9b9891',1,]]], ['peak_5fweigh_5fwin_5fcenter_2',['PEAK_WEIGH_WIN_CENTER',['../../../libosmodsp/html/group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78ab0fb6b29112253cc5d51fb119b5d812a',1,]]], ['phi_3',['phi',['../structambe__synth.html#a5e8d3e37d5ef02db39803a10de1796ce',1,'ambe_synth']]], ['pitch_4',['pitch',['../structambe__raw__params.html#a7eb51135820d33cbf6a0e4b865bd2a59',1,'ambe_raw_params']]], ['pitch_5finterp_5',['pitch_interp',['../structambe__raw__params.html#a804fa021dcd25eed72ddeb7421b64375',1,'ambe_raw_params']]], ['pos_6',['pos',['../structgmr1__pi4cxpsk__sync.html#adabd2c21518c2bd6e37d4a8ad7facc6b',1,'gmr1_pi4cxpsk_sync::pos()'],['../structgmr1__pi4cxpsk__data.html#a8fcd05f64567745c7e7435334f1f593c',1,'gmr1_pi4cxpsk_data::pos()']]], ['psi1_7',['psi1',['../structambe__synth.html#ab03788ec8e6fd99b782ca07ae04d4dc4',1,'ambe_synth']]] ]; html/search/classes_5.html0000644000175000017500000000263714753471226015041 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_4.js0000644000175000017500000000034214753471226014477 0ustar buildbuildvar searchData= [ ['osmo_5fcxvec_0',['osmo_cxvec',['../../../libosmodsp/html/structosmo__cxvec.html',1,'']]], ['osmo_5fiqbal_5fopts_1',['osmo_iqbal_opts',['../../../libosmodsp/html/structosmo__iqbal__opts.html',1,'']]] ]; html/search/classes_4.html0000644000175000017500000000263714753471226015040 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_3.js0000644000175000017500000000072514753471226013616 0ustar buildbuildvar searchData= [ ['bcch_20channel_20coding_0',['BCCH channel coding',['../group__bcch.html',1,'']]], ['bcch_2ec_1',['bcch.c',['../bcch_8c.html',1,'']]], ['bcch_2eh_2',['bcch.h',['../bcch_8h.html',1,'']]], ['bits_3',['bits',['../structgmr1__pi4cxpsk__modulation.html#a3519a1238c0cc46cc075724f8677c556',1,'gmr1_pi4cxpsk_modulation']]], ['bits_5fcpp_4',['bits_cpp',['../structgmr1__interleaver.html#a92db6403eef66c2dff2686364d477262',1,'gmr1_interleaver']]] ]; html/search/groups_3.js0000644000175000017500000000142314753471226014361 0ustar buildbuildvar searchData= [ ['ccch_20_28pch_2fagch_29_20channel_20coding_0',['CCCH (PCH/AGCH) channel coding',['../group__ccch.html',1,'']]], ['channel_20coder_20_2f_20decoders_1',['Channel coder / decoders',['../group__l1__chan.html',1,'']]], ['channel_20coding_20primitives_2',['Channel coding primitives',['../group__l1__prim.html',1,'']]], ['complex_20vectors_3',['Complex vectors',['../../../libosmodsp/html/group__cxvec.html',1,'']]], ['complex_20vectors_20math_20and_20signal_20processing_4',['Complex vectors math and signal processing',['../../../libosmodsp/html/group__cxvec__math.html',1,'']]], ['convolutional_20coding_5',['Convolutional coding',['../group__conv.html',1,'']]], ['cyclic_20redundancy_20check_6',['Cyclic Redundancy Check',['../group__crc.html',1,'']]] ]; html/search/classes_1.html0000644000175000017500000000263714753471226015035 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_7.html0000644000175000017500000000263314753471226014152 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_8.js0000644000175000017500000000013214753471226014362 0ustar buildbuildvar searchData= [ ['normal_20bursts_0',['Normal bursts',['../group__nb.html',1,'']]] ]; html/search/enums_1.html0000644000175000017500000000263514753471226014525 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_3.js0000644000175000017500000000155614753471226014506 0ustar buildbuildvar searchData= [ ['gmr1_5fcodec_0',['gmr1_codec',['../structgmr1__codec.html',1,'']]], ['gmr1_5ffcch_5fburst_1',['gmr1_fcch_burst',['../structgmr1__fcch__burst.html',1,'']]], ['gmr1_5finterleaver_2',['gmr1_interleaver',['../structgmr1__interleaver.html',1,'']]], ['gmr1_5fpi4cxpsk_5fburst_3',['gmr1_pi4cxpsk_burst',['../structgmr1__pi4cxpsk__burst.html',1,'']]], ['gmr1_5fpi4cxpsk_5fdata_4',['gmr1_pi4cxpsk_data',['../structgmr1__pi4cxpsk__data.html',1,'']]], ['gmr1_5fpi4cxpsk_5fmodulation_5',['gmr1_pi4cxpsk_modulation',['../structgmr1__pi4cxpsk__modulation.html',1,'']]], ['gmr1_5fpi4cxpsk_5fsymbol_6',['gmr1_pi4cxpsk_symbol',['../structgmr1__pi4cxpsk__symbol.html',1,'']]], ['gmr1_5fpi4cxpsk_5fsync_7',['gmr1_pi4cxpsk_sync',['../structgmr1__pi4cxpsk__sync.html',1,'']]], ['gmr1_5fpuncturer_8',['gmr1_puncturer',['../structgmr1__puncturer.html',1,'']]] ]; html/search/all_9.js0000644000175000017500000000116414753471226013622 0ustar buildbuildvar searchData= [ ['idx_0',['idx',['../structgmr1__pi4cxpsk__symbol.html#a6df1e39fbb19bd1adb54638c3bf705fe',1,'gmr1_pi4cxpsk_symbol']]], ['interleave_2ec_1',['interleave.c',['../interleave_8c.html',1,'']]], ['interleave_2eh_2',['interleave.h',['../interleave_8h.html',1,'']]], ['interleaving_3',['Interleaving',['../group__interleave.html',1,'']]], ['iq_20balance_20utilities_4',['IQ balance utilities',['../../../libosmodsp/html/group__iqbal.html',1,'']]], ['iqbal_2ec_5',['iqbal.c',['../../../libosmodsp/html/iqbal_8c.html',1,'']]], ['iqbal_2eh_6',['iqbal.h',['../../../libosmodsp/html/iqbal_8h.html',1,'']]] ]; html/search/variables_12.js0000644000175000017500000000035614753471226015076 0ustar buildbuildvar searchData= [ ['u_5fprev_0',['u_prev',['../structambe__synth.html#a1ec169cb61914f8a61e14e0a2838de6c',1,'ambe_synth']]], ['uw_5fprev_1',['uw_prev',['../structambe__synth.html#ac555e0a7a4e672f1c8e3ab6873b0bbfd',1,'ambe_synth']]] ]; html/search/all_10.js0000644000175000017500000000071114753471226013667 0ustar buildbuildvar searchData= [ ['r_0',['r',['../structgmr1__puncturer.html#a6bad988cd142c8d0e30bfe457fd2c062',1,'gmr1_puncturer']]], ['rach_20channel_20coding_1',['RACH channel coding',['../group__rach.html',1,'']]], ['rach_2ec_2',['rach.c',['../rach_8c.html',1,'']]], ['rach_2eh_3',['rach.h',['../rach_8h.html',1,'']]], ['rotation_4',['rotation',['../structgmr1__pi4cxpsk__modulation.html#a6fff12a91ce1a4168ac7e87e4c864aa6',1,'gmr1_pi4cxpsk_modulation']]] ]; html/search/files_7.html0000644000175000017500000000263514753471226014506 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/enumvalues_1.js0000644000175000017500000000115014753471226015221 0ustar buildbuildvar searchData= [ ['gmr1_5ftch9_5f2k4_0',['GMR1_TCH9_2k4',['../group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45a762585e2143ebf69e4d98938fa20e648',1,'tch9.h']]], ['gmr1_5ftch9_5f4k8_1',['GMR1_TCH9_4k8',['../group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45a31ed2ba33bf118dc2d973f7c1db264a2',1,'tch9.h']]], ['gmr1_5ftch9_5f9k6_2',['GMR1_TCH9_9k6',['../group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45a47478138efd91b1307e767a674836a18',1,'tch9.h']]], ['gmr1_5ftch9_5fmax_3',['GMR1_TCH9_MAX',['../group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45aada4ebb2664386d79975327200434f3d',1,'tch9.h']]] ]; html/search/groups_0.html0000644000175000017500000000263614753471226014715 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_8.html0000644000175000017500000000263614753471226014725 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_d.js0000644000175000017500000000113314753471226015071 0ustar buildbuildvar searchData= [ ['opts_0',['opts',['../../../libosmodsp/html/struct__iqbal__state.html#a96f58c4debc176d484eb20b5e19b4209',1,'_iqbal_state']]], ['org_1',['org',['../../../libosmodsp/html/struct__iqbal__state.html#ab463e6d3cfc9d2f70e530dbe4f76458f',1,'_iqbal_state']]], ['osmo_5fiqbal_5fdefault_5fopts_2',['osmo_iqbal_default_opts',['../../../libosmodsp/html/group__iqbal.html#ga2f0587c233b021d72a98a11312ff5e9f',1,'osmo_iqbal_default_opts()(Global Namespace)'],['../../../libosmodsp/html/group__iqbal.html#ga2f0587c233b021d72a98a11312ff5e9f',1,'osmo_iqbal_default_opts()(Global Namespace)']]] ]; html/search/files_d.html0000644000175000017500000000263514753471226014563 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_e.html0000644000175000017500000000264114753471226015427 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_d.html0000644000175000017500000000263314753471226014227 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_7.html0000644000175000017500000000263614753471226014724 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_5.html0000644000175000017500000000264114753471226015407 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_2.html0000644000175000017500000000263314753471226014145 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_2.js0000644000175000017500000000024514753471226014477 0ustar buildbuildvar searchData= [ ['cfile_0',['cfile',['../../../libosmodsp/html/structcfile.html',1,'']]], ['chan_5fdesc_1',['chan_desc',['../structchan__desc.html',1,'']]] ]; html/search/files_3.js0000644000175000017500000000037414753471226014150 0ustar buildbuildvar searchData= [ ['defs_2eh_0',['defs.h',['../l1_2defs_8h.html',1,'(Global Namespace)'],['../sdr_2defs_8h.html',1,'(Global Namespace)']]], ['dkab_2ec_1',['dkab.c',['../dkab_8c.html',1,'']]], ['dkab_2eh_2',['dkab.h',['../dkab_8h.html',1,'']]] ]; html/search/variables_3.js0000644000175000017500000000123714753471226015015 0ustar buildbuildvar searchData= [ ['cache_0',['cache',['../../../libosmodsp/html/struct__iqbal__state.html#a9663b19ceb3a2ab337c5ad74699e4c23',1,'_iqbal_state']]], ['conv_5ffull_5fspan_1',['CONV_FULL_SPAN',['../../../libosmodsp/html/group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08ae758172bda42f9b44aa9015c0e142717',1,]]], ['conv_5fno_5fdelay_2',['CONV_NO_DELAY',['../../../libosmodsp/html/group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08a03ece74c3bcd50aeb9fb42329b9a59a5',1,]]], ['conv_5foverlap_5fonly_3',['CONV_OVERLAP_ONLY',['../../../libosmodsp/html/group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08a47fb2e6e9d274d4512601828023ac1d2',1,]]] ]; html/search/files_5.html0000644000175000017500000000263514753471226014504 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_14.html0000644000175000017500000000264214753471226015430 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_8.js0000644000175000017500000000016414753471226014152 0ustar buildbuildvar searchData= [ ['nb_2ec_0',['nb.c',['../nb_8c.html',1,'']]], ['nb_2eh_1',['nb.h',['../nb_8h.html',1,'']]] ]; html/search/enums_2.html0000644000175000017500000000263514753471226014526 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_7.js0000644000175000017500000005037514753471226015030 0ustar buildbuildvar searchData= [ ['gain_0',['gain',['../structambe__subframe.html#acc926ec6fc259108308513851263c010',1,'ambe_subframe::gain()'],['../structambe__raw__params.html#ac0c99abebb1f2483745b6f5c683fd238',1,'ambe_raw_params::gain()']]], ['gmr1_5fbcch_5fburst_1',['gmr1_bcch_burst',['../group__nb.html#gadb3e07f31ce31edf73ee29cb97ecb27c',1,'gmr1_bcch_burst(): nb.c'],['../group__nb.html#gadb3e07f31ce31edf73ee29cb97ecb27c',1,'gmr1_bcch_burst(): nb.c']]], ['gmr1_5fconv_5fk5_5f12_2',['gmr1_conv_k5_12',['../group__conv.html#gad9e7ba139d8b88117361ce2c069b3ac1',1,'gmr1_conv_k5_12(): conv.c'],['../group__conv.html#gad9e7ba139d8b88117361ce2c069b3ac1',1,'gmr1_conv_k5_12(): conv.c']]], ['gmr1_5fconv_5fk5_5f13_3',['gmr1_conv_k5_13',['../group__conv.html#gae46510aefce08ef3158790186b00a404',1,'gmr1_conv_k5_13(): conv.c'],['../group__conv.html#gae46510aefce08ef3158790186b00a404',1,'gmr1_conv_k5_13(): conv.c']]], ['gmr1_5fconv_5fk5_5f14_4',['gmr1_conv_k5_14',['../group__conv.html#gad0dab5050f72518f948d10b78ee21b2d',1,'gmr1_conv_k5_14(): conv.c'],['../group__conv.html#gad0dab5050f72518f948d10b78ee21b2d',1,'gmr1_conv_k5_14(): conv.c']]], ['gmr1_5fconv_5fk5_5f15_5',['gmr1_conv_k5_15',['../group__conv.html#ga70b8d0dc1e500ff3a1986315e6551a27',1,'gmr1_conv_k5_15(): conv.c'],['../group__conv.html#ga70b8d0dc1e500ff3a1986315e6551a27',1,'gmr1_conv_k5_15(): conv.c']]], ['gmr1_5fconv_5fk6_5f14_6',['gmr1_conv_k6_14',['../group__conv.html#ga6e7732168c9ecb6ad0b14ed8001c4588',1,'gmr1_conv_k6_14(): conv.c'],['../group__conv.html#ga6e7732168c9ecb6ad0b14ed8001c4588',1,'gmr1_conv_k6_14(): conv.c']]], ['gmr1_5fconv_5fk9_5f12_7',['gmr1_conv_k9_12',['../group__conv.html#gaa9043b27694a4c4438b18f7cd60950cd',1,'gmr1_conv_k9_12(): conv.c'],['../group__conv.html#gaa9043b27694a4c4438b18f7cd60950cd',1,'gmr1_conv_k9_12(): conv.c']]], ['gmr1_5fconv_5fk9_5f13_8',['gmr1_conv_k9_13',['../group__conv.html#ga647389b5ecf36c9770b4ecfd57c11fe0',1,'gmr1_conv_k9_13(): conv.c'],['../group__conv.html#ga647389b5ecf36c9770b4ecfd57c11fe0',1,'gmr1_conv_k9_13(): conv.c']]], ['gmr1_5fconv_5fk9_5f14_9',['gmr1_conv_k9_14',['../group__conv.html#ga0aaad5b737b08f90b906fbd369df8ccc',1,'gmr1_conv_k9_14(): conv.c'],['../group__conv.html#ga0aaad5b737b08f90b906fbd369df8ccc',1,'gmr1_conv_k9_14(): conv.c']]], ['gmr1_5fconv_5ftch3_10',['gmr1_conv_tch3',['../group__conv.html#ga622aa845f1ef3258a750b0da2df27d13',1,'gmr1_conv_tch3(): conv.c'],['../group__conv.html#ga622aa845f1ef3258a750b0da2df27d13',1,'gmr1_conv_tch3(): conv.c']]], ['gmr1_5fcrc12_11',['gmr1_crc12',['../group__crc.html#ga39976cbbb95bf2ee17510e23e66e9662',1,'gmr1_crc12(): crc.c'],['../group__crc.html#ga39976cbbb95bf2ee17510e23e66e9662',1,'gmr1_crc12(): crc.c']]], ['gmr1_5fcrc16_12',['gmr1_crc16',['../group__crc.html#ga4c203dc885ad2c23dbc5e26457d2b52e',1,'gmr1_crc16(): crc.c'],['../group__crc.html#ga4c203dc885ad2c23dbc5e26457d2b52e',1,'gmr1_crc16(): crc.c']]], ['gmr1_5fcrc8_13',['gmr1_crc8',['../group__crc.html#ga475488b3214308419d2d8ced50df5257',1,'gmr1_crc8(): crc.c'],['../group__crc.html#ga475488b3214308419d2d8ced50df5257',1,'gmr1_crc8(): crc.c']]], ['gmr1_5fdc12_5fburst_14',['gmr1_dc12_burst',['../group__nb.html#ga4dfb2061d86695f527d93c228f7e80cf',1,'gmr1_dc12_burst(): nb.c'],['../group__nb.html#ga4dfb2061d86695f527d93c228f7e80cf',1,'gmr1_dc12_burst(): nb.c']]], ['gmr1_5fdc2_5fburst_15',['gmr1_dc2_burst',['../group__nb.html#gab4f338ae4b7c91d61f4a1fbd5ddb22db',1,'gmr1_dc2_burst(): nb.c'],['../group__nb.html#gab4f338ae4b7c91d61f4a1fbd5ddb22db',1,'gmr1_dc2_burst(): nb.c']]], ['gmr1_5fdc6_5fburst_16',['gmr1_dc6_burst',['../group__nb.html#gabcff92c63441c414f2b700abed3ff5e5',1,'gmr1_dc6_burst(): nb.c'],['../group__nb.html#gabcff92c63441c414f2b700abed3ff5e5',1,'gmr1_dc6_burst(): nb.c']]], ['gmr1_5ffcch3_5flband_5fburst_17',['gmr1_fcch3_lband_burst',['../group__fcch.html#ga6598bb31a09a997eaa079838babc2f25',1,'gmr1_fcch3_lband_burst(): fcch.c'],['../group__fcch.html#ga6598bb31a09a997eaa079838babc2f25',1,'gmr1_fcch3_lband_burst(): fcch.c']]], ['gmr1_5ffcch3_5fsband_5fburst_18',['gmr1_fcch3_sband_burst',['../group__fcch.html#ga20cea569bd20f7c7a3b14420c9301b1b',1,'gmr1_fcch3_sband_burst(): fcch.c'],['../group__fcch.html#ga20cea569bd20f7c7a3b14420c9301b1b',1,'gmr1_fcch3_sband_burst(): fcch.c']]], ['gmr1_5ffcch_5fburst_19',['gmr1_fcch_burst',['../group__fcch.html#ga09ca32ce9f0bbe6d6d5b7977aae2758f',1,'gmr1_fcch_burst(): fcch.c'],['../group__fcch.html#ga09ca32ce9f0bbe6d6d5b7977aae2758f',1,'gmr1_fcch_burst(): fcch.c']]], ['gmr1_5fnt3_5ffacch_5fburst_20',['gmr1_nt3_facch_burst',['../group__nb.html#gad65ff6135513219615583bf2652905a0',1,'gmr1_nt3_facch_burst(): nb.c'],['../group__nb.html#gad65ff6135513219615583bf2652905a0',1,'gmr1_nt3_facch_burst(): nb.c']]], ['gmr1_5fnt3_5fspeech_5fburst_21',['gmr1_nt3_speech_burst',['../group__nb.html#ga5b7005d048a228c2fb1689772ec2a02b',1,'gmr1_nt3_speech_burst(): nb.c'],['../group__nb.html#ga5b7005d048a228c2fb1689772ec2a02b',1,'gmr1_nt3_speech_burst(): nb.c']]], ['gmr1_5fnt6_5fburst_22',['gmr1_nt6_burst',['../group__nb.html#ga0f6b872aea487079770276792b11f024',1,'gmr1_nt6_burst(): nb.c'],['../group__nb.html#ga0f6b872aea487079770276792b11f024',1,'gmr1_nt6_burst(): nb.c']]], ['gmr1_5fnt9_5fburst_23',['gmr1_nt9_burst',['../group__nb.html#gace85abbda202a99f17800dfe3a449ad8',1,'gmr1_nt9_burst(): nb.c'],['../group__nb.html#gace85abbda202a99f17800dfe3a449ad8',1,'gmr1_nt9_burst(): nb.c']]], ['gmr1_5fpi2cbpsk_24',['gmr1_pi2cbpsk',['../group__pi4cxpsk.html#ga37214979bb79f5d23784ba1eda5fa384',1,'gmr1_pi2cbpsk(): pi4cxpsk.c'],['../group__pi4cxpsk.html#ga37214979bb79f5d23784ba1eda5fa384',1,'gmr1_pi2cbpsk(): pi4cxpsk.c']]], ['gmr1_5fpi4cbpsk_25',['gmr1_pi4cbpsk',['../group__pi4cxpsk.html#gaeae7cf33a9694b1911deefb535f5c1b8',1,'gmr1_pi4cbpsk(): pi4cxpsk.c'],['../group__pi4cxpsk.html#gaeae7cf33a9694b1911deefb535f5c1b8',1,'gmr1_pi4cbpsk(): pi4cxpsk.c']]], ['gmr1_5fpi4cqpsk_26',['gmr1_pi4cqpsk',['../group__pi4cxpsk.html#ga652dcdb5ad05ce39ebef8a5b97f6d516',1,'gmr1_pi4cqpsk(): pi4cxpsk.c'],['../group__pi4cxpsk.html#ga652dcdb5ad05ce39ebef8a5b97f6d516',1,'gmr1_pi4cqpsk(): pi4cxpsk.c']]], ['gmr1_5fpunct_5fk5_5f12_5fa_27',['gmr1_punct_k5_12_A',['../group__punct.html#ga6b3c25e254784f342165a138f7b000a4',1,'gmr1_punct_k5_12_A(): punct.c'],['../group__punct.html#ga6b3c25e254784f342165a138f7b000a4',1,'gmr1_punct_k5_12_A(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fb_28',['gmr1_punct_k5_12_B',['../group__punct.html#ga5fba7e4ebdfdf45715b68bc77ad55b56',1,'gmr1_punct_k5_12_B(): punct.c'],['../group__punct.html#ga5fba7e4ebdfdf45715b68bc77ad55b56',1,'gmr1_punct_k5_12_B(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fc_29',['gmr1_punct_k5_12_C',['../group__punct.html#ga3d7fe225e1e537f88f58220d8dd68076',1,'gmr1_punct_k5_12_C(): punct.c'],['../group__punct.html#ga3d7fe225e1e537f88f58220d8dd68076',1,'gmr1_punct_k5_12_C(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fd_30',['gmr1_punct_k5_12_D',['../group__punct.html#gad04e1754667748acd42c3fb6867dc09d',1,'gmr1_punct_k5_12_D(): punct.c'],['../group__punct.html#gad04e1754667748acd42c3fb6867dc09d',1,'gmr1_punct_k5_12_D(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fe_31',['gmr1_punct_k5_12_E',['../group__punct.html#ga94c4d51e0dfe595be3d2505f64c3ea5c',1,'gmr1_punct_k5_12_E(): punct.c'],['../group__punct.html#ga94c4d51e0dfe595be3d2505f64c3ea5c',1,'gmr1_punct_k5_12_E(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fp12_32',['gmr1_punct_k5_12_P12',['../group__punct.html#gaa8bce8b6ca73fc45c3c0c596037c1849',1,'gmr1_punct_k5_12_P12(): punct.c'],['../group__punct.html#gaa8bce8b6ca73fc45c3c0c596037c1849',1,'gmr1_punct_k5_12_P12(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fp23_33',['gmr1_punct_k5_12_P23',['../group__punct.html#gaa03eb3f46b3027767323ccc546414c5b',1,'gmr1_punct_k5_12_P23(): punct.c'],['../group__punct.html#gaa03eb3f46b3027767323ccc546414c5b',1,'gmr1_punct_k5_12_P23(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fp25_34',['gmr1_punct_k5_12_P25',['../group__punct.html#gabea6708a946be5c940ac734ef6a0238f',1,'gmr1_punct_k5_12_P25(): punct.c'],['../group__punct.html#gabea6708a946be5c940ac734ef6a0238f',1,'gmr1_punct_k5_12_P25(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fp26_35',['gmr1_punct_k5_12_P26',['../group__punct.html#gac052cb5f0bd3f9f828b1c23d03ea4f22',1,'gmr1_punct_k5_12_P26(): punct.c'],['../group__punct.html#gac052cb5f0bd3f9f828b1c23d03ea4f22',1,'gmr1_punct_k5_12_P26(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fp311_36',['gmr1_punct_k5_12_P311',['../group__punct.html#ga77ed0b501d05b89717919e77cb66f55c',1,'gmr1_punct_k5_12_P311(): punct.c'],['../group__punct.html#ga77ed0b501d05b89717919e77cb66f55c',1,'gmr1_punct_k5_12_P311(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fp37_37',['gmr1_punct_k5_12_P37',['../group__punct.html#ga04fe577ed7854a24812ccc020b7777cc',1,'gmr1_punct_k5_12_P37(): punct.c'],['../group__punct.html#ga04fe577ed7854a24812ccc020b7777cc',1,'gmr1_punct_k5_12_P37(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fp38_38',['gmr1_punct_k5_12_P38',['../group__punct.html#gadd9a431fb84f6c100472f428642cece3',1,'gmr1_punct_k5_12_P38(): punct.c'],['../group__punct.html#gadd9a431fb84f6c100472f428642cece3',1,'gmr1_punct_k5_12_P38(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fp412_39',['gmr1_punct_k5_12_P412',['../group__punct.html#gae61e6323084580be44337702851f0560',1,'gmr1_punct_k5_12_P412(): punct.c'],['../group__punct.html#gae61e6323084580be44337702851f0560',1,'gmr1_punct_k5_12_P412(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fps12_40',['gmr1_punct_k5_12_Ps12',['../group__punct.html#gaf6f62025e6ad2089904f214fea702a49',1,'gmr1_punct_k5_12_Ps12(): punct.c'],['../group__punct.html#gaf6f62025e6ad2089904f214fea702a49',1,'gmr1_punct_k5_12_Ps12(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fps25_41',['gmr1_punct_k5_12_Ps25',['../group__punct.html#gaecda3c501174763dac7c5c646ea44690',1,'gmr1_punct_k5_12_Ps25(): punct.c'],['../group__punct.html#gaecda3c501174763dac7c5c646ea44690',1,'gmr1_punct_k5_12_Ps25(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fps412_42',['gmr1_punct_k5_12_Ps412',['../group__punct.html#ga134d1e54bfe1d47a0841e6dbe9b27cd8',1,'gmr1_punct_k5_12_Ps412(): punct.c'],['../group__punct.html#ga134d1e54bfe1d47a0841e6dbe9b27cd8',1,'gmr1_punct_k5_12_Ps412(): punct.c']]], ['gmr1_5fpunct_5fk5_5f13_5fp15_43',['gmr1_punct_k5_13_P15',['../group__punct.html#ga8f444be2364421750572d3b2b3e4d442',1,'gmr1_punct_k5_13_P15(): punct.c'],['../group__punct.html#ga8f444be2364421750572d3b2b3e4d442',1,'gmr1_punct_k5_13_P15(): punct.c']]], ['gmr1_5fpunct_5fk5_5f13_5fp16_44',['gmr1_punct_k5_13_P16',['../group__punct.html#ga6288534135f6da5447232a7b5337448f',1,'gmr1_punct_k5_13_P16(): punct.c'],['../group__punct.html#ga6288534135f6da5447232a7b5337448f',1,'gmr1_punct_k5_13_P16(): punct.c']]], ['gmr1_5fpunct_5fk5_5f13_5fp25_45',['gmr1_punct_k5_13_P25',['../group__punct.html#ga9118d1c2fa81fdaf5f15ffc633e66a88',1,'gmr1_punct_k5_13_P25(): punct.c'],['../group__punct.html#ga9118d1c2fa81fdaf5f15ffc633e66a88',1,'gmr1_punct_k5_13_P25(): punct.c']]], ['gmr1_5fpunct_5fk5_5f13_5fp78_46',['gmr1_punct_k5_13_P78',['../group__punct.html#gaa4798a84b9662a863f7cfeaa6206aba5',1,'gmr1_punct_k5_13_P78(): punct.c'],['../group__punct.html#gaa4798a84b9662a863f7cfeaa6206aba5',1,'gmr1_punct_k5_13_P78(): punct.c']]], ['gmr1_5fpunct_5fk5_5f13_5fps15_47',['gmr1_punct_k5_13_Ps15',['../group__punct.html#gaa4d4874e4d1a51d70b1d67113f0bfeb2',1,'gmr1_punct_k5_13_Ps15(): punct.c'],['../group__punct.html#gaa4d4874e4d1a51d70b1d67113f0bfeb2',1,'gmr1_punct_k5_13_Ps15(): punct.c']]], ['gmr1_5fpunct_5fk5_5f15_5fp23_48',['gmr1_punct_k5_15_P23',['../group__punct.html#ga9d6d7b1b48148bb4cc4678790a68b5ff',1,'gmr1_punct_k5_15_P23(): punct.c'],['../group__punct.html#ga9d6d7b1b48148bb4cc4678790a68b5ff',1,'gmr1_punct_k5_15_P23(): punct.c']]], ['gmr1_5fpunct_5fk5_5f15_5fp53_49',['gmr1_punct_k5_15_P53',['../group__punct.html#ga0c42fa663dd288c81566d1616420e3fb',1,'gmr1_punct_k5_15_P53(): punct.c'],['../group__punct.html#ga0c42fa663dd288c81566d1616420e3fb',1,'gmr1_punct_k5_15_P53(): punct.c']]], ['gmr1_5fpunct_5fk5_5f15_5fps53_50',['gmr1_punct_k5_15_Ps53',['../group__punct.html#ga589d0f7c6ab25753c32664969414f1fd',1,'gmr1_punct_k5_15_Ps53(): punct.c'],['../group__punct.html#ga589d0f7c6ab25753c32664969414f1fd',1,'gmr1_punct_k5_15_Ps53(): punct.c']]], ['gmr1_5fpunct_5fk6_5f14_5fp45_51',['gmr1_punct_k6_14_P45',['../group__punct.html#ga780e4af9db89c4bb51808bd2a35fa593',1,'gmr1_punct_k6_14_P45(): punct.c'],['../group__punct.html#ga780e4af9db89c4bb51808bd2a35fa593',1,'gmr1_punct_k6_14_P45(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp1152_52',['gmr1_punct_k7_12_P1152',['../group__punct.html#gafecfb0fbfb4f49c8a370362b98bb5aff',1,'gmr1_punct_k7_12_P1152(): punct.c'],['../group__punct.html#gafecfb0fbfb4f49c8a370362b98bb5aff',1,'gmr1_punct_k7_12_P1152(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp116_53',['gmr1_punct_k7_12_P116',['../group__punct.html#gac001aebb5c9026aa629a95146427736a',1,'gmr1_punct_k7_12_P116(): punct.c'],['../group__punct.html#gac001aebb5c9026aa629a95146427736a',1,'gmr1_punct_k7_12_P116(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp148_54',['gmr1_punct_k7_12_P148',['../group__punct.html#gad360cd4e2a33eedc63954a5a8731d1ac',1,'gmr1_punct_k7_12_P148(): punct.c'],['../group__punct.html#gad360cd4e2a33eedc63954a5a8731d1ac',1,'gmr1_punct_k7_12_P148(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp184_55',['gmr1_punct_k7_12_P184',['../group__punct.html#ga642a5293a4366ad2c0eddadc92cac23b',1,'gmr1_punct_k7_12_P184(): punct.c'],['../group__punct.html#ga642a5293a4366ad2c0eddadc92cac23b',1,'gmr1_punct_k7_12_P184(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp23_56',['gmr1_punct_k7_12_P23',['../group__punct.html#ga97a416384feb6b6e73215576b377faa5',1,'gmr1_punct_k7_12_P23(): punct.c'],['../group__punct.html#ga97a416384feb6b6e73215576b377faa5',1,'gmr1_punct_k7_12_P23(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp245_57',['gmr1_punct_k7_12_P245',['../group__punct.html#ga6ec3a6b25235d2e5bac464c1f7a1fe85',1,'gmr1_punct_k7_12_P245(): punct.c'],['../group__punct.html#ga6ec3a6b25235d2e5bac464c1f7a1fe85',1,'gmr1_punct_k7_12_P245(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp410_58',['gmr1_punct_k7_12_P410',['../group__punct.html#ga2db6a1bba45111d8398a77a8ea8dc72d',1,'gmr1_punct_k7_12_P410(): punct.c'],['../group__punct.html#ga2db6a1bba45111d8398a77a8ea8dc72d',1,'gmr1_punct_k7_12_P410(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp45_59',['gmr1_punct_k7_12_P45',['../group__punct.html#ga0eb3ce9d40905c17c808223aac3a5543',1,'gmr1_punct_k7_12_P45(): punct.c'],['../group__punct.html#ga0eb3ce9d40905c17c808223aac3a5543',1,'gmr1_punct_k7_12_P45(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp512_60',['gmr1_punct_k7_12_P512',['../group__punct.html#ga069c9fc93f97ac8f81874ad3486d8e2c',1,'gmr1_punct_k7_12_P512(): punct.c'],['../group__punct.html#ga069c9fc93f97ac8f81874ad3486d8e2c',1,'gmr1_punct_k7_12_P512(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp110_61',['gmr1_punct_k9_12_P110',['../group__punct.html#gaa7ef8a86ffc3fe190ba8e501cc161208',1,'gmr1_punct_k9_12_P110(): punct.c'],['../group__punct.html#gaa7ef8a86ffc3fe190ba8e501cc161208',1,'gmr1_punct_k9_12_P110(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp13_62',['gmr1_punct_k9_12_P13',['../group__punct.html#ga6de89b61b5d5cd075a2edfa5da3acb8d',1,'gmr1_punct_k9_12_P13(): punct.c'],['../group__punct.html#ga6de89b61b5d5cd075a2edfa5da3acb8d',1,'gmr1_punct_k9_12_P13(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp14_63',['gmr1_punct_k9_12_P14',['../group__punct.html#ga78cb3a5553a7c084c637e1845049c2a3',1,'gmr1_punct_k9_12_P14(): punct.c'],['../group__punct.html#ga78cb3a5553a7c084c637e1845049c2a3',1,'gmr1_punct_k9_12_P14(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp17_64',['gmr1_punct_k9_12_P17',['../group__punct.html#ga793c265d459c6c7d263edfd9fa5d82c8',1,'gmr1_punct_k9_12_P17(): punct.c'],['../group__punct.html#ga793c265d459c6c7d263edfd9fa5d82c8',1,'gmr1_punct_k9_12_P17(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp19_65',['gmr1_punct_k9_12_P19',['../group__punct.html#ga2864cbf423bbdf1aa723b865aa5670cf',1,'gmr1_punct_k9_12_P19(): punct.c'],['../group__punct.html#ga2864cbf423bbdf1aa723b865aa5670cf',1,'gmr1_punct_k9_12_P19(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp234_66',['gmr1_punct_k9_12_P234',['../group__punct.html#ga2d84992ac096d9b4fe041d0a9aaf33df',1,'gmr1_punct_k9_12_P234(): punct.c'],['../group__punct.html#ga2d84992ac096d9b4fe041d0a9aaf33df',1,'gmr1_punct_k9_12_P234(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp26_67',['gmr1_punct_k9_12_P26',['../group__punct.html#gaca082b213957ed2b9f2ea17c74ff76c5',1,'gmr1_punct_k9_12_P26(): punct.c'],['../group__punct.html#gaca082b213957ed2b9f2ea17c74ff76c5',1,'gmr1_punct_k9_12_P26(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp34_68',['gmr1_punct_k9_12_P34',['../group__punct.html#gaf7fd0ce78be41fd48a1509a477ff7c0c',1,'gmr1_punct_k9_12_P34(): punct.c'],['../group__punct.html#gaf7fd0ce78be41fd48a1509a477ff7c0c',1,'gmr1_punct_k9_12_P34(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp45_69',['gmr1_punct_k9_12_P45',['../group__punct.html#gaac0e2e21cdb173c9f7b8ce64b4fcad3a',1,'gmr1_punct_k9_12_P45(): punct.c'],['../group__punct.html#gaac0e2e21cdb173c9f7b8ce64b4fcad3a',1,'gmr1_punct_k9_12_P45(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp47_70',['gmr1_punct_k9_12_P47',['../group__punct.html#ga4aefdbb9d3ed87e0e57bff3289700de1',1,'gmr1_punct_k9_12_P47(): punct.c'],['../group__punct.html#ga4aefdbb9d3ed87e0e57bff3289700de1',1,'gmr1_punct_k9_12_P47(): punct.c']]], ['gmr1_5fpunct_5fk9_5f13_5fp12_71',['gmr1_punct_k9_13_P12',['../group__punct.html#ga3221eef995a6154b1a5976b64e17f269',1,'gmr1_punct_k9_13_P12(): punct.c'],['../group__punct.html#ga3221eef995a6154b1a5976b64e17f269',1,'gmr1_punct_k9_13_P12(): punct.c']]], ['gmr1_5fpunct_5fk9_5f13_5fp1213_72',['gmr1_punct_k9_13_P1213',['../group__punct.html#ga868634869b605e0b4ab7694d11f816da',1,'gmr1_punct_k9_13_P1213(): punct.c'],['../group__punct.html#ga868634869b605e0b4ab7694d11f816da',1,'gmr1_punct_k9_13_P1213(): punct.c']]], ['gmr1_5fpunct_5fk9_5f13_5fp33_73',['gmr1_punct_k9_13_P33',['../group__punct.html#ga5cc77e83e90a1186a931981b40aa9f1e',1,'gmr1_punct_k9_13_P33(): punct.c'],['../group__punct.html#ga5cc77e83e90a1186a931981b40aa9f1e',1,'gmr1_punct_k9_13_P33(): punct.c']]], ['gmr1_5fpunct_5fk9_5f13_5fp44_74',['gmr1_punct_k9_13_P44',['../group__punct.html#ga073c0a4550a5f828a5eac48b9e3ca06c',1,'gmr1_punct_k9_13_P44(): punct.c'],['../group__punct.html#ga073c0a4550a5f828a5eac48b9e3ca06c',1,'gmr1_punct_k9_13_P44(): punct.c']]], ['gmr1_5fpunct_5fk9_5f13_5fp65_75',['gmr1_punct_k9_13_P65',['../group__punct.html#gaa9d92cbd0a8bbeedb9cd7860e3422f17',1,'gmr1_punct_k9_13_P65(): punct.c'],['../group__punct.html#gaa9d92cbd0a8bbeedb9cd7860e3422f17',1,'gmr1_punct_k9_13_P65(): punct.c']]], ['gmr1_5fpunct_5fk9_5f14_5fp148_76',['gmr1_punct_k9_14_P148',['../group__punct.html#gadf567a87a9c00c73dbb132863871c24c',1,'gmr1_punct_k9_14_P148(): punct.c'],['../group__punct.html#gadf567a87a9c00c73dbb132863871c24c',1,'gmr1_punct_k9_14_P148(): punct.c']]], ['gmr1_5fpunct_5fk9_5f14_5fp65_77',['gmr1_punct_k9_14_P65',['../group__punct.html#ga767c7a63fdd42bcf8e9e3b8da7e8dbe7',1,'gmr1_punct_k9_14_P65(): punct.c'],['../group__punct.html#ga767c7a63fdd42bcf8e9e3b8da7e8dbe7',1,'gmr1_punct_k9_14_P65(): punct.c']]], ['gmr1_5frach_5fburst_78',['gmr1_rach_burst',['../group__nb.html#ga6efdbfdc0a900c0da7e1ae35157d9d75',1,'gmr1_rach_burst(): nb.c'],['../group__nb.html#ga6efdbfdc0a900c0da7e1ae35157d9d75',1,'gmr1_rach_burst(): nb.c']]], ['gmr1_5fsdcch_5fburst_79',['gmr1_sdcch_burst',['../group__nb.html#ga8e081ca45a3c928dc97cc56ceb445542',1,'gmr1_sdcch_burst(): nb.c'],['../group__nb.html#ga8e081ca45a3c928dc97cc56ceb445542',1,'gmr1_sdcch_burst(): nb.c']]], ['guard_5fpost_80',['guard_post',['../structgmr1__pi4cxpsk__burst.html#a5985baf01b937f381470bb0d5810ea00',1,'gmr1_pi4cxpsk_burst']]], ['guard_5fpre_81',['guard_pre',['../structgmr1__pi4cxpsk__burst.html#a30a0e6c90559f9b66def7814fe8f9af2',1,'gmr1_pi4cxpsk_burst']]] ]; html/search/classes_2.html0000644000175000017500000000263714753471226015036 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_b.js0000644000175000017500000000175414753471226015100 0ustar buildbuildvar searchData= [ ['mask_0',['mask',['../structgmr1__puncturer.html#af98900595177fbe9bf6c08ee652ab739',1,'gmr1_puncturer']]], ['max_5fiter_1',['max_iter',['../../../libosmodsp/html/structosmo__iqbal__opts.html#ac6dc907d8a810172970426cac913f2b0',1,'osmo_iqbal_opts']]], ['max_5flen_2',['max_len',['../../../libosmodsp/html/structosmo__cxvec.html#a42469c5c904c26c45af3ff557ccd203f',1,'osmo_cxvec']]], ['ml_3',['Ml',['../structambe__subframe.html#a4a3fa891e79797c2458f0ec01dbe9019',1,'ambe_subframe']]], ['mlog_4',['Mlog',['../structambe__subframe.html#a56d7cadaf4f6be52366ba2f26983483b',1,'ambe_subframe']]], ['mod_5',['mod',['../structgmr1__pi4cxpsk__burst.html#a835af391ae1715b41cbdd52efd1b378a',1,'gmr1_pi4cxpsk_burst']]], ['mod_5fphase_6',['mod_phase',['../structgmr1__pi4cxpsk__symbol.html#ac3639293117223030a399cdb947bf22b',1,'gmr1_pi4cxpsk_symbol']]], ['mod_5fval_7',['mod_val',['../structgmr1__pi4cxpsk__symbol.html#a62299b3758847f06baa14861572d6160',1,'gmr1_pi4cxpsk_symbol']]] ]; html/search/variables_11.html0000644000175000017500000000264214753471226015425 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_16.js0000644000175000017500000000041714753471226013700 0ustar buildbuildvar searchData= [ ['xch_20over_20dc12_20channel_20coding_0',['xCH over DC12 channel coding',['../group__xch__dc12.html',1,'']]], ['xch_5fdc12_2ec_1',['xch_dc12.c',['../xch__dc12_8c.html',1,'']]], ['xch_5fdc12_2eh_2',['xch_dc12.h',['../xch__dc12_8h.html',1,'']]] ]; html/search/groups_d.html0000644000175000017500000000263614753471226015001 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_c.js0000644000175000017500000000106614753471226015075 0ustar buildbuildvar searchData= [ ['n_0',['n',['../structgmr1__interleaver.html#a8cd1c80e472019802886819ebecd9042',1,'gmr1_interleaver']]], ['n_1',['N',['../structgmr1__interleaver.html#aefd05afb6eef22e5c8c3f92014d9c6cf',1,'gmr1_interleaver::N()'],['../structgmr1__puncturer.html#a4badcb8ada6378bfe224de9ccd9f193f',1,'gmr1_puncturer::N()']]], ['name_2',['name',['../structtone__desc.html#ac264519a39b5ba67b62f0744e993eeca',1,'tone_desc']]], ['nbits_3',['nbits',['../structgmr1__pi4cxpsk__modulation.html#ad8affe9f19908748ed8c0e3865434201',1,'gmr1_pi4cxpsk_modulation']]] ]; html/search/functions_3.html0000644000175000017500000000264114753471226015405 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_14.js0000644000175000017500000000052414753471226013675 0ustar buildbuildvar searchData= [ ['v_5fuv_0',['v_uv',['../structambe__raw__params.html#a8019dfc071f9ed84059593433380186e',1,'ambe_raw_params::v_uv()'],['../structambe__subframe.html#a760edde0daaceb15506a57379e7ad265',1,'ambe_subframe::v_uv()']]], ['vl_1',['Vl',['../structambe__subframe.html#a0fb6c5eab0c8af4a8106e7df6b964702',1,'ambe_subframe']]] ]; html/search/files_b.html0000644000175000017500000000263514753471226014561 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_a.js0000644000175000017500000000020014753471226013660 0ustar buildbuildvar searchData= [ ['k_0',['K',['../structgmr1__interleaver.html#a793392c3a32d1573c12038856d7a2fa9',1,'gmr1_interleaver']]] ]; html/search/variables_14.js0000644000175000017500000000017414753471226015076 0ustar buildbuildvar searchData= [ ['w0_0',['w0',['../structambe__subframe.html#a21676a64ab0ab902b4802d8a347aa227',1,'ambe_subframe']]] ]; html/search/all_11.js0000644000175000017500000000412014753471226013666 0ustar buildbuildvar searchData= [ ['scramb_2ec_0',['scramb.c',['../scramb_8c.html',1,'']]], ['scramb_2eh_1',['scramb.h',['../scramb_8h.html',1,'']]], ['scrambling_2',['Scrambling',['../group__scramb.html',1,'']]], ['se_3',['SE',['../structambe__synth.html#ae9f1fa4f9e9616614f50fa303a3c52ce',1,'ambe_synth']]], ['sf0_5fmag_5finterp_4',['sf0_mag_interp',['../structambe__raw__params.html#a99596e150dafbc4dbefc83c0ebeb402a',1,'ambe_raw_params']]], ['sf0_5fperr_5f14_5',['sf0_perr_14',['../structambe__raw__params.html#a9f9e769e1d5e71979c4591931d8ef031',1,'ambe_raw_params']]], ['sf0_5fperr_5f58_6',['sf0_perr_58',['../structambe__raw__params.html#aefc1cb1dec8794e3ba084b1bef0540be',1,'ambe_raw_params']]], ['sf1_5fhoc_7',['sf1_hoc',['../structambe__raw__params.html#a96e40b2f376d714e5df4538776911192',1,'ambe_raw_params']]], ['sf1_5fprba12_8',['sf1_prba12',['../structambe__raw__params.html#ab5848d979e9ab98ee13df35244186633',1,'ambe_raw_params']]], ['sf1_5fprba34_9',['sf1_prba34',['../structambe__raw__params.html#a719970b8264d5d86e8127731e3b74e95',1,'ambe_raw_params']]], ['sf1_5fprba57_10',['sf1_prba57',['../structambe__raw__params.html#a5723fa985d5a3e403baf93375f6da49b',1,'ambe_raw_params']]], ['sf_5fprev_11',['sf_prev',['../structambe__decoder.html#a7ef287c9fa9a4f4303b8bcf14aa08a10',1,'ambe_decoder']]], ['sinf_5ffast_12',['sinf_fast',['../group__codec__private.html#gade8a6e65fb5db286835ffd82b0f61dd1',1,'math.c']]], ['start_5fat_5fprev_13',['start_at_prev',['../../../libosmodsp/html/structosmo__iqbal__opts.html#ad36e80298fe63cb9f985401e30f768fc',1,'osmo_iqbal_opts']]], ['syms_14',['syms',['../structgmr1__pi4cxpsk__modulation.html#ad9c4201e4495b6894945a5fc4285e96c',1,'gmr1_pi4cxpsk_modulation::syms()'],['../structgmr1__pi4cxpsk__sync.html#a89f2352b308757e77cab30d1153fdb8b',1,'gmr1_pi4cxpsk_sync::syms()']]], ['sync_15',['sync',['../structgmr1__pi4cxpsk__burst.html#a68e57bf2eeee31d4a9f5efb2dfb7a145',1,'gmr1_pi4cxpsk_burst']]], ['synth_16',['synth',['../structambe__decoder.html#ae182cfa94b3c3f970de386a8d671bbaa',1,'ambe_decoder']]], ['synth_2ec_17',['synth.c',['../synth_8c.html',1,'']]] ]; html/search/all_15.js0000644000175000017500000000017414753471226013677 0ustar buildbuildvar searchData= [ ['w0_0',['w0',['../structambe__subframe.html#a21676a64ab0ab902b4802d8a347aa227',1,'ambe_subframe']]] ]; html/search/variables_0.js0000644000175000017500000000060214753471226015005 0ustar buildbuildvar searchData= [ ['_5fblen_0',['_blen',['../../../libosmodsp/html/structcfile.html#ad3d6965e1039aa1f648361b2f83b034a',1,'cfile']]], ['_5fdata_1',['_data',['../../../libosmodsp/html/structosmo__cxvec.html#aa8a9de0ef88d44caa1c07bc91b99bffd',1,'osmo_cxvec']]], ['_5fref_2',['_ref',['../structgmr1__pi4cxpsk__sync.html#a291c9b0776495cfb3c3f3a2fb4f87333',1,'gmr1_pi4cxpsk_sync']]] ]; html/search/variables_4.html0000644000175000017500000000264114753471226015346 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_1.js0000644000175000017500000000370414753471226015054 0ustar buildbuildvar searchData= [ ['ambe_5fdecode_5fdtx_0',['ambe_decode_dtx',['../group__codec__private.html#ga8f0cf32d32bde050a40a3e7087185aad',1,'ambe.c']]], ['ambe_5fdecode_5ffini_1',['ambe_decode_fini',['../group__codec__private.html#ga8a426acea7ced6d46716695e243462dd',1,'ambe.c']]], ['ambe_5fdecode_5fframe_2',['ambe_decode_frame',['../group__codec__private.html#ga96427955e6f3174ea846064627843bc3',1,'ambe.c']]], ['ambe_5fdecode_5finit_3',['ambe_decode_init',['../group__codec__private.html#gaac2c306e18df0fb45f2487e83ba4f9e9',1,'ambe.c']]], ['ambe_5fdecode_5ftone_4',['ambe_decode_tone',['../group__codec__private.html#gaf5856df7a0f19188013d6c610a2b7f60',1,'tone.c']]], ['ambe_5ffdct_5',['ambe_fdct',['../group__codec__private.html#ga83063f9ee0607fe61bacc11bd42d059f',1,'math.c']]], ['ambe_5ffdft_5ffc_6',['ambe_fdft_fc',['../group__codec__private.html#ga9d9e8b11e46bf3ccf14d22be87f1c719',1,'math.c']]], ['ambe_5fframe_5fdecode_5fparams_7',['ambe_frame_decode_params',['../group__codec__private.html#ga55a71c63c53e21c1d6fc9c91ddf519cd',1,'frame.c']]], ['ambe_5fframe_5funpack_5fraw_8',['ambe_frame_unpack_raw',['../group__codec__private.html#ga8a4e007b142973be5b44ef1637c9bfee',1,'frame.c']]], ['ambe_5fidct_9',['ambe_idct',['../group__codec__private.html#ga0d2a102900214d2ebdab56bf85024cf2',1,'math.c']]], ['ambe_5fidft_5fcf_10',['ambe_idft_cf',['../group__codec__private.html#gadbfdcbf5186cc1c567112e4edc29a1a1',1,'math.c']]], ['ambe_5fsubframe_5fexpand_11',['ambe_subframe_expand',['../group__codec__private.html#ga2d3ff962344089d1a44fd0d659c55df8',1,'frame.c']]], ['ambe_5fsynth_5faudio_12',['ambe_synth_audio',['../group__codec__private.html#ga7ca25dc5919fcff4c7494eb02d25fda2',1,'synth.c']]], ['ambe_5fsynth_5fenhance_13',['ambe_synth_enhance',['../group__codec__private.html#ga5fdca2bf0b039f3bb0dd97b0f601fe62',1,'synth.c']]], ['ambe_5fsynth_5finit_14',['ambe_synth_init',['../group__codec__private.html#ga31252750e130d6bf531c483df2ec8a49',1,'synth.c']]] ]; html/search/variables_9.js0000644000175000017500000000020014753471226015010 0ustar buildbuildvar searchData= [ ['k_0',['K',['../structgmr1__interleaver.html#a793392c3a32d1573c12038856d7a2fa9',1,'gmr1_interleaver']]] ]; html/search/all_10.html0000644000175000017500000000263414753471226014225 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/enumvalues_0.js0000644000175000017500000000074614753471226015232 0ustar buildbuildvar searchData= [ ['ambe_5fsilence_0',['AMBE_SILENCE',['../group__codec__private.html#gga109f07fd3782470868b1d1d2ec099eb6a719fb04a91460753423334efdad424b5',1,'private.h']]], ['ambe_5fspeech_1',['AMBE_SPEECH',['../group__codec__private.html#gga109f07fd3782470868b1d1d2ec099eb6a14419c7969d8bb6cf9b2d8b71f30f33b',1,'private.h']]], ['ambe_5ftone_2',['AMBE_TONE',['../group__codec__private.html#gga109f07fd3782470868b1d1d2ec099eb6a3ed83bce1686c0614c9377ff191cc8d1',1,'private.h']]] ]; html/search/all_12.html0000644000175000017500000000263414753471226014227 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/enums_2.js0000644000175000017500000000050214753471226014165 0ustar buildbuildvar searchData= [ ['osmo_5fcxvec_5fconv_5ftype_0',['osmo_cxvec_conv_type',['../../../libosmodsp/html/group__cxvec__math.html#ga2e183a0f24afa2e16199d1514629bf08',1,]]], ['osmo_5fcxvec_5fpeak_5falg_1',['osmo_cxvec_peak_alg',['../../../libosmodsp/html/group__cxvec__math.html#ga7942b58b341e440c0e8796d395460b78',1,]]] ]; html/search/variables_13.js0000644000175000017500000000052414753471226015074 0ustar buildbuildvar searchData= [ ['v_5fuv_0',['v_uv',['../structambe__raw__params.html#a8019dfc071f9ed84059593433380186e',1,'ambe_raw_params::v_uv()'],['../structambe__subframe.html#a760edde0daaceb15506a57379e7ad265',1,'ambe_subframe::v_uv()']]], ['vl_1',['Vl',['../structambe__subframe.html#a0fb6c5eab0c8af4a8106e7df6b964702',1,'ambe_subframe']]] ]; html/search/classes_1.js0000644000175000017500000000052514753471226014477 0ustar buildbuildvar searchData= [ ['ambe_5fdecoder_0',['ambe_decoder',['../structambe__decoder.html',1,'']]], ['ambe_5fraw_5fparams_1',['ambe_raw_params',['../structambe__raw__params.html',1,'']]], ['ambe_5fsubframe_2',['ambe_subframe',['../structambe__subframe.html',1,'']]], ['ambe_5fsynth_3',['ambe_synth',['../structambe__synth.html',1,'']]] ]; html/search/files_7.js0000644000175000017500000000011214753471226014142 0ustar buildbuildvar searchData= [ ['math_2ec_0',['math.c',['../math_8c.html',1,'']]] ]; html/search/files_b.js0000644000175000017500000000030514753471226014221 0ustar buildbuildvar searchData= [ ['scramb_2ec_0',['scramb.c',['../scramb_8c.html',1,'']]], ['scramb_2eh_1',['scramb.h',['../scramb_8h.html',1,'']]], ['synth_2ec_2',['synth.c',['../synth_8c.html',1,'']]] ]; html/search/variables_d.html0000644000175000017500000000264114753471226015426 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_4.js0000644000175000017500000000065114753471226014147 0ustar buildbuildvar searchData= [ ['facch3_2ec_0',['facch3.c',['../facch3_8c.html',1,'']]], ['facch3_2eh_1',['facch3.h',['../facch3_8h.html',1,'']]], ['facch9_2ec_2',['facch9.c',['../facch9_8c.html',1,'']]], ['facch9_2eh_3',['facch9.h',['../facch9_8h.html',1,'']]], ['fcch_2ec_4',['fcch.c',['../fcch_8c.html',1,'']]], ['fcch_2eh_5',['fcch.h',['../fcch_8h.html',1,'']]], ['frame_2ec_6',['frame.c',['../frame_8c.html',1,'']]] ]; html/search/searchdata.js0000644000175000017500000000101414753471226014713 0ustar buildbuildvar indexSectionsWithContent = { 0: "._abcdefgiklmnoprstuvwx", 1: "_acgot", 2: "abcdfgimnprstx", 3: "_acgos", 4: "_abcdefgiklmnoprstuvw", 5: "ago", 6: "ag", 7: ".abcdfginprstx" }; var indexSectionNames = { 0: "all", 1: "classes", 2: "files", 3: "functions", 4: "variables", 5: "enums", 6: "enumvalues", 7: "groups" }; var indexSectionLabels = { 0: "All", 1: "Data Structures", 2: "Files", 3: "Functions", 4: "Variables", 5: "Enumerations", 6: "Enumerator", 7: "Modules" }; html/search/variables_8.js0000644000175000017500000000021514753471226015015 0ustar buildbuildvar searchData= [ ['idx_0',['idx',['../structgmr1__pi4cxpsk__symbol.html#a6df1e39fbb19bd1adb54638c3bf705fe',1,'gmr1_pi4cxpsk_symbol']]] ]; html/search/all_13.html0000644000175000017500000000263414753471226014230 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_3.html0000644000175000017500000000263514753471226014502 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_a.js0000644000175000017500000000167514753471226015101 0ustar buildbuildvar searchData= [ ['l_0',['L',['../structgmr1__puncturer.html#a56ab639ebbf577886ec36db783b8ef34',1,'gmr1_puncturer::L()'],['../structambe__subframe.html#a3ebdc823451ce217e2956ff0eac7442f',1,'ambe_subframe::L()']]], ['lb_1',['Lb',['../structambe__subframe.html#af7ffd521bfff7156ae33ba43a893b163',1,'ambe_subframe']]], ['len_2',['len',['../../../libosmodsp/html/structcfile.html#a2c856227c89a929b863da15951fcaef4',1,'cfile::len()'],['../../../libosmodsp/html/structosmo__cxvec.html#a03722af5764b41c9151a7542546e3739',1,'osmo_cxvec::len()'],['../structgmr1__fcch__burst.html#a8f5f11f6f9b9b7aa2b505f7e4d6ca44e',1,'gmr1_fcch_burst::len()'],['../structgmr1__pi4cxpsk__sync.html#a67853f80e05c48b01dad6e7f7bc6e39a',1,'gmr1_pi4cxpsk_sync::len()'],['../structgmr1__pi4cxpsk__data.html#a14bc0a4787038e79298c46fa85784f13',1,'gmr1_pi4cxpsk_data::len()'],['../structgmr1__pi4cxpsk__burst.html#ad164674725c949673b0a2ec24e0f0000',1,'gmr1_pi4cxpsk_burst::len()']]] ]; html/search/all_14.html0000644000175000017500000000263414753471226014231 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/search_m.png0000644000175000017500000000023614753471226014552 0ustar buildbuild‰PNG  IHDR5^KMgAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<0IDATxÚb,//g```<~ü8ˆúøñ#ˆúÿÿ?bbZP,Xnݺ¤ ¥<~áE§IEND®B`‚html/search/variables_5.html0000644000175000017500000000264114753471226015347 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_5.html0000644000175000017500000000263614753471226014722 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_12.js0000644000175000017500000000214214753471226013671 0ustar buildbuildvar searchData= [ ['tables_2ec_0',['tables.c',['../tables_8c.html',1,'']]], ['tch3_20channel_20coding_1',['TCH3 channel coding',['../group__tch3.html',1,'']]], ['tch3_2ec_2',['tch3.c',['../tch3_8c.html',1,'']]], ['tch3_2eh_3',['tch3.h',['../tch3_8h.html',1,'']]], ['tch3_5fstate_4',['tch3_state',['../structtch3__state.html',1,'']]], ['tch9_20channel_20coding_5',['TCH9 channel coding',['../group__tch9.html',1,'']]], ['tch9_2ec_6',['tch9.c',['../tch9_8c.html',1,'']]], ['tch9_2eh_7',['tch9.h',['../tch9_8h.html',1,'']]], ['tch9_5fstate_8',['tch9_state',['../structtch9__state.html',1,'']]], ['tmp_9',['tmp',['../../../libosmodsp/html/struct__iqbal__state.html#a03100dde8b80dacdd0a4936511c5ab10',1,'_iqbal_state']]], ['tone_2ec_10',['tone.c',['../tone_8c.html',1,'']]], ['tone_5fdesc_11',['tone_desc',['../structtone__desc.html',1,'']]], ['tone_5fphase_5ff1_12',['tone_phase_f1',['../structambe__decoder.html#aa30d43006212f987798af28cefe6a644',1,'ambe_decoder']]], ['tone_5fphase_5ff2_13',['tone_phase_f2',['../structambe__decoder.html#ada92b6d6ccd98bea21a205f9f3a91521',1,'ambe_decoder']]] ]; html/search/groups_2.js0000644000175000017500000000015214753471226014356 0ustar buildbuildvar searchData= [ ['bcch_20channel_20coding_0',['BCCH channel coding',['../group__bcch.html',1,'']]] ]; html/search/variables_12.html0000644000175000017500000000264214753471226015426 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/search_l.png0000644000175000017500000000106714753471226014554 0ustar buildbuild‰PNG  IHDR:…å>gAMA± üa cHRMm˜sŽà8‚ÕzÊ´3Dv„6*½bKGDÿ‡Ì¿ pHYs  šœtIMEâ  OíWß*IDAT(Ï’ÍJBQF÷&Š&ö ›ô>Ѥ|ƒ(‚ÀFAI õ–¢‘`šAP Õ ‘~ÀŸ&FzžÕ A튷oM6‡uß-È/iÃtyÝžÛæ «¬Ù¹6bSÞ%ÏÝž pA’476Iæìvܧäx£B•Ÿ6‰LîDü
    Loading...
    Searching...
    No Matches
    html/search/files_1.html0000644000175000017500000000263514753471226014500 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_c.html0000644000175000017500000000263614753471226015000 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_3.html0000644000175000017500000000263614753471226014720 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_a.html0000644000175000017500000000263314753471226014224 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_0.js0000644000175000017500000000016714753471226013613 0ustar buildbuildvar searchData= [ ['_2ecfile_20helpers_0',['.cfile helpers',['../../../libosmodsp/html/group__cfile.html',1,'']]] ]; html/search/all_8.js0000644000175000017500000006765314753471226013640 0ustar buildbuildvar searchData= [ ['gain_0',['gain',['../structambe__raw__params.html#ac0c99abebb1f2483745b6f5c683fd238',1,'ambe_raw_params::gain()'],['../structambe__subframe.html#acc926ec6fc259108308513851263c010',1,'ambe_subframe::gain()']]], ['gmr_2d1_20gsmtap_20helpers_1',['GMR-1 GSMtap helpers',['../group__gsmtap.html',1,'']]], ['gmr_2d1_20layer_201_20library_2',['GMR-1 Layer 1 library',['../group__l1.html',1,'']]], ['gmr_2d1_20software_20defined_20radio_20library_3',['GMR-1 Software Defined Radio library',['../group__sdr.html',1,'']]], ['gmr1_5fa5_4',['gmr1_a5',['../group__a5.html#gaddb4e3e6e4a5b5f91fe9308250a70375',1,'a5.c']]], ['gmr1_5fa5_5f1_5',['gmr1_a5_1',['../group__a5.html#gad385682d03d182ea6e3d0e99fa4ca04e',1,'a5.c']]], ['gmr1_5fbcch_5fburst_6',['gmr1_bcch_burst',['../group__nb.html#gadb3e07f31ce31edf73ee29cb97ecb27c',1,'gmr1_bcch_burst(): nb.c'],['../group__nb.html#gadb3e07f31ce31edf73ee29cb97ecb27c',1,'gmr1_bcch_burst(): nb.c']]], ['gmr1_5fbcch_5fdecode_7',['gmr1_bcch_decode',['../group__bcch.html#ga73717708a391d84da44845fbaf2e73a4',1,'bcch.c']]], ['gmr1_5fbcch_5fencode_8',['gmr1_bcch_encode',['../group__bcch.html#ga7a8f900d4c5b81ad9a903ee9b7d6b9e7',1,'bcch.c']]], ['gmr1_5fccch_5fdecode_9',['gmr1_ccch_decode',['../group__ccch.html#ga2773482e1dd8ea377c2191771f85db11',1,'ccch.c']]], ['gmr1_5fccch_5fencode_10',['gmr1_ccch_encode',['../group__ccch.html#gaf77ce531802993a1d64bd773215b5d7d',1,'ccch.c']]], ['gmr1_5fcodec_11',['gmr1_codec',['../structgmr1__codec.html',1,'']]], ['gmr1_5fcodec_5falloc_12',['gmr1_codec_alloc',['../group__codec.html#ga34e0de595c6498ae39695d5909bec094',1,'codec.c']]], ['gmr1_5fcodec_5fdecode_5fdtx_13',['gmr1_codec_decode_dtx',['../group__codec.html#ga23fe43b3790482c7f99d3aa33940f54f',1,'codec.c']]], ['gmr1_5fcodec_5fdecode_5fframe_14',['gmr1_codec_decode_frame',['../group__codec.html#ga81d71b9b1e226a344a896d926ad4537a',1,'codec.c']]], ['gmr1_5fcodec_5frelease_15',['gmr1_codec_release',['../group__codec.html#gad1c2b9c16672bcd48076af0b0f162557',1,'codec.c']]], ['gmr1_5fconv_5fk5_5f12_16',['gmr1_conv_k5_12',['../group__conv.html#gad9e7ba139d8b88117361ce2c069b3ac1',1,'gmr1_conv_k5_12(): conv.c'],['../group__conv.html#gad9e7ba139d8b88117361ce2c069b3ac1',1,'gmr1_conv_k5_12(): conv.c']]], ['gmr1_5fconv_5fk5_5f13_17',['gmr1_conv_k5_13',['../group__conv.html#gae46510aefce08ef3158790186b00a404',1,'gmr1_conv_k5_13(): conv.c'],['../group__conv.html#gae46510aefce08ef3158790186b00a404',1,'gmr1_conv_k5_13(): conv.c']]], ['gmr1_5fconv_5fk5_5f14_18',['gmr1_conv_k5_14',['../group__conv.html#gad0dab5050f72518f948d10b78ee21b2d',1,'gmr1_conv_k5_14(): conv.c'],['../group__conv.html#gad0dab5050f72518f948d10b78ee21b2d',1,'gmr1_conv_k5_14(): conv.c']]], ['gmr1_5fconv_5fk5_5f15_19',['gmr1_conv_k5_15',['../group__conv.html#ga70b8d0dc1e500ff3a1986315e6551a27',1,'gmr1_conv_k5_15(): conv.c'],['../group__conv.html#ga70b8d0dc1e500ff3a1986315e6551a27',1,'gmr1_conv_k5_15(): conv.c']]], ['gmr1_5fconv_5fk6_5f14_20',['gmr1_conv_k6_14',['../group__conv.html#ga6e7732168c9ecb6ad0b14ed8001c4588',1,'gmr1_conv_k6_14(): conv.c'],['../group__conv.html#ga6e7732168c9ecb6ad0b14ed8001c4588',1,'gmr1_conv_k6_14(): conv.c']]], ['gmr1_5fconv_5fk9_5f12_21',['gmr1_conv_k9_12',['../group__conv.html#gaa9043b27694a4c4438b18f7cd60950cd',1,'gmr1_conv_k9_12(): conv.c'],['../group__conv.html#gaa9043b27694a4c4438b18f7cd60950cd',1,'gmr1_conv_k9_12(): conv.c']]], ['gmr1_5fconv_5fk9_5f13_22',['gmr1_conv_k9_13',['../group__conv.html#ga647389b5ecf36c9770b4ecfd57c11fe0',1,'gmr1_conv_k9_13(): conv.c'],['../group__conv.html#ga647389b5ecf36c9770b4ecfd57c11fe0',1,'gmr1_conv_k9_13(): conv.c']]], ['gmr1_5fconv_5fk9_5f14_23',['gmr1_conv_k9_14',['../group__conv.html#ga0aaad5b737b08f90b906fbd369df8ccc',1,'gmr1_conv_k9_14(): conv.c'],['../group__conv.html#ga0aaad5b737b08f90b906fbd369df8ccc',1,'gmr1_conv_k9_14(): conv.c']]], ['gmr1_5fconv_5ftch3_24',['gmr1_conv_tch3',['../group__conv.html#ga622aa845f1ef3258a750b0da2df27d13',1,'gmr1_conv_tch3(): conv.c'],['../group__conv.html#ga622aa845f1ef3258a750b0da2df27d13',1,'gmr1_conv_tch3(): conv.c']]], ['gmr1_5fcrc12_25',['gmr1_crc12',['../group__crc.html#ga39976cbbb95bf2ee17510e23e66e9662',1,'gmr1_crc12(): crc.c'],['../group__crc.html#ga39976cbbb95bf2ee17510e23e66e9662',1,'gmr1_crc12(): crc.c']]], ['gmr1_5fcrc16_26',['gmr1_crc16',['../group__crc.html#ga4c203dc885ad2c23dbc5e26457d2b52e',1,'gmr1_crc16(): crc.c'],['../group__crc.html#ga4c203dc885ad2c23dbc5e26457d2b52e',1,'gmr1_crc16(): crc.c']]], ['gmr1_5fcrc8_27',['gmr1_crc8',['../group__crc.html#ga475488b3214308419d2d8ced50df5257',1,'gmr1_crc8(): crc.c'],['../group__crc.html#ga475488b3214308419d2d8ced50df5257',1,'gmr1_crc8(): crc.c']]], ['gmr1_5fdc12_5fburst_28',['gmr1_dc12_burst',['../group__nb.html#ga4dfb2061d86695f527d93c228f7e80cf',1,'gmr1_dc12_burst(): nb.c'],['../group__nb.html#ga4dfb2061d86695f527d93c228f7e80cf',1,'gmr1_dc12_burst(): nb.c']]], ['gmr1_5fdc2_5fburst_29',['gmr1_dc2_burst',['../group__nb.html#gab4f338ae4b7c91d61f4a1fbd5ddb22db',1,'gmr1_dc2_burst(): nb.c'],['../group__nb.html#gab4f338ae4b7c91d61f4a1fbd5ddb22db',1,'gmr1_dc2_burst(): nb.c']]], ['gmr1_5fdc6_5fburst_30',['gmr1_dc6_burst',['../group__nb.html#gabcff92c63441c414f2b700abed3ff5e5',1,'gmr1_dc6_burst(): nb.c'],['../group__nb.html#gabcff92c63441c414f2b700abed3ff5e5',1,'gmr1_dc6_burst(): nb.c']]], ['gmr1_5fdeinterleave_5finter_31',['gmr1_deinterleave_inter',['../group__interleave.html#ga342cfe4226b3a193e5944e6a8322d491',1,'interleave.c']]], ['gmr1_5fdeinterleave_5fintra_32',['gmr1_deinterleave_intra',['../group__interleave.html#ga101a51679fedd2c835225608f77ae3d8',1,'interleave.c']]], ['gmr1_5fdkab_5fdemod_33',['gmr1_dkab_demod',['../group__dkab.html#ga889c2d34cc3eee7b12b8d88023504e0f',1,'dkab.c']]], ['gmr1_5ffacch3_5fdecode_34',['gmr1_facch3_decode',['../group__facch3.html#ga8f2a10c4a2203e69460dbf7f8345cd26',1,'facch3.c']]], ['gmr1_5ffacch3_5fencode_35',['gmr1_facch3_encode',['../group__facch3.html#gae7fb89197eae0f343d38c3c70b2d6ada',1,'facch3.c']]], ['gmr1_5ffacch9_5fdecode_36',['gmr1_facch9_decode',['../group__facch9.html#ga42d1d80d7a1bfab7d92ad0d28d8f87c6',1,'facch9.c']]], ['gmr1_5ffacch9_5fencode_37',['gmr1_facch9_encode',['../group__facch9.html#ga8956be2f31fd48853350bc092fd1797f',1,'facch9.c']]], ['gmr1_5ffcch3_5flband_5fburst_38',['gmr1_fcch3_lband_burst',['../group__fcch.html#ga6598bb31a09a997eaa079838babc2f25',1,'gmr1_fcch3_lband_burst(): fcch.c'],['../group__fcch.html#ga6598bb31a09a997eaa079838babc2f25',1,'gmr1_fcch3_lband_burst(): fcch.c']]], ['gmr1_5ffcch3_5fsband_5fburst_39',['gmr1_fcch3_sband_burst',['../group__fcch.html#ga20cea569bd20f7c7a3b14420c9301b1b',1,'gmr1_fcch3_sband_burst(): fcch.c'],['../group__fcch.html#ga20cea569bd20f7c7a3b14420c9301b1b',1,'gmr1_fcch3_sband_burst(): fcch.c']]], ['gmr1_5ffcch_5fburst_40',['gmr1_fcch_burst',['../group__fcch.html#ga09ca32ce9f0bbe6d6d5b7977aae2758f',1,'gmr1_fcch_burst(): fcch.c'],['../structgmr1__fcch__burst.html',1,'gmr1_fcch_burst'],['../group__fcch.html#ga09ca32ce9f0bbe6d6d5b7977aae2758f',1,'gmr1_fcch_burst(): fcch.c']]], ['gmr1_5ffcch_5ffine_41',['gmr1_fcch_fine',['../group__fcch.html#ga2b1c8329ac1c8cae7414d2ca4619f17f',1,'fcch.c']]], ['gmr1_5ffcch_5frough_42',['gmr1_fcch_rough',['../group__fcch.html#ga14e6b77fe05bf2ef7600204ba6818a47',1,'fcch.c']]], ['gmr1_5ffcch_5frough_5fmulti_43',['gmr1_fcch_rough_multi',['../group__fcch.html#ga822f719832670df978c08008c2e7a3df',1,'fcch.c']]], ['gmr1_5ffcch_5fsnr_44',['gmr1_fcch_snr',['../group__fcch.html#ga614cf46fe5e868c8b573491736487fba',1,'fcch.c']]], ['gmr1_5fgsmtap_5fmakemsg_45',['gmr1_gsmtap_makemsg',['../group__gsmtap.html#gaade0b34d5438103fb3376d6061b0193d',1,'gsmtap.c']]], ['gmr1_5finterleave_5finter_46',['gmr1_interleave_inter',['../group__interleave.html#gac392346badff10ae6a2abfe8b1e96e32',1,'interleave.c']]], ['gmr1_5finterleave_5fintra_47',['gmr1_interleave_intra',['../group__interleave.html#gaf54dd588068ba4225f190c091352bbc9',1,'interleave.c']]], ['gmr1_5finterleaver_48',['gmr1_interleaver',['../structgmr1__interleaver.html',1,'']]], ['gmr1_5finterleaver_5ffini_49',['gmr1_interleaver_fini',['../group__interleave.html#gaaa98a1ab608c6146e9c8974687c75ed7',1,'interleave.c']]], ['gmr1_5finterleaver_5finit_50',['gmr1_interleaver_init',['../group__interleave.html#ga78f48b3938dcda4c06b4d2da3eaedcaf',1,'interleave.c']]], ['gmr1_5fmax_5fsym_5febits_51',['GMR1_MAX_SYM_EBITS',['../group__pi4cxpsk.html#ga3a551a9ff371809aa32f6bbeaf48fc62',1,'pi4cxpsk.h']]], ['gmr1_5fmax_5fsync_52',['GMR1_MAX_SYNC',['../group__pi4cxpsk.html#ga7078b941f0b0a04ff9ddf290452b93a9',1,'pi4cxpsk.h']]], ['gmr1_5fmax_5fsync_5fsyms_53',['GMR1_MAX_SYNC_SYMS',['../group__pi4cxpsk.html#gad1c5069c814820ccbc9abcc700fb6193',1,'pi4cxpsk.h']]], ['gmr1_5fnt3_5ffacch_5fburst_54',['gmr1_nt3_facch_burst',['../group__nb.html#gad65ff6135513219615583bf2652905a0',1,'gmr1_nt3_facch_burst(): nb.c'],['../group__nb.html#gad65ff6135513219615583bf2652905a0',1,'gmr1_nt3_facch_burst(): nb.c']]], ['gmr1_5fnt3_5fspeech_5fburst_55',['gmr1_nt3_speech_burst',['../group__nb.html#ga5b7005d048a228c2fb1689772ec2a02b',1,'gmr1_nt3_speech_burst(): nb.c'],['../group__nb.html#ga5b7005d048a228c2fb1689772ec2a02b',1,'gmr1_nt3_speech_burst(): nb.c']]], ['gmr1_5fnt6_5fburst_56',['gmr1_nt6_burst',['../group__nb.html#ga0f6b872aea487079770276792b11f024',1,'gmr1_nt6_burst(): nb.c'],['../group__nb.html#ga0f6b872aea487079770276792b11f024',1,'gmr1_nt6_burst(): nb.c']]], ['gmr1_5fnt9_5fburst_57',['gmr1_nt9_burst',['../group__nb.html#gace85abbda202a99f17800dfe3a449ad8',1,'gmr1_nt9_burst(): nb.c'],['../group__nb.html#gace85abbda202a99f17800dfe3a449ad8',1,'gmr1_nt9_burst(): nb.c']]], ['gmr1_5fpi2cbpsk_58',['gmr1_pi2cbpsk',['../group__pi4cxpsk.html#ga37214979bb79f5d23784ba1eda5fa384',1,'gmr1_pi2cbpsk(): pi4cxpsk.c'],['../group__pi4cxpsk.html#ga37214979bb79f5d23784ba1eda5fa384',1,'gmr1_pi2cbpsk(): pi4cxpsk.c']]], ['gmr1_5fpi4cbpsk_59',['gmr1_pi4cbpsk',['../group__pi4cxpsk.html#gaeae7cf33a9694b1911deefb535f5c1b8',1,'gmr1_pi4cbpsk(): pi4cxpsk.c'],['../group__pi4cxpsk.html#gaeae7cf33a9694b1911deefb535f5c1b8',1,'gmr1_pi4cbpsk(): pi4cxpsk.c']]], ['gmr1_5fpi4cqpsk_60',['gmr1_pi4cqpsk',['../group__pi4cxpsk.html#ga652dcdb5ad05ce39ebef8a5b97f6d516',1,'gmr1_pi4cqpsk(): pi4cxpsk.c'],['../group__pi4cxpsk.html#ga652dcdb5ad05ce39ebef8a5b97f6d516',1,'gmr1_pi4cqpsk(): pi4cxpsk.c']]], ['gmr1_5fpi4cxpsk_5fburst_61',['gmr1_pi4cxpsk_burst',['../structgmr1__pi4cxpsk__burst.html',1,'']]], ['gmr1_5fpi4cxpsk_5fdata_62',['gmr1_pi4cxpsk_data',['../structgmr1__pi4cxpsk__data.html',1,'']]], ['gmr1_5fpi4cxpsk_5fdemod_63',['gmr1_pi4cxpsk_demod',['../group__pi4cxpsk.html#ga39685a0ee6daeb04f7ca70bbd6d1fe29',1,'pi4cxpsk.c']]], ['gmr1_5fpi4cxpsk_5fdetect_64',['gmr1_pi4cxpsk_detect',['../group__pi4cxpsk.html#ga1490fd560c08a9468c40ff69f2cae2bb',1,'pi4cxpsk.c']]], ['gmr1_5fpi4cxpsk_5fmod_65',['gmr1_pi4cxpsk_mod',['../group__pi4cxpsk.html#ga554b1c56cd86f4e9c9cbdcc455212770',1,'pi4cxpsk.c']]], ['gmr1_5fpi4cxpsk_5fmod_5forder_66',['gmr1_pi4cxpsk_mod_order',['../group__pi4cxpsk.html#ga82887564b076046745f705f7c27c930e',1,'pi4cxpsk.c']]], ['gmr1_5fpi4cxpsk_5fmodulation_67',['gmr1_pi4cxpsk_modulation',['../structgmr1__pi4cxpsk__modulation.html',1,'']]], ['gmr1_5fpi4cxpsk_5fsymbol_68',['gmr1_pi4cxpsk_symbol',['../structgmr1__pi4cxpsk__symbol.html',1,'']]], ['gmr1_5fpi4cxpsk_5fsync_69',['gmr1_pi4cxpsk_sync',['../structgmr1__pi4cxpsk__sync.html',1,'']]], ['gmr1_5fpunct_5fk5_5f12_5fa_70',['gmr1_punct_k5_12_A',['../group__punct.html#ga6b3c25e254784f342165a138f7b000a4',1,'gmr1_punct_k5_12_A(): punct.c'],['../group__punct.html#ga6b3c25e254784f342165a138f7b000a4',1,'gmr1_punct_k5_12_A(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fb_71',['gmr1_punct_k5_12_B',['../group__punct.html#ga5fba7e4ebdfdf45715b68bc77ad55b56',1,'gmr1_punct_k5_12_B(): punct.c'],['../group__punct.html#ga5fba7e4ebdfdf45715b68bc77ad55b56',1,'gmr1_punct_k5_12_B(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fc_72',['gmr1_punct_k5_12_C',['../group__punct.html#ga3d7fe225e1e537f88f58220d8dd68076',1,'gmr1_punct_k5_12_C(): punct.c'],['../group__punct.html#ga3d7fe225e1e537f88f58220d8dd68076',1,'gmr1_punct_k5_12_C(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fd_73',['gmr1_punct_k5_12_D',['../group__punct.html#gad04e1754667748acd42c3fb6867dc09d',1,'gmr1_punct_k5_12_D(): punct.c'],['../group__punct.html#gad04e1754667748acd42c3fb6867dc09d',1,'gmr1_punct_k5_12_D(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fe_74',['gmr1_punct_k5_12_E',['../group__punct.html#ga94c4d51e0dfe595be3d2505f64c3ea5c',1,'gmr1_punct_k5_12_E(): punct.c'],['../group__punct.html#ga94c4d51e0dfe595be3d2505f64c3ea5c',1,'gmr1_punct_k5_12_E(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fp12_75',['gmr1_punct_k5_12_P12',['../group__punct.html#gaa8bce8b6ca73fc45c3c0c596037c1849',1,'gmr1_punct_k5_12_P12(): punct.c'],['../group__punct.html#gaa8bce8b6ca73fc45c3c0c596037c1849',1,'gmr1_punct_k5_12_P12(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fp23_76',['gmr1_punct_k5_12_P23',['../group__punct.html#gaa03eb3f46b3027767323ccc546414c5b',1,'gmr1_punct_k5_12_P23(): punct.c'],['../group__punct.html#gaa03eb3f46b3027767323ccc546414c5b',1,'gmr1_punct_k5_12_P23(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fp25_77',['gmr1_punct_k5_12_P25',['../group__punct.html#gabea6708a946be5c940ac734ef6a0238f',1,'gmr1_punct_k5_12_P25(): punct.c'],['../group__punct.html#gabea6708a946be5c940ac734ef6a0238f',1,'gmr1_punct_k5_12_P25(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fp26_78',['gmr1_punct_k5_12_P26',['../group__punct.html#gac052cb5f0bd3f9f828b1c23d03ea4f22',1,'gmr1_punct_k5_12_P26(): punct.c'],['../group__punct.html#gac052cb5f0bd3f9f828b1c23d03ea4f22',1,'gmr1_punct_k5_12_P26(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fp311_79',['gmr1_punct_k5_12_P311',['../group__punct.html#ga77ed0b501d05b89717919e77cb66f55c',1,'gmr1_punct_k5_12_P311(): punct.c'],['../group__punct.html#ga77ed0b501d05b89717919e77cb66f55c',1,'gmr1_punct_k5_12_P311(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fp37_80',['gmr1_punct_k5_12_P37',['../group__punct.html#ga04fe577ed7854a24812ccc020b7777cc',1,'gmr1_punct_k5_12_P37(): punct.c'],['../group__punct.html#ga04fe577ed7854a24812ccc020b7777cc',1,'gmr1_punct_k5_12_P37(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fp38_81',['gmr1_punct_k5_12_P38',['../group__punct.html#gadd9a431fb84f6c100472f428642cece3',1,'gmr1_punct_k5_12_P38(): punct.c'],['../group__punct.html#gadd9a431fb84f6c100472f428642cece3',1,'gmr1_punct_k5_12_P38(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fp412_82',['gmr1_punct_k5_12_P412',['../group__punct.html#gae61e6323084580be44337702851f0560',1,'gmr1_punct_k5_12_P412(): punct.c'],['../group__punct.html#gae61e6323084580be44337702851f0560',1,'gmr1_punct_k5_12_P412(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fps12_83',['gmr1_punct_k5_12_Ps12',['../group__punct.html#gaf6f62025e6ad2089904f214fea702a49',1,'gmr1_punct_k5_12_Ps12(): punct.c'],['../group__punct.html#gaf6f62025e6ad2089904f214fea702a49',1,'gmr1_punct_k5_12_Ps12(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fps25_84',['gmr1_punct_k5_12_Ps25',['../group__punct.html#gaecda3c501174763dac7c5c646ea44690',1,'gmr1_punct_k5_12_Ps25(): punct.c'],['../group__punct.html#gaecda3c501174763dac7c5c646ea44690',1,'gmr1_punct_k5_12_Ps25(): punct.c']]], ['gmr1_5fpunct_5fk5_5f12_5fps412_85',['gmr1_punct_k5_12_Ps412',['../group__punct.html#ga134d1e54bfe1d47a0841e6dbe9b27cd8',1,'gmr1_punct_k5_12_Ps412(): punct.c'],['../group__punct.html#ga134d1e54bfe1d47a0841e6dbe9b27cd8',1,'gmr1_punct_k5_12_Ps412(): punct.c']]], ['gmr1_5fpunct_5fk5_5f13_5fp15_86',['gmr1_punct_k5_13_P15',['../group__punct.html#ga8f444be2364421750572d3b2b3e4d442',1,'gmr1_punct_k5_13_P15(): punct.c'],['../group__punct.html#ga8f444be2364421750572d3b2b3e4d442',1,'gmr1_punct_k5_13_P15(): punct.c']]], ['gmr1_5fpunct_5fk5_5f13_5fp16_87',['gmr1_punct_k5_13_P16',['../group__punct.html#ga6288534135f6da5447232a7b5337448f',1,'gmr1_punct_k5_13_P16(): punct.c'],['../group__punct.html#ga6288534135f6da5447232a7b5337448f',1,'gmr1_punct_k5_13_P16(): punct.c']]], ['gmr1_5fpunct_5fk5_5f13_5fp25_88',['gmr1_punct_k5_13_P25',['../group__punct.html#ga9118d1c2fa81fdaf5f15ffc633e66a88',1,'gmr1_punct_k5_13_P25(): punct.c'],['../group__punct.html#ga9118d1c2fa81fdaf5f15ffc633e66a88',1,'gmr1_punct_k5_13_P25(): punct.c']]], ['gmr1_5fpunct_5fk5_5f13_5fp78_89',['gmr1_punct_k5_13_P78',['../group__punct.html#gaa4798a84b9662a863f7cfeaa6206aba5',1,'gmr1_punct_k5_13_P78(): punct.c'],['../group__punct.html#gaa4798a84b9662a863f7cfeaa6206aba5',1,'gmr1_punct_k5_13_P78(): punct.c']]], ['gmr1_5fpunct_5fk5_5f13_5fps15_90',['gmr1_punct_k5_13_Ps15',['../group__punct.html#gaa4d4874e4d1a51d70b1d67113f0bfeb2',1,'gmr1_punct_k5_13_Ps15(): punct.c'],['../group__punct.html#gaa4d4874e4d1a51d70b1d67113f0bfeb2',1,'gmr1_punct_k5_13_Ps15(): punct.c']]], ['gmr1_5fpunct_5fk5_5f15_5fp23_91',['gmr1_punct_k5_15_P23',['../group__punct.html#ga9d6d7b1b48148bb4cc4678790a68b5ff',1,'gmr1_punct_k5_15_P23(): punct.c'],['../group__punct.html#ga9d6d7b1b48148bb4cc4678790a68b5ff',1,'gmr1_punct_k5_15_P23(): punct.c']]], ['gmr1_5fpunct_5fk5_5f15_5fp53_92',['gmr1_punct_k5_15_P53',['../group__punct.html#ga0c42fa663dd288c81566d1616420e3fb',1,'gmr1_punct_k5_15_P53(): punct.c'],['../group__punct.html#ga0c42fa663dd288c81566d1616420e3fb',1,'gmr1_punct_k5_15_P53(): punct.c']]], ['gmr1_5fpunct_5fk5_5f15_5fps53_93',['gmr1_punct_k5_15_Ps53',['../group__punct.html#ga589d0f7c6ab25753c32664969414f1fd',1,'gmr1_punct_k5_15_Ps53(): punct.c'],['../group__punct.html#ga589d0f7c6ab25753c32664969414f1fd',1,'gmr1_punct_k5_15_Ps53(): punct.c']]], ['gmr1_5fpunct_5fk6_5f14_5fp45_94',['gmr1_punct_k6_14_P45',['../group__punct.html#ga780e4af9db89c4bb51808bd2a35fa593',1,'gmr1_punct_k6_14_P45(): punct.c'],['../group__punct.html#ga780e4af9db89c4bb51808bd2a35fa593',1,'gmr1_punct_k6_14_P45(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp1152_95',['gmr1_punct_k7_12_P1152',['../group__punct.html#gafecfb0fbfb4f49c8a370362b98bb5aff',1,'gmr1_punct_k7_12_P1152(): punct.c'],['../group__punct.html#gafecfb0fbfb4f49c8a370362b98bb5aff',1,'gmr1_punct_k7_12_P1152(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp116_96',['gmr1_punct_k7_12_P116',['../group__punct.html#gac001aebb5c9026aa629a95146427736a',1,'gmr1_punct_k7_12_P116(): punct.c'],['../group__punct.html#gac001aebb5c9026aa629a95146427736a',1,'gmr1_punct_k7_12_P116(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp148_97',['gmr1_punct_k7_12_P148',['../group__punct.html#gad360cd4e2a33eedc63954a5a8731d1ac',1,'gmr1_punct_k7_12_P148(): punct.c'],['../group__punct.html#gad360cd4e2a33eedc63954a5a8731d1ac',1,'gmr1_punct_k7_12_P148(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp184_98',['gmr1_punct_k7_12_P184',['../group__punct.html#ga642a5293a4366ad2c0eddadc92cac23b',1,'gmr1_punct_k7_12_P184(): punct.c'],['../group__punct.html#ga642a5293a4366ad2c0eddadc92cac23b',1,'gmr1_punct_k7_12_P184(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp23_99',['gmr1_punct_k7_12_P23',['../group__punct.html#ga97a416384feb6b6e73215576b377faa5',1,'gmr1_punct_k7_12_P23(): punct.c'],['../group__punct.html#ga97a416384feb6b6e73215576b377faa5',1,'gmr1_punct_k7_12_P23(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp245_100',['gmr1_punct_k7_12_P245',['../group__punct.html#ga6ec3a6b25235d2e5bac464c1f7a1fe85',1,'gmr1_punct_k7_12_P245(): punct.c'],['../group__punct.html#ga6ec3a6b25235d2e5bac464c1f7a1fe85',1,'gmr1_punct_k7_12_P245(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp410_101',['gmr1_punct_k7_12_P410',['../group__punct.html#ga2db6a1bba45111d8398a77a8ea8dc72d',1,'gmr1_punct_k7_12_P410(): punct.c'],['../group__punct.html#ga2db6a1bba45111d8398a77a8ea8dc72d',1,'gmr1_punct_k7_12_P410(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp45_102',['gmr1_punct_k7_12_P45',['../group__punct.html#ga0eb3ce9d40905c17c808223aac3a5543',1,'gmr1_punct_k7_12_P45(): punct.c'],['../group__punct.html#ga0eb3ce9d40905c17c808223aac3a5543',1,'gmr1_punct_k7_12_P45(): punct.c']]], ['gmr1_5fpunct_5fk7_5f12_5fp512_103',['gmr1_punct_k7_12_P512',['../group__punct.html#ga069c9fc93f97ac8f81874ad3486d8e2c',1,'gmr1_punct_k7_12_P512(): punct.c'],['../group__punct.html#ga069c9fc93f97ac8f81874ad3486d8e2c',1,'gmr1_punct_k7_12_P512(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp110_104',['gmr1_punct_k9_12_P110',['../group__punct.html#gaa7ef8a86ffc3fe190ba8e501cc161208',1,'gmr1_punct_k9_12_P110(): punct.c'],['../group__punct.html#gaa7ef8a86ffc3fe190ba8e501cc161208',1,'gmr1_punct_k9_12_P110(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp13_105',['gmr1_punct_k9_12_P13',['../group__punct.html#ga6de89b61b5d5cd075a2edfa5da3acb8d',1,'gmr1_punct_k9_12_P13(): punct.c'],['../group__punct.html#ga6de89b61b5d5cd075a2edfa5da3acb8d',1,'gmr1_punct_k9_12_P13(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp14_106',['gmr1_punct_k9_12_P14',['../group__punct.html#ga78cb3a5553a7c084c637e1845049c2a3',1,'gmr1_punct_k9_12_P14(): punct.c'],['../group__punct.html#ga78cb3a5553a7c084c637e1845049c2a3',1,'gmr1_punct_k9_12_P14(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp17_107',['gmr1_punct_k9_12_P17',['../group__punct.html#ga793c265d459c6c7d263edfd9fa5d82c8',1,'gmr1_punct_k9_12_P17(): punct.c'],['../group__punct.html#ga793c265d459c6c7d263edfd9fa5d82c8',1,'gmr1_punct_k9_12_P17(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp19_108',['gmr1_punct_k9_12_P19',['../group__punct.html#ga2864cbf423bbdf1aa723b865aa5670cf',1,'gmr1_punct_k9_12_P19(): punct.c'],['../group__punct.html#ga2864cbf423bbdf1aa723b865aa5670cf',1,'gmr1_punct_k9_12_P19(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp234_109',['gmr1_punct_k9_12_P234',['../group__punct.html#ga2d84992ac096d9b4fe041d0a9aaf33df',1,'gmr1_punct_k9_12_P234(): punct.c'],['../group__punct.html#ga2d84992ac096d9b4fe041d0a9aaf33df',1,'gmr1_punct_k9_12_P234(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp26_110',['gmr1_punct_k9_12_P26',['../group__punct.html#gaca082b213957ed2b9f2ea17c74ff76c5',1,'gmr1_punct_k9_12_P26(): punct.c'],['../group__punct.html#gaca082b213957ed2b9f2ea17c74ff76c5',1,'gmr1_punct_k9_12_P26(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp34_111',['gmr1_punct_k9_12_P34',['../group__punct.html#gaf7fd0ce78be41fd48a1509a477ff7c0c',1,'gmr1_punct_k9_12_P34(): punct.c'],['../group__punct.html#gaf7fd0ce78be41fd48a1509a477ff7c0c',1,'gmr1_punct_k9_12_P34(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp45_112',['gmr1_punct_k9_12_P45',['../group__punct.html#gaac0e2e21cdb173c9f7b8ce64b4fcad3a',1,'gmr1_punct_k9_12_P45(): punct.c'],['../group__punct.html#gaac0e2e21cdb173c9f7b8ce64b4fcad3a',1,'gmr1_punct_k9_12_P45(): punct.c']]], ['gmr1_5fpunct_5fk9_5f12_5fp47_113',['gmr1_punct_k9_12_P47',['../group__punct.html#ga4aefdbb9d3ed87e0e57bff3289700de1',1,'gmr1_punct_k9_12_P47(): punct.c'],['../group__punct.html#ga4aefdbb9d3ed87e0e57bff3289700de1',1,'gmr1_punct_k9_12_P47(): punct.c']]], ['gmr1_5fpunct_5fk9_5f13_5fp12_114',['gmr1_punct_k9_13_P12',['../group__punct.html#ga3221eef995a6154b1a5976b64e17f269',1,'gmr1_punct_k9_13_P12(): punct.c'],['../group__punct.html#ga3221eef995a6154b1a5976b64e17f269',1,'gmr1_punct_k9_13_P12(): punct.c']]], ['gmr1_5fpunct_5fk9_5f13_5fp1213_115',['gmr1_punct_k9_13_P1213',['../group__punct.html#ga868634869b605e0b4ab7694d11f816da',1,'gmr1_punct_k9_13_P1213(): punct.c'],['../group__punct.html#ga868634869b605e0b4ab7694d11f816da',1,'gmr1_punct_k9_13_P1213(): punct.c']]], ['gmr1_5fpunct_5fk9_5f13_5fp33_116',['gmr1_punct_k9_13_P33',['../group__punct.html#ga5cc77e83e90a1186a931981b40aa9f1e',1,'gmr1_punct_k9_13_P33(): punct.c'],['../group__punct.html#ga5cc77e83e90a1186a931981b40aa9f1e',1,'gmr1_punct_k9_13_P33(): punct.c']]], ['gmr1_5fpunct_5fk9_5f13_5fp44_117',['gmr1_punct_k9_13_P44',['../group__punct.html#ga073c0a4550a5f828a5eac48b9e3ca06c',1,'gmr1_punct_k9_13_P44(): punct.c'],['../group__punct.html#ga073c0a4550a5f828a5eac48b9e3ca06c',1,'gmr1_punct_k9_13_P44(): punct.c']]], ['gmr1_5fpunct_5fk9_5f13_5fp65_118',['gmr1_punct_k9_13_P65',['../group__punct.html#gaa9d92cbd0a8bbeedb9cd7860e3422f17',1,'gmr1_punct_k9_13_P65(): punct.c'],['../group__punct.html#gaa9d92cbd0a8bbeedb9cd7860e3422f17',1,'gmr1_punct_k9_13_P65(): punct.c']]], ['gmr1_5fpunct_5fk9_5f14_5fp148_119',['gmr1_punct_k9_14_P148',['../group__punct.html#gadf567a87a9c00c73dbb132863871c24c',1,'gmr1_punct_k9_14_P148(): punct.c'],['../group__punct.html#gadf567a87a9c00c73dbb132863871c24c',1,'gmr1_punct_k9_14_P148(): punct.c']]], ['gmr1_5fpunct_5fk9_5f14_5fp65_120',['gmr1_punct_k9_14_P65',['../group__punct.html#ga767c7a63fdd42bcf8e9e3b8da7e8dbe7',1,'gmr1_punct_k9_14_P65(): punct.c'],['../group__punct.html#ga767c7a63fdd42bcf8e9e3b8da7e8dbe7',1,'gmr1_punct_k9_14_P65(): punct.c']]], ['gmr1_5fpuncturer_121',['gmr1_puncturer',['../structgmr1__puncturer.html',1,'']]], ['gmr1_5fpuncturer_5fgenerate_122',['gmr1_puncturer_generate',['../group__punct.html#ga95a97b9c89435bf6826fdeb21d881ff2',1,'punct.c']]], ['gmr1_5frach_5fburst_123',['gmr1_rach_burst',['../group__nb.html#ga6efdbfdc0a900c0da7e1ae35157d9d75',1,'gmr1_rach_burst(): nb.c'],['../group__nb.html#ga6efdbfdc0a900c0da7e1ae35157d9d75',1,'gmr1_rach_burst(): nb.c']]], ['gmr1_5frach_5fdecode_124',['gmr1_rach_decode',['../group__rach.html#ga4e3f0c261d715b618e188dd5d2a14391',1,'rach.c']]], ['gmr1_5frach_5fencode_125',['gmr1_rach_encode',['../group__rach.html#gaa55acd1e1d248c2b34a97af389c69e90',1,'rach.c']]], ['gmr1_5fscramble_5fsbit_126',['gmr1_scramble_sbit',['../group__scramb.html#gab5ef50c3520bc0213858a6894d989e1e',1,'scramb.c']]], ['gmr1_5fscramble_5fubit_127',['gmr1_scramble_ubit',['../group__scramb.html#ga2243e4f721439956fe9b81ec7e40490c',1,'scramb.c']]], ['gmr1_5fsdcch_5fburst_128',['gmr1_sdcch_burst',['../group__nb.html#ga8e081ca45a3c928dc97cc56ceb445542',1,'gmr1_sdcch_burst(): nb.c'],['../group__nb.html#ga8e081ca45a3c928dc97cc56ceb445542',1,'gmr1_sdcch_burst(): nb.c']]], ['gmr1_5fsym_5frate_129',['GMR1_SYM_RATE',['../group__sdr.html#ga6e119ab6400ff7407cdd2d9cb87360eb',1,'defs.h']]], ['gmr1_5ftch3_5fdecode_130',['gmr1_tch3_decode',['../group__tch3.html#gaab4229c82b06539cdad3d91d1bd05c32',1,'tch3.c']]], ['gmr1_5ftch3_5fencode_131',['gmr1_tch3_encode',['../group__tch3.html#ga3c7e3f769459eff23c1308eefb565ab9',1,'tch3.c']]], ['gmr1_5ftch9_5f2k4_132',['GMR1_TCH9_2k4',['../group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45a762585e2143ebf69e4d98938fa20e648',1,'tch9.h']]], ['gmr1_5ftch9_5f4k8_133',['GMR1_TCH9_4k8',['../group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45a31ed2ba33bf118dc2d973f7c1db264a2',1,'tch9.h']]], ['gmr1_5ftch9_5f9k6_134',['GMR1_TCH9_9k6',['../group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45a47478138efd91b1307e767a674836a18',1,'tch9.h']]], ['gmr1_5ftch9_5fdecode_135',['gmr1_tch9_decode',['../group__tch9.html#ga1dc40fc5c18b5f082de485e701db9af4',1,'tch9.c']]], ['gmr1_5ftch9_5fencode_136',['gmr1_tch9_encode',['../group__tch9.html#ga7a8227b3a47497d84316568637b9d732',1,'tch9.c']]], ['gmr1_5ftch9_5fmax_137',['GMR1_TCH9_MAX',['../group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45aada4ebb2664386d79975327200434f3d',1,'tch9.h']]], ['gmr1_5ftch9_5fmode_138',['gmr1_tch9_mode',['../group__tch9.html#ga744d45ed21afcffb14ab1dada9843d45',1,'tch9.h']]], ['gmr1_5fxch_5fdc12_5fdecode_139',['gmr1_xch_dc12_decode',['../group__xch__dc12.html#ga581b9670f04f4a6bf6be69dc78ad2389',1,'xch_dc12.c']]], ['gmr1_5fxch_5fdc12_5fencode_140',['gmr1_xch_dc12_encode',['../group__xch__dc12.html#ga65507f2a3c6d9b8e681a082ffba157a9',1,'xch_dc12.c']]], ['gsmtap_2ec_141',['gsmtap.c',['../gsmtap_8c.html',1,'']]], ['gsmtap_2eh_142',['gsmtap.h',['../gsmtap_8h.html',1,'']]], ['guard_5fpost_143',['guard_post',['../structgmr1__pi4cxpsk__burst.html#a5985baf01b937f381470bb0d5810ea00',1,'gmr1_pi4cxpsk_burst']]], ['guard_5fpre_144',['guard_pre',['../structgmr1__pi4cxpsk__burst.html#a30a0e6c90559f9b66def7814fe8f9af2',1,'gmr1_pi4cxpsk_burst']]] ]; html/search/classes_0.js0000644000175000017500000000040014753471226014466 0ustar buildbuildvar searchData= [ ['_5fiqbal_5festimate_5fstate_0',['_iqbal_estimate_state',['../../../libosmodsp/html/struct__iqbal__estimate__state.html',1,'']]], ['_5fiqbal_5fstate_1',['_iqbal_state',['../../../libosmodsp/html/struct__iqbal__state.html',1,'']]] ]; html/search/enumvalues_1.html0000644000175000017500000000264214753471226015560 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_4.js0000644000175000017500000000553614753471226013624 0ustar buildbuildvar searchData= [ ['cache_0',['cache',['../../../libosmodsp/html/struct__iqbal__state.html#a9663b19ceb3a2ab337c5ad74699e4c23',1,'_iqbal_state']]], ['ccch_20_28pch_2fagch_29_20channel_20coding_1',['CCCH (PCH/AGCH) channel coding',['../group__ccch.html',1,'']]], ['ccch_2ec_2',['ccch.c',['../ccch_8c.html',1,'']]], ['ccch_2eh_3',['ccch.h',['../ccch_8h.html',1,'']]], ['cfile_4',['cfile',['../../../libosmodsp/html/structcfile.html',1,'']]], ['cfile_2ec_5',['cfile.c',['../../../libosmodsp/html/cfile_8c.html',1,'']]], ['cfile_2eh_6',['cfile.h',['../../../libosmodsp/html/cfile_8h.html',1,'']]], ['cfile_5fload_7',['cfile_load',['../../../libosmodsp/html/group__cfile.html#gacb0304d89096222df64f3f9a10f22167',1,]]], ['cfile_5frelease_8',['cfile_release',['../../../libosmodsp/html/group__cfile.html#ga7728a89f370281e5da16ff27d8657b3d',1,]]], ['chan_5fdesc_9',['chan_desc',['../structchan__desc.html',1,'']]], ['channel_20coder_20_2f_20decoders_10',['Channel coder / decoders',['../group__l1__chan.html',1,'']]], ['channel_20coding_20primitives_11',['Channel coding primitives',['../group__l1__prim.html',1,'']]], ['codec_2ec_12',['codec.c',['../codec_8c.html',1,'']]], ['codec_2eh_13',['codec.h',['../codec_8h.html',1,'']]], ['complex_20vectors_14',['Complex vectors',['../../../libosmodsp/html/group__cxvec.html',1,'']]], ['complex_20vectors_20math_20and_20signal_20processing_15',['Complex vectors math and signal processing',['../../../libosmodsp/html/group__cxvec__math.html',1,'']]], ['conv_2ec_16',['conv.c',['../conv_8c.html',1,'']]], ['conv_2eh_17',['conv.h',['../conv_8h.html',1,'']]], ['conv_5ffull_5fspan_18',['CONV_FULL_SPAN',['../../../libosmodsp/html/group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08ae758172bda42f9b44aa9015c0e142717',1,]]], ['conv_5fno_5fdelay_19',['CONV_NO_DELAY',['../../../libosmodsp/html/group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08a03ece74c3bcd50aeb9fb42329b9a59a5',1,]]], ['conv_5foverlap_5fonly_20',['CONV_OVERLAP_ONLY',['../../../libosmodsp/html/group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08a47fb2e6e9d274d4512601828023ac1d2',1,]]], ['convolutional_20coding_21',['Convolutional coding',['../group__conv.html',1,'']]], ['cosf_5ffast_22',['cosf_fast',['../group__codec__private.html#ga62bc434f8483f0198f86b388ab30ced6',1,'math.c']]], ['crc_2ec_23',['crc.c',['../crc_8c.html',1,'']]], ['crc_2eh_24',['crc.h',['../crc_8h.html',1,'']]], ['cxvec_2ec_25',['cxvec.c',['../../../libosmodsp/html/cxvec_8c.html',1,'']]], ['cxvec_2eh_26',['cxvec.h',['../../../libosmodsp/html/cxvec_8h.html',1,'']]], ['cxvec_5fmath_2ec_27',['cxvec_math.c',['../../../libosmodsp/html/cxvec__math_8c.html',1,'']]], ['cxvec_5fmath_2eh_28',['cxvec_math.h',['../../../libosmodsp/html/cxvec__math_8h.html',1,'']]], ['cyclic_20redundancy_20check_29',['Cyclic Redundancy Check',['../group__crc.html',1,'']]] ]; html/search/all_f.js0000644000175000017500000000334214753471226013677 0ustar buildbuildvar searchData= [ ['peak_5fearly_5flate_0',['PEAK_EARLY_LATE',['../../../libosmodsp/html/group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78aa8df843abc147bca5860fee1ddff1378',1,]]], ['peak_5fweigh_5fwin_1',['PEAK_WEIGH_WIN',['../../../libosmodsp/html/group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78abb4b91d1bfa5bd51ff0e48633d9b9891',1,]]], ['peak_5fweigh_5fwin_5fcenter_2',['PEAK_WEIGH_WIN_CENTER',['../../../libosmodsp/html/group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78ab0fb6b29112253cc5d51fb119b5d812a',1,]]], ['phi_3',['phi',['../structambe__synth.html#a5e8d3e37d5ef02db39803a10de1796ce',1,'ambe_synth']]], ['pi2_2dcbpsk_2c_20pi4_2dcbpsk_20and_20pi4_2dcqpsk_20modulation_4',['pi2-CBPSK, pi4-CBPSK and pi4-CQPSK modulation',['../group__pi4cxpsk.html',1,'']]], ['pi4cxpsk_2ec_5',['pi4cxpsk.c',['../pi4cxpsk_8c.html',1,'']]], ['pi4cxpsk_2eh_6',['pi4cxpsk.h',['../pi4cxpsk_8h.html',1,'']]], ['pitch_7',['pitch',['../structambe__raw__params.html#a7eb51135820d33cbf6a0e4b865bd2a59',1,'ambe_raw_params']]], ['pitch_5finterp_8',['pitch_interp',['../structambe__raw__params.html#a804fa021dcd25eed72ddeb7421b64375',1,'ambe_raw_params']]], ['pos_9',['pos',['../structgmr1__pi4cxpsk__sync.html#adabd2c21518c2bd6e37d4a8ad7facc6b',1,'gmr1_pi4cxpsk_sync::pos()'],['../structgmr1__pi4cxpsk__data.html#a8fcd05f64567745c7e7435334f1f593c',1,'gmr1_pi4cxpsk_data::pos()']]], ['private_2eh_10',['private.h',['../private_8h.html',1,'']]], ['psi1_11',['psi1',['../structambe__synth.html#ab03788ec8e6fd99b782ca07ae04d4dc4',1,'ambe_synth']]], ['punct_2ec_12',['punct.c',['../punct_8c.html',1,'']]], ['punct_2eh_13',['punct.h',['../punct_8h.html',1,'']]], ['puncturing_14',['Puncturing',['../group__punct.html',1,'']]] ]; html/search/all_e.html0000644000175000017500000000263314753471226014230 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_6.js0000644000175000017500000000051114753471226014361 0ustar buildbuildvar searchData= [ ['gmr_2d1_20gsmtap_20helpers_0',['GMR-1 GSMtap helpers',['../group__gsmtap.html',1,'']]], ['gmr_2d1_20layer_201_20library_1',['GMR-1 Layer 1 library',['../group__l1.html',1,'']]], ['gmr_2d1_20software_20defined_20radio_20library_2',['GMR-1 Software Defined Radio library',['../group__sdr.html',1,'']]] ]; html/search/all_d.js0000644000175000017500000000133414753471226013674 0ustar buildbuildvar searchData= [ ['n_0',['n',['../structgmr1__interleaver.html#a8cd1c80e472019802886819ebecd9042',1,'gmr1_interleaver']]], ['n_1',['N',['../structgmr1__interleaver.html#aefd05afb6eef22e5c8c3f92014d9c6cf',1,'gmr1_interleaver::N()'],['../structgmr1__puncturer.html#a4badcb8ada6378bfe224de9ccd9f193f',1,'gmr1_puncturer::N()']]], ['name_2',['name',['../structtone__desc.html#ac264519a39b5ba67b62f0744e993eeca',1,'tone_desc']]], ['nb_2ec_3',['nb.c',['../nb_8c.html',1,'']]], ['nb_2eh_4',['nb.h',['../nb_8h.html',1,'']]], ['nbits_5',['nbits',['../structgmr1__pi4cxpsk__modulation.html#ad8affe9f19908748ed8c0e3865434201',1,'gmr1_pi4cxpsk_modulation']]], ['normal_20bursts_6',['Normal bursts',['../group__nb.html',1,'']]] ]; html/search/all_11.html0000644000175000017500000000263414753471226014226 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/search_r.png0000644000175000017500000000105114753471226014553 0ustar buildbuild‰PNG  IHDR7›•ygAMA± üa cHRMm˜sŽà8‚ÕzÊ´3Dv„6*½bKGDÿ‡Ì¿ pHYs  šœtIMEâ  OíWßIDAT(Ï…’AKQFI+ ª]‹–ýƒ–ý‚ý–A‹‚¶F»H* )¤…¡Í$¨E¨P»À„©6T ˜ ‚Žóæ£à„ãܳ=÷r¹÷›øÙèn±øѪ>ÿAxˆGüT¸%+ÍXùp§8;~ñóƒÉ'%u"÷óú !~\l:4¨‘‘ñt>ŠŒ)…¢O›7.œÄ^)2VòD‡6Ï$ZÚR Š> nܳ­ (:TUò\8’͇J%'N‡&éÝIÒär=tÒ—Ì®„,nóbfæB$‹Ê©6r§÷fn9à-Ë׻wÚ4Bx6êßïz|Ëûkmq$îH zXÔÝj«ÒyzÅÁe«X¸ZËE‡Éü°cû‘sÑÂ%tEXtdate:create2018-12-07T11:28:17+00:00-?CÛ%tEXtdate:modify2018-12-07T11:28:17+00:00\bûgIEND®B`‚html/search/all_5.html0000644000175000017500000000263314753471226014150 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_9.js0000644000175000017500000000035714753471226014374 0ustar buildbuildvar searchData= [ ['pi2_2dcbpsk_2c_20pi4_2dcbpsk_20and_20pi4_2dcqpsk_20modulation_0',['pi2-CBPSK, pi4-CBPSK and pi4-CQPSK modulation',['../group__pi4cxpsk.html',1,'']]], ['puncturing_1',['Puncturing',['../group__punct.html',1,'']]] ]; html/search/groups_a.html0000644000175000017500000000263614753471226014776 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_0.html0000644000175000017500000000263714753471226015034 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_2.html0000644000175000017500000000263514753471226014501 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_3.js0000644000175000017500000001231414753471226015053 0ustar buildbuildvar searchData= [ ['gmr1_5fa5_0',['gmr1_a5',['../group__a5.html#gaddb4e3e6e4a5b5f91fe9308250a70375',1,'a5.c']]], ['gmr1_5fa5_5f1_1',['gmr1_a5_1',['../group__a5.html#gad385682d03d182ea6e3d0e99fa4ca04e',1,'a5.c']]], ['gmr1_5fbcch_5fdecode_2',['gmr1_bcch_decode',['../group__bcch.html#ga73717708a391d84da44845fbaf2e73a4',1,'bcch.c']]], ['gmr1_5fbcch_5fencode_3',['gmr1_bcch_encode',['../group__bcch.html#ga7a8f900d4c5b81ad9a903ee9b7d6b9e7',1,'bcch.c']]], ['gmr1_5fccch_5fdecode_4',['gmr1_ccch_decode',['../group__ccch.html#ga2773482e1dd8ea377c2191771f85db11',1,'ccch.c']]], ['gmr1_5fccch_5fencode_5',['gmr1_ccch_encode',['../group__ccch.html#gaf77ce531802993a1d64bd773215b5d7d',1,'ccch.c']]], ['gmr1_5fcodec_5falloc_6',['gmr1_codec_alloc',['../group__codec.html#ga34e0de595c6498ae39695d5909bec094',1,'codec.c']]], ['gmr1_5fcodec_5fdecode_5fdtx_7',['gmr1_codec_decode_dtx',['../group__codec.html#ga23fe43b3790482c7f99d3aa33940f54f',1,'codec.c']]], ['gmr1_5fcodec_5fdecode_5fframe_8',['gmr1_codec_decode_frame',['../group__codec.html#ga81d71b9b1e226a344a896d926ad4537a',1,'codec.c']]], ['gmr1_5fcodec_5frelease_9',['gmr1_codec_release',['../group__codec.html#gad1c2b9c16672bcd48076af0b0f162557',1,'codec.c']]], ['gmr1_5fdeinterleave_5finter_10',['gmr1_deinterleave_inter',['../group__interleave.html#ga342cfe4226b3a193e5944e6a8322d491',1,'interleave.c']]], ['gmr1_5fdeinterleave_5fintra_11',['gmr1_deinterleave_intra',['../group__interleave.html#ga101a51679fedd2c835225608f77ae3d8',1,'interleave.c']]], ['gmr1_5fdkab_5fdemod_12',['gmr1_dkab_demod',['../group__dkab.html#ga889c2d34cc3eee7b12b8d88023504e0f',1,'dkab.c']]], ['gmr1_5ffacch3_5fdecode_13',['gmr1_facch3_decode',['../group__facch3.html#ga8f2a10c4a2203e69460dbf7f8345cd26',1,'facch3.c']]], ['gmr1_5ffacch3_5fencode_14',['gmr1_facch3_encode',['../group__facch3.html#gae7fb89197eae0f343d38c3c70b2d6ada',1,'facch3.c']]], ['gmr1_5ffacch9_5fdecode_15',['gmr1_facch9_decode',['../group__facch9.html#ga42d1d80d7a1bfab7d92ad0d28d8f87c6',1,'facch9.c']]], ['gmr1_5ffacch9_5fencode_16',['gmr1_facch9_encode',['../group__facch9.html#ga8956be2f31fd48853350bc092fd1797f',1,'facch9.c']]], ['gmr1_5ffcch_5ffine_17',['gmr1_fcch_fine',['../group__fcch.html#ga2b1c8329ac1c8cae7414d2ca4619f17f',1,'fcch.c']]], ['gmr1_5ffcch_5frough_18',['gmr1_fcch_rough',['../group__fcch.html#ga14e6b77fe05bf2ef7600204ba6818a47',1,'fcch.c']]], ['gmr1_5ffcch_5frough_5fmulti_19',['gmr1_fcch_rough_multi',['../group__fcch.html#ga822f719832670df978c08008c2e7a3df',1,'fcch.c']]], ['gmr1_5ffcch_5fsnr_20',['gmr1_fcch_snr',['../group__fcch.html#ga614cf46fe5e868c8b573491736487fba',1,'fcch.c']]], ['gmr1_5fgsmtap_5fmakemsg_21',['gmr1_gsmtap_makemsg',['../group__gsmtap.html#gaade0b34d5438103fb3376d6061b0193d',1,'gsmtap.c']]], ['gmr1_5finterleave_5finter_22',['gmr1_interleave_inter',['../group__interleave.html#gac392346badff10ae6a2abfe8b1e96e32',1,'interleave.c']]], ['gmr1_5finterleave_5fintra_23',['gmr1_interleave_intra',['../group__interleave.html#gaf54dd588068ba4225f190c091352bbc9',1,'interleave.c']]], ['gmr1_5finterleaver_5ffini_24',['gmr1_interleaver_fini',['../group__interleave.html#gaaa98a1ab608c6146e9c8974687c75ed7',1,'interleave.c']]], ['gmr1_5finterleaver_5finit_25',['gmr1_interleaver_init',['../group__interleave.html#ga78f48b3938dcda4c06b4d2da3eaedcaf',1,'interleave.c']]], ['gmr1_5fpi4cxpsk_5fdemod_26',['gmr1_pi4cxpsk_demod',['../group__pi4cxpsk.html#ga39685a0ee6daeb04f7ca70bbd6d1fe29',1,'pi4cxpsk.c']]], ['gmr1_5fpi4cxpsk_5fdetect_27',['gmr1_pi4cxpsk_detect',['../group__pi4cxpsk.html#ga1490fd560c08a9468c40ff69f2cae2bb',1,'pi4cxpsk.c']]], ['gmr1_5fpi4cxpsk_5fmod_28',['gmr1_pi4cxpsk_mod',['../group__pi4cxpsk.html#ga554b1c56cd86f4e9c9cbdcc455212770',1,'pi4cxpsk.c']]], ['gmr1_5fpi4cxpsk_5fmod_5forder_29',['gmr1_pi4cxpsk_mod_order',['../group__pi4cxpsk.html#ga82887564b076046745f705f7c27c930e',1,'pi4cxpsk.c']]], ['gmr1_5fpuncturer_5fgenerate_30',['gmr1_puncturer_generate',['../group__punct.html#ga95a97b9c89435bf6826fdeb21d881ff2',1,'punct.c']]], ['gmr1_5frach_5fdecode_31',['gmr1_rach_decode',['../group__rach.html#ga4e3f0c261d715b618e188dd5d2a14391',1,'rach.c']]], ['gmr1_5frach_5fencode_32',['gmr1_rach_encode',['../group__rach.html#gaa55acd1e1d248c2b34a97af389c69e90',1,'rach.c']]], ['gmr1_5fscramble_5fsbit_33',['gmr1_scramble_sbit',['../group__scramb.html#gab5ef50c3520bc0213858a6894d989e1e',1,'scramb.c']]], ['gmr1_5fscramble_5fubit_34',['gmr1_scramble_ubit',['../group__scramb.html#ga2243e4f721439956fe9b81ec7e40490c',1,'scramb.c']]], ['gmr1_5ftch3_5fdecode_35',['gmr1_tch3_decode',['../group__tch3.html#gaab4229c82b06539cdad3d91d1bd05c32',1,'tch3.c']]], ['gmr1_5ftch3_5fencode_36',['gmr1_tch3_encode',['../group__tch3.html#ga3c7e3f769459eff23c1308eefb565ab9',1,'tch3.c']]], ['gmr1_5ftch9_5fdecode_37',['gmr1_tch9_decode',['../group__tch9.html#ga1dc40fc5c18b5f082de485e701db9af4',1,'tch9.c']]], ['gmr1_5ftch9_5fencode_38',['gmr1_tch9_encode',['../group__tch9.html#ga7a8227b3a47497d84316568637b9d732',1,'tch9.c']]], ['gmr1_5fxch_5fdc12_5fdecode_39',['gmr1_xch_dc12_decode',['../group__xch__dc12.html#ga581b9670f04f4a6bf6be69dc78ad2389',1,'xch_dc12.c']]], ['gmr1_5fxch_5fdc12_5fencode_40',['gmr1_xch_dc12_encode',['../group__xch__dc12.html#ga65507f2a3c6d9b8e681a082ffba157a9',1,'xch_dc12.c']]] ]; html/search/all_e.js0000644000175000017500000001020314753471226013670 0ustar buildbuildvar searchData= [ ['opts_0',['opts',['../../../libosmodsp/html/struct__iqbal__state.html#a96f58c4debc176d484eb20b5e19b4209',1,'_iqbal_state']]], ['org_1',['org',['../../../libosmodsp/html/struct__iqbal__state.html#ab463e6d3cfc9d2f70e530dbe4f76458f',1,'_iqbal_state']]], ['osmo_5fcxvec_2',['osmo_cxvec',['../../../libosmodsp/html/structosmo__cxvec.html',1,'']]], ['osmo_5fcxvec_5falloc_3',['osmo_cxvec_alloc',['../../../libosmodsp/html/group__cxvec.html#ga9461ac13f1d77ca832b140461e599caa',1,]]], ['osmo_5fcxvec_5falloc_5ffrom_5fdata_4',['osmo_cxvec_alloc_from_data',['../../../libosmodsp/html/group__cxvec.html#ga4edecda809e91f11cf88b53a1db8d62a',1,]]], ['osmo_5fcxvec_5fconv_5ftype_5',['osmo_cxvec_conv_type',['../../../libosmodsp/html/group__cxvec__math.html#ga2e183a0f24afa2e16199d1514629bf08',1,]]], ['osmo_5fcxvec_5fconvolve_6',['osmo_cxvec_convolve',['../../../libosmodsp/html/group__cxvec__math.html#ga2ebadb16e25768896013420a98ec666f',1,]]], ['osmo_5fcxvec_5fcorrelate_7',['osmo_cxvec_correlate',['../../../libosmodsp/html/group__cxvec__math.html#ga99ff6e3baec3253f4e431b156f042a0f',1,]]], ['osmo_5fcxvec_5fdbg_5fdump_8',['osmo_cxvec_dbg_dump',['../../../libosmodsp/html/group__cxvec.html#ga69e6d1ea3d468954cedf7d6f8d44f825',1,]]], ['osmo_5fcxvec_5fdelay_9',['osmo_cxvec_delay',['../../../libosmodsp/html/group__cxvec__math.html#ga9fa20d926f9d313a4751cef1eff740ba',1,]]], ['osmo_5fcxvec_5ffree_10',['osmo_cxvec_free',['../../../libosmodsp/html/group__cxvec.html#gaa57240ff2299122f9375e901b9700e7d',1,]]], ['osmo_5fcxvec_5finit_5ffrom_5fdata_11',['osmo_cxvec_init_from_data',['../../../libosmodsp/html/group__cxvec.html#gaa03ae6bbc24d094b8955d905832f0c36',1,]]], ['osmo_5fcxvec_5finterpolate_5fpoint_12',['osmo_cxvec_interpolate_point',['../../../libosmodsp/html/group__cxvec__math.html#gacb1c646e03a09b51b617467501639763',1,]]], ['osmo_5fcxvec_5fpeak_5falg_13',['osmo_cxvec_peak_alg',['../../../libosmodsp/html/group__cxvec__math.html#ga7942b58b341e440c0e8796d395460b78',1,]]], ['osmo_5fcxvec_5fpeak_5fenergy_5ffind_14',['osmo_cxvec_peak_energy_find',['../../../libosmodsp/html/group__cxvec__math.html#ga495219ee953336e15cd68c9b22d3850c',1,]]], ['osmo_5fcxvec_5fpeaks_5fscan_15',['osmo_cxvec_peaks_scan',['../../../libosmodsp/html/group__cxvec__math.html#gad25b04feb1cd30b24fe7de8f76e56c23',1,]]], ['osmo_5fcxvec_5frotate_16',['osmo_cxvec_rotate',['../../../libosmodsp/html/group__cxvec__math.html#ga49125f3c259da9d7eec7fa4d98d609d4',1,]]], ['osmo_5fcxvec_5fscale_17',['osmo_cxvec_scale',['../../../libosmodsp/html/group__cxvec__math.html#ga5ac0adb49726087258381582582ef654',1,]]], ['osmo_5fcxvec_5fsig_5fnormalize_18',['osmo_cxvec_sig_normalize',['../../../libosmodsp/html/group__cxvec__math.html#ga4579583a658fc33afd24a1d8508b212f',1,]]], ['osmo_5fiqbal_5fcxvec_5festimate_19',['osmo_iqbal_cxvec_estimate',['../../../libosmodsp/html/group__iqbal.html#ga19298f48b07828c19bc54038d5abe5ad',1,]]], ['osmo_5fiqbal_5fcxvec_5ffix_20',['osmo_iqbal_cxvec_fix',['../../../libosmodsp/html/group__iqbal.html#ga978fbf1c9f01694852c561c95d5ceb9d',1,]]], ['osmo_5fiqbal_5fcxvec_5foptimize_21',['osmo_iqbal_cxvec_optimize',['../../../libosmodsp/html/group__iqbal.html#gac74f9d37e2153fdf954e592b36f7c7c0',1,]]], ['osmo_5fiqbal_5fdefault_5fopts_22',['osmo_iqbal_default_opts',['../../../libosmodsp/html/group__iqbal.html#ga2f0587c233b021d72a98a11312ff5e9f',1,'osmo_iqbal_default_opts()(Global Namespace)'],['../../../libosmodsp/html/group__iqbal.html#ga2f0587c233b021d72a98a11312ff5e9f',1,'osmo_iqbal_default_opts()(Global Namespace)']]], ['osmo_5fiqbal_5festimate_23',['osmo_iqbal_estimate',['../../../libosmodsp/html/group__iqbal.html#ga23c6972ae206b4a60dbe49d954fc9caa',1,]]], ['osmo_5fiqbal_5ffix_24',['osmo_iqbal_fix',['../../../libosmodsp/html/group__iqbal.html#gaaca46bab25fe24148c3cb3c4d2158c79',1,]]], ['osmo_5fiqbal_5fopts_25',['osmo_iqbal_opts',['../../../libosmodsp/html/structosmo__iqbal__opts.html',1,'']]], ['osmo_5fnormsqf_26',['osmo_normsqf',['../../../libosmodsp/html/group__cxvec__math.html#ga1b169ec31cb01111c0def0c12d65f3a2',1,]]], ['osmo_5fsinc_27',['osmo_sinc',['../../../libosmodsp/html/group__cxvec__math.html#ga4e7a7183dc4e5ce77d72d2986495f348',1,]]] ]; html/search/all_7.js0000644000175000017500000000401414753471226013615 0ustar buildbuildvar searchData= [ ['f0_0',['f0',['../structambe__subframe.html#a62d2a8d54cc973e32e85d9c4735bde1f',1,'ambe_subframe']]], ['f0log_1',['f0log',['../structambe__subframe.html#a0bd7338941b5a9e13bb9cab48ae41bd6',1,'ambe_subframe']]], ['f1_2',['f1',['../structtone__desc.html#a9980c6296defda0b97fdc6f0a70a0b8d',1,'tone_desc']]], ['f2_3',['f2',['../structtone__desc.html#a0367e505d7112a2acbddefaf23feac79',1,'tone_desc']]], ['facch3_20channel_20coding_4',['FACCH3 channel coding',['../group__facch3.html',1,'']]], ['facch3_2ec_5',['facch3.c',['../facch3_8c.html',1,'']]], ['facch3_2eh_6',['facch3.h',['../facch3_8h.html',1,'']]], ['facch9_20channel_20coding_7',['FACCH9 channel coding',['../group__facch9.html',1,'']]], ['facch9_2ec_8',['facch9.c',['../facch9_8c.html',1,'']]], ['facch9_2eh_9',['facch9.h',['../facch9_8h.html',1,'']]], ['fcch_20bursts_10',['FCCH bursts',['../group__fcch.html',1,'']]], ['fcch_2ec_11',['fcch.c',['../fcch_8c.html',1,'']]], ['fcch_2eh_12',['fcch.h',['../fcch_8h.html',1,'']]], ['feval_13',['feval',['../../../libosmodsp/html/struct__iqbal__state.html#ad82cbcec2dc9e52f4816cbe9a0af757f',1,'_iqbal_state']]], ['fft_14',['fft',['../../../libosmodsp/html/struct__iqbal__estimate__state.html#aa44240271f4835c080793da0b816bc1c',1,'_iqbal_estimate_state']]], ['fft_5fcount_15',['fft_count',['../../../libosmodsp/html/structosmo__iqbal__opts.html#abb7854c9f674bf12022ce0b5485fd2a7',1,'osmo_iqbal_opts']]], ['fft_5fplan_16',['fft_plan',['../../../libosmodsp/html/struct__iqbal__estimate__state.html#a0a1a4f9083a6228f38e78702b8f710e9',1,'_iqbal_estimate_state']]], ['fft_5fsize_17',['fft_size',['../../../libosmodsp/html/structosmo__iqbal__opts.html#a76e529e63af98a524caa8cf61c4de828',1,'osmo_iqbal_opts']]], ['flags_18',['flags',['../../../libosmodsp/html/structosmo__cxvec.html#ab3bd5fac3c3a84df65bc82d1cae223ab',1,'osmo_cxvec']]], ['frame_2ec_19',['frame.c',['../frame_8c.html',1,'']]], ['freq_20',['freq',['../structgmr1__fcch__burst.html#af256a13136949602fd41e4da1c569435',1,'gmr1_fcch_burst']]] ]; html/search/variables_7.html0000644000175000017500000000264114753471226015351 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_0.html0000644000175000017500000000263314753471226014143 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_1.html0000644000175000017500000000263314753471226014144 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_3.html0000644000175000017500000000263714753471226015037 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/bcch_8h.html0000644000175000017500000001463114753471227013207 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/bcch.h File Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Osmocom GMR-1 BCCH channel coding header. More...

    #include <stdint.h>
    #include <osmocom/core/bits.h>

    Go to the source code of this file.

    Functions

    void gmr1_bcch_encode (ubit_t *bits_e, const uint8_t *l2)
     Stateless GMR-1 BCCH channel coder. More...
     
    int gmr1_bcch_decode (uint8_t *l2, const sbit_t *bits_e, int *conv_rv)
     Stateless GMR-1 BCCH channel decoder. More...
     

    Detailed Description

    Osmocom GMR-1 BCCH channel coding header.

    html/structgmr1__pi4cxpsk__modulation.html0000644000175000017500000001615414753471227020404 0ustar buildbuild osmo-gmr: gmr1_pi4cxpsk_modulation Struct Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    pi4-CxPSK modulation description More...

    #include <pi4cxpsk.h>

    Data Fields

    float rotation
     rotation per symbol
     
    int nbits
     ebits/sym

     
    struct gmr1_pi4cxpsk_symbolsyms
     Symbols (sym order)
     
    struct gmr1_pi4cxpsk_symbolbits
     Symbols (bit order)
     

    Detailed Description

    pi4-CxPSK modulation description


    The documentation for this struct was generated from the following file:
    html/ccch_8c.html0000644000175000017500000001536314753471227013206 0ustar buildbuild osmo-gmr: src/l1/ccch.c File Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Osmocom GMR-1 CCCH (PCH/AGCH) channel coding implementation. More...

    #include <stdint.h>
    #include <string.h>
    #include <osmocom/core/bits.h>
    #include <osmocom/core/conv.h>
    #include <osmocom/core/crc16gen.h>
    #include <osmocom/gmr1/l1/conv.h>
    #include <osmocom/gmr1/l1/crc.h>
    #include <osmocom/gmr1/l1/interleave.h>
    #include <osmocom/gmr1/l1/scramb.h>

    Functions

    void gmr1_ccch_encode (ubit_t *bits_e, const uint8_t *l2)
     Stateless GMR-1 CCCH channel coder. More...
     
    int gmr1_ccch_decode (uint8_t *l2, const sbit_t *bits_e, int *conv_rv)
     Stateless GMR-1 CCCH channel decoder. More...
     

    Detailed Description

    Osmocom GMR-1 CCCH (PCH/AGCH) channel coding implementation.

    html/facch3_8h_source.html0000644000175000017500000002514414753471227015020 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/facch3.h Source File
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    facch3.h
    Go to the documentation of this file.
    1/* GMR-1 FACCH3 channel coding */
    2/* See GMR-1 05.003 (ETSI TS 101 376-5-3 V1.2.1) - Section 6.9 */
    3
    4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
    5 * All Rights Reserved
    6 *
    7 * This program is free software; you can redistribute it and/or modify
    8 * it under the terms of the GNU Affero General Public License as published by
    9 * the Free Software Foundation; either version 3 of the License, or
    10 * (at your option) any later version.
    11 *
    12 * This program is distributed in the hope that it will be useful,
    13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    15 * GNU Affero General Public License for more details.
    16 *
    17 * You should have received a copy of the GNU Affero General Public License
    18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
    19 */
    20
    21#ifndef __OSMO_GMR1_L1_FACCH3_H__
    22#define __OSMO_GMR1_L1_FACCH3_H__
    23
    33#include <stdint.h>
    34#include <osmocom/core/bits.h>
    35
    36
    37void gmr1_facch3_encode(ubit_t *bits_e, const uint8_t *l2,
    38 const ubit_t *bits_s, const ubit_t *ciph);
    39int gmr1_facch3_decode(uint8_t *l2, ubit_t *bits_s,
    40 const sbit_t *bits_e, const ubit_t *ciph, int *conv_rv);
    41
    42
    45#endif /* __OSMO_GMR1_L1_FACCH3_H__ */
    int gmr1_facch3_decode(uint8_t *l2, ubit_t *bits_s, const sbit_t *bits_e, const ubit_t *ciph, int *conv_rv)
    Stateless GMR-1 FACCH3 channel decoder.
    Definition: facch3.c:122
    void gmr1_facch3_encode(ubit_t *bits_e, const uint8_t *l2, const ubit_t *bits_s, const ubit_t *ciph)
    Stateless GMR-1 FACCH3 channel coder.
    Definition: facch3.c:66
    html/globals_d.html0000644000175000017500000000766614753471227013651 0ustar buildbuild osmo-gmr: Globals
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:

    - d -

    • DKAB_PWR_RATIO_THRESHOLD : dkab.c
    html/navtreeindex1.js0000644000175000017500000002751214753471227014140 0ustar buildbuildvar NAVTREEINDEX1 = { "group__punct.html#ga780e4af9db89c4bb51808bd2a35fa593":[0,2,1,3,52], "group__punct.html#ga780e4af9db89c4bb51808bd2a35fa593":[0,2,1,3,53], "group__punct.html#ga78cb3a5553a7c084c637e1845049c2a3":[0,2,1,3,76], "group__punct.html#ga78cb3a5553a7c084c637e1845049c2a3":[0,2,1,3,77], "group__punct.html#ga793c265d459c6c7d263edfd9fa5d82c8":[0,2,1,3,78], "group__punct.html#ga793c265d459c6c7d263edfd9fa5d82c8":[0,2,1,3,79], "group__punct.html#ga868634869b605e0b4ab7694d11f816da":[0,2,1,3,95], "group__punct.html#ga868634869b605e0b4ab7694d11f816da":[0,2,1,3,94], "group__punct.html#ga8f444be2364421750572d3b2b3e4d442":[0,2,1,3,36], "group__punct.html#ga8f444be2364421750572d3b2b3e4d442":[0,2,1,3,37], "group__punct.html#ga9118d1c2fa81fdaf5f15ffc633e66a88":[0,2,1,3,40], "group__punct.html#ga9118d1c2fa81fdaf5f15ffc633e66a88":[0,2,1,3,41], "group__punct.html#ga94c4d51e0dfe595be3d2505f64c3ea5c":[0,2,1,3,12], "group__punct.html#ga94c4d51e0dfe595be3d2505f64c3ea5c":[0,2,1,3,13], "group__punct.html#ga95a97b9c89435bf6826fdeb21d881ff2":[0,2,1,3,3], "group__punct.html#ga97a416384feb6b6e73215576b377faa5":[0,2,1,3,63], "group__punct.html#ga97a416384feb6b6e73215576b377faa5":[0,2,1,3,62], "group__punct.html#ga9d6d7b1b48148bb4cc4678790a68b5ff":[0,2,1,3,46], "group__punct.html#ga9d6d7b1b48148bb4cc4678790a68b5ff":[0,2,1,3,47], "group__punct.html#gaa03eb3f46b3027767323ccc546414c5b":[0,2,1,3,17], "group__punct.html#gaa03eb3f46b3027767323ccc546414c5b":[0,2,1,3,16], "group__punct.html#gaa4798a84b9662a863f7cfeaa6206aba5":[0,2,1,3,43], "group__punct.html#gaa4798a84b9662a863f7cfeaa6206aba5":[0,2,1,3,42], "group__punct.html#gaa4d4874e4d1a51d70b1d67113f0bfeb2":[0,2,1,3,45], "group__punct.html#gaa4d4874e4d1a51d70b1d67113f0bfeb2":[0,2,1,3,44], "group__punct.html#gaa7ef8a86ffc3fe190ba8e501cc161208":[0,2,1,3,72], "group__punct.html#gaa7ef8a86ffc3fe190ba8e501cc161208":[0,2,1,3,73], "group__punct.html#gaa8bce8b6ca73fc45c3c0c596037c1849":[0,2,1,3,15], "group__punct.html#gaa8bce8b6ca73fc45c3c0c596037c1849":[0,2,1,3,14], "group__punct.html#gaa9d92cbd0a8bbeedb9cd7860e3422f17":[0,2,1,3,101], "group__punct.html#gaa9d92cbd0a8bbeedb9cd7860e3422f17":[0,2,1,3,100], "group__punct.html#gaac0e2e21cdb173c9f7b8ce64b4fcad3a":[0,2,1,3,89], "group__punct.html#gaac0e2e21cdb173c9f7b8ce64b4fcad3a":[0,2,1,3,88], "group__punct.html#gabea6708a946be5c940ac734ef6a0238f":[0,2,1,3,19], "group__punct.html#gabea6708a946be5c940ac734ef6a0238f":[0,2,1,3,18], "group__punct.html#gac001aebb5c9026aa629a95146427736a":[0,2,1,3,56], "group__punct.html#gac001aebb5c9026aa629a95146427736a":[0,2,1,3,57], "group__punct.html#gac052cb5f0bd3f9f828b1c23d03ea4f22":[0,2,1,3,21], "group__punct.html#gac052cb5f0bd3f9f828b1c23d03ea4f22":[0,2,1,3,20], "group__punct.html#gaca082b213957ed2b9f2ea17c74ff76c5":[0,2,1,3,85], "group__punct.html#gaca082b213957ed2b9f2ea17c74ff76c5":[0,2,1,3,84], "group__punct.html#gad04e1754667748acd42c3fb6867dc09d":[0,2,1,3,10], "group__punct.html#gad04e1754667748acd42c3fb6867dc09d":[0,2,1,3,11], "group__punct.html#gad360cd4e2a33eedc63954a5a8731d1ac":[0,2,1,3,59], "group__punct.html#gad360cd4e2a33eedc63954a5a8731d1ac":[0,2,1,3,58], "group__punct.html#gadd9a431fb84f6c100472f428642cece3":[0,2,1,3,26], "group__punct.html#gadd9a431fb84f6c100472f428642cece3":[0,2,1,3,27], "group__punct.html#gadf567a87a9c00c73dbb132863871c24c":[0,2,1,3,102], "group__punct.html#gadf567a87a9c00c73dbb132863871c24c":[0,2,1,3,103], "group__punct.html#gae61e6323084580be44337702851f0560":[0,2,1,3,29], "group__punct.html#gae61e6323084580be44337702851f0560":[0,2,1,3,28], "group__punct.html#gaecda3c501174763dac7c5c646ea44690":[0,2,1,3,32], "group__punct.html#gaecda3c501174763dac7c5c646ea44690":[0,2,1,3,33], "group__punct.html#gaf6f62025e6ad2089904f214fea702a49":[0,2,1,3,31], "group__punct.html#gaf6f62025e6ad2089904f214fea702a49":[0,2,1,3,30], "group__punct.html#gaf7fd0ce78be41fd48a1509a477ff7c0c":[0,2,1,3,86], "group__punct.html#gaf7fd0ce78be41fd48a1509a477ff7c0c":[0,2,1,3,87], "group__punct.html#gafecfb0fbfb4f49c8a370362b98bb5aff":[0,2,1,3,54], "group__punct.html#gafecfb0fbfb4f49c8a370362b98bb5aff":[0,2,1,3,55], "group__rach.html":[0,2,2,4], "group__rach.html#ga4e3f0c261d715b618e188dd5d2a14391":[0,2,2,4,2], "group__rach.html#gaa55acd1e1d248c2b34a97af389c69e90":[0,2,2,4,3], "group__scramb.html":[0,2,1,4], "group__scramb.html#ga2243e4f721439956fe9b81ec7e40490c":[0,2,1,4,3], "group__scramb.html#gab5ef50c3520bc0213858a6894d989e1e":[0,2,1,4,2], "group__sdr.html":[0,3], "group__sdr.html#ga6e119ab6400ff7407cdd2d9cb87360eb":[0,3,5], "group__tch3.html":[0,2,2,5], "group__tch3.html#ga3c7e3f769459eff23c1308eefb565ab9":[0,2,2,5,3], "group__tch3.html#gaab4229c82b06539cdad3d91d1bd05c32":[0,2,2,5,2], "group__tch9.html":[0,2,2,6], "group__tch9.html#ga1dc40fc5c18b5f082de485e701db9af4":[0,2,2,6,3], "group__tch9.html#ga744d45ed21afcffb14ab1dada9843d45":[0,2,2,6,2], "group__tch9.html#ga7a8227b3a47497d84316568637b9d732":[0,2,2,6,4], "group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45a31ed2ba33bf118dc2d973f7c1db264a2":[0,2,2,6,2,1], "group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45a47478138efd91b1307e767a674836a18":[0,2,2,6,2,2], "group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45a762585e2143ebf69e4d98938fa20e648":[0,2,2,6,2,0], "group__tch9.html#gga744d45ed21afcffb14ab1dada9843d45aada4ebb2664386d79975327200434f3d":[0,2,2,6,2,3], "group__xch__dc12.html":[0,2,2,7], "group__xch__dc12.html#ga581b9670f04f4a6bf6be69dc78ad2389":[0,2,2,7,2], "group__xch__dc12.html#ga65507f2a3c6d9b8e681a082ffba157a9":[0,2,2,7,3], "gsmtap_8c.html":[0,1,1], "gsmtap_8h.html":[0,1,0], "index.html":[], "interleave_8c.html":[0,2,1,2,1], "interleave_8h.html":[0,2,1,2,0], "l1_2defs_8h.html":[0,2,3], "math_8c.html":[0,0,0,2], "modules.html":[0], "nb_8c.html":[0,3,2,1], "nb_8h.html":[0,3,2,0], "pages.html":[], "pi4cxpsk_8c.html":[0,3,3,1], "pi4cxpsk_8h.html":[0,3,3,0], "private_8h.html":[0,0,0,3], "punct_8c.html":[0,2,1,3,1], "punct_8h.html":[0,2,1,3,0], "rach_8c.html":[0,2,2,4,1], "rach_8h.html":[0,2,2,4,0], "scramb_8c.html":[0,2,1,4,1], "scramb_8h.html":[0,2,1,4,0], "sdr_2defs_8h.html":[0,3,4], "structambe__decoder.html":[0,0,0,10], "structambe__decoder.html#a7ef287c9fa9a4f4303b8bcf14aa08a10":[0,0,0,10,0], "structambe__decoder.html#aa30d43006212f987798af28cefe6a644":[0,0,0,10,2], "structambe__decoder.html#ada92b6d6ccd98bea21a205f9f3a91521":[0,0,0,10,3], "structambe__decoder.html#ae182cfa94b3c3f970de386a8d671bbaa":[0,0,0,10,1], "structambe__raw__params.html":[0,0,0,7], "structambe__raw__params.html#a5723fa985d5a3e403baf93375f6da49b":[0,0,0,7,9], "structambe__raw__params.html#a719970b8264d5d86e8127731e3b74e95":[0,0,0,7,8], "structambe__raw__params.html#a7eb51135820d33cbf6a0e4b865bd2a59":[0,0,0,7,1], "structambe__raw__params.html#a8019dfc071f9ed84059593433380186e":[0,0,0,7,10], "structambe__raw__params.html#a804fa021dcd25eed72ddeb7421b64375":[0,0,0,7,2], "structambe__raw__params.html#a96e40b2f376d714e5df4538776911192":[0,0,0,7,6], "structambe__raw__params.html#a99596e150dafbc4dbefc83c0ebeb402a":[0,0,0,7,3], "structambe__raw__params.html#a9f9e769e1d5e71979c4591931d8ef031":[0,0,0,7,4], "structambe__raw__params.html#ab5848d979e9ab98ee13df35244186633":[0,0,0,7,7], "structambe__raw__params.html#ac0c99abebb1f2483745b6f5c683fd238":[0,0,0,7,0], "structambe__raw__params.html#aefc1cb1dec8794e3ba084b1bef0540be":[0,0,0,7,5], "structambe__subframe.html":[0,0,0,8], "structambe__subframe.html#a0bd7338941b5a9e13bb9cab48ae41bd6":[0,0,0,8,1], "structambe__subframe.html#a0fb6c5eab0c8af4a8106e7df6b964702":[0,0,0,8,8], "structambe__subframe.html#a21676a64ab0ab902b4802d8a347aa227":[0,0,0,8,9], "structambe__subframe.html#a3ebdc823451ce217e2956ff0eac7442f":[0,0,0,8,3], "structambe__subframe.html#a4a3fa891e79797c2458f0ec01dbe9019":[0,0,0,8,5], "structambe__subframe.html#a56d7cadaf4f6be52366ba2f26983483b":[0,0,0,8,6], "structambe__subframe.html#a62d2a8d54cc973e32e85d9c4735bde1f":[0,0,0,8,0], "structambe__subframe.html#a760edde0daaceb15506a57379e7ad265":[0,0,0,8,7], "structambe__subframe.html#acc926ec6fc259108308513851263c010":[0,0,0,8,2], "structambe__subframe.html#af7ffd521bfff7156ae33ba43a893b163":[0,0,0,8,4], "structambe__synth.html":[0,0,0,9], "structambe__synth.html#a1ec169cb61914f8a61e14e0a2838de6c":[0,0,0,9,3], "structambe__synth.html#a5e8d3e37d5ef02db39803a10de1796ce":[0,0,0,9,0], "structambe__synth.html#ab03788ec8e6fd99b782ca07ae04d4dc4":[0,0,0,9,1], "structambe__synth.html#ac555e0a7a4e672f1c8e3ab6873b0bbfd":[0,0,0,9,4], "structambe__synth.html#ae9f1fa4f9e9616614f50fa303a3c52ce":[0,0,0,9,2], "structchan__desc.html":[1,0,4], "structgmr1__codec.html":[0,0,3], "structgmr1__codec.html#a6c9cdb292f878bd711308d13b6cb0730":[0,0,3,0], "structgmr1__fcch__burst.html":[0,3,1,2], "structgmr1__fcch__burst.html#a8f5f11f6f9b9b7aa2b505f7e4d6ca44e":[0,3,1,2,1], "structgmr1__fcch__burst.html#af256a13136949602fd41e4da1c569435":[0,3,1,2,0], "structgmr1__interleaver.html":[0,2,1,2,2], "structgmr1__interleaver.html#a793392c3a32d1573c12038856d7a2fa9":[0,2,1,2,2,1], "structgmr1__interleaver.html#a8cd1c80e472019802886819ebecd9042":[0,2,1,2,2,3], "structgmr1__interleaver.html#a92db6403eef66c2dff2686364d477262":[0,2,1,2,2,0], "structgmr1__interleaver.html#aefd05afb6eef22e5c8c3f92014d9c6cf":[0,2,1,2,2,2], "structgmr1__pi4cxpsk__burst.html":[0,3,3,6], "structgmr1__pi4cxpsk__burst.html#a30a0e6c90559f9b66def7814fe8f9af2":[0,3,3,6,3], "structgmr1__pi4cxpsk__burst.html#a5985baf01b937f381470bb0d5810ea00":[0,3,3,6,2], "structgmr1__pi4cxpsk__burst.html#a68e57bf2eeee31d4a9f5efb2dfb7a145":[0,3,3,6,6], "structgmr1__pi4cxpsk__burst.html#a743e2058421775d2033d5e455e7be163":[0,3,3,6,0], "structgmr1__pi4cxpsk__burst.html#a8205aeb2d88053361619f1baa0593a89":[0,3,3,6,1], "structgmr1__pi4cxpsk__burst.html#a835af391ae1715b41cbdd52efd1b378a":[0,3,3,6,5], "structgmr1__pi4cxpsk__burst.html#ad164674725c949673b0a2ec24e0f0000":[0,3,3,6,4], "structgmr1__pi4cxpsk__data.html":[0,3,3,5], "structgmr1__pi4cxpsk__data.html#a14bc0a4787038e79298c46fa85784f13":[0,3,3,5,0], "structgmr1__pi4cxpsk__data.html#a8fcd05f64567745c7e7435334f1f593c":[0,3,3,5,1], "structgmr1__pi4cxpsk__modulation.html":[0,3,3,3], "structgmr1__pi4cxpsk__modulation.html#a3519a1238c0cc46cc075724f8677c556":[0,3,3,3,0], "structgmr1__pi4cxpsk__modulation.html#a6fff12a91ce1a4168ac7e87e4c864aa6":[0,3,3,3,2], "structgmr1__pi4cxpsk__modulation.html#ad8affe9f19908748ed8c0e3865434201":[0,3,3,3,1], "structgmr1__pi4cxpsk__modulation.html#ad9c4201e4495b6894945a5fc4285e96c":[0,3,3,3,3], "structgmr1__pi4cxpsk__symbol.html":[0,3,3,2], "structgmr1__pi4cxpsk__symbol.html#a2fb97bf5773d1491eb1359e92d4832f6":[0,3,3,2,0], "structgmr1__pi4cxpsk__symbol.html#a62299b3758847f06baa14861572d6160":[0,3,3,2,3], "structgmr1__pi4cxpsk__symbol.html#a6df1e39fbb19bd1adb54638c3bf705fe":[0,3,3,2,1], "structgmr1__pi4cxpsk__symbol.html#ac3639293117223030a399cdb947bf22b":[0,3,3,2,2], "structgmr1__pi4cxpsk__sync.html":[0,3,3,4], "structgmr1__pi4cxpsk__sync.html#a291c9b0776495cfb3c3f3a2fb4f87333":[0,3,3,4,0], "structgmr1__pi4cxpsk__sync.html#a67853f80e05c48b01dad6e7f7bc6e39a":[0,3,3,4,1], "structgmr1__pi4cxpsk__sync.html#a89f2352b308757e77cab30d1153fdb8b":[0,3,3,4,3], "structgmr1__pi4cxpsk__sync.html#adabd2c21518c2bd6e37d4a8ad7facc6b":[0,3,3,4,2], "structgmr1__puncturer.html":[0,2,1,3,2], "structgmr1__puncturer.html#a4badcb8ada6378bfe224de9ccd9f193f":[0,2,1,3,2,2], "structgmr1__puncturer.html#a56ab639ebbf577886ec36db783b8ef34":[0,2,1,3,2,0], "structgmr1__puncturer.html#a6bad988cd142c8d0e30bfe457fd2c062":[0,2,1,3,2,3], "structgmr1__puncturer.html#af98900595177fbe9bf6c08ee652ab739":[0,2,1,3,2,1], "structtch3__state.html":[1,0,14], "structtch9__state.html":[1,0,15], "structtone__desc.html":[0,0,0,11], "structtone__desc.html#a0367e505d7112a2acbddefaf23feac79":[0,0,0,11,1], "structtone__desc.html#a9980c6296defda0b97fdc6f0a70a0b8d":[0,0,0,11,0], "structtone__desc.html#ac264519a39b5ba67b62f0744e993eeca":[0,0,0,11,2], "synth_8c.html":[0,0,0,4], "tables_8c.html":[0,0,0,5], "tch3_8c.html":[0,2,2,5,1], "tch3_8h.html":[0,2,2,5,0], "tch9_8c.html":[0,2,2,6,1], "tch9_8h.html":[0,2,2,6,0], "tone_8c.html":[0,0,0,6], "xch__dc12_8c.html":[0,2,2,7,1], "xch__dc12_8h.html":[0,2,2,7,0] }; html/dir_9c8ef0db9d7395bd53b81b89d3ccbcb1.html0000644000175000017500000001140014753471227017430 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/codec Directory Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    codec Directory Reference

    Files

    file  codec.h [code]
     Osmocom GMR-1 AMBE vocoder header.
     
    html/folderopen.png0000644000175000017500000000112514753471227013660 0ustar buildbuild‰PNG  IHDRÚ}\ˆIDATxí]?oÓPÿ9iš4i°;ii“¶‰ZŠ‰‘‰ÀÀ7`bèÔÙ¬Øù,HìU'ô$*Tµ]‚T¡DPÚÄ6wÏ}‰;¡C; a¿ÓߟûÝïîž¼jAÀ­InSþ}€9H“ÓŽ|?íÁ÷ =_ÊÆŠ­†¥Àue*;¯YEäsYäæB¢Ÿ¿þÄ—£sÙ½½ÙŒ† É«›©ÀYÇq !GÇ¿v̇¹ÑØ®š °Œ‚ÔF¹}q¥b]÷7í·0)Úd›¾ÿð-èº}Pfä£ÖY{4™ÑÂ@}úæôñ2ÛüÔ—ñúåNŒI‚ÁǃcçÁº%£¬UŠ°I³mc±ô˜å¼ÔÆüÈ>é¸xþt9Æ$µý OæVE*õU´Ì‚ç#ž×ˆ•ïûr@l$øPÿrHaaÇ¥ ²›dZ®rè‘ãqI„o¼øT\Ž,tªj2FAxv-LŸp׌p TÄI/ \¥sfí½; jViTƒèú¤o^cpÅü¼ûû»Ïb]”€¢¤<†aþÕœ²“ßÓ˜y“£§9:Œîù+À³€ñà,E žf³6éNˆÄE£KU}Ü^;¶ØnZ¢uß­US4— ѬëbížN¶.Úk¦ØjTÄöº%µªâ i¯VÄÊÝò§™ Èù¸)ùÿG€™òºJ@T x”IEND®B`‚html/codec_8h.js0000644000175000017500000000061014753471227013025 0ustar buildbuildvar codec_8h = [ [ "gmr1_codec_alloc", "group__codec.html#ga34e0de595c6498ae39695d5909bec094", null ], [ "gmr1_codec_decode_dtx", "group__codec.html#ga23fe43b3790482c7f99d3aa33940f54f", null ], [ "gmr1_codec_decode_frame", "group__codec.html#ga81d71b9b1e226a344a896d926ad4537a", null ], [ "gmr1_codec_release", "group__codec.html#gad1c2b9c16672bcd48076af0b0f162557", null ] ];html/structambe__raw__params.js0000644000175000017500000000203714753471227016241 0ustar buildbuildvar structambe__raw__params = [ [ "gain", "structambe__raw__params.html#ac0c99abebb1f2483745b6f5c683fd238", null ], [ "pitch", "structambe__raw__params.html#a7eb51135820d33cbf6a0e4b865bd2a59", null ], [ "pitch_interp", "structambe__raw__params.html#a804fa021dcd25eed72ddeb7421b64375", null ], [ "sf0_mag_interp", "structambe__raw__params.html#a99596e150dafbc4dbefc83c0ebeb402a", null ], [ "sf0_perr_14", "structambe__raw__params.html#a9f9e769e1d5e71979c4591931d8ef031", null ], [ "sf0_perr_58", "structambe__raw__params.html#aefc1cb1dec8794e3ba084b1bef0540be", null ], [ "sf1_hoc", "structambe__raw__params.html#a96e40b2f376d714e5df4538776911192", null ], [ "sf1_prba12", "structambe__raw__params.html#ab5848d979e9ab98ee13df35244186633", null ], [ "sf1_prba34", "structambe__raw__params.html#a719970b8264d5d86e8127731e3b74e95", null ], [ "sf1_prba57", "structambe__raw__params.html#a5723fa985d5a3e403baf93375f6da49b", null ], [ "v_uv", "structambe__raw__params.html#a8019dfc071f9ed84059593433380186e", null ] ];html/group__codec.html0000644000175000017500000003735514753471227014351 0ustar buildbuild osmo-gmr: AMBE vocoder
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    AMBE vocoder

    Modules

     AMBE vocoder - internal API
     

    Files

    file  codec.h
     Osmocom GMR-1 AMBE vocoder header.
     
    file  codec.c
     Osmocom GMR-1 AMBE vocoder public API implementation.
     

    Data Structures

    struct  gmr1_codec
     Structure for GMR1 codec state. More...
     

    Functions

    struct gmr1_codecgmr1_codec_alloc (void)
     Allocates and inits a codec object. More...
     
    void gmr1_codec_release (struct gmr1_codec *codec)
     Release a codec object created by gmr1_codec_alloc. More...
     
    int gmr1_codec_decode_frame (struct gmr1_codec *codec, int16_t *audio, int N, const uint8_t *frame, int bad)
     Decodes an AMBE frame to audio. More...
     
    int gmr1_codec_decode_dtx (struct gmr1_codec *codec, int16_t *audio, int N)
     Generates audio for DTX period. More...
     

    Detailed Description

    Function Documentation

    ◆ gmr1_codec_alloc()

    struct gmr1_codec * gmr1_codec_alloc ( void  )

    Allocates and inits a codec object.

    Returns
    A newly allocated codec, to be freed with gmr1_codec_release

    References ambe_decode_init(), and gmr1_codec::dec.

    ◆ gmr1_codec_decode_dtx()

    int gmr1_codec_decode_dtx ( struct gmr1_codec codec,
    int16_t *  audio,
    int  N 
    )

    Generates audio for DTX period.

    Parameters
    [in]codecCodec object
    [out]audioOutput audio buffer
    [in]Nnumber of audio samples to produce (152..168)

    References ambe_decode_dtx(), and gmr1_codec::dec.

    ◆ gmr1_codec_decode_frame()

    int gmr1_codec_decode_frame ( struct gmr1_codec codec,
    int16_t *  audio,
    int  N,
    const uint8_t *  frame,
    int  bad 
    )

    Decodes an AMBE frame to audio.

    Parameters
    [in]codecCodec object
    [out]audioOutput audio buffer
    [in]Nnumber of audio samples to produce (152..168)
    [in]frameFrame data (10 bytes = 80 bits)
    [in]badBad Frame Indicator. Set to 1 if frame is corrupt
    Returns
    0 for success. Negative error code otherwise.

    References ambe_decode_frame(), and gmr1_codec::dec.

    ◆ gmr1_codec_release()

    void gmr1_codec_release ( struct gmr1_codec codec)

    Release a codec object created by gmr1_codec_alloc.

    Parameters
    [in]codecThe codec object to release

    References ambe_decode_fini(), and gmr1_codec::dec.

    html/group__facch9.html0000644000175000017500000002752614753471227014430 0ustar buildbuild osmo-gmr: FACCH9 channel coding
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Files

    file  facch9.h
     Osmocom GMR-1 FACCH9 channel coding header.
     
    file  facch9.c
     Osmocom GMR-1 FACCH9 channel coding implementation.
     

    Functions

    void gmr1_facch9_encode (ubit_t *bits_e, const uint8_t *l2, const ubit_t *bits_sacch, const ubit_t *bits_status, const ubit_t *ciph)
     Stateless GMR-1 FACCH9 channel coder. More...
     
    int gmr1_facch9_decode (uint8_t *l2, sbit_t *bits_sacch, sbit_t *bits_status, const sbit_t *bits_e, const ubit_t *ciph, int *conv_rv)
     Stateless GMR-1 FACCH9 channel decoder. More...
     

    Detailed Description

    Function Documentation

    ◆ gmr1_facch9_decode()

    int gmr1_facch9_decode ( uint8_t *  l2,
    sbit_t *  bits_sacch,
    sbit_t *  bits_status,
    const sbit_t *  bits_e,
    const ubit_t *  ciph,
    int *  conv_rv 
    )

    Stateless GMR-1 FACCH9 channel decoder.

    Parameters
    [out]l2L2 packet data (38 bytes, last nibble unused)
    [out]bits_sacch10 saach bits demultiplexed
    [out]bits_status4 status bits demultiplexed
    [in]bits_e662 encoded bits of one NT9 burst
    [in]ciph658 bits of cipher stream (can be NULL)
    [out]conv_rvReturn of the convolutional decode (can be NULL)
    Returns
    0 if CRC check pass, any other value for fail.

    References gmr1_deinterleave_intra(), and gmr1_scramble_sbit().

    ◆ gmr1_facch9_encode()

    void gmr1_facch9_encode ( ubit_t *  bits_e,
    const uint8_t *  l2,
    const ubit_t *  bits_sacch,
    const ubit_t *  bits_status,
    const ubit_t *  ciph 
    )

    Stateless GMR-1 FACCH9 channel coder.

    Parameters
    [out]bits_e662 encoded bits of one NT9 burst
    [in]l2L2 packet data (38 bytes, last nibble unused)
    [in]bits_sacch10 saach bits to be multiplexed
    [in]bits_status4 status bits to be multiplexed
    [in]ciph658 bits of cipher stream (can be NULL)

    References gmr1_crc16.

    html/group__xch__dc12.js0000644000175000017500000000050014753471227014454 0ustar buildbuildvar group__xch__dc12 = [ [ "xch_dc12.h", "xch__dc12_8h.html", null ], [ "xch_dc12.c", "xch__dc12_8c.html", null ], [ "gmr1_xch_dc12_decode", "group__xch__dc12.html#ga581b9670f04f4a6bf6be69dc78ad2389", null ], [ "gmr1_xch_dc12_encode", "group__xch__dc12.html#ga65507f2a3c6d9b8e681a082ffba157a9", null ] ];html/ccch_8h_source.html0000644000175000017500000002415514753471227014572 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/ccch.h Source File
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    ccch.h
    Go to the documentation of this file.
    1/* GMR-1 CCCH (PCH/AGCH) channel coding */
    2/* See GMR-1 05.003 (ETSI TS 101 376-5-3 V1.2.1) - Section 6.2 & 6.3 */
    3
    4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
    5 * All Rights Reserved
    6 *
    7 * This program is free software; you can redistribute it and/or modify
    8 * it under the terms of the GNU Affero General Public License as published by
    9 * the Free Software Foundation; either version 3 of the License, or
    10 * (at your option) any later version.
    11 *
    12 * This program is distributed in the hope that it will be useful,
    13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    15 * GNU Affero General Public License for more details.
    16 *
    17 * You should have received a copy of the GNU Affero General Public License
    18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
    19 */
    20
    21#ifndef __OSMO_GMR1_L1_CCCH_H__
    22#define __OSMO_GMR1_L1_CCCH_H__
    23
    33#include <stdint.h>
    34#include <osmocom/core/bits.h>
    35
    36
    37void gmr1_ccch_encode(ubit_t *bits_e, const uint8_t *l2);
    38int gmr1_ccch_decode(uint8_t *l2, const sbit_t *bits_e, int *conv_rv);
    39
    40
    43#endif /* __OSMO_GMR1_L1_CCCH_H__ */
    int gmr1_ccch_decode(uint8_t *l2, const sbit_t *bits_e, int *conv_rv)
    Stateless GMR-1 CCCH channel decoder.
    Definition: ccch.c:88
    void gmr1_ccch_encode(ubit_t *bits_e, const uint8_t *l2)
    Stateless GMR-1 CCCH channel coder.
    Definition: ccch.c:61
    html/dir_8d7fe3e74f1d95a733af486e7566cca0.js0000644000175000017500000000035014753471227016674 0ustar buildbuildvar dir_8d7fe3e74f1d95a733af486e7566cca0 = [ [ "dkab.c", "dkab_8c.html", "dkab_8c" ], [ "fcch.c", "fcch_8c.html", "fcch_8c" ], [ "nb.c", "nb_8c.html", "nb_8c" ], [ "pi4cxpsk.c", "pi4cxpsk_8c.html", "pi4cxpsk_8c" ] ];html/xch__dc12_8h.html0000644000175000017500000001500114753471227014032 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/xch_dc12.h File Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Osmocom GMR-1 xCH over DC12 channel coding header. More...

    #include <stdint.h>
    #include <osmocom/core/bits.h>

    Go to the source code of this file.

    Functions

    int gmr1_xch_dc12_encode (ubit_t *bits_e, const uint8_t *l2)
     Stateless GMR-1 xCH over DC12 channel coder. More...
     
    int gmr1_xch_dc12_decode (uint8_t *l2, const sbit_t *bits_e, int *conv_rv)
     Stateless GMR-1 xCH over DC12 channel decoder. More...
     

    Detailed Description

    Osmocom GMR-1 xCH over DC12 channel coding header.

    html/gsmtap_8h.js0000644000175000017500000000016114753471227013244 0ustar buildbuildvar gsmtap_8h = [ [ "gmr1_gsmtap_makemsg", "group__gsmtap.html#gaade0b34d5438103fb3376d6061b0193d", null ] ];html/menu.js0000644000175000017500000001335214753471226012323 0ustar buildbuild/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { function makeTree(data,relPath) { var result=''; if ('children' in data) { result+='
      '; for (var i in data.children) { var url; var link; link = data.children[i].url; if (link.substring(0,1)=='^') { url = link.substring(1); } else { url = relPath+link; } result+='
    • '+ data.children[i].text+''+ makeTree(data.children[i],relPath)+'
    • '; } result+='
    '; } return result; } var searchBox; if (searchEnabled) { if (serverSide) { searchBox='
    '+ '
    '+ '
    '+ ''+ '
    '+ '
    '+ '
    '+ '
    '; } else { searchBox='
    '+ ''+ ''+ ''+ ''+ ''+ '' '' '
    '; } } $('#main-nav').before('
    '+ ''+ ''+ '
    '); $('#main-nav').append(makeTree(menudata,relPath)); $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); if (searchBox) { $('#main-menu').append('
  • '); } var $mainMenuState = $('#main-menu-state'); var prevWidth = 0; if ($mainMenuState.length) { function initResizableIfExists() { if (typeof initResizable==='function') initResizable(); } // animate mobile menu $mainMenuState.change(function(e) { var $menu = $('#main-menu'); var options = { duration: 250, step: initResizableIfExists }; if (this.checked) { options['complete'] = function() { $menu.css('display', 'block') }; $menu.hide().slideDown(options); } else { options['complete'] = function() { $menu.css('display', 'none') }; $menu.show().slideUp(options); } }); // set default menu visibility function resetState() { var $menu = $('#main-menu'); var $mainMenuState = $('#main-menu-state'); var newWidth = $(window).outerWidth(); if (newWidth!=prevWidth) { if ($(window).outerWidth()<768) { $mainMenuState.prop('checked',false); $menu.hide(); $('#searchBoxPos1').html(searchBox); $('#searchBoxPos2').hide(); } else { $menu.show(); $('#searchBoxPos1').empty(); $('#searchBoxPos2').html(searchBox); $('#searchBoxPos2').show(); } prevWidth = newWidth; } } $(window).ready(function() { resetState(); initResizableIfExists(); }); $(window).resize(resetState); } $('#main-menu').smartmenus(); } /* @license-end */ html/dir_7cd3553532f49ae70e5af4297e6b9642.html0000644000175000017500000001325214753471227017005 0ustar buildbuild osmo-gmr: include/osmocom/gmr1 Directory Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    gmr1 Directory Reference

    Directories

    directory  codec
     
    directory  l1
     
    directory  sdr
     

    Files

    file  gsmtap.h [code]
     Osmocom GMR-1 GSMtap helpers header.
     
    html/a5_8h_source.html0000644000175000017500000002451114753471227014173 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/a5.h Source File
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    a5.h
    Go to the documentation of this file.
    1/* GMR-1 A5 Ciphering algorithm */
    2
    3/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
    4 * All Rights Reserved
    5 *
    6 * This program is free software; you can redistribute it and/or modify
    7 * it under the terms of the GNU Affero General Public License as published by
    8 * the Free Software Foundation; either version 3 of the License, or
    9 * (at your option) any later version.
    10 *
    11 * This program is distributed in the hope that it will be useful,
    12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    14 * GNU Affero General Public License for more details.
    15 *
    16 * You should have received a copy of the GNU Affero General Public License
    17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
    18 */
    19
    20#ifndef __OSMO_GMR1_L1_A5_H__
    21#define __OSMO_GMR1_L1_A5_H__
    22
    32#include <stdint.h>
    33
    34#include <osmocom/core/bits.h>
    35
    36
    37void gmr1_a5(int n, uint8_t *key, uint32_t fn, int nbits,
    38 ubit_t *dl, ubit_t *ul);
    39
    40void gmr1_a5_1(uint8_t *key, uint32_t fn, int nbits,
    41 ubit_t *dl, ubit_t *ul);
    42
    43
    46#endif /* __OSMO_GMR1_L1_A5_H__ */
    void gmr1_a5_1(uint8_t *key, uint32_t fn, int nbits, ubit_t *dl, ubit_t *ul)
    Generate a GMR-1 A5/1 cipher stream.
    Definition: a5.c:226
    void gmr1_a5(int n, uint8_t *key, uint32_t fn, int nbits, ubit_t *dl, ubit_t *ul)
    Main method to generate a A5/x cipher stream.
    Definition: a5.c:57
    html/group__l1__prim.html0000644000175000017500000001301014753471227014754 0ustar buildbuild osmo-gmr: Channel coding primitives
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    Channel coding primitives

    Modules

     Convolutional coding
     
     Cyclic Redundancy Check
     
     Interleaving
     
     Puncturing
     
     Scrambling
     

    Detailed Description

    html/pi4cxpsk_8h_source.html0000644000175000017500000011617214753471227015440 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/sdr/pi4cxpsk.h Source File
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    pi4cxpsk.h
    Go to the documentation of this file.
    1/* GMR-1 SDR - pi2-CBPSK, pi4-CBPSK and pi4-CQPSK modulation support */
    2/* See GMR-1 05.004 (ETSI TS 101 376-5-4 V1.2.1) - Section 5.1 & 5.2 */
    3
    4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
    5 * All Rights Reserved
    6 *
    7 * This program is free software; you can redistribute it and/or modify
    8 * it under the terms of the GNU Affero General Public License as published by
    9 * the Free Software Foundation; either version 3 of the License, or
    10 * (at your option) any later version.
    11 *
    12 * This program is distributed in the hope that it will be useful,
    13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    15 * GNU Affero General Public License for more details.
    16 *
    17 * You should have received a copy of the GNU Affero General Public License
    18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
    19 */
    20
    21#ifndef __OSMO_GMR1_SDR_PI4CXPSK_H__
    22#define __OSMO_GMR1_SDR_PI4CXPSK_H__
    23
    33#include <stdint.h>
    34#include <osmocom/core/bits.h>
    35#include <osmocom/dsp/cxvec.h>
    36
    37
    38#define GMR1_MAX_SYM_EBITS 2
    39#define GMR1_MAX_SYNC 4
    40#define GMR1_MAX_SYNC_SYMS 32
    45 short idx;
    47 float mod_phase;
    48 float complex mod_val;
    49};
    50
    53 float rotation;
    54 int nbits;
    57};
    58
    59
    63
    64
    67 int pos;
    68 int len;
    70 struct osmo_cxvec *_ref;
    71};
    72
    75 int pos;
    76 int len;
    77};
    78
    83
    88
    90 int len;
    92 int ebits;
    93
    98};
    99
    100
    101int
    103 struct osmo_cxvec *burst_in, int sps, float freq_shift,
    104 sbit_t *ebits,
    105 int *sync_id_p, float *toa_p, float *freq_err_p);
    106
    107int
    108gmr1_pi4cxpsk_detect(struct gmr1_pi4cxpsk_burst **burst_types, float e_toa,
    109 struct osmo_cxvec *burst_in, int sps, float freq_shift,
    110 int *bt_id_p, int *sync_id_p, float *toa_p);
    111
    112int
    113gmr1_pi4cxpsk_mod_order(struct osmo_cxvec *burst_in, int sps, float freq_shift);
    114
    115int
    116gmr1_pi4cxpsk_mod(struct gmr1_pi4cxpsk_burst *burst_type,
    117 ubit_t *ebits, int sync_id, struct osmo_cxvec *burst_out);
    118
    119
    122#endif /* __OSMO_GMR1_SDR_PI4CXPSK_H__ */
    int gmr1_pi4cxpsk_detect(struct gmr1_pi4cxpsk_burst **burst_types, float e_toa, struct osmo_cxvec *burst_in, int sps, float freq_shift, int *bt_id_p, int *sync_id_p, float *toa_p)
    Try to identify burst type by matching training sequences.
    Definition: pi4cxpsk.c:618
    struct gmr1_pi4cxpsk_modulation gmr1_pi2cbpsk
    pi2-CBPSK modulation description
    Definition: pi4cxpsk.c:77
    int gmr1_pi4cxpsk_demod(struct gmr1_pi4cxpsk_burst *burst_type, struct osmo_cxvec *burst_in, int sps, float freq_shift, sbit_t *ebits, int *sync_id_p, float *toa_p, float *freq_err_p)
    All-in-one pi4-CxPSK demodulation method.
    Definition: pi4cxpsk.c:521
    #define GMR1_MAX_SYM_EBITS
    Max e bits in a symbol.
    Definition: pi4cxpsk.h:38
    int gmr1_pi4cxpsk_mod(struct gmr1_pi4cxpsk_burst *burst_type, ubit_t *ebits, int sync_id, struct osmo_cxvec *burst_out)
    Modulates (currently at 1 sps)
    Definition: pi4cxpsk.c:742
    struct gmr1_pi4cxpsk_modulation gmr1_pi4cqpsk
    pi4-CQPSK modulation description
    Definition: pi4cxpsk.c:110
    #define GMR1_MAX_SYNC
    Max diff. sync seqs
    Definition: pi4cxpsk.h:39
    int gmr1_pi4cxpsk_mod_order(struct osmo_cxvec *burst_in, int sps, float freq_shift)
    Estimates modulation order by comparing power of x^2 vs x^4.
    Definition: pi4cxpsk.c:694
    #define GMR1_MAX_SYNC_SYMS
    Max sym in a sync seq
    Definition: pi4cxpsk.h:40
    struct gmr1_pi4cxpsk_modulation gmr1_pi4cbpsk
    pi4-CBPSK modulation description
    Definition: pi4cxpsk.c:85
    pi4-CxPSK Burst format description
    Definition: pi4cxpsk.h:80
    int guard_pre
    Beginning guard period.
    Definition: pi4cxpsk.h:85
    int guard_post
    End guard period
    Definition: pi4cxpsk.h:87
    struct gmr1_pi4cxpsk_sync * sync[GMR1_MAX_SYNC]
    Sync sequences.
    Definition: pi4cxpsk.h:95
    struct gmr1_pi4cxpsk_data * data
    Data chunks.
    Definition: pi4cxpsk.h:97
    int ebits
    Number of encoded bits.
    Definition: pi4cxpsk.h:92
    struct gmr1_pi4cxpsk_modulation * mod
    Modulation scheme
    Definition: pi4cxpsk.h:82
    int len
    Total len with guard.
    Definition: pi4cxpsk.h:90
    pi4-CxPSK Data segment description
    Definition: pi4cxpsk.h:74
    int len
    Data chunk length
    Definition: pi4cxpsk.h:76
    int pos
    Data chunk position
    Definition: pi4cxpsk.h:75
    pi4-CxPSK modulation description
    Definition: pi4cxpsk.h:52
    struct gmr1_pi4cxpsk_symbol * bits
    Symbols (bit order)
    Definition: pi4cxpsk.h:56
    float rotation
    rotation per symbol
    Definition: pi4cxpsk.h:53
    int nbits
    ebits/sym
    Definition: pi4cxpsk.h:54
    struct gmr1_pi4cxpsk_symbol * syms
    Symbols (sym order)
    Definition: pi4cxpsk.h:55
    pi4-CxPSK symbol description
    Definition: pi4cxpsk.h:44
    ubit_t data[GMR1_MAX_SYM_EBITS]
    Encoded data bits
    Definition: pi4cxpsk.h:46
    float complex mod_val
    e^(1j*mod_phase)
    Definition: pi4cxpsk.h:48
    short idx
    Symbol number
    Definition: pi4cxpsk.h:45
    float mod_phase
    Phase used during mod.
    Definition: pi4cxpsk.h:47
    pi4-CxPSK Synchronization sequence segment description
    Definition: pi4cxpsk.h:66
    struct osmo_cxvec * _ref
    Ref signal
    Definition: pi4cxpsk.h:70
    int len
    Sync Length
    Definition: pi4cxpsk.h:68
    uint8_t syms[GMR1_MAX_SYNC_SYMS]
    Sync Symbols
    Definition: pi4cxpsk.h:69
    int pos
    Sync Position
    Definition: pi4cxpsk.h:67
    html/synth_8c.html0000644000175000017500000001645314753471227013454 0ustar buildbuild osmo-gmr: src/codec/synth.c File Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Osmocom GMR-1 AMBE vocoder speech synthesis. More...

    #include <stdio.h>
    #include <stdint.h>
    #include <math.h>
    #include <string.h>
    #include "private.h"

    Functions

    void ambe_synth_init (struct ambe_synth *synth)
     Initialized Synthesizer state. More...
     
    void ambe_synth_enhance (struct ambe_synth *synth, struct ambe_subframe *sf)
     Apply the spectral magnitude enhancement on the subframe. More...
     
    void ambe_synth_audio (struct ambe_synth *synth, int16_t *audio, struct ambe_subframe *sf, struct ambe_subframe *sf_prev)
     Generate audio for a given subframe. More...
     

    Detailed Description

    Osmocom GMR-1 AMBE vocoder speech synthesis.

    html/tch3_8h_source.html0000644000175000017500000002605114753471227014530 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/tch3.h Source File
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    tch3.h
    Go to the documentation of this file.
    1/* GMR-1 TCH3 channel coding */
    2/* See GMR-1 05.003 (ETSI TS 101 376-5-3 V1.2.1) - Section 5.1 */
    3
    4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
    5 * All Rights Reserved
    6 *
    7 * This program is free software; you can redistribute it and/or modify
    8 * it under the terms of the GNU Affero General Public License as published by
    9 * the Free Software Foundation; either version 3 of the License, or
    10 * (at your option) any later version.
    11 *
    12 * This program is distributed in the hope that it will be useful,
    13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    15 * GNU Affero General Public License for more details.
    16 *
    17 * You should have received a copy of the GNU Affero General Public License
    18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
    19 */
    20
    21#ifndef __OSMO_GMR1_L1_TCH3_H__
    22#define __OSMO_GMR1_L1_TCH3_H__
    23
    33#include <stdint.h>
    34#include <osmocom/core/bits.h>
    35
    36
    37void gmr1_tch3_encode(ubit_t *bits_e,
    38 const uint8_t *frame0, const uint8_t *frame1,
    39 const ubit_t *bits_s, const ubit_t *ciph, int m);
    40void gmr1_tch3_decode(uint8_t *frame0, uint8_t *frame1, ubit_t *bits_s,
    41 const sbit_t *bits_e, const ubit_t *ciph, int m,
    42 int *conv0_rv, int *conv1_rv);
    43
    44
    47#endif /* __OSMO_GMR1_L1_TCH3_H__ */
    void gmr1_tch3_encode(ubit_t *bits_e, const uint8_t *frame0, const uint8_t *frame1, const ubit_t *bits_s, const ubit_t *ciph, int m)
    Stateless GMR-1 TCH3 channel coder.
    Definition: tch3.c:61
    void gmr1_tch3_decode(uint8_t *frame0, uint8_t *frame1, ubit_t *bits_s, const sbit_t *bits_e, const ubit_t *ciph, int m, int *conv0_rv, int *conv1_rv)
    Stateless GMR-1 TCH3 channel decoder.
    Definition: tch3.c:125
    html/xch__dc12_8h.js0000644000175000017500000000033214753471227013503 0ustar buildbuildvar xch__dc12_8h = [ [ "gmr1_xch_dc12_decode", "group__xch__dc12.html#ga581b9670f04f4a6bf6be69dc78ad2389", null ], [ "gmr1_xch_dc12_encode", "group__xch__dc12.html#ga65507f2a3c6d9b8e681a082ffba157a9", null ] ];html/navtree.js0000644000175000017500000003653514753471227013034 0ustar buildbuild/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ var navTreeSubIndices = new Array(); var arrowDown = '▼'; var arrowRight = '►'; function getData(varName) { var i = varName.lastIndexOf('/'); var n = i>=0 ? varName.substring(i+1) : varName; return eval(n.replace(/\-/g,'_')); } function stripPath(uri) { return uri.substring(uri.lastIndexOf('/')+1); } function stripPath2(uri) { var i = uri.lastIndexOf('/'); var s = uri.substring(i+1); var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); return m ? uri.substring(i-6) : s; } function hashValue() { return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); } function hashUrl() { return '#'+hashValue(); } function pathName() { return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); } function localStorageSupported() { try { return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; } catch(e) { return false; } } function storeLink(link) { if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { window.localStorage.setItem('navpath',link); } } function deleteLink() { if (localStorageSupported()) { window.localStorage.setItem('navpath',''); } } function cachedLink() { if (localStorageSupported()) { return window.localStorage.getItem('navpath'); } else { return ''; } } function getScript(scriptName,func,show) { var head = document.getElementsByTagName("head")[0]; var script = document.createElement('script'); script.id = scriptName; script.type = 'text/javascript'; script.onload = func; script.src = scriptName+'.js'; head.appendChild(script); } function createIndent(o,domNode,node,level) { var level=-1; var n = node; while (n.parentNode) { level++; n=n.parentNode; } if (node.childrenData) { var imgNode = document.createElement("span"); imgNode.className = 'arrow'; imgNode.style.paddingLeft=(16*level).toString()+'px'; imgNode.innerHTML=arrowRight; node.plus_img = imgNode; node.expandToggle = document.createElement("a"); node.expandToggle.href = "javascript:void(0)"; node.expandToggle.onclick = function() { if (node.expanded) { $(node.getChildrenUL()).slideUp("fast"); node.plus_img.innerHTML=arrowRight; node.expanded = false; } else { expandNode(o, node, false, false); } } node.expandToggle.appendChild(imgNode); domNode.appendChild(node.expandToggle); } else { var span = document.createElement("span"); span.className = 'arrow'; span.style.width = 16*(level+1)+'px'; span.innerHTML = ' '; domNode.appendChild(span); } } var animationInProgress = false; function gotoAnchor(anchor,aname,updateLocation) { var pos, docContent = $('#doc-content'); var ancParent = $(anchor.parent()); if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || ancParent.is(':header')) { pos = ancParent.position().top; } else if (anchor.position()) { pos = anchor.position().top; } if (pos) { var dist = Math.abs(Math.min( pos-docContent.offset().top, docContent[0].scrollHeight- docContent.height()-docContent.scrollTop())); animationInProgress=true; docContent.animate({ scrollTop: pos + docContent.scrollTop() - docContent.offset().top },Math.max(50,Math.min(500,dist)),function(){ if (updateLocation) window.location.href=aname; animationInProgress=false; }); } } function newNode(o, po, text, link, childrenData, lastNode) { var node = new Object(); node.children = Array(); node.childrenData = childrenData; node.depth = po.depth + 1; node.relpath = po.relpath; node.isLast = lastNode; node.li = document.createElement("li"); po.getChildrenUL().appendChild(node.li); node.parentNode = po; node.itemDiv = document.createElement("div"); node.itemDiv.className = "item"; node.labelSpan = document.createElement("span"); node.labelSpan.className = "label"; createIndent(o,node.itemDiv,node,0); node.itemDiv.appendChild(node.labelSpan); node.li.appendChild(node.itemDiv); var a = document.createElement("a"); node.labelSpan.appendChild(a); node.label = document.createTextNode(text); node.expanded = false; a.appendChild(node.label); if (link) { var url; if (link.substring(0,1)=='^') { url = link.substring(1); link = url; } else { url = node.relpath+link; } a.className = stripPath(link.replace('#',':')); if (link.indexOf('#')!=-1) { var aname = '#'+link.split('#')[1]; var srcPage = stripPath(pathName()); var targetPage = stripPath(link.split('#')[0]); a.href = srcPage!=targetPage ? url : "javascript:void(0)"; a.onclick = function(){ storeLink(link); if (!$(a).parent().parent().hasClass('selected')) { $('.item').removeClass('selected'); $('.item').removeAttr('id'); $(a).parent().parent().addClass('selected'); $(a).parent().parent().attr('id','selected'); } var anchor = $(aname); gotoAnchor(anchor,aname,true); }; } else { a.href = url; a.onclick = function() { storeLink(link); } } } else { if (childrenData != null) { a.className = "nolink"; a.href = "javascript:void(0)"; a.onclick = node.expandToggle.onclick; } } node.childrenUL = null; node.getChildrenUL = function() { if (!node.childrenUL) { node.childrenUL = document.createElement("ul"); node.childrenUL.className = "children_ul"; node.childrenUL.style.display = "none"; node.li.appendChild(node.childrenUL); } return node.childrenUL; }; return node; } function showRoot() { var headerHeight = $("#top").height(); var footerHeight = $("#nav-path").height(); var windowHeight = $(window).height() - headerHeight - footerHeight; (function (){ // retry until we can scroll to the selected item try { var navtree=$('#nav-tree'); navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); } catch (err) { setTimeout(arguments.callee, 0); } })(); } function expandNode(o, node, imm, showRoot) { if (node.childrenData && !node.expanded) { if (typeof(node.childrenData)==='string') { var varName = node.childrenData; getScript(node.relpath+varName,function(){ node.childrenData = getData(varName); expandNode(o, node, imm, showRoot); }, showRoot); } else { if (!node.childrenVisited) { getNode(o, node); } $(node.getChildrenUL()).slideDown("fast"); node.plus_img.innerHTML = arrowDown; node.expanded = true; } } } function glowEffect(n,duration) { n.addClass('glow').delay(duration).queue(function(next){ $(this).removeClass('glow');next(); }); } function highlightAnchor() { var aname = hashUrl(); var anchor = $(aname); if (anchor.parent().attr('class')=='memItemLeft'){ var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); glowEffect(rows.children(),300); // member without details } else if (anchor.parent().attr('class')=='fieldname'){ glowEffect(anchor.parent().parent(),1000); // enum value } else if (anchor.parent().attr('class')=='fieldtype'){ glowEffect(anchor.parent().parent(),1000); // struct field } else if (anchor.parent().is(":header")) { glowEffect(anchor.parent(),1000); // section header } else { glowEffect(anchor.next(),1000); // normal member } } function selectAndHighlight(hash,n) { var a; if (hash) { var link=stripPath(pathName())+':'+hash.substring(1); a=$('.item a[class$="'+link+'"]'); } if (a && a.length) { a.parent().parent().addClass('selected'); a.parent().parent().attr('id','selected'); highlightAnchor(); } else if (n) { $(n.itemDiv).addClass('selected'); $(n.itemDiv).attr('id','selected'); } var topOffset=5; if (typeof page_layout!=='undefined' && page_layout==1) { topOffset+=$('#top').outerHeight(); } if ($('#nav-tree-contents .item:first').hasClass('selected')) { topOffset+=25; } $('#nav-sync').css('top',topOffset+'px'); showRoot(); } function showNode(o, node, index, hash) { if (node && node.childrenData) { if (typeof(node.childrenData)==='string') { var varName = node.childrenData; getScript(node.relpath+varName,function(){ node.childrenData = getData(varName); showNode(o,node,index,hash); },true); } else { if (!node.childrenVisited) { getNode(o, node); } $(node.getChildrenUL()).css({'display':'block'}); node.plus_img.innerHTML = arrowDown; node.expanded = true; var n = node.children[o.breadcrumbs[index]]; if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); else hash=''; } if (hash.match(/^#l\d+$/)) { var anchor=$('a[name='+hash.substring(1)+']'); glowEffect(anchor.parent(),1000); // line number hash=''; // strip line number anchors } var url=root+hash; var i=-1; while (NAVTREEINDEX[i+1]<=url) i++; if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index if (navTreeSubIndices[i]) { gotoNode(o,i,root,hash,relpath) } else { getScript(relpath+'navtreeindex'+i,function(){ navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); if (navTreeSubIndices[i]) { gotoNode(o,i,root,hash,relpath); } },true); } } function showSyncOff(n,relpath) { n.html(''); } function showSyncOn(n,relpath) { n.html(''); } function toggleSyncButton(relpath) { var navSync = $('#nav-sync'); if (navSync.hasClass('sync')) { navSync.removeClass('sync'); showSyncOff(navSync,relpath); storeLink(stripPath2(pathName())+hashUrl()); } else { navSync.addClass('sync'); showSyncOn(navSync,relpath); deleteLink(); } } var loadTriggered = false; var readyTriggered = false; var loadObject,loadToRoot,loadUrl,loadRelPath; $(window).on('load',function(){ if (readyTriggered) { // ready first navTo(loadObject,loadToRoot,loadUrl,loadRelPath); showRoot(); } loadTriggered=true; }); function initNavTree(toroot,relpath) { var o = new Object(); o.toroot = toroot; o.node = new Object(); o.node.li = document.getElementById("nav-tree-contents"); o.node.childrenData = NAVTREE; o.node.children = new Array(); o.node.childrenUL = document.createElement("ul"); o.node.getChildrenUL = function() { return o.node.childrenUL; }; o.node.li.appendChild(o.node.childrenUL); o.node.depth = 0; o.node.relpath = relpath; o.node.expanded = false; o.node.isLast = true; o.node.plus_img = document.createElement("span"); o.node.plus_img.className = 'arrow'; o.node.plus_img.innerHTML = arrowRight; if (localStorageSupported()) { var navSync = $('#nav-sync'); if (cachedLink()) { showSyncOff(navSync,relpath); navSync.removeClass('sync'); } else { showSyncOn(navSync,relpath); } navSync.click(function(){ toggleSyncButton(relpath); }); } if (loadTriggered) { // load before ready navTo(o,toroot,hashUrl(),relpath); showRoot(); } else { // ready before load loadObject = o; loadToRoot = toroot; loadUrl = hashUrl(); loadRelPath = relpath; readyTriggered=true; } $(window).bind('hashchange', function(){ if (window.location.hash && window.location.hash.length>1){ var a; if ($(location).attr('hash')){ var clslink=stripPath(pathName())+':'+hashValue(); a=$('.item a[class$="'+clslink.replace(/ osmo-gmr: Globals
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
     

    - a -

    - g -

    html/dir_85d85a69dfdae3508530486760177413.js0000644000175000017500000000137414753471227016236 0ustar buildbuildvar dir_85d85a69dfdae3508530486760177413 = [ [ "a5.h", "a5_8h.html", "a5_8h" ], [ "bcch.h", "bcch_8h.html", "bcch_8h" ], [ "ccch.h", "ccch_8h.html", "ccch_8h" ], [ "conv.h", "conv_8h.html", "conv_8h" ], [ "crc.h", "crc_8h.html", "crc_8h" ], [ "defs.h", "l1_2defs_8h.html", null ], [ "facch3.h", "facch3_8h.html", "facch3_8h" ], [ "facch9.h", "facch9_8h.html", "facch9_8h" ], [ "interleave.h", "interleave_8h.html", "interleave_8h" ], [ "punct.h", "punct_8h.html", "punct_8h" ], [ "rach.h", "rach_8h.html", "rach_8h" ], [ "scramb.h", "scramb_8h.html", "scramb_8h" ], [ "tch3.h", "tch3_8h.html", "tch3_8h" ], [ "tch9.h", "tch9_8h.html", "tch9_8h" ], [ "xch_dc12.h", "xch__dc12_8h.html", "xch__dc12_8h" ] ];html/globals_defs.html0000644000175000017500000001076414753471227014340 0ustar buildbuild osmo-gmr: Globals
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
     
    html/ambe_8c.html0000644000175000017500000001742414753471227013212 0ustar buildbuild osmo-gmr: src/codec/ambe.c File Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Osmocom GMR-1 AMBE internal API. More...

    #include <errno.h>
    #include <math.h>
    #include <stdint.h>
    #include <string.h>
    #include "private.h"

    Functions

    void ambe_decode_init (struct ambe_decoder *dec)
     Initializes decoder state. More...
     
    void ambe_decode_fini (struct ambe_decoder *dec)
     Release all resources associated with a decoder. More...
     
    int ambe_decode_frame (struct ambe_decoder *dec, int16_t *audio, int N, const uint8_t *frame, int bad)
     Decodes an AMBE frame to audio. More...
     
    int ambe_decode_dtx (struct ambe_decoder *dec, int16_t *audio, int N)
     Generates audio for DTX period. More...
     

    Detailed Description

    Osmocom GMR-1 AMBE internal API.

    html/structtone__desc.html0000644000175000017500000001427314753471227015262 0ustar buildbuild osmo-gmr: tone_desc Struct Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Structure describing a dual-frequency tone. More...

    Data Fields

    char * name
     Tone description.
     
    int f1
     Frequency 1 (Hz)
     
    int f2
     Frequency 2 (Hz)
     

    Detailed Description

    Structure describing a dual-frequency tone.


    The documentation for this struct was generated from the following file:
    html/form_2.png0000644000175000017500000001031414753471227012707 0ustar buildbuild‰PNG  IHDRC0®™GøiCCPdefault_gray.iccH‰•y4ÔýÇ¿¿ßoöÅ23ÆÎXÇ’5Ë ËÛX²¯©hì[Œ]JI*”’d+‘E›%m’RQhF¡<¥E*•GÝ{νçÞÓ¹çÜ×9Ÿó~ýñýœó9ï¾à+Á2°±qI|{¶¿ŸüÁ¼Äx¶››3ø-ŸFô3ïkýþÍoA‡„&ò–³ky6óâùI@VË®–šÿÓ#–¶!ú—gþôh/βïGúçîO”Øü¤È°Ð4†çÆ°¤Ô`~(#ÑžœÎàr8 7þưȘÐÿãºÿARhZÒÏälŒOçG†G$1þë }]=øW§¼~uÑÿ³çŸð’ù)ÿ0Ô¯nr@ ¨- Œ°¶À¸/àÖˆ±€RA&ØrA>Ø‚rPjAhgA;¸®› Ü#à €IðÌO`‚ ,D†¨$$©@š>Ä‚, [Èò€ü¡ (Šƒ’¡Lh;”AåP5Ô.@× ÛÐô‡f ÷ÐWI0 –…Ua˜³a'Ø ^ ‡Ã pœï…Káø$Ü_ƒûàX¿†ç€:¢€h!,„ƒ¸"HÂG¶ yH Rƒ4#H/r ³ÈEE1PZ(3”ÊÅC% ¶  P娨6Tê>j5‡ú&£eКhS4í‡G§¢sÑ%è:t+úz=‰þ„Á`è&Æã€ñÇDa6a 0‡1-˜.Ìf3Åb%±šXs¬+6›„ÍÅ–aOb¯b‡±“ØÏ8"N§³ÃàâpÙ¸\#î n7…[Ä‹àUð¦xW|>_ˆ¯Åwâñ“øE‚(I0'x¢Û¥„f ÂSÂ"‘¨H4!º#‰[‰¥ÄÓÄ[Äqâ…¤AâIɤ½¤zRéé™LV%[‘ÈIä½äòuòsòg!ª¶W(D(K¨B¨MhXè0^XE˜-¼N8C¸Døœð ð¬^DU„#,²E¤Bä‚Șȼ(UTOÔU4V´@´Qô¶è4KQ¥ØRB(9”c”ë” *BU¢r¨<êvj-õu’†¡1i\Z-ŸvŠ6@›£ˆˆùˆ¥‰Uˆ]к*K¡ÒÏÒGé_ÅeÅÙâ¡â»Å›Å‡Å$¤%¬$B%ò$Z$F$¾J2$m%£%÷K¶K>“BIiH¹K¥J‘º!5+M“6“æIçIŸ•~,ËhÈxÈl’9&Ó/3/+'k//[&{]vVŽ.g%%W,wEnFž*o!)_,UþCŒÁfÄ0J=Œ9…d…j……EE¦¢·b¶b‹â3%‚K)L©X©[iNY^ÙE9S¹Iù± ^…¥¡rH¥WeA•©ê«ºSµ]uš)Áä23˜M̧jd5Kµµµêu–z´úaõ{°†¡F„F…Æ &¬i¤©yXshz…ÉŠ¸5+Æ´HZl­­&­qmº¶³v¶v»öeý:½:?t uctkuŸèQôõ²õ:õÞëkèóô+ô¬$¯´[™µ²cå;MƒPƒ# ©†.†; » ¿ñšfŒ•ƒŒ+ÇX4–«€uËmbm’erÉä‹©‘i’éYÓ·fZfÑffÓ«˜«BWÕ®š0W46¯6X0,‚,ŽZ,,ƒ-k,_X)Y…XÕYM±ÕÙQì“ì7ÖºÖ|ëVëŽ)g3§Ë±±·É³°¥ØzÛ–Û>·S´ ·k²›³7´ßdßå€vprØï0Æ•åò¸ Ü9GcÇÍŽ=N$'O§r§ÎÎ|çNØÅÑå€ËÓÕ*«ãV·»W®ë×gnL··‹îw7÷ ÷—z™½žTÏõžžŸ¼¬½ ½žx«y'{wûûú4ø,øÚøù ütü6ûõùKùGúw`|êæ×Ø®9¸f2Ð007pt-smÚÚÛë¤ÖŬ»¼^x}ðúsAè ß Æ oÁ®Á5Áó¸*7Ìñ8¼C¼×!V!Å!3¡æ¡E¡SaæaEaÓáæáÂg",#J"f#9‘å‘ª¢¢]£ë£—b|cZbq±A±â(qÑq=å6¦mŠ×ŒÏ$˜&L˜ã;ñë¡Äµ‰I´åª?Y-yGòxŠEJEÊçTŸÔsi¢iqiýéé»Ó§2ì2ŽoBmâmêÎTÈÜ–9¾™½¹z ´eÖî,¥¬œ¬É­ö[Ol#l‹Þv7[7»(ûãvßí9²9[s&vØïhÊÊåçŽí4ÛYµ µ+r×Àî•»ËvÿÈ É»“¯›_’ÿ­€WpgÞžÒ=K{Ãöهٷot¿åþE¢EE\´3ŠóŠ?\ðv‰AIÕ!¡äC‚RçÒŽ2å²}eßÊ#ÊG*¬+Z*e*wW.9<|ÄêHs•lU~Õ×£‘GVÛW·Õ¨Ö”ÃK9ö²Ö§¶÷8ëxCT]~Ý÷ú¸zÁ = Æ 2…MpSrÓÌÉÀ“÷NÙœêhÖj®n¡·äŸ§“O¿:tfô¬ÓÙîs¬sÍçUÎW¶R[óÚ ¶ô¶¹öˆvA‡ÇÐÇ Ýf­µ/Ö_R¸TqYìrá•œ+KW3®ÎwÅwÍ^ ¿6ѽ¾ûÉu¿ëzÜ{n8ݸuÓîæõ^vïÕ[æ·.Ý6½}áëN{ŸQ_[¿aë]û­FmƒÆƒ÷Lîu­º2l9|í¾Íý›¸úFV z> < y8ý(æÑ»Ç)Ÿl}Š~š÷LäYÉs™ç5¨ÿÑ"0\·ïáùâÉoâõŸ‰~›ÌyI~Y2%?Õ0­?}iÆnæÞ«5¯&_Ç¿^œÍýKô¯Ê7joοµzÛ?ç77ùŽÿné}ÁÉõ >vÏ»Í?ÿûiq!ï³äç_X_z¿ú~ZLý†ýVú]ý{ç§O—b—–þ/Þoàê‹oÀ pHYs¯¯^‘ tEXtSoftwareGPL Ghostscript 10.00.0·Ü0qNIDAThí[Ù•¤8ŒÙ7hMP› 1Amc‚Ú• `˜&À„ÂaBìPˆ»Ž¦ggvã§8S©”yˆúFüñׯVàÀ—Ø0ûñ­|)~dãñ÷/h/Kª/håkáÞ`†ã/°aqqâüVE[4PÑÓ¯ ÷®Ôp³qéém<Žkäè”öÏKˆåðò·Óýò;ÜÙM<ŸFÍ›Ÿñ.òîàtfWyrÏà­õÞä ã[ÿpÀù|Ø^Ì¿Ñ„èæ_óŠnÊ|\¬ÛðÛä쵉š´ö¥÷_@û ¨…DÛ¨ùš }ë30YÖ½¿Â–Ó'Ÿg]’”ÑkïO`¯<O^aIæIšjú€—æA|jm>ž*E’\1‘“JÞAŽüø¡{a“y’1ÉÊ’¤×#z?¨ÀܙǨÈUêOŒE¢OŒ¬}èñ«p]—*Ä2^;r1±wÛˆ‡™Ý5Ñ.ûø™ÓÐã±¥œÚx3bsâ±`Î{’z<ž ƒ7Éùb®v;/IJ}» $I.}J]/£Wó‹j<9ùѦ—Kºq31i# nÕí€ý[ë^™w]ãE˜¹|d€P%Ùˆí™ë¤VXºŒ«ð$+º\½œaX¸qˆE:¸xsâ:ܦ¡¿ß·Ä$i†9Ôí\Höˆ=ÉŠ$¯²ŸÃ!Å爹²–%é•'éÕ«AâïiÀÊV7£Ñ¸sÃì`ÎÇ9vÍŸ«à$µ½Vݯí8ó †KvÓ0¶ž$S¼Èb|ÿ‘JmÞ¢ÇèD#ÜÍŒBÏ.`×i˜p^š®ÙX7ùgΊKK’º[RØšwÁcìÂ"±®¥ÁkrÇÖST˜‡/zï]º-ßisè®SæÌ%HÎj°Ma@Þh¹Ý¢ì¦\;,›ð•#ý‹,  ½SÓèíçæ"Õ슪7{:Р6½ˆ¾5  ½ÄHƇ$ÚE®×;¿4RÝû †Ö±J°h/B×IÙݨÓTd›Ôã —ºE¹]ã©ûžZ5â Å4—¶ÆE؉ÅÅMÒZ¯ÂÔ¯ì6xfÝ™×zæ—ý”iìÖê2¢"iI£<ÉTT¤v$©GƉ—ìÓ‰ôJi-µ–Zkão·vh.`óJÜî«{ÄU¬\”[:s ×ñ¡½=e'6ób#¬u°$0ò”V¬:ä£Ý솽È(%]LN_ï9°@’œû‰GàvœJ¼2c®û Gþ…æ=x›MŠ,Šøõe\} m-ˆnptI|4Ô^-¤Y+”z¶*Êi!*lep½9^ÆÏ![ÑüF‡[¨ïm’¿•}èDa7’ÒÚ^Ê&Kˆzàw…ÚؤJí¥½H¥”1&ü^ϸ7lp»W?§.b¤ÉiïVÂÓÛ^r®ÀöÅ-ð]¤0I’@›…ûoYQ…Uã4 &E PƒXfuSdn³°Š,P‡7çÚªr]N=±¡šä•šj±¶Cu8%’^tÑû„ ò$¯k„èGŽp×;h^I:dk3>œˆŒRÒ†Ìf÷Rˆ€ÆaóCØáC±Òþ|ˆflX'NÈÖL/$@ÛjQßÆ«ÌèÔ“1ÚÙóñ­ÅÎ$—`Ó*LB´ÏB¡VÚ?œ†@ÿƒEÖEÀ†õ%ïê«äf{C$ LÛ±ñ‚8u¢ÔTd&%¦‹¹Þ'ž¦ÿ-¡òÎN›].ÅìÚÖH•kKùˆ»$ bRŽÙ”ÞÜX7]|XE$U"B¯ Fç‚u=é…!iƒÄu?“½åÒ)܆bey³^á×¢S/Ê~È—+H¦½nC²Õ/+­³]tlUœ]‘NÆÖåÖºc0™ÂqðºýÑ-°öʦæΚüîLÒnñ[º«µ„Þ«ëKðVsÐHåÝ%’¤s×Ù¡÷ôÎMº'Ö"’ôÝœšÜÍR&5wwdQw&õ–GÒO•ù y³¡Û\¶/Aß_¥ŠöÛ÷;9Ú&òœœ,rKÌjžwˆ®~Ø×m´ÄûÀjn¡ø–¬Súaî’4Ea¶‰\`£™â©æÞåôMϘ†»Ùi€y~TtûèML7‘Í–7’OJ-*®î~&î ˆ«È¥Ûí1­;_·b?oR’§ÛÐÜOˆG¨Ü%¹¨;›Í8ã ¶ÝÙ_þT¸ÅÎÙóˆÿìd¶‰Ü%›kXÍi5ê¦õÙßνôuÚ »eµ´ï]¦§éç–͆Î=cÿ>é V1ÿè賺ó£¯ÁõIÌéßp¾é­~{ »?§ÿ·"Κã‡~K”eRÿW¿Çþ¼E=ÏžÿŸ¼>¡Ø÷/ÀE ™ÝùÿOî]Ÿµ‹ô Qd· »/ø¯™Šßÿ osmo-gmr: Scrambling
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Files

    file  scramb.h
     Osmocom GMR-1 scrambling header.
     
    file  scramb.c
     Osmocom GMR-1 scrambling implementation.
     

    Macros

    #define GMR1_SCRAMBLE_REG_INIT   0x4d4b
     

    Functions

    void gmr1_scramble_sbit (sbit_t *out, const sbit_t *in, int len)
     Scrambles/Unscrambles a softbit vector. More...
     
    void gmr1_scramble_ubit (ubit_t *out, const ubit_t *in, int len)
     Scrambles/Unscrambles an unpacked hard bit vector. More...
     

    Detailed Description

    Function Documentation

    ◆ gmr1_scramble_sbit()

    void gmr1_scramble_sbit ( sbit_t *  out,
    const sbit_t *  in,
    int  len 
    )

    Scrambles/Unscrambles a softbit vector.

    Parameters
    [out]outoutput sbit_t array
    [in]ininput sbit_t array
    [in]lenlength of the array to convert

    The output array can be equal to the input array for in-place scrambling/unscrambling

    Referenced by gmr1_bcch_decode(), gmr1_ccch_decode(), gmr1_facch3_decode(), gmr1_facch9_decode(), gmr1_rach_decode(), gmr1_tch3_decode(), and gmr1_xch_dc12_decode().

    ◆ gmr1_scramble_ubit()

    void gmr1_scramble_ubit ( ubit_t *  out,
    const ubit_t *  in,
    int  len 
    )

    Scrambles/Unscrambles an unpacked hard bit vector.

    Parameters
    [out]outoutput ubit_t array
    [in]ininput ubit_t array
    [in]lenlength of the array to convert

    The output array can be equal to the input array for in-place scrambling/unscrambling

    html/group__l1__prim.js0000644000175000017500000000053714753471227014436 0ustar buildbuildvar group__l1__prim = [ [ "Convolutional coding", "group__conv.html", "group__conv" ], [ "Cyclic Redundancy Check", "group__crc.html", "group__crc" ], [ "Interleaving", "group__interleave.html", "group__interleave" ], [ "Puncturing", "group__punct.html", "group__punct" ], [ "Scrambling", "group__scramb.html", "group__scramb" ] ];html/annotated_dup.js0000644000175000017500000000254614753471227014210 0ustar buildbuildvar annotated_dup = [ [ "ambe_decoder", "structambe__decoder.html", "structambe__decoder" ], [ "ambe_raw_params", "structambe__raw__params.html", "structambe__raw__params" ], [ "ambe_subframe", "structambe__subframe.html", "structambe__subframe" ], [ "ambe_synth", "structambe__synth.html", "structambe__synth" ], [ "chan_desc", "structchan__desc.html", null ], [ "gmr1_codec", "structgmr1__codec.html", "structgmr1__codec" ], [ "gmr1_fcch_burst", "structgmr1__fcch__burst.html", "structgmr1__fcch__burst" ], [ "gmr1_interleaver", "structgmr1__interleaver.html", "structgmr1__interleaver" ], [ "gmr1_pi4cxpsk_burst", "structgmr1__pi4cxpsk__burst.html", "structgmr1__pi4cxpsk__burst" ], [ "gmr1_pi4cxpsk_data", "structgmr1__pi4cxpsk__data.html", "structgmr1__pi4cxpsk__data" ], [ "gmr1_pi4cxpsk_modulation", "structgmr1__pi4cxpsk__modulation.html", "structgmr1__pi4cxpsk__modulation" ], [ "gmr1_pi4cxpsk_symbol", "structgmr1__pi4cxpsk__symbol.html", "structgmr1__pi4cxpsk__symbol" ], [ "gmr1_pi4cxpsk_sync", "structgmr1__pi4cxpsk__sync.html", "structgmr1__pi4cxpsk__sync" ], [ "gmr1_puncturer", "structgmr1__puncturer.html", "structgmr1__puncturer" ], [ "tch3_state", "structtch3__state.html", null ], [ "tch9_state", "structtch9__state.html", null ], [ "tone_desc", "structtone__desc.html", "structtone__desc" ] ];html/classes.html0000644000175000017500000001320614753471227013343 0ustar buildbuild osmo-gmr: Data Structure Index
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    html/structgmr1__pi4cxpsk__sync.js0000644000175000017500000000061614753471227016651 0ustar buildbuildvar structgmr1__pi4cxpsk__sync = [ [ "_ref", "structgmr1__pi4cxpsk__sync.html#a291c9b0776495cfb3c3f3a2fb4f87333", null ], [ "len", "structgmr1__pi4cxpsk__sync.html#a67853f80e05c48b01dad6e7f7bc6e39a", null ], [ "pos", "structgmr1__pi4cxpsk__sync.html#adabd2c21518c2bd6e37d4a8ad7facc6b", null ], [ "syms", "structgmr1__pi4cxpsk__sync.html#a89f2352b308757e77cab30d1153fdb8b", null ] ];html/facch3_8c.html0000644000175000017500000001550214753471227013430 0ustar buildbuild osmo-gmr: src/l1/facch3.c File Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Osmocom GMR-1 FACCH3 channel coding implementation. More...

    #include <stdint.h>
    #include <string.h>
    #include <osmocom/core/bits.h>
    #include <osmocom/core/conv.h>
    #include <osmocom/core/crc16gen.h>
    #include <osmocom/gmr1/l1/conv.h>
    #include <osmocom/gmr1/l1/crc.h>
    #include <osmocom/gmr1/l1/interleave.h>
    #include <osmocom/gmr1/l1/scramb.h>

    Functions

    void gmr1_facch3_encode (ubit_t *bits_e, const uint8_t *l2, const ubit_t *bits_s, const ubit_t *ciph)
     Stateless GMR-1 FACCH3 channel coder. More...
     
    int gmr1_facch3_decode (uint8_t *l2, ubit_t *bits_s, const sbit_t *bits_e, const ubit_t *ciph, int *conv_rv)
     Stateless GMR-1 FACCH3 channel decoder. More...
     

    Detailed Description

    Osmocom GMR-1 FACCH3 channel coding implementation.

    html/structgmr1__codec.html0000644000175000017500000001217214753471227015316 0ustar buildbuild osmo-gmr: gmr1_codec Struct Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    gmr1_codec Struct Reference

    Structure for GMR1 codec state. More...

    Data Fields

    struct ambe_decoder dec
     Decoder state.
     

    Detailed Description

    Structure for GMR1 codec state.


    The documentation for this struct was generated from the following file:
    html/xch__dc12_8c.html0000644000175000017500000001563714753471227014044 0ustar buildbuild osmo-gmr: src/l1/xch_dc12.c File Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Osmocom GMR-1 xCH over DC12 channel coding implementation. More...

    #include <stdint.h>
    #include <string.h>
    #include <osmocom/core/bits.h>
    #include <osmocom/core/conv.h>
    #include <osmocom/core/crc16gen.h>
    #include <osmocom/gmr1/l1/conv.h>
    #include <osmocom/gmr1/l1/crc.h>
    #include <osmocom/gmr1/l1/interleave.h>
    #include <osmocom/gmr1/l1/punct.h>
    #include <osmocom/gmr1/l1/scramb.h>

    Functions

    int gmr1_xch_dc12_encode (ubit_t *bits_e, const uint8_t *l2)
     Stateless GMR-1 xCH over DC12 channel coder. More...
     
    int gmr1_xch_dc12_decode (uint8_t *l2, const sbit_t *bits_e, int *conv_rv)
     Stateless GMR-1 xCH over DC12 channel decoder. More...
     

    Detailed Description

    Osmocom GMR-1 xCH over DC12 channel coding implementation.

    html/nav_h.png0000644000175000017500000000014214753471226012613 0ustar buildbuild‰PNG  IHDR ,é@)IDATxíÝA @BQ­³šÛ›Ð¢Žáà) )ëý éaÅèÜ¿Æo‡RlÐßIEND®B`‚html/group__punct.js0000644000175000017500000002375414753471227014073 0ustar buildbuildvar group__punct = [ [ "punct.h", "punct_8h.html", null ], [ "punct.c", "punct_8c.html", null ], [ "gmr1_puncturer", "structgmr1__puncturer.html", [ [ "L", "structgmr1__puncturer.html#a56ab639ebbf577886ec36db783b8ef34", null ], [ "mask", "structgmr1__puncturer.html#af98900595177fbe9bf6c08ee652ab739", null ], [ "N", "structgmr1__puncturer.html#a4badcb8ada6378bfe224de9ccd9f193f", null ], [ "r", "structgmr1__puncturer.html#a6bad988cd142c8d0e30bfe457fd2c062", null ] ] ], [ "gmr1_puncturer_generate", "group__punct.html#ga95a97b9c89435bf6826fdeb21d881ff2", null ], [ "gmr1_punct_k5_12_A", "group__punct.html#ga6b3c25e254784f342165a138f7b000a4", null ], [ "gmr1_punct_k5_12_A", "group__punct.html#ga6b3c25e254784f342165a138f7b000a4", null ], [ "gmr1_punct_k5_12_B", "group__punct.html#ga5fba7e4ebdfdf45715b68bc77ad55b56", null ], [ "gmr1_punct_k5_12_B", "group__punct.html#ga5fba7e4ebdfdf45715b68bc77ad55b56", null ], [ "gmr1_punct_k5_12_C", "group__punct.html#ga3d7fe225e1e537f88f58220d8dd68076", null ], [ "gmr1_punct_k5_12_C", "group__punct.html#ga3d7fe225e1e537f88f58220d8dd68076", null ], [ "gmr1_punct_k5_12_D", "group__punct.html#gad04e1754667748acd42c3fb6867dc09d", null ], [ "gmr1_punct_k5_12_D", "group__punct.html#gad04e1754667748acd42c3fb6867dc09d", null ], [ "gmr1_punct_k5_12_E", "group__punct.html#ga94c4d51e0dfe595be3d2505f64c3ea5c", null ], [ "gmr1_punct_k5_12_E", "group__punct.html#ga94c4d51e0dfe595be3d2505f64c3ea5c", null ], [ "gmr1_punct_k5_12_P12", "group__punct.html#gaa8bce8b6ca73fc45c3c0c596037c1849", null ], [ "gmr1_punct_k5_12_P12", "group__punct.html#gaa8bce8b6ca73fc45c3c0c596037c1849", null ], [ "gmr1_punct_k5_12_P23", "group__punct.html#gaa03eb3f46b3027767323ccc546414c5b", null ], [ "gmr1_punct_k5_12_P23", "group__punct.html#gaa03eb3f46b3027767323ccc546414c5b", null ], [ "gmr1_punct_k5_12_P25", "group__punct.html#gabea6708a946be5c940ac734ef6a0238f", null ], [ "gmr1_punct_k5_12_P25", "group__punct.html#gabea6708a946be5c940ac734ef6a0238f", null ], [ "gmr1_punct_k5_12_P26", "group__punct.html#gac052cb5f0bd3f9f828b1c23d03ea4f22", null ], [ "gmr1_punct_k5_12_P26", "group__punct.html#gac052cb5f0bd3f9f828b1c23d03ea4f22", null ], [ "gmr1_punct_k5_12_P311", "group__punct.html#ga77ed0b501d05b89717919e77cb66f55c", null ], [ "gmr1_punct_k5_12_P311", "group__punct.html#ga77ed0b501d05b89717919e77cb66f55c", null ], [ "gmr1_punct_k5_12_P37", "group__punct.html#ga04fe577ed7854a24812ccc020b7777cc", null ], [ "gmr1_punct_k5_12_P37", "group__punct.html#ga04fe577ed7854a24812ccc020b7777cc", null ], [ "gmr1_punct_k5_12_P38", "group__punct.html#gadd9a431fb84f6c100472f428642cece3", null ], [ "gmr1_punct_k5_12_P38", "group__punct.html#gadd9a431fb84f6c100472f428642cece3", null ], [ "gmr1_punct_k5_12_P412", "group__punct.html#gae61e6323084580be44337702851f0560", null ], [ "gmr1_punct_k5_12_P412", "group__punct.html#gae61e6323084580be44337702851f0560", null ], [ "gmr1_punct_k5_12_Ps12", "group__punct.html#gaf6f62025e6ad2089904f214fea702a49", null ], [ "gmr1_punct_k5_12_Ps12", "group__punct.html#gaf6f62025e6ad2089904f214fea702a49", null ], [ "gmr1_punct_k5_12_Ps25", "group__punct.html#gaecda3c501174763dac7c5c646ea44690", null ], [ "gmr1_punct_k5_12_Ps25", "group__punct.html#gaecda3c501174763dac7c5c646ea44690", null ], [ "gmr1_punct_k5_12_Ps412", "group__punct.html#ga134d1e54bfe1d47a0841e6dbe9b27cd8", null ], [ "gmr1_punct_k5_12_Ps412", "group__punct.html#ga134d1e54bfe1d47a0841e6dbe9b27cd8", null ], [ "gmr1_punct_k5_13_P15", "group__punct.html#ga8f444be2364421750572d3b2b3e4d442", null ], [ "gmr1_punct_k5_13_P15", "group__punct.html#ga8f444be2364421750572d3b2b3e4d442", null ], [ "gmr1_punct_k5_13_P16", "group__punct.html#ga6288534135f6da5447232a7b5337448f", null ], [ "gmr1_punct_k5_13_P16", "group__punct.html#ga6288534135f6da5447232a7b5337448f", null ], [ "gmr1_punct_k5_13_P25", "group__punct.html#ga9118d1c2fa81fdaf5f15ffc633e66a88", null ], [ "gmr1_punct_k5_13_P25", "group__punct.html#ga9118d1c2fa81fdaf5f15ffc633e66a88", null ], [ "gmr1_punct_k5_13_P78", "group__punct.html#gaa4798a84b9662a863f7cfeaa6206aba5", null ], [ "gmr1_punct_k5_13_P78", "group__punct.html#gaa4798a84b9662a863f7cfeaa6206aba5", null ], [ "gmr1_punct_k5_13_Ps15", "group__punct.html#gaa4d4874e4d1a51d70b1d67113f0bfeb2", null ], [ "gmr1_punct_k5_13_Ps15", "group__punct.html#gaa4d4874e4d1a51d70b1d67113f0bfeb2", null ], [ "gmr1_punct_k5_15_P23", "group__punct.html#ga9d6d7b1b48148bb4cc4678790a68b5ff", null ], [ "gmr1_punct_k5_15_P23", "group__punct.html#ga9d6d7b1b48148bb4cc4678790a68b5ff", null ], [ "gmr1_punct_k5_15_P53", "group__punct.html#ga0c42fa663dd288c81566d1616420e3fb", null ], [ "gmr1_punct_k5_15_P53", "group__punct.html#ga0c42fa663dd288c81566d1616420e3fb", null ], [ "gmr1_punct_k5_15_Ps53", "group__punct.html#ga589d0f7c6ab25753c32664969414f1fd", null ], [ "gmr1_punct_k5_15_Ps53", "group__punct.html#ga589d0f7c6ab25753c32664969414f1fd", null ], [ "gmr1_punct_k6_14_P45", "group__punct.html#ga780e4af9db89c4bb51808bd2a35fa593", null ], [ "gmr1_punct_k6_14_P45", "group__punct.html#ga780e4af9db89c4bb51808bd2a35fa593", null ], [ "gmr1_punct_k7_12_P1152", "group__punct.html#gafecfb0fbfb4f49c8a370362b98bb5aff", null ], [ "gmr1_punct_k7_12_P1152", "group__punct.html#gafecfb0fbfb4f49c8a370362b98bb5aff", null ], [ "gmr1_punct_k7_12_P116", "group__punct.html#gac001aebb5c9026aa629a95146427736a", null ], [ "gmr1_punct_k7_12_P116", "group__punct.html#gac001aebb5c9026aa629a95146427736a", null ], [ "gmr1_punct_k7_12_P148", "group__punct.html#gad360cd4e2a33eedc63954a5a8731d1ac", null ], [ "gmr1_punct_k7_12_P148", "group__punct.html#gad360cd4e2a33eedc63954a5a8731d1ac", null ], [ "gmr1_punct_k7_12_P184", "group__punct.html#ga642a5293a4366ad2c0eddadc92cac23b", null ], [ "gmr1_punct_k7_12_P184", "group__punct.html#ga642a5293a4366ad2c0eddadc92cac23b", null ], [ "gmr1_punct_k7_12_P23", "group__punct.html#ga97a416384feb6b6e73215576b377faa5", null ], [ "gmr1_punct_k7_12_P23", "group__punct.html#ga97a416384feb6b6e73215576b377faa5", null ], [ "gmr1_punct_k7_12_P245", "group__punct.html#ga6ec3a6b25235d2e5bac464c1f7a1fe85", null ], [ "gmr1_punct_k7_12_P245", "group__punct.html#ga6ec3a6b25235d2e5bac464c1f7a1fe85", null ], [ "gmr1_punct_k7_12_P410", "group__punct.html#ga2db6a1bba45111d8398a77a8ea8dc72d", null ], [ "gmr1_punct_k7_12_P410", "group__punct.html#ga2db6a1bba45111d8398a77a8ea8dc72d", null ], [ "gmr1_punct_k7_12_P45", "group__punct.html#ga0eb3ce9d40905c17c808223aac3a5543", null ], [ "gmr1_punct_k7_12_P45", "group__punct.html#ga0eb3ce9d40905c17c808223aac3a5543", null ], [ "gmr1_punct_k7_12_P512", "group__punct.html#ga069c9fc93f97ac8f81874ad3486d8e2c", null ], [ "gmr1_punct_k7_12_P512", "group__punct.html#ga069c9fc93f97ac8f81874ad3486d8e2c", null ], [ "gmr1_punct_k9_12_P110", "group__punct.html#gaa7ef8a86ffc3fe190ba8e501cc161208", null ], [ "gmr1_punct_k9_12_P110", "group__punct.html#gaa7ef8a86ffc3fe190ba8e501cc161208", null ], [ "gmr1_punct_k9_12_P13", "group__punct.html#ga6de89b61b5d5cd075a2edfa5da3acb8d", null ], [ "gmr1_punct_k9_12_P13", "group__punct.html#ga6de89b61b5d5cd075a2edfa5da3acb8d", null ], [ "gmr1_punct_k9_12_P14", "group__punct.html#ga78cb3a5553a7c084c637e1845049c2a3", null ], [ "gmr1_punct_k9_12_P14", "group__punct.html#ga78cb3a5553a7c084c637e1845049c2a3", null ], [ "gmr1_punct_k9_12_P17", "group__punct.html#ga793c265d459c6c7d263edfd9fa5d82c8", null ], [ "gmr1_punct_k9_12_P17", "group__punct.html#ga793c265d459c6c7d263edfd9fa5d82c8", null ], [ "gmr1_punct_k9_12_P19", "group__punct.html#ga2864cbf423bbdf1aa723b865aa5670cf", null ], [ "gmr1_punct_k9_12_P19", "group__punct.html#ga2864cbf423bbdf1aa723b865aa5670cf", null ], [ "gmr1_punct_k9_12_P234", "group__punct.html#ga2d84992ac096d9b4fe041d0a9aaf33df", null ], [ "gmr1_punct_k9_12_P234", "group__punct.html#ga2d84992ac096d9b4fe041d0a9aaf33df", null ], [ "gmr1_punct_k9_12_P26", "group__punct.html#gaca082b213957ed2b9f2ea17c74ff76c5", null ], [ "gmr1_punct_k9_12_P26", "group__punct.html#gaca082b213957ed2b9f2ea17c74ff76c5", null ], [ "gmr1_punct_k9_12_P34", "group__punct.html#gaf7fd0ce78be41fd48a1509a477ff7c0c", null ], [ "gmr1_punct_k9_12_P34", "group__punct.html#gaf7fd0ce78be41fd48a1509a477ff7c0c", null ], [ "gmr1_punct_k9_12_P45", "group__punct.html#gaac0e2e21cdb173c9f7b8ce64b4fcad3a", null ], [ "gmr1_punct_k9_12_P45", "group__punct.html#gaac0e2e21cdb173c9f7b8ce64b4fcad3a", null ], [ "gmr1_punct_k9_12_P47", "group__punct.html#ga4aefdbb9d3ed87e0e57bff3289700de1", null ], [ "gmr1_punct_k9_12_P47", "group__punct.html#ga4aefdbb9d3ed87e0e57bff3289700de1", null ], [ "gmr1_punct_k9_13_P12", "group__punct.html#ga3221eef995a6154b1a5976b64e17f269", null ], [ "gmr1_punct_k9_13_P12", "group__punct.html#ga3221eef995a6154b1a5976b64e17f269", null ], [ "gmr1_punct_k9_13_P1213", "group__punct.html#ga868634869b605e0b4ab7694d11f816da", null ], [ "gmr1_punct_k9_13_P1213", "group__punct.html#ga868634869b605e0b4ab7694d11f816da", null ], [ "gmr1_punct_k9_13_P33", "group__punct.html#ga5cc77e83e90a1186a931981b40aa9f1e", null ], [ "gmr1_punct_k9_13_P33", "group__punct.html#ga5cc77e83e90a1186a931981b40aa9f1e", null ], [ "gmr1_punct_k9_13_P44", "group__punct.html#ga073c0a4550a5f828a5eac48b9e3ca06c", null ], [ "gmr1_punct_k9_13_P44", "group__punct.html#ga073c0a4550a5f828a5eac48b9e3ca06c", null ], [ "gmr1_punct_k9_13_P65", "group__punct.html#gaa9d92cbd0a8bbeedb9cd7860e3422f17", null ], [ "gmr1_punct_k9_13_P65", "group__punct.html#gaa9d92cbd0a8bbeedb9cd7860e3422f17", null ], [ "gmr1_punct_k9_14_P148", "group__punct.html#gadf567a87a9c00c73dbb132863871c24c", null ], [ "gmr1_punct_k9_14_P148", "group__punct.html#gadf567a87a9c00c73dbb132863871c24c", null ], [ "gmr1_punct_k9_14_P65", "group__punct.html#ga767c7a63fdd42bcf8e9e3b8da7e8dbe7", null ], [ "gmr1_punct_k9_14_P65", "group__punct.html#ga767c7a63fdd42bcf8e9e3b8da7e8dbe7", null ] ];html/dkab_8h.html0000644000175000017500000001472514753471227013215 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/sdr/dkab.h File Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Osmocom GMR-1 DKABs bursts header. More...

    #include <stdint.h>
    #include <osmocom/core/bits.h>
    #include <osmocom/dsp/cxvec.h>

    Go to the source code of this file.

    Macros

    #define GMR1_DKAB_SYMS   (39*3)
     

    Functions

    int gmr1_dkab_demod (struct osmo_cxvec *burst_in, int sps, float freq_shift, int p, sbit_t *ebits, float *toa_p)
     All-in-one finding and demodulation of DKAB bursts. More...
     

    Detailed Description

    Osmocom GMR-1 DKABs bursts header.

    html/conv_8h.html0000644000175000017500000002312314753471227013251 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/conv.h File Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Osmocom GMR-1 convolutional coding header. More...

    #include <osmocom/core/conv.h>

    Go to the source code of this file.

    Variables

    const struct osmo_conv_code gmr1_conv_k5_12
     GMR-1 constraint length 5, rate 1/2 convolutional code.
     
    const struct osmo_conv_code gmr1_conv_k5_13
     GMR-1 constraint length 5, rate 1/3 convolutional code.
     
    const struct osmo_conv_code gmr1_conv_k5_14
     GMR-1 constraint length 5, rate 1/4 convolutional code.
     
    const struct osmo_conv_code gmr1_conv_k5_15
     GMR-1 constraint length 5, rate 1/5 convolutional code.
     
    const struct osmo_conv_code gmr1_conv_k6_14
     GMR-1 constraint length 6, rate 1/4 convolutional code.
     
    const struct osmo_conv_code gmr1_conv_k9_12
     GMR-1 constraint length 9, rate 1/2 convolutional code.
     
    const struct osmo_conv_code gmr1_conv_k9_13
     GMR-1 constraint length 9, rate 1/3 convolutional code.
     
    const struct osmo_conv_code gmr1_conv_k9_14
     GMR-1 constraint length 9, rate 1/4 convolutional code.
     
    const struct osmo_conv_code gmr1_conv_tch3
     GMR-1 TCH3 speech tail-biting convolutional code.
     

    Detailed Description

    Osmocom GMR-1 convolutional coding header.

    html/nb_8h.html0000644000175000017500000002530614753471227012710 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/sdr/nb.h File Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Osmocom GMR-1 Normal bursts header. More...

    Go to the source code of this file.

    Variables

    struct gmr1_pi4cxpsk_burst gmr1_bcch_burst
     BCCH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.2.
     
    struct gmr1_pi4cxpsk_burst gmr1_dc2_burst
     DC2 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.4.
     
    struct gmr1_pi4cxpsk_burst gmr1_dc6_burst
     DC6 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.5.
     
    struct gmr1_pi4cxpsk_burst gmr1_dc12_burst
     DC12 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V3.1.1) - Section 7.4.16.
     
    struct gmr1_pi4cxpsk_burst gmr1_nt3_speech_burst
     NT3 bursts for encoded speech See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.8.1.
     
    struct gmr1_pi4cxpsk_burst gmr1_nt3_facch_burst
     NT3 bursts for FACCH See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.8.2.
     
    struct gmr1_pi4cxpsk_burst gmr1_nt6_burst
     NT6 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.9.
     
    struct gmr1_pi4cxpsk_burst gmr1_nt9_burst
     NT9 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.10.
     
    struct gmr1_pi4cxpsk_burst gmr1_rach_burst
     RACH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.11.
     
    struct gmr1_pi4cxpsk_burst gmr1_sdcch_burst
     SDCCH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.12.
     

    Detailed Description

    Osmocom GMR-1 Normal bursts header.

    html/facch9_8h_source.html0000644000175000017500000002554214753471227015030 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/facch9.h Source File
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    facch9.h
    Go to the documentation of this file.
    1/* GMR-1 FACCH9 channel coding */
    2/* See GMR-1 05.003 (ETSI TS 101 376-5-3 V1.2.1) - Section 6.11 */
    3
    4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
    5 * All Rights Reserved
    6 *
    7 * This program is free software; you can redistribute it and/or modify
    8 * it under the terms of the GNU Affero General Public License as published by
    9 * the Free Software Foundation; either version 3 of the License, or
    10 * (at your option) any later version.
    11 *
    12 * This program is distributed in the hope that it will be useful,
    13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    15 * GNU Affero General Public License for more details.
    16 *
    17 * You should have received a copy of the GNU Affero General Public License
    18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
    19 */
    20
    21#ifndef __OSMO_GMR1_L1_FACCH9_H__
    22#define __OSMO_GMR1_L1_FACCH9_H__
    23
    33#include <stdint.h>
    34#include <osmocom/core/bits.h>
    35
    36
    37void gmr1_facch9_encode(ubit_t *bits_e, const uint8_t *l2,
    38 const ubit_t *bits_sacch, const ubit_t *bits_status,
    39 const ubit_t *ciph);
    40int gmr1_facch9_decode(uint8_t *l2, sbit_t *bits_sacch, sbit_t *bits_status,
    41 const sbit_t *bits_e, const ubit_t *ciph, int *conv_rv);
    42
    43
    46#endif /* __OSMO_GMR1_L1_FACCH9_H__ */
    int gmr1_facch9_decode(uint8_t *l2, sbit_t *bits_sacch, sbit_t *bits_status, const sbit_t *bits_e, const ubit_t *ciph, int *conv_rv)
    Stateless GMR-1 FACCH9 channel decoder.
    Definition: facch9.c:107
    void gmr1_facch9_encode(ubit_t *bits_e, const uint8_t *l2, const ubit_t *bits_sacch, const ubit_t *bits_status, const ubit_t *ciph)
    Stateless GMR-1 FACCH9 channel coder.
    Definition: facch9.c:61
    html/tab_h.png0000644000175000017500000000026114753471226012577 0ustar buildbuild‰PNG  IHDR$ÇÇ[xIDATxíÝMÁ@†áž~¥ÜÆÎ’Evˆ¿"!•²‘d*×rGq=Š{¼ßSݧçë­ÓÉHÇ uO^õø[À_‡¢ãXvyËþÒ±=·VCffææ{°öŠó´Rçœ%_õçÿŽ¢ö·°Çrug¶(?gh\i>|sIEND®B`‚html/bcch_8c.js0000644000175000017500000000030314753471227012641 0ustar buildbuildvar bcch_8c = [ [ "gmr1_bcch_decode", "group__bcch.html#ga73717708a391d84da44845fbaf2e73a4", null ], [ "gmr1_bcch_encode", "group__bcch.html#ga7a8f900d4c5b81ad9a903ee9b7d6b9e7", null ] ];html/tch3_8c.js0000644000175000017500000000030314753471227012603 0ustar buildbuildvar tch3_8c = [ [ "gmr1_tch3_decode", "group__tch3.html#gaab4229c82b06539cdad3d91d1bd05c32", null ], [ "gmr1_tch3_encode", "group__tch3.html#ga3c7e3f769459eff23c1308eefb565ab9", null ] ];html/structgmr1__pi4cxpsk__data.js0000644000175000017500000000033014753471227016577 0ustar buildbuildvar structgmr1__pi4cxpsk__data = [ [ "len", "structgmr1__pi4cxpsk__data.html#a14bc0a4787038e79298c46fa85784f13", null ], [ "pos", "structgmr1__pi4cxpsk__data.html#a8fcd05f64567745c7e7435334f1f593c", null ] ];html/dir_abe9b486a10ccc5afdf8abc29637e0c1.js0000644000175000017500000000022314753471227017136 0ustar buildbuildvar dir_abe9b486a10ccc5afdf8abc29637e0c1 = [ [ "gmr1", "dir_7cd3553532f49ae70e5af4297e6b9642.html", "dir_7cd3553532f49ae70e5af4297e6b9642" ] ];html/structgmr1__puncturer.html0000644000175000017500000001570314753471227016273 0ustar buildbuild osmo-gmr: gmr1_puncturer Struct Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    structure describing a puncturing code More...

    #include <punct.h>

    Data Fields

    int r
     Number of punctured bits.
     
    int L
     Length of the puncturing mask.
     
    int N
     Rate of the punctured convolutional code (1/N)
     
    const uint8_t mask []
     Puncturing mask.
     

    Detailed Description

    structure describing a puncturing code


    The documentation for this struct was generated from the following file:
    html/bdwn.png0000644000175000017500000000022314753471226012452 0ustar buildbuild‰PNG  IHDR5åZIDATxíË € DŸP–1ñlžmÀ r±j².e è†D[ØɾÙÏÔ¼µ¦ã´Þ|陣6€Všë3´Å?Ls'(}¬>+ žKó÷¥¿ch`‚ ^׃ÞnIEND®B`‚html/group__facch3.js0000644000175000017500000000045114753471227014056 0ustar buildbuildvar group__facch3 = [ [ "facch3.h", "facch3_8h.html", null ], [ "facch3.c", "facch3_8c.html", null ], [ "gmr1_facch3_decode", "group__facch3.html#ga8f2a10c4a2203e69460dbf7f8345cd26", null ], [ "gmr1_facch3_encode", "group__facch3.html#gae7fb89197eae0f343d38c3c70b2d6ada", null ] ];html/private_8h_source.html0000644000175000017500000017102114753471227015337 0ustar buildbuild osmo-gmr: src/codec/private.h Source File
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    private.h
    Go to the documentation of this file.
    1/* GMR-1 AMBE vocoder private header */
    2
    3/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
    4 * All Rights Reserved
    5 *
    6 * This program is free software; you can redistribute it and/or modify
    7 * it under the terms of the GNU Affero General Public License as published by
    8 * the Free Software Foundation; either version 3 of the License, or
    9 * (at your option) any later version.
    10 *
    11 * This program is distributed in the hope that it will be useful,
    12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    14 * GNU Affero General Public License for more details.
    15 *
    16 * You should have received a copy of the GNU Affero General Public License
    17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
    18 */
    19
    20#ifndef __OSMO_GMR1_CODEC_PRIVATE_H__
    21#define __OSMO_GMR1_CODEC_PRIVATE_H__
    22
    32#include <stdint.h>
    33
    34
    35#define AMBE_RATE 8000
    40{
    44};
    45
    48{
    49 uint8_t pitch;
    50 uint8_t pitch_interp;
    51 uint8_t gain;
    52 uint8_t v_uv;
    54 uint8_t sf1_prba12;
    55 uint8_t sf1_prba34;
    56 uint8_t sf1_prba57;
    57 uint8_t sf1_hoc[4];
    60 uint8_t sf0_perr_14;
    61 uint8_t sf0_perr_58;
    62};
    63
    66{
    67 float f0;
    68 float f0log;
    69 float w0;
    70 int L;
    71 int Lb[4];
    72 int v_uv[8];
    73 int Vl[56];
    74 float gain;
    75 float Mlog[56];
    76 float Ml[56];
    77};
    78
    81{
    82 int16_t u_prev;
    83 float uw_prev[121];
    84 float psi1;
    85 float phi[56];
    86 float SE;
    87};
    88
    91{
    98};
    99
    100/* From ambe.c */
    101void ambe_decode_init(struct ambe_decoder *dec);
    102void ambe_decode_fini(struct ambe_decoder *dec);
    103
    104int ambe_decode_frame(struct ambe_decoder *dec,
    105 int16_t *audio, int N,
    106 const uint8_t *frame, int bad);
    107int ambe_decode_dtx(struct ambe_decoder *dec,
    108 int16_t *audio, int N);
    109
    110/* From frame.c */
    111void ambe_frame_unpack_raw(struct ambe_raw_params *rp, const uint8_t *frame);
    113 struct ambe_subframe *sf_prev,
    114 struct ambe_raw_params *rp);
    115void ambe_subframe_expand(struct ambe_subframe *sf);
    116
    117/* From math.c */
    118#define M_PIf (3.141592653589793f)
    120float cosf_fast(float angle);
    121float sinf_fast(float angle);
    122void ambe_fdct(float *out, float *in, int N, int M);
    123void ambe_idct(float *out, float *in, int N, int M);
    124void ambe_fdft_fc(float *out_i, float *out_q, float *in, int N, int M);
    125void ambe_idft_cf(float *out, float *in_i, float *in_q, int N, int M);
    126
    127/* From synth.c */
    128void ambe_synth_init(struct ambe_synth *synth);
    129void ambe_synth_enhance(struct ambe_synth *synth, struct ambe_subframe *sf);
    130void ambe_synth_audio(struct ambe_synth *synth, int16_t *audio,
    131 struct ambe_subframe *sf,
    132 struct ambe_subframe *sf_prev);
    133
    134/* From tables.c */
    135extern const uint8_t ambe_hpg_tbl[48][4];
    136extern const float ambe_gain_tbl[256][2];
    137extern const uint16_t ambe_v_uv_tbl[64];
    138extern const float ambe_prba12_tbl[128][2];
    139extern const float ambe_prba34_tbl[64][2];
    140extern const float ambe_prba57_tbl[128][3];
    141extern const float ambe_hoc0_tbl[128][4];
    142extern const float ambe_hoc1_tbl[64][4];
    143extern const float ambe_hoc2_tbl[64][4];
    144extern const float ambe_hoc3_tbl[64][4];
    145extern const float ambe_sf0_interp_tbl[4];
    146extern const float ambe_sf0_perr14_tbl[64][4];
    147extern const float ambe_sf0_perr58_tbl[32][4];
    148
    149/* From tone.c */
    150int ambe_decode_tone(struct ambe_decoder *dec,
    151 int16_t *audio, int N, const uint8_t *frame);
    152
    153
    156#endif /* __OSMO_GMR1_CODEC_PRIVATE_H__ */
    void ambe_idct(float *out, float *in, int N, int M)
    Inverse Discrete Cosine Transform (iDCT)
    Definition: math.c:99
    const float ambe_sf0_perr58_tbl[32][4]
    Prediction Error [5:8] for subframe 0.
    Definition: tables.c:1099
    ambe_frame_type
    AMBE possible frame types.
    Definition: private.h:40
    void ambe_subframe_expand(struct ambe_subframe *sf)
    Expands the decoded subframe params to prepare for synthesis.
    Definition: frame.c:357
    void ambe_synth_init(struct ambe_synth *synth)
    Initialized Synthesizer state.
    Definition: synth.c:297
    const float ambe_prba57_tbl[128][3]
    PRBA[5:7].
    Definition: tables.c:555
    const float ambe_sf0_perr14_tbl[64][4]
    Prediction Error [1:4] for subframe 0.
    Definition: tables.c:1031
    void ambe_frame_decode_params(struct ambe_subframe *sf, struct ambe_subframe *sf_prev, struct ambe_raw_params *rp)
    Decodes the speech parameters for both subframes from raw params.
    Definition: frame.c:309
    void ambe_synth_enhance(struct ambe_synth *synth, struct ambe_subframe *sf)
    Apply the spectral magnitude enhancement on the subframe.
    Definition: synth.c:308
    const float ambe_hoc3_tbl[64][4]
    HOC for last frequency block.
    Definition: tables.c:955
    float cosf_fast(float angle)
    Fast Cosinus approximation using a simple table.
    Definition: math.c:51
    const uint16_t ambe_v_uv_tbl[64]
    V/UV decisions (subframe 0 = low byte. MSBs = low freq)
    Definition: tables.c:343
    void ambe_synth_audio(struct ambe_synth *synth, int16_t *audio, struct ambe_subframe *sf, struct ambe_subframe *sf_prev)
    Generate audio for a given subframe.
    Definition: synth.c:378
    void ambe_fdct(float *out, float *in, int N, int M)
    Forward Discrete Cosine Transform (fDCT)
    Definition: math.c:75
    const float ambe_gain_tbl[256][2]
    Gain (subframe 0, subframe 1)
    Definition: tables.c:83
    const float ambe_hoc2_tbl[64][4]
    HOC for 3rd frequency block.
    Definition: tables.c:887
    void ambe_decode_fini(struct ambe_decoder *dec)
    Release all resources associated with a decoder.
    Definition: ambe.c:55
    void ambe_frame_unpack_raw(struct ambe_raw_params *rp, const uint8_t *frame)
    Unpack a frame into its raw encoded parameters.
    Definition: frame.c:61
    int ambe_decode_dtx(struct ambe_decoder *dec, int16_t *audio, int N)
    Generates audio for DTX period.
    Definition: ambe.c:155
    const float ambe_hoc1_tbl[64][4]
    HOC for 2nd frequency block.
    Definition: tables.c:819
    int ambe_decode_frame(struct ambe_decoder *dec, int16_t *audio, int N, const uint8_t *frame, int bad)
    Decodes an AMBE frame to audio.
    Definition: ambe.c:129
    void ambe_fdft_fc(float *out_i, float *out_q, float *in, int N, int M)
    Forward Discrete Fourrier Transform (float->complex)
    Definition: math.c:127
    void ambe_decode_init(struct ambe_decoder *dec)
    Initializes decoder state.
    Definition: ambe.c:40
    const float ambe_prba34_tbl[64][2]
    PRBA[3:4].
    Definition: tables.c:487
    const float ambe_sf0_interp_tbl[4]
    Interpolation ratios for subframe 0 magnitude prediction.
    Definition: tables.c:1023
    const float ambe_hoc0_tbl[128][4]
    HOC for 1st frequency block.
    Definition: tables.c:687
    void ambe_idft_cf(float *out, float *in_i, float *in_q, int N, int M)
    Inverse Discret Fourrier Transform (complex->float)
    Definition: math.c:158
    float sinf_fast(float angle)
    Fast Sinus approximation using a simple table.
    Definition: math.c:62
    const float ambe_prba12_tbl[128][2]
    PRBA[1:2].
    Definition: tables.c:355
    int ambe_decode_tone(struct ambe_decoder *dec, int16_t *audio, int N, const uint8_t *frame)
    Decodes an AMBE tone frame.
    Definition: tone.c:126
    const uint8_t ambe_hpg_tbl[48][4]
    Number of harmonics per group for a given L (starts at L=9)
    Definition: tables.c:31
    @ AMBE_SPEECH
    Speech frame.
    Definition: private.h:41
    @ AMBE_TONE
    Tone frame
    Definition: private.h:43
    @ AMBE_SILENCE
    Silence indication frame.
    Definition: private.h:42
    AMBE decoder state.
    Definition: private.h:91
    struct ambe_subframe sf_prev
    Previous subframe.
    Definition: private.h:95
    float tone_phase_f1
    Phase frequency 1 for tone frames.
    Definition: private.h:92
    float tone_phase_f2
    Phase frequency 2 for tone frames.
    Definition: private.h:93
    struct ambe_synth synth
    Synthesizer state.
    Definition: private.h:97
    AMBE encoded frame raw parameters.
    Definition: private.h:48
    uint8_t sf1_prba57
    sf1 PRBA[5,6,7] VQ
    Definition: private.h:56
    uint8_t sf1_prba34
    sf1 PRBA[3,4] VQ
    Definition: private.h:55
    uint8_t pitch
    Pitch.
    Definition: private.h:49
    uint8_t v_uv
    V/UV decision VQ.
    Definition: private.h:52
    uint8_t pitch_interp
    Pitch interpolation selection.
    Definition: private.h:50
    uint8_t sf1_hoc[4]
    sf1 HOCs VQ
    Definition: private.h:57
    uint8_t sf0_mag_interp
    sf0 mag interpolation selection
    Definition: private.h:59
    uint8_t sf0_perr_14
    sf0 mag prediction error VQ [1,4]
    Definition: private.h:60
    uint8_t sf1_prba12
    sf1 PRBA[1,2] VQ
    Definition: private.h:54
    uint8_t gain
    Gain VQ.
    Definition: private.h:51
    uint8_t sf0_perr_58
    sf0 mag prediction error VQ [5,8]
    Definition: private.h:61
    AMBE subframe parameters.
    Definition: private.h:66
    float f0log
    log2(f0)
    Definition: private.h:68
    int Vl[56]
    Per-harmonic voicing state.
    Definition: private.h:73
    float w0
    fundamental frequency (rad/samp)
    Definition: private.h:69
    int L
    Number of harmonics.
    Definition: private.h:70
    float Ml[56]
    spectral magnitudes
    Definition: private.h:76
    float Mlog[56]
    log spectral magnitudes
    Definition: private.h:75
    float f0
    fundamental normalized frequency
    Definition: private.h:67
    int v_uv[8]
    Voicing state.
    Definition: private.h:72
    float gain
    Gain.
    Definition: private.h:74
    int Lb[4]
    Harmonics per block.
    Definition: private.h:71
    AMBE synthesizer state.
    Definition: private.h:81
    int16_t u_prev
    Last 'u' of previous subframe.
    Definition: private.h:82
    float phi[56]
    Current phase for each harmonic.
    Definition: private.h:85
    float psi1
    Current PSI angle for fundamental.
    Definition: private.h:84
    float uw_prev[121]
    Unvoiced data from previous subframe.
    Definition: private.h:83
    float SE
    Current energy parameter.
    Definition: private.h:86
    html/xch__dc12_8h_source.html0000644000175000017500000002433014753471227015417 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/xch_dc12.h Source File
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    xch_dc12.h
    Go to the documentation of this file.
    1/* GMR-1 xCH over DC12 channel coding */
    2/* See GMR-1 05.003 (ETSI TS 101 376-5-3 V3.3.1) - Section 6.1a */
    3
    4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
    5 * All Rights Reserved
    6 *
    7 * This program is free software; you can redistribute it and/or modify
    8 * it under the terms of the GNU Affero General Public License as published by
    9 * the Free Software Foundation; either version 3 of the License, or
    10 * (at your option) any later version.
    11 *
    12 * This program is distributed in the hope that it will be useful,
    13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    15 * GNU Affero General Public License for more details.
    16 *
    17 * You should have received a copy of the GNU Affero General Public License
    18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
    19 */
    20
    21#ifndef __OSMO_GMR1_L1_XCH_DC12_H__
    22#define __OSMO_GMR1_L1_XCH_DC12_H__
    23
    33#include <stdint.h>
    34#include <osmocom/core/bits.h>
    35
    36
    37int gmr1_xch_dc12_encode(ubit_t *bits_e, const uint8_t *l2);
    38int gmr1_xch_dc12_decode(uint8_t *l2, const sbit_t *bits_e, int *conv_rv);
    39
    40
    43#endif /* __OSMO_GMR1_L1_XCH_DC12_H__ */
    int gmr1_xch_dc12_decode(uint8_t *l2, const sbit_t *bits_e, int *conv_rv)
    Stateless GMR-1 xCH over DC12 channel decoder.
    Definition: xch_dc12.c:87
    int gmr1_xch_dc12_encode(ubit_t *bits_e, const uint8_t *l2)
    Stateless GMR-1 xCH over DC12 channel coder.
    Definition: xch_dc12.c:64
    html/rach_8h_source.html0000644000175000017500000002452014753471227014603 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/rach.h Source File
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    rach.h
    Go to the documentation of this file.
    1/* GMR-1 RACH channel coding */
    2/* See GMR-1 05.003 (ETSI TS 101 376-5-3 V1.2.1) - Section 6.5 */
    3
    4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
    5 * All Rights Reserved
    6 *
    7 * This program is free software; you can redistribute it and/or modify
    8 * it under the terms of the GNU Affero General Public License as published by
    9 * the Free Software Foundation; either version 3 of the License, or
    10 * (at your option) any later version.
    11 *
    12 * This program is distributed in the hope that it will be useful,
    13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    15 * GNU Affero General Public License for more details.
    16 *
    17 * You should have received a copy of the GNU Affero General Public License
    18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
    19 */
    20
    21#ifndef __OSMO_GMR1_L1_RACH_H__
    22#define __OSMO_GMR1_L1_RACH_H__
    23
    33#include <stdint.h>
    34#include <osmocom/core/bits.h>
    35
    36
    37void gmr1_rach_encode(ubit_t *bits_e, const uint8_t *rach, uint8_t sb_mask);
    38int gmr1_rach_decode(uint8_t *rach, const sbit_t *bits_e, uint8_t sb_mask,
    39 int *conv_rv, int *crc_rv);
    40
    41
    44#endif /* __OSMO_GMR1_L1_RACH_H__ */
    int gmr1_rach_decode(uint8_t *rach, const sbit_t *bits_e, uint8_t sb_mask, int *conv_rv, int *crc_rv)
    Stateless GMR-1 RACH channel decoder.
    Definition: rach.c:137
    void gmr1_rach_encode(ubit_t *bits_e, const uint8_t *rach, uint8_t sb_mask)
    Stateless GMR-1 RACH channel coder.
    Definition: rach.c:78
    html/structchan__desc.html0000644000175000017500000002202014753471227015213 0ustar buildbuild osmo-gmr: chan_desc Struct Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    chan_desc Struct Reference

    Data Fields

    struct cfilebcch
     
    struct cfiletch
     
    struct cfiletch_csd
     
    int sps
     
    int align
     
    float freq_err
     
    int fn
     
    int sa_sirfn_delay
     
    int sa_bcch_stn
     
    struct tch3_state tch3_state
     
    struct tch9_state tch9_state
     
    uint8_t kc [8]
     

    The documentation for this struct was generated from the following file:
    • src/gmr1_rx.c
    html/interleave_8c.html0000644000175000017500000002243014753471227014435 0ustar buildbuild osmo-gmr: src/l1/interleave.c File Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Osmocom GMR-1 interleaving implementation. More...

    #include <errno.h>
    #include <stdint.h>
    #include <stdlib.h>
    #include <string.h>
    #include <osmocom/core/bits.h>
    #include <osmocom/gmr1/l1/interleave.h>

    Functions

    void gmr1_interleave_intra (void *out, const void *in, int N)
     GMR-1 intra burst inteleaver. More...
     
    void gmr1_deinterleave_intra (void *out, const void *in, int N)
     GMR-1 intra burst de-interleaver. More...
     
    int gmr1_interleaver_init (struct gmr1_interleaver *il, int N, int K)
     GMR-1 inter burst interleaver initializer. More...
     
    void gmr1_interleaver_fini (struct gmr1_interleaver *il)
     GMR-1 inter burst interleaver cleanup. More...
     
    void gmr1_interleave_inter (struct gmr1_interleaver *il, void *bits_epp, void *bits_ep)
     GMR-1 inter burst interleaver. More...
     
    void gmr1_deinterleave_inter (struct gmr1_interleaver *il, void *bits_ep, void *bits_epp)
     GMR-1 inter burst de-interleaver. More...
     

    Detailed Description

    Osmocom GMR-1 interleaving implementation.

    html/ccch_8c.js0000644000175000017500000000030314753471227012642 0ustar buildbuildvar ccch_8c = [ [ "gmr1_ccch_decode", "group__ccch.html#ga2773482e1dd8ea377c2191771f85db11", null ], [ "gmr1_ccch_encode", "group__ccch.html#gaf77ce531802993a1d64bd773215b5d7d", null ] ];html/group__scramb.js0000644000175000017500000000045114753471227014176 0ustar buildbuildvar group__scramb = [ [ "scramb.h", "scramb_8h.html", null ], [ "scramb.c", "scramb_8c.html", null ], [ "gmr1_scramble_sbit", "group__scramb.html#gab5ef50c3520bc0213858a6894d989e1e", null ], [ "gmr1_scramble_ubit", "group__scramb.html#ga2243e4f721439956fe9b81ec7e40490c", null ] ];html/group__facch3.html0000644000175000017500000002717114753471227014416 0ustar buildbuild osmo-gmr: FACCH3 channel coding
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Files

    file  facch3.h
     Osmocom GMR-1 FACCH3 channel coding header.
     
    file  facch3.c
     Osmocom GMR-1 FACCH3 channel coding implementation.
     

    Functions

    void gmr1_facch3_encode (ubit_t *bits_e, const uint8_t *l2, const ubit_t *bits_s, const ubit_t *ciph)
     Stateless GMR-1 FACCH3 channel coder. More...
     
    int gmr1_facch3_decode (uint8_t *l2, ubit_t *bits_s, const sbit_t *bits_e, const ubit_t *ciph, int *conv_rv)
     Stateless GMR-1 FACCH3 channel decoder. More...
     

    Detailed Description

    Function Documentation

    ◆ gmr1_facch3_decode()

    int gmr1_facch3_decode ( uint8_t *  l2,
    ubit_t *  bits_s,
    const sbit_t *  bits_e,
    const ubit_t *  ciph,
    int *  conv_rv 
    )

    Stateless GMR-1 FACCH3 channel decoder.

    Parameters
    [out]l2L2 packet data
    [out]bits_s4*8 status bits de-multiplexed
    [in]bits_e4*104 encoded bits of 4 bursts
    [in]ciph4*96 bits of cipher stream (can be NULL)
    [out]conv_rvReturn of the convolutional decode (can be NULL)
    Returns
    0 if CRC check pass, any other value for fail.

    L2 data is 10 byte long. bits_s is 32 bits, 8 bits for each of the 4 burts, organized as 4 s_n followed by 4 s_p, as shown in section 7.3.2.2. bits_e is a 424 soft bits array unmapped from 4 bursts. ciph is the A5 cipher stream to use, 96 bits for each of the 4 burts.

    References gmr1_deinterleave_intra(), and gmr1_scramble_sbit().

    ◆ gmr1_facch3_encode()

    void gmr1_facch3_encode ( ubit_t *  bits_e,
    const uint8_t *  l2,
    const ubit_t *  bits_s,
    const ubit_t *  ciph 
    )

    Stateless GMR-1 FACCH3 channel coder.

    Parameters
    [out]bits_e4*104 encoded bits of 4 bursts
    [in]l2L2 packet data
    [in]bits_s4*8 status bits to be multiplexed
    [in]ciph4*96 bits of cipher stream (can be NULL)

    L2 data is 10 byte long. bits_s is 32 bits, 8 bits for each of the 4 burts, organized as 4 s_n followed by 4 s_p, as shown in section 7.3.2.2. bits_e is a 432 hard bit array to be mapped on 4 bursts. ciph is the A5 cipher stream to use, 96 bits for each of the 4 burts.

    References gmr1_crc16.

    html/facch3_8c.js0000644000175000017500000000031514753471227013074 0ustar buildbuildvar facch3_8c = [ [ "gmr1_facch3_decode", "group__facch3.html#ga8f2a10c4a2203e69460dbf7f8345cd26", null ], [ "gmr1_facch3_encode", "group__facch3.html#gae7fb89197eae0f343d38c3c70b2d6ada", null ] ];html/codec_8c.html0000644000175000017500000002075714753471227013366 0ustar buildbuild osmo-gmr: src/codec/codec.c File Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    codec.c File Reference

    Osmocom GMR-1 AMBE vocoder public API implementation. More...

    #include <string.h>
    #include <stdint.h>
    #include <stdlib.h>
    #include <osmocom/gmr1/codec/codec.h>
    #include "private.h"

    Data Structures

    struct  gmr1_codec
     Structure for GMR1 codec state. More...
     

    Functions

    struct gmr1_codecgmr1_codec_alloc (void)
     Allocates and inits a codec object. More...
     
    void gmr1_codec_release (struct gmr1_codec *codec)
     Release a codec object created by gmr1_codec_alloc. More...
     
    int gmr1_codec_decode_frame (struct gmr1_codec *codec, int16_t *audio, int N, const uint8_t *frame, int bad)
     Decodes an AMBE frame to audio. More...
     
    int gmr1_codec_decode_dtx (struct gmr1_codec *codec, int16_t *audio, int N)
     Generates audio for DTX period. More...
     

    Detailed Description

    Osmocom GMR-1 AMBE vocoder public API implementation.

    html/nav_f.png0000644000175000017500000000023114753471226012610 0ustar buildbuild‰PNG  IHDR8³»`IDATxíÝK€ EÑ–·[†øBÑmkâÄÂH—prÓ¼.‚Žó‚ꎤR6Z VI±E‚5j³„lóš›iI˜¬ÞêçJ0ŒÑÑ/Žû›™uøñóÞ¿6sH ÝõyIEND®B`‚html/group__tch3.html0000644000175000017500000003100614753471227014120 0ustar buildbuild osmo-gmr: TCH3 channel coding
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Files

    file  tch3.h
     Osmocom GMR-1 TCH3 channel coding header.
     
    file  tch3.c
     Osmocom GMR-1 TCH3 channel coding implementation.
     

    Functions

    void gmr1_tch3_encode (ubit_t *bits_e, const uint8_t *frame0, const uint8_t *frame1, const ubit_t *bits_s, const ubit_t *ciph, int m)
     Stateless GMR-1 TCH3 channel coder. More...
     
    void gmr1_tch3_decode (uint8_t *frame0, uint8_t *frame1, ubit_t *bits_s, const sbit_t *bits_e, const ubit_t *ciph, int m, int *conv0_rv, int *conv1_rv)
     Stateless GMR-1 TCH3 channel decoder. More...
     

    Detailed Description

    Function Documentation

    ◆ gmr1_tch3_decode()

    void gmr1_tch3_decode ( uint8_t *  frame0,
    uint8_t *  frame1,
    ubit_t *  bits_s,
    const sbit_t *  bits_e,
    const ubit_t *  ciph,
    int  m,
    int *  conv0_rv,
    int *  conv1_rv 
    )

    Stateless GMR-1 TCH3 channel decoder.

    Parameters
    [out]frame01st speech frame (10 byte / 80 bits, msb first)
    [out]frame12nd speech frame (10 byte / 80 bits, msb first)
    [out]bits_s4 status bits that were demultiplexed
    [in]bits_e212 softbits demodulated from a burst
    [in]ciph208 bits of cipher stream (can be NULL)
    [in]mMultiplexing mode (0 or 1)
    [out]conv0_rvReturn of the conv. decode of frame 0 (can be NULL)
    [out]conv1_rvReturn of the conv. decode of frame 1 (can be NULL)
    Returns
    0 if CRC check pass, any other value for fail.

    References gmr1_scramble_sbit().

    ◆ gmr1_tch3_encode()

    void gmr1_tch3_encode ( ubit_t *  bits_e,
    const uint8_t *  frame0,
    const uint8_t *  frame1,
    const ubit_t *  bits_s,
    const ubit_t *  ciph,
    int  m 
    )

    Stateless GMR-1 TCH3 channel coder.

    Parameters
    [out]bits_e212 encoded bits to be mapped on a burst
    [in]frame01st speech frame (10 byte / 80 bits, msb first)
    [in]frame12nd speech frame (10 byte / 80 bits, msb first)
    [in]bits_s4 status bits to be multiplexed
    [in]ciph208 bits of cipher stream (can be NULL)
    [in]mMultiplexing mode (0 or 1)
    html/tables_8c.html0000644000175000017500000002624114753471227013555 0ustar buildbuild osmo-gmr: src/codec/tables.c File Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Osmocom GMR-1 AMBE vocoder tables. More...

    #include <stdint.h>

    Variables

    const uint8_t ambe_hpg_tbl [48][4]
     Number of harmonics per group for a given L (starts at L=9)
     
    const float ambe_gain_tbl [256][2]
     Gain (subframe 0, subframe 1)
     
    const uint16_t ambe_v_uv_tbl [64]
     V/UV decisions (subframe 0 = low byte. MSBs = low freq) More...
     
    const float ambe_prba12_tbl [128][2]
     PRBA[1:2].
     
    const float ambe_prba34_tbl [64][2]
     PRBA[3:4].
     
    const float ambe_prba57_tbl [128][3]
     PRBA[5:7].
     
    const float ambe_hoc0_tbl [128][4]
     HOC for 1st frequency block.
     
    const float ambe_hoc1_tbl [64][4]
     HOC for 2nd frequency block.
     
    const float ambe_hoc2_tbl [64][4]
     HOC for 3rd frequency block.
     
    const float ambe_hoc3_tbl [64][4]
     HOC for last frequency block.
     
    const float ambe_sf0_interp_tbl [4]
     Interpolation ratios for subframe 0 magnitude prediction. More...
     
    const float ambe_sf0_perr14_tbl [64][4]
     Prediction Error [1:4] for subframe 0.
     
    const float ambe_sf0_perr58_tbl [32][4]
     Prediction Error [5:8] for subframe 0.
     

    Detailed Description

    Osmocom GMR-1 AMBE vocoder tables.

    html/functions.html0000644000175000017500000003167214753471227013725 0ustar buildbuild osmo-gmr: Data Fields
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:

    - _ -

    - b -

    - d -

    - e -

    - f -

    - g -

    - i -

    - k -

    - l -

    - m -

    - n -

    - p -

    - r -

    - s -

    - t -

    - u -

    - v -

    - w -

    html/formula.repository0000644000175000017500000000046114753471227014625 0ustar buildbuild\_form#0=118x23:$\frac{\sqrt{2}}{2}\cdot e^{j\left( 2\pi f\cdot\left(t-\frac{T}{2}\right)^2/T^2\right)}$ \_form#1=125x23:$\frac{\sqrt{2}}{2}\cdot e^{-j\left( 2\pi f\cdot\left(t-\frac{T}{2}\right)^2/T^2\right)}$ \_form#2=161x24:$\sqrt{2}\cdot\cos\left(2\pi f\cdot\left(t-\frac{T}{2}\right)^2/\;T^2\right)$ html/fcch_8c.js0000644000175000017500000000121214753471227012645 0ustar buildbuildvar fcch_8c = [ [ "gmr1_fcch_fine", "group__fcch.html#ga2b1c8329ac1c8cae7414d2ca4619f17f", null ], [ "gmr1_fcch_rough", "group__fcch.html#ga14e6b77fe05bf2ef7600204ba6818a47", null ], [ "gmr1_fcch_rough_multi", "group__fcch.html#ga822f719832670df978c08008c2e7a3df", null ], [ "gmr1_fcch_snr", "group__fcch.html#ga614cf46fe5e868c8b573491736487fba", null ], [ "gmr1_fcch3_lband_burst", "group__fcch.html#ga6598bb31a09a997eaa079838babc2f25", null ], [ "gmr1_fcch3_sband_burst", "group__fcch.html#ga20cea569bd20f7c7a3b14420c9301b1b", null ], [ "gmr1_fcch_burst", "group__fcch.html#ga09ca32ce9f0bbe6d6d5b7977aae2758f", null ] ];html/group__sdr.html0000644000175000017500000001572214753471227014056 0ustar buildbuild osmo-gmr: GMR-1 Software Defined Radio library
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    GMR-1 Software Defined Radio library

    Modules

     DKAB bursts
     
     FCCH bursts
     
     Normal bursts
     
     pi2-CBPSK, pi4-CBPSK and pi4-CQPSK modulation
     

    Files

    file  defs.h
     Osmocom GMR-1 SDR global definitions.
     

    Macros

    #define GMR1_SYM_RATE   23400
     Base GMR-1 symbol rate.
     
    #define DEBUG_SIGNAL(n, v)   do { } while (0)
     

    Detailed Description

    html/fcch_8h_source.html0000644000175000017500000004555714753471227014606 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/sdr/fcch.h Source File
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    fcch.h
    Go to the documentation of this file.
    1/* GMR-1 SDR - FCCH bursts */
    2/* See GMR-1 05.004 (ETSI TS 101 376-5-4 V3.1.1) - Section 8 */
    3
    4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
    5 * All Rights Reserved
    6 *
    7 * This program is free software; you can redistribute it and/or modify
    8 * it under the terms of the GNU Affero General Public License as published by
    9 * the Free Software Foundation; either version 3 of the License, or
    10 * (at your option) any later version.
    11 *
    12 * This program is distributed in the hope that it will be useful,
    13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    15 * GNU Affero General Public License for more details.
    16 *
    17 * You should have received a copy of the GNU Affero General Public License
    18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
    19 */
    20
    21#ifndef __OSMO_GMR1_SDR_FCCH_H__
    22#define __OSMO_GMR1_SDR_FCCH_H__
    23
    33#include <osmocom/dsp/cxvec.h>
    34
    35
    37{
    38 float freq;
    39 int len;
    40};
    41
    42extern const struct gmr1_fcch_burst gmr1_fcch_burst;
    43extern const struct gmr1_fcch_burst gmr1_fcch3_lband_burst;
    44extern const struct gmr1_fcch_burst gmr1_fcch3_sband_burst;
    45
    46
    47int gmr1_fcch_rough(const struct gmr1_fcch_burst *burst_type,
    48 struct osmo_cxvec *search_win_in, int sps, float freq_shift,
    49 int *toa);
    50
    51int gmr1_fcch_rough_multi(const struct gmr1_fcch_burst *burst_type,
    52 struct osmo_cxvec *search_win_in, int sps, float freq_shift,
    53 int *toa, int N);
    54
    55int gmr1_fcch_fine(const struct gmr1_fcch_burst *burst_type,
    56 struct osmo_cxvec *burst_in, int sps, float freq_shift,
    57 int *toa, float *freq_error);
    58
    59int gmr1_fcch_snr(const struct gmr1_fcch_burst *burst_type,
    60 struct osmo_cxvec *burst_in, int sps, float freq_shift,
    61 float *snr);
    62
    63
    66#endif /* __OSMO_GMR1_SDR_FCCH_H__ */
    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.
    Definition: fcch.c:212
    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....
    Definition: fcch.c:67
    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.
    Definition: fcch.c:513
    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.
    Definition: fcch.c:644
    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....
    Definition: fcch.c:59
    int gmr1_fcch_rough_multi(const struct gmr1_fcch_burst *burst_type, struct osmo_cxvec *search_win_in, int sps, float freq_shift, int *toa, int N)
    Rough FCCH timing acquisition w/ multiple FCCH detection.
    Definition: fcch.c:342
    Definition: fcch.h:37
    int len
    Burst duration in symbols.
    Definition: fcch.h:39
    float freq
    Frequency sweep range.
    Definition: fcch.h:38
    html/dir_b28332b7c67bf5065126b2ebef06f8f3.js0000644000175000017500000000065614753471227016601 0ustar buildbuildvar dir_b28332b7c67bf5065126b2ebef06f8f3 = [ [ "ambe.c", "ambe_8c.html", "ambe_8c" ], [ "codec.c", "codec_8c.html", "codec_8c" ], [ "frame.c", "frame_8c.html", "frame_8c" ], [ "math.c", "math_8c.html", "math_8c" ], [ "private.h", "private_8h.html", "private_8h" ], [ "synth.c", "synth_8c.html", "synth_8c" ], [ "tables.c", "tables_8c.html", "tables_8c" ], [ "tone.c", "tone_8c.html", "tone_8c" ] ];html/globals_eval.html0000644000175000017500000001131014753471227014332 0ustar buildbuild osmo-gmr: Globals
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
     
    html/structgmr1__pi4cxpsk__sync.html0000644000175000017500000001621314753471227017201 0ustar buildbuild osmo-gmr: gmr1_pi4cxpsk_sync Struct Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    pi4-CxPSK Synchronization sequence segment description More...

    #include <pi4cxpsk.h>

    Data Fields

    int pos
     Sync Position

     
    int len
     Sync Length

     
    uint8_t syms [GMR1_MAX_SYNC_SYMS]
     Sync Symbols

     
    struct osmo_cxvec_ref
     Ref signal

     

    Detailed Description

    pi4-CxPSK Synchronization sequence segment description


    The documentation for this struct was generated from the following file:
    html/nb_8h_source.html0000644000175000017500000004075514753471227014275 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/sdr/nb.h Source File
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    nb.h
    Go to the documentation of this file.
    1/* GMR-1 SDR - Normal bursts */
    2/* See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) */
    3
    4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
    5 * All Rights Reserved
    6 *
    7 * This program is free software; you can redistribute it and/or modify
    8 * it under the terms of the GNU Affero General Public License as published by
    9 * the Free Software Foundation; either version 3 of the License, or
    10 * (at your option) any later version.
    11 *
    12 * This program is distributed in the hope that it will be useful,
    13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    15 * GNU Affero General Public License for more details.
    16 *
    17 * You should have received a copy of the GNU Affero General Public License
    18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
    19 */
    20
    21#ifndef __OSMO_GMR1_SDR_NB_H__
    22#define __OSMO_GMR1_SDR_NB_H__
    23
    34
    35
    36 /* Various normal bursts types */
    47
    48
    51#endif /* __OSMO_GMR1_SDR_NB_H__ */
    struct gmr1_pi4cxpsk_burst gmr1_nt6_burst
    NT6 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.9.
    Definition: nb.c:240
    struct gmr1_pi4cxpsk_burst gmr1_dc12_burst
    DC12 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V3.1.1) - Section 7.4.16.
    Definition: nb.c:143
    struct gmr1_pi4cxpsk_burst gmr1_nt3_speech_burst
    NT3 bursts for encoded speech See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7....
    Definition: nb.c:170
    struct gmr1_pi4cxpsk_burst gmr1_rach_burst
    RACH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.11.
    Definition: nb.c:317
    struct gmr1_pi4cxpsk_burst gmr1_sdcch_burst
    SDCCH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.12.
    Definition: nb.c:369
    struct gmr1_pi4cxpsk_burst gmr1_dc2_burst
    DC2 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.4.
    Definition: nb.c:81
    struct gmr1_pi4cxpsk_burst gmr1_dc6_burst
    DC6 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.5.
    Definition: nb.c:112
    struct gmr1_pi4cxpsk_burst gmr1_nt9_burst
    NT9 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.10.
    Definition: nb.c:281
    struct gmr1_pi4cxpsk_burst gmr1_nt3_facch_burst
    NT3 bursts for FACCH See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.8....
    Definition: nb.c:202
    struct gmr1_pi4cxpsk_burst gmr1_bcch_burst
    BCCH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.2.
    Definition: nb.c:54
    pi4-CxPSK Burst format description
    Definition: pi4cxpsk.h:80
    html/synth_8c.js0000644000175000017500000000047414753471227013120 0ustar buildbuildvar synth_8c = [ [ "ambe_synth_audio", "group__codec__private.html#ga7ca25dc5919fcff4c7494eb02d25fda2", null ], [ "ambe_synth_enhance", "group__codec__private.html#ga5fdca2bf0b039f3bb0dd97b0f601fe62", null ], [ "ambe_synth_init", "group__codec__private.html#ga31252750e130d6bf531c483df2ec8a49", null ] ];html/splitbar.png0000644000175000017500000000047214753471227013347 0ustar buildbuild‰PNG  IHDRM¸¿IDATxíÝ¡JCa‡ñç(˜ ëƒ%±Ø4 b±È˜Í¶3˜v^Á±˜…ãó–ŽELƒõ…¥•³ ,ÿb;íç{Ã/¼ðÞÀaYÕ¯åóøq:¼º¹›\òIIIIIIIIIIIIIIIIII-Òçl¹›«õ抢è_t/Ï»ã£ÑíYQVõðêäíã÷´×ùY¬Úÿµ§¦ivók¾_íåýÛ£I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$ýC[Vì=ü[„fÆIEND®B`‚html/group__l1.html0000644000175000017500000001274014753471227013577 0ustar buildbuild osmo-gmr: GMR-1 Layer 1 library
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    GMR-1 Layer 1 library

    Modules

     A5 ciphering algorithm
     
     Channel coding primitives
     
     Channel coder / decoders
     

    Files

    file  defs.h
     Osmocom GMR-1 L1 global definitions.
     

    Detailed Description

    html/structgmr1__puncturer.js0000644000175000017500000000055614753471227015743 0ustar buildbuildvar structgmr1__puncturer = [ [ "L", "structgmr1__puncturer.html#a56ab639ebbf577886ec36db783b8ef34", null ], [ "mask", "structgmr1__puncturer.html#af98900595177fbe9bf6c08ee652ab739", null ], [ "N", "structgmr1__puncturer.html#a4badcb8ada6378bfe224de9ccd9f193f", null ], [ "r", "structgmr1__puncturer.html#a6bad988cd142c8d0e30bfe457fd2c062", null ] ];html/l1_2defs_8h_source.html0000644000175000017500000002003214753471227015257 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/defs.h Source File
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    defs.h
    Go to the documentation of this file.
    1/* GMR-1 L1 - Global definitions */
    2/* See GMR-1 05.003 (ETSI TS 101 376-5-3 V1.2.1) */
    3
    4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
    5 * All Rights Reserved
    6 *
    7 * This program is free software; you can redistribute it and/or modify
    8 * it under the terms of the GNU Affero General Public License as published by
    9 * the Free Software Foundation; either version 3 of the License, or
    10 * (at your option) any later version.
    11 *
    12 * This program is distributed in the hope that it will be useful,
    13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    15 * GNU Affero General Public License for more details.
    16 *
    17 * You should have received a copy of the GNU Affero General Public License
    18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
    19 */
    20
    21#ifndef __OSMO_GMR1_L1_DEFS_H__
    22#define __OSMO_GMR1_L1_DEFS_H__
    23
    38#endif /* __OSMO_GMR1_SDR_DEFS_H__ */
    html/codec_8h.html0000644000175000017500000001743114753471227013366 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/codec/codec.h File Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    codec.h File Reference

    Osmocom GMR-1 AMBE vocoder header. More...

    #include <stdint.h>

    Go to the source code of this file.

    Functions

    struct gmr1_codecgmr1_codec_alloc (void)
     Allocates and inits a codec object. More...
     
    void gmr1_codec_release (struct gmr1_codec *codec)
     Release a codec object created by gmr1_codec_alloc. More...
     
    int gmr1_codec_decode_frame (struct gmr1_codec *codec, int16_t *audio, int N, const uint8_t *frame, int bad)
     Decodes an AMBE frame to audio. More...
     
    int gmr1_codec_decode_dtx (struct gmr1_codec *codec, int16_t *audio, int N)
     Generates audio for DTX period. More...
     

    Detailed Description

    Osmocom GMR-1 AMBE vocoder header.

    html/dir_d44c64559bbebec7f509842c48db8b23.js0000644000175000017500000000022614753471227016665 0ustar buildbuildvar dir_d44c64559bbebec7f509842c48db8b23 = [ [ "osmocom", "dir_abe9b486a10ccc5afdf8abc29637e0c1.html", "dir_abe9b486a10ccc5afdf8abc29637e0c1" ] ];html/scramb_8h.js0000644000175000017500000000031514753471227013221 0ustar buildbuildvar scramb_8h = [ [ "gmr1_scramble_sbit", "group__scramb.html#gab5ef50c3520bc0213858a6894d989e1e", null ], [ "gmr1_scramble_ubit", "group__scramb.html#ga2243e4f721439956fe9b81ec7e40490c", null ] ];html/globals_c.html0000644000175000017500000000766314753471227013645 0ustar buildbuild osmo-gmr: Globals
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:

    - c -

    html/punct_8h_source.html0000644000175000017500000015461014753471227015023 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/punct.h Source File
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    punct.h
    Go to the documentation of this file.
    1/* GMR-1 puncturing */
    2/* See GMR-1 05.003 (ETSI TS 101 376-5-3 V3.3.1) - Section 4.5 */
    3
    4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
    5 * All Rights Reserved
    6 *
    7 * This program is free software; you can redistribute it and/or modify
    8 * it under the terms of the GNU Affero General Public License as published by
    9 * the Free Software Foundation; either version 3 of the License, or
    10 * (at your option) any later version.
    11 *
    12 * This program is distributed in the hope that it will be useful,
    13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    15 * GNU Affero General Public License for more details.
    16 *
    17 * You should have received a copy of the GNU Affero General Public License
    18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
    19 */
    20
    21#ifndef __OSMO_GMR1_L1_PUNCT_H__
    22#define __OSMO_GMR1_L1_PUNCT_H__
    23
    33#include <stdint.h>
    34
    35
    38 int r;
    39 int L;
    40 int N;
    41 const uint8_t mask[];
    42};
    43
    44
    45struct osmo_conv_code;
    46
    47int gmr1_puncturer_generate(struct osmo_conv_code *code,
    48 const struct gmr1_puncturer *punct_pre,
    49 const struct gmr1_puncturer *punct_main,
    50 const struct gmr1_puncturer *punct_post,
    51 int repeat);
    52
    53
    54/* Various puncturing codes used in GMR-1 */
    55
    56extern const struct gmr1_puncturer gmr1_punct_k5_12_P23;
    57extern const struct gmr1_puncturer gmr1_punct_k5_12_P25;
    58extern const struct gmr1_puncturer gmr1_punct_k5_12_Ps25;
    59extern const struct gmr1_puncturer gmr1_punct_k5_12_P311;
    60extern const struct gmr1_puncturer gmr1_punct_k5_12_P412;
    61extern const struct gmr1_puncturer gmr1_punct_k5_12_Ps412;
    62extern const struct gmr1_puncturer gmr1_punct_k5_12_P12;
    63extern const struct gmr1_puncturer gmr1_punct_k5_12_Ps12;
    64extern const struct gmr1_puncturer gmr1_punct_k5_12_A;
    65extern const struct gmr1_puncturer gmr1_punct_k5_12_B;
    66extern const struct gmr1_puncturer gmr1_punct_k5_12_C;
    67extern const struct gmr1_puncturer gmr1_punct_k5_12_D;
    68extern const struct gmr1_puncturer gmr1_punct_k5_12_E;
    69extern const struct gmr1_puncturer gmr1_punct_k5_12_P38;
    70extern const struct gmr1_puncturer gmr1_punct_k5_12_P26;
    71extern const struct gmr1_puncturer gmr1_punct_k5_12_P37;
    72extern const struct gmr1_puncturer gmr1_punct_k5_13_P16;
    73extern const struct gmr1_puncturer gmr1_punct_k5_13_P25;
    74extern const struct gmr1_puncturer gmr1_punct_k5_13_P15;
    75extern const struct gmr1_puncturer gmr1_punct_k5_13_Ps15;
    76extern const struct gmr1_puncturer gmr1_punct_k5_13_P78;
    77extern const struct gmr1_puncturer gmr1_punct_k5_15_P23;
    78extern const struct gmr1_puncturer gmr1_punct_k5_15_P53;
    79extern const struct gmr1_puncturer gmr1_punct_k5_15_Ps53;
    80extern const struct gmr1_puncturer gmr1_punct_k7_12_P23;
    81extern const struct gmr1_puncturer gmr1_punct_k7_12_P410;
    82extern const struct gmr1_puncturer gmr1_punct_k7_12_P512;
    83extern const struct gmr1_puncturer gmr1_punct_k7_12_P116;
    84extern const struct gmr1_puncturer gmr1_punct_k7_12_P148;
    85extern const struct gmr1_puncturer gmr1_punct_k7_12_P184;
    86extern const struct gmr1_puncturer gmr1_punct_k7_12_P1152;
    87extern const struct gmr1_puncturer gmr1_punct_k7_12_P45;
    88extern const struct gmr1_puncturer gmr1_punct_k7_12_P245;
    89extern const struct gmr1_puncturer gmr1_punct_k9_12_P13;
    90extern const struct gmr1_puncturer gmr1_punct_k9_12_P47;
    91extern const struct gmr1_puncturer gmr1_punct_k9_12_P34;
    92extern const struct gmr1_puncturer gmr1_punct_k9_12_P17;
    93extern const struct gmr1_puncturer gmr1_punct_k9_12_P19;
    94extern const struct gmr1_puncturer gmr1_punct_k9_12_P26;
    95extern const struct gmr1_puncturer gmr1_punct_k9_12_P110;
    96extern const struct gmr1_puncturer gmr1_punct_k9_12_P14;
    97extern const struct gmr1_puncturer gmr1_punct_k9_12_P45;
    98extern const struct gmr1_puncturer gmr1_punct_k9_12_P234;
    99extern const struct gmr1_puncturer gmr1_punct_k6_14_P45;
    100extern const struct gmr1_puncturer gmr1_punct_k9_14_P148;
    101extern const struct gmr1_puncturer gmr1_punct_k9_14_P65;
    102extern const struct gmr1_puncturer gmr1_punct_k9_13_P12;
    103extern const struct gmr1_puncturer gmr1_punct_k9_13_P1213;
    104extern const struct gmr1_puncturer gmr1_punct_k9_13_P44;
    105extern const struct gmr1_puncturer gmr1_punct_k9_13_P33;
    106extern const struct gmr1_puncturer gmr1_punct_k9_13_P65;
    107
    108
    111#endif /* __OSMO_GMR1_L1_PUNCT_H__ */
    const struct gmr1_puncturer gmr1_punct_k5_12_P37
    GMR-1 P(3;7) puncturing code for the K=5 rate 1/2 conv coder.
    Definition: punct.c:358
    const struct gmr1_puncturer gmr1_punct_k7_12_P512
    GMR-1 P(5;12) puncturing code for the K=7 rate 1/2 conv coder.
    Definition: punct.c:515
    const struct gmr1_puncturer gmr1_punct_k9_13_P44
    GMR-1 P(4;4) puncturing code for the K=9 rate 1/3 conv coder.
    Definition: punct.c:1127
    const struct gmr1_puncturer gmr1_punct_k5_15_P53
    GMR-1 P(5;3) puncturing code for the K=5 rate 1/5 conv coder.
    Definition: punct.c:460
    const struct gmr1_puncturer gmr1_punct_k7_12_P45
    GMR-1 P(4;5) puncturing code for the K=7 rate 1/2 conv coder.
    Definition: punct.c:872
    const struct gmr1_puncturer gmr1_punct_k5_12_Ps412
    GMR-1 Ps(4;12) puncturing code for the K=5 rate 1/2 conv coder.
    Definition: punct.c:218
    const struct gmr1_puncturer gmr1_punct_k9_12_P19
    GMR-1 P(1;9) puncturing code for the K=9 rate 1/2 conv coder.
    Definition: punct.c:957
    const struct gmr1_puncturer gmr1_punct_k9_12_P234
    GMR-1 P2(3;4) puncturing code for the K=9 rate 1/2 conv coder.
    Definition: punct.c:1036
    const struct gmr1_puncturer gmr1_punct_k7_12_P410
    GMR-1 P(4;10) puncturing code for the K=7 rate 1/2 conv coder.
    Definition: punct.c:496
    const struct gmr1_puncturer gmr1_punct_k9_13_P12
    GMR-1 P(1;2) puncturing code for the K=9 rate 1/3 conv coder.
    Definition: punct.c:1094
    const struct gmr1_puncturer gmr1_punct_k5_12_C
    GMR-1 C puncturing code for the K=5 rate 1/2 conv coder.
    Definition: punct.c:287
    const struct gmr1_puncturer gmr1_punct_k9_12_P47
    GMR-1 P(4;7) puncturing code for the K=9 rate 1/2 conv coder.
    Definition: punct.c:912
    const struct gmr1_puncturer gmr1_punct_k5_15_Ps53
    GMR-1 Ps(5;3) puncturing code for the K=5 rate 1/5 conv coder.
    Definition: punct.c:472
    const struct gmr1_puncturer gmr1_punct_k9_13_P33
    GMR-1 P(3;3) puncturing code for the K=9 rate 1/3 conv coder.
    Definition: punct.c:1140
    const struct gmr1_puncturer gmr1_punct_k5_12_B
    GMR-1 B puncturing code for the K=5 rate 1/2 conv coder.
    Definition: punct.c:274
    const struct gmr1_puncturer gmr1_punct_k5_13_P16
    GMR-1 P(1;6) puncturing code for the K=5 rate 1/3 conv coder.
    Definition: punct.c:374
    const struct gmr1_puncturer gmr1_punct_k7_12_P184
    GMR-1 P(1;84) puncturing code for the K=7 rate 1/2 conv coder.
    Definition: punct.c:618
    const struct gmr1_puncturer gmr1_punct_k5_12_A
    GMR-1 A puncturing code for the K=5 rate 1/2 conv coder.
    Definition: punct.c:261
    const struct gmr1_puncturer gmr1_punct_k9_12_P13
    GMR-1 P(1;3) puncturing code for the K=9 rate 1/2 conv coder.
    Definition: punct.c:900
    const struct gmr1_puncturer gmr1_punct_k7_12_P245
    GMR-1 P2(4;5) puncturing code for the K=7 rate 1/2 conv coder.
    Definition: punct.c:886
    const struct gmr1_puncturer gmr1_punct_k9_14_P65
    GMR-1 P(6;5) puncturing code for the K=9 rate 1/4 conv coder.
    Definition: punct.c:1080
    const struct gmr1_puncturer gmr1_punct_k5_12_P311
    GMR-1 P(3;11) puncturing code for the K=5 rate 1/2 conv coder.
    Definition: punct.c:177
    const struct gmr1_puncturer gmr1_punct_k6_14_P45
    GMR-1 P(4;5) puncturing code for the K=6 rate 1/4 conv coder.
    Definition: punct.c:1049
    const struct gmr1_puncturer gmr1_punct_k9_12_P14
    GMR-1 P(1;4) puncturing code for the K=9 rate 1/2 conv coder.
    Definition: punct.c:1009
    const struct gmr1_puncturer gmr1_punct_k9_12_P17
    GMR-1 P(1;7) puncturing code for the K=9 rate 1/2 conv coder.
    Definition: punct.c:941
    const struct gmr1_puncturer gmr1_punct_k9_13_P1213
    GMR-1 P(12;13) puncturing code for the K=9 rate 1/3 conv coder.
    Definition: punct.c:1105
    const struct gmr1_puncturer gmr1_punct_k5_13_P15
    GMR-1 P(1;5) puncturing code for the K=5 rate 1/3 conv coder.
    Definition: punct.c:403
    const struct gmr1_puncturer gmr1_punct_k5_13_P25
    GMR-1 P(2;5) puncturing code for the K=5 rate 1/3 conv coder.
    Definition: punct.c:389
    const struct gmr1_puncturer gmr1_punct_k5_12_E
    GMR-1 E puncturing code for the K=5 rate 1/2 conv coder.
    Definition: punct.c:313
    int gmr1_puncturer_generate(struct osmo_conv_code *code, const struct gmr1_puncturer *punct_pre, const struct gmr1_puncturer *punct_main, const struct gmr1_puncturer *punct_post, int repeat)
    Generate convolutional code puncturing array for a osmo_conv_code.
    Definition: punct.c:49
    const struct gmr1_puncturer gmr1_punct_k7_12_P23
    GMR-1 P(2;3) puncturing code for the K=7 rate 1/2 conv coder.
    Definition: punct.c:484
    const struct gmr1_puncturer gmr1_punct_k5_15_P23
    GMR-1 P(2;3) puncturing code for the K=5 rate 1/5 conv coder.
    Definition: punct.c:448
    const struct gmr1_puncturer gmr1_punct_k5_12_P23
    GMR-1 P(2;3) puncturing code for the K=5 rate 1/2 conv coder.
    Definition: punct.c:137
    const struct gmr1_puncturer gmr1_punct_k5_13_P78
    GMR-1 P(7;8) puncturing code for the K=5 rate 1/3 conv coder.
    Definition: punct.c:431
    const struct gmr1_puncturer gmr1_punct_k5_13_Ps15
    GMR-1 Ps(1;5) puncturing code for the K=5 rate 1/3 conv coder.
    Definition: punct.c:417
    const struct gmr1_puncturer gmr1_punct_k9_12_P110
    GMR-1 P(1;10) puncturing code for the K=9 rate 1/2 conv coder.
    Definition: punct.c:990
    const struct gmr1_puncturer gmr1_punct_k5_12_P12
    GMR-1 P(1;2) puncturing code for the K=5 rate 1/2 conv coder.
    Definition: punct.c:239
    const struct gmr1_puncturer gmr1_punct_k9_13_P65
    GMR-1 P(6;5) puncturing code for the K=9 rate 1/3 conv coder.
    Definition: punct.c:1152
    const struct gmr1_puncturer gmr1_punct_k9_12_P45
    GMR-1 P(4;5) puncturing code for the K=9 rate 1/2 conv coder.
    Definition: punct.c:1022
    const struct gmr1_puncturer gmr1_punct_k5_12_P25
    GMR-1 P(2;5) puncturing code for the K=5 rate 1/2 conv coder.
    Definition: punct.c:149
    const struct gmr1_puncturer gmr1_punct_k7_12_P116
    GMR-1 P(1;16) puncturing code for the K=7 rate 1/2 conv coder.
    Definition: punct.c:536
    const struct gmr1_puncturer gmr1_punct_k5_12_P26
    GMR-1 P(2;6) puncturing code for the K=5 rate 1/2 conv coder.
    Definition: punct.c:343
    const struct gmr1_puncturer gmr1_punct_k9_12_P26
    GMR-1 P(2;6) puncturing code for the K=9 rate 1/2 conv coder.
    Definition: punct.c:975
    const struct gmr1_puncturer gmr1_punct_k5_12_D
    GMR-1 D puncturing code for the K=5 rate 1/2 conv coder.
    Definition: punct.c:300
    const struct gmr1_puncturer gmr1_punct_k7_12_P148
    GMR-1 P(1;48) puncturing code for the K=7 rate 1/2 conv coder.
    Definition: punct.c:561
    const struct gmr1_puncturer gmr1_punct_k5_12_P38
    GMR-1 P(3;8) puncturing code for the K=5 rate 1/2 conv coder.
    Definition: punct.c:326
    const struct gmr1_puncturer gmr1_punct_k9_14_P148
    GMR-1 P(14;8) puncturing code for the K=9 rate 1/4 conv coder.
    Definition: punct.c:1063
    const struct gmr1_puncturer gmr1_punct_k5_12_P412
    GMR-1 P(4;12) puncturing code for the K=5 rate 1/2 conv coder.
    Definition: punct.c:197
    const struct gmr1_puncturer gmr1_punct_k5_12_Ps25
    GMR-1 Ps(2;5) puncturing code for the K=5 rate 1/2 conv coder.
    Definition: punct.c:163
    const struct gmr1_puncturer gmr1_punct_k5_12_Ps12
    GMR-1 Ps(1;2) puncturing code for the K=5 rate 1/2 conv coder.
    Definition: punct.c:250
    const struct gmr1_puncturer gmr1_punct_k9_12_P34
    GMR-1 P(3;4) puncturing code for the K=9 rate 1/2 conv coder.
    Definition: punct.c:928
    const struct gmr1_puncturer gmr1_punct_k7_12_P1152
    GMR-1 P(1;152) puncturing code for the K=7 rate 1/2 conv coder.
    Definition: punct.c:711
    structure describing a puncturing code
    Definition: punct.h:37
    int N
    Rate of the punctured convolutional code (1/N)
    Definition: punct.h:40
    int L
    Length of the puncturing mask.
    Definition: punct.h:39
    int r
    Number of punctured bits.
    Definition: punct.h:38
    const uint8_t mask[]
    Puncturing mask.
    Definition: punct.h:41
    html/group__conv.html0000644000175000017500000006164714753471227014242 0ustar buildbuild osmo-gmr: Convolutional coding
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Files

    file  conv.h
     Osmocom GMR-1 convolutional coding header.
     
    file  conv.c
     Osmocom GMR-1 convolutional coding implementation.
     

    Variables

    const struct osmo_conv_code gmr1_conv_k5_12
     GMR-1 constraint length 5, rate 1/2 convolutional code.
     
    const struct osmo_conv_code gmr1_conv_k5_13
     GMR-1 constraint length 5, rate 1/3 convolutional code.
     
    const struct osmo_conv_code gmr1_conv_k5_14
     GMR-1 constraint length 5, rate 1/4 convolutional code.
     
    const struct osmo_conv_code gmr1_conv_k5_15
     GMR-1 constraint length 5, rate 1/5 convolutional code.
     
    const struct osmo_conv_code gmr1_conv_k6_14
     GMR-1 constraint length 6, rate 1/4 convolutional code.
     
    const struct osmo_conv_code gmr1_conv_k9_12
     GMR-1 constraint length 9, rate 1/2 convolutional code.
     
    const struct osmo_conv_code gmr1_conv_k9_13
     GMR-1 constraint length 9, rate 1/3 convolutional code.
     
    const struct osmo_conv_code gmr1_conv_k9_14
     GMR-1 constraint length 9, rate 1/4 convolutional code.
     
    const struct osmo_conv_code gmr1_conv_tch3
     GMR-1 TCH3 speech tail-biting convolutional code.
     
    const struct osmo_conv_code gmr1_conv_k5_12
     GMR-1 constraint length 5, rate 1/2 convolutional code. More...
     
    const struct osmo_conv_code gmr1_conv_k5_13
     GMR-1 constraint length 5, rate 1/3 convolutional code. More...
     
    const struct osmo_conv_code gmr1_conv_k5_14
     GMR-1 constraint length 5, rate 1/4 convolutional code. More...
     
    const struct osmo_conv_code gmr1_conv_k5_15
     GMR-1 constraint length 5, rate 1/5 convolutional code. More...
     
    const struct osmo_conv_code gmr1_conv_k6_14
     GMR-1 constraint length 6, rate 1/4 convolutional code. More...
     
    const struct osmo_conv_code gmr1_conv_k9_12
     GMR-1 constraint length 9, rate 1/2 convolutional code. More...
     
    const struct osmo_conv_code gmr1_conv_k9_13
     GMR-1 constraint length 9, rate 1/3 convolutional code. More...
     
    const struct osmo_conv_code gmr1_conv_k9_14
     GMR-1 constraint length 9, rate 1/4 convolutional code. More...
     
    const struct osmo_conv_code gmr1_conv_tch3
     GMR-1 TCH3 speech tail-biting convolutional code. More...
     

    Detailed Description

    Variable Documentation

    ◆ gmr1_conv_k5_12

    const struct osmo_conv_code gmr1_conv_k5_12
    Initial value:
    = {
    .N = 2,
    .K = 5,
    .len = 0,
    .next_output = gmr1_conv_k5_12_next_output,
    .term = CONV_TERM_FLUSH,
    .next_state = gmr1_conv_k5_next_state,
    }

    GMR-1 constraint length 5, rate 1/2 convolutional code.

    ◆ gmr1_conv_k5_13

    const struct osmo_conv_code gmr1_conv_k5_13
    Initial value:
    = {
    .N = 3,
    .K = 5,
    .len = 0,
    .term = CONV_TERM_FLUSH,
    .next_output = gmr1_conv_k5_13_next_output,
    .next_state = gmr1_conv_k5_next_state,
    }

    GMR-1 constraint length 5, rate 1/3 convolutional code.

    ◆ gmr1_conv_k5_14

    const struct osmo_conv_code gmr1_conv_k5_14
    Initial value:
    = {
    .N = 4,
    .K = 5,
    .len = 0,
    .term = CONV_TERM_FLUSH,
    .next_output = gmr1_conv_k5_14_next_output,
    .next_state = gmr1_conv_k5_next_state,
    }

    GMR-1 constraint length 5, rate 1/4 convolutional code.

    ◆ gmr1_conv_k5_15

    const struct osmo_conv_code gmr1_conv_k5_15
    Initial value:
    = {
    .N = 5,
    .K = 5,
    .len = 0,
    .term = CONV_TERM_FLUSH,
    .next_output = gmr1_conv_k5_15_next_output,
    .next_state = gmr1_conv_k5_next_state,
    }

    GMR-1 constraint length 5, rate 1/5 convolutional code.

    ◆ gmr1_conv_k6_14

    const struct osmo_conv_code gmr1_conv_k6_14
    Initial value:
    = {
    .N = 4,
    .K = 6,
    .len = 0,
    .term = CONV_TERM_FLUSH,
    .next_output = gmr1_conv_k6_14_next_output,
    .next_state = gmr1_conv_k6_next_state,
    }

    GMR-1 constraint length 6, rate 1/4 convolutional code.

    ◆ gmr1_conv_k9_12

    const struct osmo_conv_code gmr1_conv_k9_12
    Initial value:
    = {
    .N = 2,
    .K = 9,
    .len = 0,
    .term = CONV_TERM_FLUSH,
    .next_output = gmr1_conv_k9_12_next_output,
    .next_state = gmr1_conv_k9_next_state,
    }

    GMR-1 constraint length 9, rate 1/2 convolutional code.

    ◆ gmr1_conv_k9_13

    const struct osmo_conv_code gmr1_conv_k9_13
    Initial value:
    = {
    .N = 3,
    .K = 9,
    .len = 0,
    .term = CONV_TERM_FLUSH,
    .next_output = gmr1_conv_k9_13_next_output,
    .next_state = gmr1_conv_k9_next_state,
    }

    GMR-1 constraint length 9, rate 1/3 convolutional code.

    ◆ gmr1_conv_k9_14

    const struct osmo_conv_code gmr1_conv_k9_14
    Initial value:
    = {
    .N = 4,
    .K = 9,
    .len = 0,
    .term = CONV_TERM_FLUSH,
    .next_output = gmr1_conv_k9_14_next_output,
    .next_state = gmr1_conv_k9_next_state,
    }

    GMR-1 constraint length 9, rate 1/4 convolutional code.

    ◆ gmr1_conv_tch3

    const struct osmo_conv_code gmr1_conv_tch3
    Initial value:
    = {
    .N = 2,
    .K = 7,
    .len = 0,
    .term = CONV_TERM_TAIL_BITING,
    .next_output = gmr1_conv_tch3_next_output,
    .next_state = gmr1_conv_tch3_next_state,
    }

    GMR-1 TCH3 speech tail-biting convolutional code.

    html/group__pi4cxpsk.js0000644000175000017500000000721114753471227014475 0ustar buildbuildvar group__pi4cxpsk = [ [ "pi4cxpsk.h", "pi4cxpsk_8h.html", null ], [ "pi4cxpsk.c", "pi4cxpsk_8c.html", null ], [ "gmr1_pi4cxpsk_symbol", "structgmr1__pi4cxpsk__symbol.html", [ [ "data", "structgmr1__pi4cxpsk__symbol.html#a2fb97bf5773d1491eb1359e92d4832f6", null ], [ "idx", "structgmr1__pi4cxpsk__symbol.html#a6df1e39fbb19bd1adb54638c3bf705fe", null ], [ "mod_phase", "structgmr1__pi4cxpsk__symbol.html#ac3639293117223030a399cdb947bf22b", null ], [ "mod_val", "structgmr1__pi4cxpsk__symbol.html#a62299b3758847f06baa14861572d6160", null ] ] ], [ "gmr1_pi4cxpsk_modulation", "structgmr1__pi4cxpsk__modulation.html", [ [ "bits", "structgmr1__pi4cxpsk__modulation.html#a3519a1238c0cc46cc075724f8677c556", null ], [ "nbits", "structgmr1__pi4cxpsk__modulation.html#ad8affe9f19908748ed8c0e3865434201", null ], [ "rotation", "structgmr1__pi4cxpsk__modulation.html#a6fff12a91ce1a4168ac7e87e4c864aa6", null ], [ "syms", "structgmr1__pi4cxpsk__modulation.html#ad9c4201e4495b6894945a5fc4285e96c", null ] ] ], [ "gmr1_pi4cxpsk_sync", "structgmr1__pi4cxpsk__sync.html", [ [ "_ref", "structgmr1__pi4cxpsk__sync.html#a291c9b0776495cfb3c3f3a2fb4f87333", null ], [ "len", "structgmr1__pi4cxpsk__sync.html#a67853f80e05c48b01dad6e7f7bc6e39a", null ], [ "pos", "structgmr1__pi4cxpsk__sync.html#adabd2c21518c2bd6e37d4a8ad7facc6b", null ], [ "syms", "structgmr1__pi4cxpsk__sync.html#a89f2352b308757e77cab30d1153fdb8b", null ] ] ], [ "gmr1_pi4cxpsk_data", "structgmr1__pi4cxpsk__data.html", [ [ "len", "structgmr1__pi4cxpsk__data.html#a14bc0a4787038e79298c46fa85784f13", null ], [ "pos", "structgmr1__pi4cxpsk__data.html#a8fcd05f64567745c7e7435334f1f593c", null ] ] ], [ "gmr1_pi4cxpsk_burst", "structgmr1__pi4cxpsk__burst.html", [ [ "data", "structgmr1__pi4cxpsk__burst.html#a743e2058421775d2033d5e455e7be163", null ], [ "ebits", "structgmr1__pi4cxpsk__burst.html#a8205aeb2d88053361619f1baa0593a89", null ], [ "guard_post", "structgmr1__pi4cxpsk__burst.html#a5985baf01b937f381470bb0d5810ea00", null ], [ "guard_pre", "structgmr1__pi4cxpsk__burst.html#a30a0e6c90559f9b66def7814fe8f9af2", null ], [ "len", "structgmr1__pi4cxpsk__burst.html#ad164674725c949673b0a2ec24e0f0000", null ], [ "mod", "structgmr1__pi4cxpsk__burst.html#a835af391ae1715b41cbdd52efd1b378a", null ], [ "sync", "structgmr1__pi4cxpsk__burst.html#a68e57bf2eeee31d4a9f5efb2dfb7a145", null ] ] ], [ "GMR1_MAX_SYM_EBITS", "group__pi4cxpsk.html#ga3a551a9ff371809aa32f6bbeaf48fc62", null ], [ "GMR1_MAX_SYNC", "group__pi4cxpsk.html#ga7078b941f0b0a04ff9ddf290452b93a9", null ], [ "GMR1_MAX_SYNC_SYMS", "group__pi4cxpsk.html#gad1c5069c814820ccbc9abcc700fb6193", null ], [ "gmr1_pi4cxpsk_demod", "group__pi4cxpsk.html#ga39685a0ee6daeb04f7ca70bbd6d1fe29", null ], [ "gmr1_pi4cxpsk_detect", "group__pi4cxpsk.html#ga1490fd560c08a9468c40ff69f2cae2bb", null ], [ "gmr1_pi4cxpsk_mod", "group__pi4cxpsk.html#ga554b1c56cd86f4e9c9cbdcc455212770", null ], [ "gmr1_pi4cxpsk_mod_order", "group__pi4cxpsk.html#ga82887564b076046745f705f7c27c930e", null ], [ "gmr1_pi2cbpsk", "group__pi4cxpsk.html#ga37214979bb79f5d23784ba1eda5fa384", null ], [ "gmr1_pi2cbpsk", "group__pi4cxpsk.html#ga37214979bb79f5d23784ba1eda5fa384", null ], [ "gmr1_pi4cbpsk", "group__pi4cxpsk.html#gaeae7cf33a9694b1911deefb535f5c1b8", null ], [ "gmr1_pi4cbpsk", "group__pi4cxpsk.html#gaeae7cf33a9694b1911deefb535f5c1b8", null ], [ "gmr1_pi4cqpsk", "group__pi4cxpsk.html#ga652dcdb5ad05ce39ebef8a5b97f6d516", null ], [ "gmr1_pi4cqpsk", "group__pi4cxpsk.html#ga652dcdb5ad05ce39ebef8a5b97f6d516", null ] ];html/dir_de2ed61ed77189ce3af8769c70dd3919.html0000644000175000017500000002341414753471227017241 0ustar buildbuild osmo-gmr: src/l1 Directory Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    l1 Directory Reference

    Files

    file  a5.c
     Osmocom GMR-1 A5 ciphering algorithm implementation.
     
    file  bcch.c
     Osmocom GMR-1 BCCH channel coding implementation.
     
    file  ccch.c
     Osmocom GMR-1 CCCH (PCH/AGCH) channel coding implementation.
     
    file  conv.c
     Osmocom GMR-1 convolutional coding implementation.
     
    file  crc.c
     Osmocom GMR-1 CRC implementation.
     
    file  facch3.c
     Osmocom GMR-1 FACCH3 channel coding implementation.
     
    file  facch9.c
     Osmocom GMR-1 FACCH9 channel coding implementation.
     
    file  interleave.c
     Osmocom GMR-1 interleaving implementation.
     
    file  punct.c
     Osmocom GMR-1 puncturing implementation.
     
    file  rach.c
     Osmocom GMR-1 RACH channel coding implementation.
     
    file  scramb.c
     Osmocom GMR-1 scrambling implementation.
     
    file  tch3.c
     Osmocom GMR-1 TCH3 channel coding implementation.
     
    file  tch9.c
     Osmocom GMR-1 TCH9 channel coding implementation.
     
    file  xch_dc12.c
     Osmocom GMR-1 xCH over DC12 channel coding implementation.
     
    html/sdr_2defs_8h_source.html0000644000175000017500000002231514753471227015541 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/sdr/defs.h Source File
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    defs.h
    Go to the documentation of this file.
    1/* GMR-1 SDR - Global definitions */
    2/* See GMR-1 05.004 (ETSI TS 101 376-5-4 V1.2.1) */
    3
    4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
    5 * All Rights Reserved
    6 *
    7 * This program is free software; you can redistribute it and/or modify
    8 * it under the terms of the GNU Affero General Public License as published by
    9 * the Free Software Foundation; either version 3 of the License, or
    10 * (at your option) any later version.
    11 *
    12 * This program is distributed in the hope that it will be useful,
    13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    15 * GNU Affero General Public License for more details.
    16 *
    17 * You should have received a copy of the GNU Affero General Public License
    18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
    19 */
    20
    21#ifndef __OSMO_GMR1_SDR_DEFS_H__
    22#define __OSMO_GMR1_SDR_DEFS_H__
    23
    33#define GMR1_SYM_RATE 23400
    35#if 0
    36#define DEBUG_SIGNAL(n,v) osmo_cxvec_dbg_dump(v, "/tmp/dbg_" n ".cfile");
    37#else
    38#define DEBUG_SIGNAL(n,v) do { } while (0)
    39#endif
    40
    41
    44#endif /* __OSMO_GMR1_SDR_DEFS_H__ */
    html/dir_49d8fb8de83b72576102f4228b661ee1.js0000644000175000017500000000043714753471227016452 0ustar buildbuildvar dir_49d8fb8de83b72576102f4228b661ee1 = [ [ "defs.h", "sdr_2defs_8h.html", "sdr_2defs_8h" ], [ "dkab.h", "dkab_8h.html", "dkab_8h" ], [ "fcch.h", "fcch_8h.html", "fcch_8h" ], [ "nb.h", "nb_8h.html", "nb_8h" ], [ "pi4cxpsk.h", "pi4cxpsk_8h.html", "pi4cxpsk_8h" ] ];html/group__nb.html0000644000175000017500000007747214753471227013677 0ustar buildbuild osmo-gmr: Normal bursts
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Files

    file  nb.h
     Osmocom GMR-1 Normal bursts header.
     
    file  nb.c
     Osmocom GMR-1 Normal bursts descriptions.
     

    Variables

    struct gmr1_pi4cxpsk_burst gmr1_bcch_burst
     BCCH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.2.
     
    struct gmr1_pi4cxpsk_burst gmr1_dc2_burst
     DC2 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.4.
     
    struct gmr1_pi4cxpsk_burst gmr1_dc6_burst
     DC6 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.5.
     
    struct gmr1_pi4cxpsk_burst gmr1_dc12_burst
     DC12 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V3.1.1) - Section 7.4.16.
     
    struct gmr1_pi4cxpsk_burst gmr1_nt3_speech_burst
     NT3 bursts for encoded speech See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.8.1.
     
    struct gmr1_pi4cxpsk_burst gmr1_nt3_facch_burst
     NT3 bursts for FACCH See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.8.2.
     
    struct gmr1_pi4cxpsk_burst gmr1_nt6_burst
     NT6 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.9.
     
    struct gmr1_pi4cxpsk_burst gmr1_nt9_burst
     NT9 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.10.
     
    struct gmr1_pi4cxpsk_burst gmr1_rach_burst
     RACH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.11.
     
    struct gmr1_pi4cxpsk_burst gmr1_sdcch_burst
     SDCCH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.12.
     
    struct gmr1_pi4cxpsk_burst gmr1_bcch_burst
     BCCH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.2. More...
     
    struct gmr1_pi4cxpsk_burst gmr1_dc2_burst
     DC2 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.4. More...
     
    struct gmr1_pi4cxpsk_burst gmr1_dc6_burst
     DC6 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.5. More...
     
    struct gmr1_pi4cxpsk_burst gmr1_dc12_burst
     DC12 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V3.1.1) - Section 7.4.16. More...
     
    struct gmr1_pi4cxpsk_burst gmr1_nt3_speech_burst
     NT3 bursts for encoded speech See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.8.1. More...
     
    struct gmr1_pi4cxpsk_burst gmr1_nt3_facch_burst
     NT3 bursts for FACCH See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.8.2. More...
     
    struct gmr1_pi4cxpsk_burst gmr1_nt6_burst
     NT6 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.9. More...
     
    struct gmr1_pi4cxpsk_burst gmr1_nt9_burst
     NT9 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.10. More...
     
    struct gmr1_pi4cxpsk_burst gmr1_rach_burst
     RACH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.11. More...
     
    struct gmr1_pi4cxpsk_burst gmr1_sdcch_burst
     SDCCH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.12. More...
     

    Detailed Description

    Variable Documentation

    ◆ gmr1_bcch_burst

    struct gmr1_pi4cxpsk_burst gmr1_bcch_burst
    Initial value:
    = {
    .mod = &gmr1_pi4cqpsk,
    .guard_pre = 2,
    .guard_post = 3,
    .len = 39 * 6,
    .ebits = 424,
    .sync = { _bcch_sync, NULL },
    .data = _bcch_data,
    }
    struct gmr1_pi4cxpsk_modulation gmr1_pi4cqpsk
    pi4-CQPSK modulation description
    Definition: pi4cxpsk.c:110

    BCCH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.2.

    ◆ gmr1_dc12_burst

    struct gmr1_pi4cxpsk_burst gmr1_dc12_burst
    Initial value:
    = {
    .mod = &gmr1_pi2cbpsk,
    .guard_pre = 2,
    .guard_post = 3,
    .len = 39 * 12,
    .ebits = 432,
    .sync = { _dc12_sync, NULL },
    .data = _dc12_data,
    }
    struct gmr1_pi4cxpsk_modulation gmr1_pi2cbpsk
    pi2-CBPSK modulation description
    Definition: pi4cxpsk.c:77

    DC12 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V3.1.1) - Section 7.4.16.

    ◆ gmr1_dc2_burst

    struct gmr1_pi4cxpsk_burst gmr1_dc2_burst
    Initial value:
    = {
    .mod = &gmr1_pi4cqpsk,
    .guard_pre = 2,
    .guard_post = 3,
    .len = 39 * 2,
    .ebits = 132,
    .sync = { _dc2_sync, NULL },
    .data = _dc2_data,
    }

    DC2 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.4.

    ◆ gmr1_dc6_burst

    struct gmr1_pi4cxpsk_burst gmr1_dc6_burst
    Initial value:
    = {
    .mod = &gmr1_pi4cqpsk,
    .guard_pre = 2,
    .guard_post = 3,
    .len = 39 * 6,
    .ebits = 432,
    .sync = { _dc6_sync, NULL },
    .data = _dc6_data,
    }

    DC6 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.5.

    ◆ gmr1_nt3_facch_burst

    struct gmr1_pi4cxpsk_burst gmr1_nt3_facch_burst
    Initial value:
    = {
    .mod = &gmr1_pi4cbpsk,
    .guard_pre = 2,
    .guard_post = 3,
    .len = 39 * 3,
    .ebits = 104,
    .sync = { _nt3_facch_sync0, _nt3_facch_sync1, NULL },
    .data = _nt3_facch_data,
    }
    struct gmr1_pi4cxpsk_modulation gmr1_pi4cbpsk
    pi4-CBPSK modulation description
    Definition: pi4cxpsk.c:85

    NT3 bursts for FACCH See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.8.2.

    ◆ gmr1_nt3_speech_burst

    struct gmr1_pi4cxpsk_burst gmr1_nt3_speech_burst
    Initial value:
    = {
    .mod = &gmr1_pi4cqpsk,
    .guard_pre = 2,
    .guard_post = 3,
    .len = 39 * 3,
    .ebits = 212,
    .sync = { _nt3_speech_sync, NULL },
    .data = _nt3_speech_data,
    }

    NT3 bursts for encoded speech See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.8.1.

    ◆ gmr1_nt6_burst

    struct gmr1_pi4cxpsk_burst gmr1_nt6_burst
    Initial value:
    = {
    .mod = &gmr1_pi4cqpsk,
    .guard_pre = 2,
    .guard_post = 3,
    .len = 39 * 6,
    .ebits = 434,
    .sync = { _nt6_facch_sync, _nt6_data_sync, NULL },
    .data = _nt6_data,
    }

    NT6 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.9.

    ◆ gmr1_nt9_burst

    struct gmr1_pi4cxpsk_burst gmr1_nt9_burst
    Initial value:
    = {
    .mod = &gmr1_pi4cqpsk,
    .guard_pre = 2,
    .guard_post = 3,
    .len = 39 * 9,
    .ebits = 662,
    .sync = { _nt9_facch_sync, _nt9_data_sync, NULL },
    .data = _nt9_data,
    }

    NT9 bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.10.

    ◆ gmr1_rach_burst

    struct gmr1_pi4cxpsk_burst gmr1_rach_burst
    Initial value:
    = {
    .mod = &gmr1_pi4cqpsk,
    .guard_pre = 2,
    .guard_post = 3,
    .len = 39 * 9,
    .ebits = 494,
    .sync = { _rach_sync, NULL },
    .data = _rach_data,
    }

    RACH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.11.

    ◆ gmr1_sdcch_burst

    struct gmr1_pi4cxpsk_burst gmr1_sdcch_burst
    Initial value:
    = {
    .mod = &gmr1_pi4cbpsk,
    .guard_pre = 2,
    .guard_post = 3,
    .len = 39 * 6,
    .ebits = 208,
    .sync = { _sdcch_sync0, _sdcch_sync1, _sdcch_sync2, _sdcch_sync3 },
    .data = _sdcch_data,
    }

    SDCCH bursts See GMR-1 05.002 (ETSI TS 101 376-5-2 V1.1.1) - Section 7.4.12.

    html/group__l1.js0000644000175000017500000000043714753471227013247 0ustar buildbuildvar group__l1 = [ [ "A5 ciphering algorithm", "group__a5.html", "group__a5" ], [ "Channel coding primitives", "group__l1__prim.html", "group__l1__prim" ], [ "Channel coder / decoders", "group__l1__chan.html", "group__l1__chan" ], [ "defs.h", "l1_2defs_8h.html", null ] ];html/dir_9c8ef0db9d7395bd53b81b89d3ccbcb1.js0000644000175000017500000000013614753471227017104 0ustar buildbuildvar dir_9c8ef0db9d7395bd53b81b89d3ccbcb1 = [ [ "codec.h", "codec_8h.html", "codec_8h" ] ];html/frame_8c.js0000644000175000017500000000051414753471227013040 0ustar buildbuildvar frame_8c = [ [ "ambe_frame_decode_params", "group__codec__private.html#ga55a71c63c53e21c1d6fc9c91ddf519cd", null ], [ "ambe_frame_unpack_raw", "group__codec__private.html#ga8a4e007b142973be5b44ef1637c9bfee", null ], [ "ambe_subframe_expand", "group__codec__private.html#ga2d3ff962344089d1a44fd0d659c55df8", null ] ];html/nav_g.png0000644000175000017500000000013714753471226012616 0ustar buildbuild‰PNG  IHDRô1&IDATxíÝ1 ÁOHf„á_ ->~¸åM iËMèÀƒS½ü‚<IEND®B`‚html/jquery.js0000644000175000017500000053125514753471226012705 0ustar buildbuild/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
    ",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
    "),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
    ").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
    "),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
    "),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element },_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler * Licensed under MIT * @author Ariel Flesler * @version 2.1.2 */ ;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 * http://www.smartmenus.org/ * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
    ').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$});html/conv_8c.html0000644000175000017500000002516114753471227013250 0ustar buildbuild osmo-gmr: src/l1/conv.c File Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Osmocom GMR-1 convolutional coding implementation. More...

    #include <stdint.h>
    #include <osmocom/core/conv.h>

    Variables

    const struct osmo_conv_code gmr1_conv_k5_12
     GMR-1 constraint length 5, rate 1/2 convolutional code. More...
     
    const struct osmo_conv_code gmr1_conv_k5_13
     GMR-1 constraint length 5, rate 1/3 convolutional code. More...
     
    const struct osmo_conv_code gmr1_conv_k5_14
     GMR-1 constraint length 5, rate 1/4 convolutional code. More...
     
    const struct osmo_conv_code gmr1_conv_k5_15
     GMR-1 constraint length 5, rate 1/5 convolutional code. More...
     
    const struct osmo_conv_code gmr1_conv_k6_14
     GMR-1 constraint length 6, rate 1/4 convolutional code. More...
     
    const struct osmo_conv_code gmr1_conv_k9_12
     GMR-1 constraint length 9, rate 1/2 convolutional code. More...
     
    const struct osmo_conv_code gmr1_conv_k9_13
     GMR-1 constraint length 9, rate 1/3 convolutional code. More...
     
    const struct osmo_conv_code gmr1_conv_k9_14
     GMR-1 constraint length 9, rate 1/4 convolutional code. More...
     
    const struct osmo_conv_code gmr1_conv_tch3
     GMR-1 TCH3 speech tail-biting convolutional code. More...
     

    Detailed Description

    Osmocom GMR-1 convolutional coding implementation.

    html/group__crc.js0000644000175000017500000000111214753471227013471 0ustar buildbuildvar group__crc = [ [ "crc.h", "crc_8h.html", null ], [ "crc.c", "crc_8c.html", null ], [ "gmr1_crc12", "group__crc.html#ga39976cbbb95bf2ee17510e23e66e9662", null ], [ "gmr1_crc12", "group__crc.html#ga39976cbbb95bf2ee17510e23e66e9662", null ], [ "gmr1_crc16", "group__crc.html#ga4c203dc885ad2c23dbc5e26457d2b52e", null ], [ "gmr1_crc16", "group__crc.html#ga4c203dc885ad2c23dbc5e26457d2b52e", null ], [ "gmr1_crc8", "group__crc.html#ga475488b3214308419d2d8ced50df5257", null ], [ "gmr1_crc8", "group__crc.html#ga475488b3214308419d2d8ced50df5257", null ] ];html/functions_vars.html0000644000175000017500000003147714753471227014763 0ustar buildbuild osmo-gmr: Data Fields - Variables
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
     

    - _ -

    - b -

    - d -

    - e -

    - f -

    - g -

    - i -

    - k -

    - l -

    - m -

    - n -

    - p -

    - r -

    - s -

    - t -

    - u -

    - v -

    - w -

    html/group__bcch.js0000644000175000017500000000042714753471227013631 0ustar buildbuildvar group__bcch = [ [ "bcch.h", "bcch_8h.html", null ], [ "bcch.c", "bcch_8c.html", null ], [ "gmr1_bcch_decode", "group__bcch.html#ga73717708a391d84da44845fbaf2e73a4", null ], [ "gmr1_bcch_encode", "group__bcch.html#ga7a8f900d4c5b81ad9a903ee9b7d6b9e7", null ] ];html/facch9_8c.js0000644000175000017500000000031514753471227013102 0ustar buildbuildvar facch9_8c = [ [ "gmr1_facch9_decode", "group__facch9.html#ga42d1d80d7a1bfab7d92ad0d28d8f87c6", null ], [ "gmr1_facch9_encode", "group__facch9.html#ga8956be2f31fd48853350bc092fd1797f", null ] ];html/structgmr1__fcch__burst.js0000644000175000017500000000032014753471227016162 0ustar buildbuildvar structgmr1__fcch__burst = [ [ "freq", "structgmr1__fcch__burst.html#af256a13136949602fd41e4da1c569435", null ], [ "len", "structgmr1__fcch__burst.html#a8f5f11f6f9b9b7aa2b505f7e4d6ca44e", null ] ];html/rach_8c.html0000644000175000017500000001546014753471227013221 0ustar buildbuild osmo-gmr: src/l1/rach.c File Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Osmocom GMR-1 RACH channel coding implementation. More...

    #include <stdint.h>
    #include <stdlib.h>
    #include <string.h>
    #include <osmocom/core/bits.h>
    #include <osmocom/core/conv.h>
    #include <osmocom/core/crcgen.h>
    #include <osmocom/gmr1/l1/conv.h>
    #include <osmocom/gmr1/l1/crc.h>
    #include <osmocom/gmr1/l1/interleave.h>
    #include <osmocom/gmr1/l1/scramb.h>

    Functions

    void gmr1_rach_encode (ubit_t *bits_e, const uint8_t *rach, uint8_t sb_mask)
     Stateless GMR-1 RACH channel coder. More...
     
    int gmr1_rach_decode (uint8_t *rach, const sbit_t *bits_e, uint8_t sb_mask, int *conv_rv, int *crc_rv)
     Stateless GMR-1 RACH channel decoder. More...
     

    Detailed Description

    Osmocom GMR-1 RACH channel coding implementation.

    html/tch9_8h_source.html0000644000175000017500000003766414753471227014552 0ustar buildbuild osmo-gmr: include/osmocom/gmr1/l1/tch9.h Source File
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1
    tch9.h
    Go to the documentation of this file.
    1/* GMR-1 TCH9 channel coding */
    2/* See GMR-1 05.003 (ETSI TS 101 376-5-3 V1.2.1) - Section 5.3 */
    3
    4/* (C) 2011-2019 by Sylvain Munaut <tnt@246tNt.com>
    5 * All Rights Reserved
    6 *
    7 * This program is free software; you can redistribute it and/or modify
    8 * it under the terms of the GNU Affero General Public License as published by
    9 * the Free Software Foundation; either version 3 of the License, or
    10 * (at your option) any later version.
    11 *
    12 * This program is distributed in the hope that it will be useful,
    13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    15 * GNU Affero General Public License for more details.
    16 *
    17 * You should have received a copy of the GNU Affero General Public License
    18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
    19 */
    20
    21#ifndef __OSMO_GMR1_L1_TCH9_H__
    22#define __OSMO_GMR1_L1_TCH9_H__
    23
    33#include <stdint.h>
    34#include <osmocom/core/bits.h>
    35
    36struct gmr1_interleaver;
    37
    38
    45};
    46
    47void gmr1_tch9_encode(ubit_t *bits_e, const uint8_t *l2, enum gmr1_tch9_mode mode,
    48 const ubit_t *bits_sacch, const ubit_t *bits_status,
    49 const ubit_t *ciph, struct gmr1_interleaver *il);
    50void gmr1_tch9_decode(uint8_t *l2, sbit_t *bits_sacch, sbit_t *bits_status,
    51 const sbit_t *bits_e, enum gmr1_tch9_mode mode,
    52 const ubit_t *ciph, struct gmr1_interleaver *il,
    53 int *conv_rv);
    54
    55
    58#endif /* __OSMO_GMR1_L1_TCH9_H__ */
    void gmr1_tch9_decode(uint8_t *l2, sbit_t *bits_sacch, sbit_t *bits_status, const sbit_t *bits_e, enum gmr1_tch9_mode mode, const ubit_t *ciph, struct gmr1_interleaver *il, int *conv_rv)
    GMR-1 TCH9 channel decoder.
    Definition: tch9.c:140
    gmr1_tch9_mode
    TCH9 possible data rates.
    Definition: tch9.h:40
    void gmr1_tch9_encode(ubit_t *bits_e, const uint8_t *l2, enum gmr1_tch9_mode mode, const ubit_t *bits_sacch, const ubit_t *bits_status, const ubit_t *ciph, struct gmr1_interleaver *il)
    GMR-1 TCH9 channel coder.
    Definition: tch9.c:95
    @ GMR1_TCH9_4k8
    TCH9 with 4.8k data rate.
    Definition: tch9.h:42
    @ GMR1_TCH9_9k6
    TCH9 with 9.6k data rate.
    Definition: tch9.h:43
    @ GMR1_TCH9_2k4
    TCH9 with 2.4k data rate.
    Definition: tch9.h:41
    @ GMR1_TCH9_MAX
    Dummy value.
    Definition: tch9.h:44
    GMR1 inter-burst (de)interleaver state.
    Definition: interleave.h:44
    html/crc_8c.html0000644000175000017500000001537514753471227013060 0ustar buildbuild osmo-gmr: src/l1/crc.c File Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    Osmocom GMR-1 CRC implementation. More...

    #include <stdint.h>
    #include <osmocom/core/bits.h>
    #include <osmocom/core/crcgen.h>

    Variables

    const struct osmo_crc8gen_code gmr1_crc8
     GMR-1 CRC8 g8(D) = D8 + D7 + D4 + D3 + D + 1. More...
     
    const struct osmo_crc16gen_code gmr1_crc12
     GMR-1 CRC12 g12(D) = D12 + D11 + D3 + D2 + D + 1. More...
     
    const struct osmo_crc16gen_code gmr1_crc16
     GMR-1 CRC16 g16(D) = D16 + D12 + D5 + 1. More...
     

    Detailed Description

    Osmocom GMR-1 CRC implementation.

    html/structgmr1__interleaver.html0000644000175000017500000001570214753471227016563 0ustar buildbuild osmo-gmr: gmr1_interleaver Struct Reference
    osmo-gmr 0.2.104-2b98
    Osmocom GMR-1

    GMR1 inter-burst (de)interleaver state. More...

    #include <interleave.h>

    Data Fields

    int N
     Interleaver depth.
     
    int K
     Interleaver width.
     
    int n
     Current burst number.
     
    uint8_t * bits_cpp
     c'' bit state storage
     

    Detailed Description

    GMR1 inter-burst (de)interleaver state.


    The documentation for this struct was generated from the following file: