html/0000755000175000017500000000000015067055114011006 5ustar buildbuildhtml/iqbal_8h.js0000644000175000017500000000111415067055114013030 0ustar buildbuildvar iqbal_8h = [ [ "osmo_iqbal_cxvec_estimate", "group__iqbal.html#ga19298f48b07828c19bc54038d5abe5ad", null ], [ "osmo_iqbal_cxvec_fix", "group__iqbal.html#ga978fbf1c9f01694852c561c95d5ceb9d", null ], [ "osmo_iqbal_cxvec_optimize", "group__iqbal.html#gac74f9d37e2153fdf954e592b36f7c7c0", null ], [ "osmo_iqbal_estimate", "group__iqbal.html#ga23c6972ae206b4a60dbe49d954fc9caa", null ], [ "osmo_iqbal_fix", "group__iqbal.html#gaaca46bab25fe24148c3cb3c4d2158c79", null ], [ "osmo_iqbal_default_opts", "group__iqbal.html#ga2f0587c233b021d72a98a11312ff5e9f", null ] ];html/dir_5b8fd40c25b8cda2528024e092698ab5.js0000644000175000017500000000046415067055114016504 0ustar buildbuildvar dir_5b8fd40c25b8cda2528024e092698ab5 = [ [ "cfile.h", "cfile_8h.html", "cfile_8h" ], [ "cxvec.h", "cxvec_8h.html", "cxvec_8h" ], [ "cxvec_math.h", "cxvec__math_8h.html", "cxvec__math_8h" ], [ "iqbal.h", "iqbal_8h.html", "iqbal_8h" ], [ "version.h", "version_8h_source.html", null ] ];html/group__cxvec__math.html0000644000175000017500000014175515067055114015544 0ustar buildbuild libosmodsp: Complex vectors math and signal processing
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
Complex vectors math and signal processing

Files

file  cxvec_math.h
 Osmocom Complex vectors math header.
 
file  cxvec_math.c
 Osmocom Complex vectors math implementation.
 

Enumerations

enum  osmo_cxvec_conv_type { CONV_FULL_SPAN , CONV_OVERLAP_ONLY , CONV_NO_DELAY }
 Various possible types of convolution span. More...
 
enum  osmo_cxvec_peak_alg { PEAK_WEIGH_WIN , PEAK_WEIGH_WIN_CENTER , PEAK_EARLY_LATE }
 Various possible peak finding algorithms. More...
 

Functions

static float osmo_sinc (float x)
 Unnormalized sinc function. More...
 
static float osmo_normsqf (float complex c)
 Squared norm of a given complex. More...
 
struct osmo_cxvecosmo_cxvec_scale (const struct osmo_cxvec *in, float complex scale, struct osmo_cxvec *out)
 Scale a complex vector (multiply by a constant) More...
 
struct osmo_cxvecosmo_cxvec_rotate (const struct osmo_cxvec *in, float rps, struct osmo_cxvec *out)
 Rotate a complex vector (frequency shift) More...
 
struct osmo_cxvecosmo_cxvec_delay (const struct osmo_cxvec *in, float delay, struct osmo_cxvec *out)
 Fractionally delay a vector while maintaining its length. More...
 
struct osmo_cxvecosmo_cxvec_convolve (const struct osmo_cxvec *f, const struct osmo_cxvec *g, enum osmo_cxvec_conv_type type, struct osmo_cxvec *out)
 Convolve two complex vectors. More...
 
struct osmo_cxvecosmo_cxvec_correlate (const struct osmo_cxvec *f, const struct osmo_cxvec *g, int g_corr_step, struct osmo_cxvec *out)
 Cross-correlate two complex vectors. More...
 
float complex osmo_cxvec_interpolate_point (const struct osmo_cxvec *cv, float pos)
 Interpolate any fractional position in a vector using sinc filtering. More...
 
int osmo_cxvec_peaks_scan (const struct osmo_cxvec *cv, int *peaks_idx, int N)
 Find the index of the N highest energy ( $|x|^2$) peaks. More...
 
float osmo_cxvec_peak_energy_find (const struct osmo_cxvec *cv, int win_size, enum osmo_cxvec_peak_alg alg, float complex *peak_val_p)
 Find the maximum energy ( $|x|^2$) peak in a sequence. More...
 
struct osmo_cxvecosmo_cxvec_sig_normalize (const struct osmo_cxvec *sig, int decim, float freq_shift, struct osmo_cxvec *out)
 'Normalize' an IQ signal and apply decimation/frequency shift More...
 

Detailed Description

Enumeration Type Documentation

◆ osmo_cxvec_conv_type

Various possible types of convolution span.

Enumerator
CONV_FULL_SPAN 

Full span (every possible overlap of f onto g)

CONV_OVERLAP_ONLY 

Every possible full overlap of f onto g.

CONV_NO_DELAY 

Center f sequence on every g sample.

◆ osmo_cxvec_peak_alg

Various possible peak finding algorithms.

Enumerator
PEAK_WEIGH_WIN 

Weigthed position for the max pwr window.

PEAK_WEIGH_WIN_CENTER 

Weighted position of the peak centered window.

PEAK_EARLY_LATE 

Early-Late balancing around peak.

Function Documentation

◆ osmo_cxvec_convolve()

struct osmo_cxvec * osmo_cxvec_convolve ( const struct osmo_cxvec f,
const struct osmo_cxvec g,
enum osmo_cxvec_conv_type  type,
struct osmo_cxvec out 
)

Convolve two complex vectors.

Parameters
[in]fFirst input complex vector
[in]gSecond input complex vector
[in]typeThe convolution span type
[out]outOutput complex vector
Returns
The output complex vector (or NULL if error)

The convolution of discrete sequences is defined as :

$(f * g)[n] = \sum_{m=-\infty}^{\infty} f[m] \; g[n-m]$

Altough the mathematical operation is commutative, the constraint of implementation limit this method. Depending on the type of span chosen, it might not be and it's always recommended that 'g' be the longer sequence. It should not be much of a limitation when this methos is used for filtering or pulseshaping : use 'f' as the filter and 'g' as the signal.

The output vector parameter 'out' can be NULL to allocate a new vector. If it's not NULL, it must be long enough to contain the result (length depends on the exact convolution type)

References CONV_FULL_SPAN, CONV_NO_DELAY, CONV_OVERLAP_ONLY, osmo_cxvec::data, osmo_cxvec::flags, osmo_cxvec::len, osmo_cxvec::max_len, and osmo_cxvec_alloc().

Referenced by osmo_cxvec_delay().

◆ osmo_cxvec_correlate()

struct osmo_cxvec * osmo_cxvec_correlate ( const struct osmo_cxvec f,
const struct osmo_cxvec g,
int  g_corr_step,
struct osmo_cxvec out 
)

Cross-correlate two complex vectors.

Parameters
[in]fFirst input complex vector
[in]gSecond input complex vector
[in]g_corr_stepAllow for oversampling of 'g' compared to 'f'
[out]outOutput complex vector
Returns
The output complex vector (or NULL if error)

The cross-correlation of discrete sequences is defined as :

$(f \star g)[n] = \sum_{m=-\infty}^{\infty} f^*[m] \; g[n+m]$

In this implementation, the output vector will be for every n value between 0 and (g->len - f->len + 1). This assumes that g is the longer sequence and we 'fit' f at every positition inside it.

With the parameter g_corr_step, it's also possible to have a g sequence that is oversampled with regard to f. (if g_corr_step > 1)

The output vector parameter 'out' can be NULL to allocate a new vector. If it's not NULL, it must be long enough to contain the result (i.e. g->len - f->len + 1)

References osmo_cxvec::data, osmo_cxvec::flags, osmo_cxvec::len, osmo_cxvec::max_len, and osmo_cxvec_alloc().

◆ osmo_cxvec_delay()

struct osmo_cxvec * osmo_cxvec_delay ( const struct osmo_cxvec in,
float  delay,
struct osmo_cxvec out 
)

Fractionally delay a vector while maintaining its length.

Parameters
[in]inInput complex vector
[in]delayThe fractional delay to apply
[out]outOutput complex vector
Returns
The output complex vector (or NULL if error)

The output always has the same length. Samples pushed out by the delays are lost and new ones filled with zeroes are pushed in.

The output vector parameter 'out' can be NULL to allocate a new vector, or can be equal to the 'in' input vector to perform the transform in-place. If it's different, it must be long enough to contain the result (i.e. in->len)

References CONV_NO_DELAY, osmo_cxvec::data, osmo_cxvec::flags, osmo_cxvec::len, osmo_cxvec::max_len, osmo_cxvec_alloc(), osmo_cxvec_convolve(), osmo_cxvec_free(), osmo_cxvec_init_from_data(), and osmo_sinc().

◆ osmo_cxvec_interpolate_point()

float complex osmo_cxvec_interpolate_point ( const struct osmo_cxvec cv,
float  pos 
)

Interpolate any fractional position in a vector using sinc filtering.

Parameters
[in]cvInput complex vector
[in]posPosition to interpolate

pos must be >= 0 and < cv->len

References osmo_cxvec::data, osmo_cxvec::flags, osmo_cxvec::len, and osmo_sinc().

Referenced by osmo_cxvec_peak_energy_find().

◆ osmo_cxvec_peak_energy_find()

float osmo_cxvec_peak_energy_find ( const struct osmo_cxvec cv,
int  win_size,
enum osmo_cxvec_peak_alg  alg,
float complex *  peak_val_p 
)

Find the maximum energy ( $|x|^2$) peak in a sequence.

Parameters
[in]cvInput complex vector
[in]win_sizeSize of the window (for algorithms using windows)
[in]algPeak detection algorithm to use
[out]peak_val_pReturns interpolated peak value if non-NULL
Returns
Peak position with sub-sample accuracy

References osmo_cxvec::data, osmo_cxvec::len, osmo_cxvec_interpolate_point(), osmo_normsqf(), PEAK_EARLY_LATE, PEAK_WEIGH_WIN, and PEAK_WEIGH_WIN_CENTER.

◆ osmo_cxvec_peaks_scan()

int osmo_cxvec_peaks_scan ( const struct osmo_cxvec cv,
int *  peaks_idx,
int  N 
)

Find the index of the N highest energy ( $|x|^2$) peaks.

Parameters
[in]cvInput complex vector
[out]peaks_idxReturn array of the peak indexes
[in]Sizeof the peaks_idx return array
Returns
Number of peaks (will be N if there is enough points)

References osmo_cxvec::data, osmo_cxvec::len, and osmo_normsqf().

◆ osmo_cxvec_rotate()

struct osmo_cxvec * osmo_cxvec_rotate ( const struct osmo_cxvec in,
float  rps,
struct osmo_cxvec out 
)

Rotate a complex vector (frequency shift)

Parameters
[in]inInput complex vector
[in]rpsRotation to apply in radian per sample
[out]outOutput complex vector
Returns
The output complex vector (or NULL if error)

$out(k) = in(k) \cdot e^{j \cdot rps \cdot k}$

The output vector parameter 'out' can be NULL to allocate a new vector, or can be equal to the 'in' input vector to perform the transform in-place. If it's different, it must be long enough to contain the result (i.e. in->len)

References osmo_cxvec::data, osmo_cxvec::flags, osmo_cxvec::len, osmo_cxvec::max_len, and osmo_cxvec_alloc().

◆ osmo_cxvec_scale()

struct osmo_cxvec * osmo_cxvec_scale ( const struct osmo_cxvec in,
float complex  scale,
struct osmo_cxvec out 
)

Scale a complex vector (multiply by a constant)

Parameters
[in]inInput complex vector
[in]scaleFactor to apply to each sample
[out]outOutput complex vector
Returns
The output complex vector (or NULL if error)

$out(k) = in(k) \cdot scale$

The output vector parameter 'out' can be NULL to allocate a new vector, or can be equal to the 'in' input vector to perform the transform in-place. If it's different, it must be long enough to contain the result (i.e. in->len)

References osmo_cxvec::data, osmo_cxvec::flags, osmo_cxvec::len, osmo_cxvec::max_len, and osmo_cxvec_alloc().

◆ osmo_cxvec_sig_normalize()

struct osmo_cxvec * osmo_cxvec_sig_normalize ( const struct osmo_cxvec sig,
int  decim,
float  freq_shift,
struct osmo_cxvec out 
)

'Normalize' an IQ signal and apply decimation/frequency shift

Parameters
[in]sigInput complex signal
[in]decimDecimation factor
[in]freq_shiftFrequency shift in radian per output sample
[out]outOutput complex vector
Returns
The output complex vector (or NULL if error)

The operation performed are DC removal, amplitude normalization (divided by the standard deviation), decimation, frequency shift.

The output vector parameter 'out' can be NULL to allocate a new vector, or can be equal to the 'in' input vector to perform the transform in-place. If it's different, it must be long enough to contain the result (i.e. (sig->len + decim - 1) / decim)

References osmo_cxvec::data, osmo_cxvec::flags, osmo_cxvec::len, osmo_cxvec::max_len, osmo_cxvec_alloc(), and osmo_normsqf().

◆ osmo_normsqf()

static float osmo_normsqf ( float complex  c)
inlinestatic

Squared norm of a given complex.

Parameters
[in]cComplex number for which to compute the squared norm
Returns
$|c|^2$

Referenced by _osmo_iqbal_estimate(), osmo_cxvec_peak_energy_find(), osmo_cxvec_peaks_scan(), and osmo_cxvec_sig_normalize().

◆ osmo_sinc()

static float osmo_sinc ( float  x)
inlinestatic

Unnormalized sinc function.

Parameters
[in]xValue for which to compute the sinc function.
Returns
The sinc(x) value

The function is defined as $\frac{\sin(x)}{x}$

Referenced by osmo_cxvec_delay(), and osmo_cxvec_interpolate_point().

html/structosmo__cxvec.js0000644000175000017500000000067115067055114015121 0ustar buildbuildvar structosmo__cxvec = [ [ "_data", "structosmo__cxvec.html#aa8a9de0ef88d44caa1c07bc91b99bffd", null ], [ "data", "structosmo__cxvec.html#aec620e4391a60de801eb23dec73e4d12", null ], [ "flags", "structosmo__cxvec.html#ab3bd5fac3c3a84df65bc82d1cae223ab", null ], [ "len", "structosmo__cxvec.html#a03722af5764b41c9151a7542546e3739", null ], [ "max_len", "structosmo__cxvec.html#a42469c5c904c26c45af3ff557ccd203f", null ] ];html/folderclosed.png0000644000175000017500000000115015067055114014156 0ustar buildbuildPNG  IHDR}\/IDATx]MO@~uؐlp]#]PYEC\9y`xC &=qvZv3m؃vLN}}ޝZA@n ONp xKxj8s _[D'yye+ 7#rNlk* 0Ь_d_(Öz=xvhzP-䍒̪u$\DJcB4.:Ϗ-}LE #gN;B6䬜@p&h>p9EEάʑ"un$R"?{<%PNt$߶+^<"2Dqq\ҙaA"ԵP}#Ez{.8i p(ADwDE߂z;Kק8t q:uvvݛvEn{MFXgfZ֝*ߩ:jYq#3SWr'  IENDB`html/iqbal_8h_source.html0000644000175000017500000005213015067055114014744 0ustar buildbuild libosmodsp: include/osmocom/dsp/iqbal.h Source File
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
iqbal.h
Go to the documentation of this file.
1/*
2 * iqbal.h
3 *
4 * IQ balance correction / estimation utilities
5 *
6 * Copyright (C) 2013 Sylvain Munaut <tnt@246tNt.com>
7 *
8 * All Rights Reserved
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License along
21 * with this program; if not, write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 */
24
25#ifndef __OSMO_DSP_IQBAL_H__
26#define __OSMO_DSP_IQBAL_H__
27
36#include <complex.h>
37
38#include <osmocom/dsp/cxvec.h>
39
40
41/* IQ balance correction and estimation */
42
43void osmo_iqbal_fix(float complex *out, float complex *in, unsigned int len,
44 float mag, float phase);
45
46struct osmo_cxvec *
47osmo_iqbal_cxvec_fix(const struct osmo_cxvec *in, float mag, float phase,
48 struct osmo_cxvec *out);
49
50float
51osmo_iqbal_estimate(const float complex *data,
52 int fft_size, int fft_count);
53
54float
56 int fft_size, int fft_count);
57
58
59/* IQ balance optimization */
60
67};
68
70
71int
72osmo_iqbal_cxvec_optimize(const struct osmo_cxvec *sig, float *mag, float *phase,
73 const struct osmo_iqbal_opts *opts);
74
77#endif /* __OSMO_DSP_IQBAL_H__ */
Osmocom Complex vectors header.
float osmo_iqbal_cxvec_estimate(const struct osmo_cxvec *sig, int fft_size, int fft_count)
Objectively estimate IQ balance in a given complex vector.
Definition: iqbal.c:206
float osmo_iqbal_estimate(const float complex *data, int fft_size, int fft_count)
Objectively estimate IQ balance in a given complex buffer.
Definition: iqbal.c:194
const struct osmo_iqbal_opts osmo_iqbal_default_opts
Default values for the optimization algorithm.
Definition: iqbal.c:221
struct osmo_cxvec * osmo_iqbal_cxvec_fix(const struct osmo_cxvec *in, float mag, float phase, struct osmo_cxvec *out)
Apply IQ balance correction to a given complex vector.
Definition: iqbal.c:94
void osmo_iqbal_fix(float complex *out, float complex *in, unsigned int len, float mag, float phase)
Apply IQ balance correction to a given complex buffer.
Definition: iqbal.c:71
int osmo_iqbal_cxvec_optimize(const struct osmo_cxvec *sig, float *mag, float *phase, const struct osmo_iqbal_opts *opts)
Finds the best IQ balance correction parameters for a given signal.
Definition: iqbal.c:301
Complex vector.
Definition: cxvec.h:41
float complex * data
Data field.
Definition: cxvec.h:45
Processing options for the IQ balance optimization algorithm.
Definition: iqbal.h:62
int fft_size
FFT size to use.
Definition: iqbal.h:63
int fft_count
Number of FFT to use.
Definition: iqbal.h:64
int max_iter
Max # iterations per pass.
Definition: iqbal.h:65
int start_at_prev
Use prev values as starting point.
Definition: iqbal.h:66
html/dir_abe9b486a10ccc5afdf8abc29637e0c1.html0000644000175000017500000001066715067055114017473 0ustar buildbuild libosmodsp: include/osmocom Directory Reference
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
osmocom Directory Reference

Directories

directory  dsp
 
html/structosmo__iqbal__opts.html0000644000175000017500000001556515067055114016645 0ustar buildbuild libosmodsp: osmo_iqbal_opts Struct Reference
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
osmo_iqbal_opts Struct Reference

Processing options for the IQ balance optimization algorithm. More...

#include <iqbal.h>

Data Fields

int fft_size
 FFT size to use.
 
int fft_count
 Number of FFT to use.
 
int max_iter
 Max # iterations per pass.
 
int start_at_prev
 Use prev values as starting point.
 

Detailed Description

Processing options for the IQ balance optimization algorithm.


The documentation for this struct was generated from the following file:
html/group__iqbal.html0000644000175000017500000012366015067055114014347 0ustar buildbuild libosmodsp: IQ balance utilities
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
IQ balance utilities

Files

file  iqbal.h
 Osmocom IQ balance utils header.
 
file  iqbal.c
 IQ balance utils implementation.
 

Data Structures

struct  osmo_iqbal_opts
 Processing options for the IQ balance optimization algorithm. More...
 
struct  _iqbal_estimate_state
 Cache for _osmo_iqbal_estimate when doing lots of calls. More...
 
struct  _iqbal_state
 Internal state structure for the IQ balance optimization algorithm. More...
 

Functions

void osmo_iqbal_fix (float complex *out, float complex *in, unsigned int len, float mag, float phase)
 Apply IQ balance correction to a given complex buffer. More...
 
struct osmo_cxvecosmo_iqbal_cxvec_fix (const struct osmo_cxvec *in, float mag, float phase, struct osmo_cxvec *out)
 Apply IQ balance correction to a given complex vector. More...
 
float osmo_iqbal_estimate (const float complex *data, int fft_size, int fft_count)
 Objectively estimate IQ balance in a given complex buffer. More...
 
float osmo_iqbal_cxvec_estimate (const struct osmo_cxvec *sig, int fft_size, int fft_count)
 Objectively estimate IQ balance in a given complex vector. More...
 
int osmo_iqbal_cxvec_optimize (const struct osmo_cxvec *sig, float *mag, float *phase, const struct osmo_iqbal_opts *opts)
 Finds the best IQ balance correction parameters for a given signal. More...
 
static void _osmo_iqbal_estimate_release (struct _iqbal_estimate_state *state)
 Release a cache object created by _osmo_iqbal_estimate.
 
static float _osmo_iqbal_estimate (const float complex *data, int fft_size, int fft_count, struct _iqbal_estimate_state **state_p)
 Objectively estimate IQ balance in a given complex buffer. More...
 
static float _iqbal_objfn_value (struct _iqbal_state *state, float x[2])
 Optimization objective function - Value. More...
 
static void _iqbal_objfn_gradient (struct _iqbal_state *state, float x[2], float v, float grad[2])
 Optimization objective function - Gradient estimation. More...
 
static float _iqbal_objfn_val_gradient (struct _iqbal_state *state, float x[2], float grad[2])
 Optimization objective function - Value & Gradient estimation. More...
 

Variables

const struct osmo_iqbal_opts osmo_iqbal_default_opts
 Default values for the optimization algorithm.
 
const struct osmo_iqbal_opts osmo_iqbal_default_opts
 Default values for the optimization algorithm. More...
 

Detailed Description

Function Documentation

◆ _iqbal_objfn_gradient()

static void _iqbal_objfn_gradient ( struct _iqbal_state state,
float  x[2],
float  v,
float  grad[2] 
)
static

Optimization objective function - Gradient estimation.

Parameters
[in]stateCurrent state object of optimization loop
[in]xAn array of 2 float for (mag,phase) point to evaluate at
[in]vThe value of the objective function at point 'x'
[out]gradAn array of 2 float for the estimated gradient at point 'x'

References _iqbal_objfn_value().

Referenced by _iqbal_objfn_val_gradient(), and osmo_iqbal_cxvec_optimize().

◆ _iqbal_objfn_val_gradient()

static float _iqbal_objfn_val_gradient ( struct _iqbal_state state,
float  x[2],
float  grad[2] 
)
inlinestatic

Optimization objective function - Value & Gradient estimation.

Parameters
[in]stateCurrent state object of optimization loop
[in]xAn array of 2 float for (mag,phase) point to evaluate at
[out]gradAn array of 2 float for the estimated gradient at point 'x'
Returns
The value of the objective function at point 'x'

References _iqbal_objfn_gradient(), and _iqbal_objfn_value().

Referenced by osmo_iqbal_cxvec_optimize().

◆ _iqbal_objfn_value()

static float _iqbal_objfn_value ( struct _iqbal_state state,
float  x[2] 
)
inlinestatic

Optimization objective function - Value.

Parameters
[in]stateCurrent state object of optimization loop
[in]xAn array of 2 float for (mag,phase) point to evaluate at
Returns
The value of the objective function at point 'x'

References _osmo_iqbal_estimate(), _iqbal_state::cache, osmo_cxvec::data, _iqbal_state::feval, osmo_iqbal_opts::fft_count, osmo_iqbal_opts::fft_size, _iqbal_state::opts, _iqbal_state::org, osmo_iqbal_cxvec_fix(), and _iqbal_state::tmp.

Referenced by _iqbal_objfn_gradient(), _iqbal_objfn_val_gradient(), and osmo_iqbal_cxvec_optimize().

◆ _osmo_iqbal_estimate()

static float _osmo_iqbal_estimate ( const float complex *  data,
int  fft_size,
int  fft_count,
struct _iqbal_estimate_state **  state_p 
)
static

Objectively estimate IQ balance in a given complex buffer.

Parameters
[in]dataInput complex buffer (at least fft_size * fft_count samples)
[in]fft_sizeSize of the FFT to use internally
[in]fft_countThe number of consecutive FFT to use internally
[out]state_pCache object for multiple calls (can be NULL)
Returns
A number >= 0.0f estimating the IQ balance (the lower, the better)

The Cache object should only be used for multiple calls with the same parameters and the same size of input vector. Once you don't plan on using it anymore, you should call _osmo_iqbal_estimate_release . The initial pointer value should also be initialized to NULL.

References osmo_normsqf().

Referenced by _iqbal_objfn_value(), and osmo_iqbal_estimate().

◆ osmo_iqbal_cxvec_estimate()

float osmo_iqbal_cxvec_estimate ( const struct osmo_cxvec sig,
int  fft_size,
int  fft_count 
)

Objectively estimate IQ balance in a given complex vector.

Parameters
[in]sigInput complex vector (at least fft_size * fft_count samples)
[in]fft_sizeSize of the FFT to use internally
[in]fft_countThe number of consecutive FFT to use internally
Returns
A number >= 0.0f estimating the IQ balance (the lower, the better)

References osmo_cxvec::data, osmo_cxvec::len, and osmo_iqbal_estimate().

◆ osmo_iqbal_cxvec_fix()

struct osmo_cxvec * osmo_iqbal_cxvec_fix ( const struct osmo_cxvec in,
float  mag,
float  phase,
struct osmo_cxvec out 
)

Apply IQ balance correction to a given complex vector.

Parameters
[in]inComplex input vector
[in]magMagnitude correction (approximated)
[in]phasePhase correction (approximated)
[out]outComplex output vector (can be NULL or equal to 'in')
Returns
The output complex vector (or NULL if error)

If the 'out' parameter is NULL, a new vector will be allocated See osmo_iqbal_fix for details of the correction applied.

References osmo_cxvec::data, osmo_cxvec::flags, osmo_cxvec::len, osmo_cxvec::max_len, osmo_cxvec_alloc(), and osmo_iqbal_fix().

Referenced by _iqbal_objfn_value().

◆ osmo_iqbal_cxvec_optimize()

int osmo_iqbal_cxvec_optimize ( const struct osmo_cxvec sig,
float *  mag,
float *  phase,
const struct osmo_iqbal_opts opts 
)

Finds the best IQ balance correction parameters for a given signal.

Parameters
[in]sigThe input signal to optimize for
[in,out]magMagnitude correction (See osmo_iqbal_fix)
[in,out]phasePhase correction (See osmo_iqbal_fix)
[in]optsOptions of the optimization process (See osmo_iqbal_opts)

The mag and phase parameters are pointers to float. If in the options, the 'start_at_prev' is enabled, the initial values of those will be used and so they should be initialized appropriately.

References _iqbal_objfn_gradient(), _iqbal_objfn_val_gradient(), _iqbal_objfn_value(), _osmo_iqbal_estimate_release(), _iqbal_state::cache, _iqbal_state::feval, osmo_iqbal_opts::fft_count, osmo_iqbal_opts::fft_size, osmo_cxvec::len, osmo_iqbal_opts::max_iter, _iqbal_state::opts, _iqbal_state::org, osmo_cxvec_alloc(), osmo_cxvec_free(), osmo_iqbal_default_opts, osmo_iqbal_opts::start_at_prev, and _iqbal_state::tmp.

◆ osmo_iqbal_estimate()

float osmo_iqbal_estimate ( const float complex *  data,
int  fft_size,
int  fft_count 
)

Objectively estimate IQ balance in a given complex buffer.

Parameters
[in]dataInput complex buffer (at least fft_size * fft_count samples)
[in]fft_sizeSize of the FFT to use internally
[in]fft_countThe number of consecutive FFT to use internally
Returns
A number >= 0.0f estimating the IQ balance (the lower, the better)

References _osmo_iqbal_estimate().

Referenced by osmo_iqbal_cxvec_estimate().

◆ osmo_iqbal_fix()

void osmo_iqbal_fix ( float complex *  out,
float complex *  in,
unsigned int  len,
float  mag,
float  phase 
)

Apply IQ balance correction to a given complex buffer.

Parameters
[out]outComplex output buffer
[in]inComplex input buffer
[in]lenNumber of complex samples to process
[in]magMagnitude correction (approximated)
[in]phasePhase correction (approximated)

The input and output buffers can be the same for in-place modification.

The applied transform is out[i] = (a * (1 + mag)) + (b + phase * a) * i (with in[i] = a+bi).

Referenced by osmo_iqbal_cxvec_fix().

Variable Documentation

◆ osmo_iqbal_default_opts

const struct osmo_iqbal_opts osmo_iqbal_default_opts
Initial value:
= {
.fft_size = 1024,
.fft_count = 8,
.max_iter = 25,
.start_at_prev = 1,
}

Default values for the optimization algorithm.

Referenced by osmo_iqbal_cxvec_optimize().

html/globals.html0000644000175000017500000002220515067055114013320 0ustar buildbuild libosmodsp: Globals
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:

- _ -

  • _iqbal_objfn_gradient() : iqbal.c
  • _iqbal_objfn_val_gradient() : iqbal.c
  • _iqbal_objfn_value() : iqbal.c
  • _osmo_iqbal_estimate() : iqbal.c
  • _osmo_iqbal_estimate_release() : iqbal.c

- c -

- o -

- p -

html/navtree.css0000644000175000017500000000407415067055114013171 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.html0000644000175000017500000001645315067055114014343 0ustar buildbuild libosmodsp: Globals
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
 
html/closed.png0000644000175000017500000000020415067055113012760 0ustar buildbuildPNG  IHDR KIDATxm @!Gk7-`&sts@k}2 P%_N .:0Dk›x" ֛)x5IENDB`html/cxvec_8c.html0000644000175000017500000002003315067055114013374 0ustar buildbuild libosmodsp: src/cxvec.c File Reference
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
cxvec.c File Reference

Osmocom Complex vectors implementation. More...

Functions

void osmo_cxvec_init_from_data (struct osmo_cxvec *cv, float complex *data, int len)
 Initialize a vector structure with a given data array. More...
 
struct osmo_cxvecosmo_cxvec_alloc_from_data (float complex *data, int len)
 Allocate a complex vector referencing a given data array. More...
 
struct osmo_cxvecosmo_cxvec_alloc (int max_len)
 Allocate a complex vector of a given maximum length. More...
 
void osmo_cxvec_free (struct osmo_cxvec *cv)
 Free a complex vector (and possibly associated data) More...
 
void osmo_cxvec_dbg_dump (struct osmo_cxvec *cv, const char *fname)
 Save the data contained of a vector into a .cfile for debug. More...
 

Detailed Description

Osmocom Complex vectors implementation.

html/dir_d44c64559bbebec7f509842c48db8b23.html0000644000175000017500000000761015067055114017211 0ustar buildbuild libosmodsp: include Directory Reference
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
include Directory Reference
html/iqbal_8h.html0000644000175000017500000002404315067055114013366 0ustar buildbuild libosmodsp: include/osmocom/dsp/iqbal.h File Reference
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library

Osmocom IQ balance utils header. More...

Go to the source code of this file.

Data Structures

struct  osmo_iqbal_opts
 Processing options for the IQ balance optimization algorithm. More...
 

Functions

void osmo_iqbal_fix (float complex *out, float complex *in, unsigned int len, float mag, float phase)
 Apply IQ balance correction to a given complex buffer. More...
 
struct osmo_cxvecosmo_iqbal_cxvec_fix (const struct osmo_cxvec *in, float mag, float phase, struct osmo_cxvec *out)
 Apply IQ balance correction to a given complex vector. More...
 
float osmo_iqbal_estimate (const float complex *data, int fft_size, int fft_count)
 Objectively estimate IQ balance in a given complex buffer. More...
 
float osmo_iqbal_cxvec_estimate (const struct osmo_cxvec *sig, int fft_size, int fft_count)
 Objectively estimate IQ balance in a given complex vector. More...
 
int osmo_iqbal_cxvec_optimize (const struct osmo_cxvec *sig, float *mag, float *phase, const struct osmo_iqbal_opts *opts)
 Finds the best IQ balance correction parameters for a given signal. More...
 

Variables

const struct osmo_iqbal_opts osmo_iqbal_default_opts
 Default values for the optimization algorithm.
 

Detailed Description

Osmocom IQ balance utils header.

html/annotated.html0000644000175000017500000001302315067055114013650 0ustar buildbuild libosmodsp: Data Structures
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
Data Structures
Here are the data structures with brief descriptions:
 C_iqbal_estimate_stateCache for _osmo_iqbal_estimate when doing lots of calls
 C_iqbal_stateInternal state structure for the IQ balance optimization algorithm
 CcfileStructure representing a currently mapped .cfile
 Cosmo_cxvecComplex vector
 Cosmo_iqbal_optsProcessing options for the IQ balance optimization algorithm
html/navtreedata.js0000644000175000017500000000424415067055114013646 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 = [ [ "libosmodsp", "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", null ], [ "Functions", "globals_func.html", null ], [ "Variables", "globals_vars.html", null ], [ "Enumerations", "globals_enum.html", null ], [ "Enumerator", "globals_eval.html", null ] ] ] ] ] ] ] ]; var NAVTREEINDEX = [ "annotated.html" ]; var SYNCONMSG = 'click to disable panel synchronisation'; var SYNCOFFMSG = 'click to enable panel synchronisation';html/version_8h_source.html0000644000175000017500000001511315067055114015341 0ustar buildbuild libosmodsp: include/osmocom/dsp/version.h Source File
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
version.h
1#pragma once
2
3#define LIBOSMO_DSP_VERSION 0.4.0
4#define LIBOSMO_DSP_VERSION_STR "0.4.0"
5
6#define LIBOSMO_DSP_VERSION_MAJOR 0
7#define LIBOSMO_DSP_VERSION_MINOR 4
8#define LIBOSMO_DSP_VERSION_PATCH 0
9
10#define LIBOSMO_DSP_VERSION_GREATER_EQUAL(major, minor, patch) \
11 (LIBOSMO_DSP_VERSION_MAJOR > (major) || \
12 (LIBOSMO_DSP_VERSION_MAJOR == (major) && \
13 LIBOSMO_DSP_VERSION_MINOR > (minor)) || \
14 (LIBOSMO_DSP_VERSION_MAJOR == (major) && \
15 LIBOSMO_DSP_VERSION_MINOR == (minor) && \
16 LIBOSMO_DSP_VERSION_PATCH >= (patch)))
html/cxvec_8h.js0000644000175000017500000000075115067055114013056 0ustar buildbuildvar cxvec_8h = [ [ "osmo_cxvec_alloc", "group__cxvec.html#ga9461ac13f1d77ca832b140461e599caa", null ], [ "osmo_cxvec_alloc_from_data", "group__cxvec.html#ga4edecda809e91f11cf88b53a1db8d62a", null ], [ "osmo_cxvec_dbg_dump", "group__cxvec.html#ga69e6d1ea3d468954cedf7d6f8d44f825", null ], [ "osmo_cxvec_free", "group__cxvec.html#gaa57240ff2299122f9375e901b9700e7d", null ], [ "osmo_cxvec_init_from_data", "group__cxvec.html#gaa03ae6bbc24d094b8955d905832f0c36", null ] ];html/dir_5b8fd40c25b8cda2528024e092698ab5.html0000644000175000017500000001436515067055114017041 0ustar buildbuild libosmodsp: include/osmocom/dsp Directory Reference
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
dsp Directory Reference

Files

file  cfile.h [code]
 Osmocom .cfile helpers header.
 
file  cxvec.h [code]
 Osmocom Complex vectors header.
 
file  cxvec_math.h [code]
 Osmocom Complex vectors math header.
 
file  iqbal.h [code]
 Osmocom IQ balance utils header.
 
file  version.h [code]
 
html/group__cxvec__math.js0000644000175000017500000000425015067055114015200 0ustar buildbuildvar group__cxvec__math = [ [ "cxvec_math.h", "cxvec__math_8h.html", null ], [ "cxvec_math.c", "cxvec__math_8c.html", null ], [ "osmo_cxvec_conv_type", "group__cxvec__math.html#ga2e183a0f24afa2e16199d1514629bf08", [ [ "CONV_FULL_SPAN", "group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08ae758172bda42f9b44aa9015c0e142717", null ], [ "CONV_OVERLAP_ONLY", "group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08a47fb2e6e9d274d4512601828023ac1d2", null ], [ "CONV_NO_DELAY", "group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08a03ece74c3bcd50aeb9fb42329b9a59a5", null ] ] ], [ "osmo_cxvec_peak_alg", "group__cxvec__math.html#ga7942b58b341e440c0e8796d395460b78", [ [ "PEAK_WEIGH_WIN", "group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78abb4b91d1bfa5bd51ff0e48633d9b9891", null ], [ "PEAK_WEIGH_WIN_CENTER", "group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78ab0fb6b29112253cc5d51fb119b5d812a", null ], [ "PEAK_EARLY_LATE", "group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78aa8df843abc147bca5860fee1ddff1378", null ] ] ], [ "osmo_cxvec_convolve", "group__cxvec__math.html#ga2ebadb16e25768896013420a98ec666f", null ], [ "osmo_cxvec_correlate", "group__cxvec__math.html#ga99ff6e3baec3253f4e431b156f042a0f", null ], [ "osmo_cxvec_delay", "group__cxvec__math.html#ga9fa20d926f9d313a4751cef1eff740ba", null ], [ "osmo_cxvec_interpolate_point", "group__cxvec__math.html#gacb1c646e03a09b51b617467501639763", null ], [ "osmo_cxvec_peak_energy_find", "group__cxvec__math.html#ga495219ee953336e15cd68c9b22d3850c", null ], [ "osmo_cxvec_peaks_scan", "group__cxvec__math.html#gad25b04feb1cd30b24fe7de8f76e56c23", null ], [ "osmo_cxvec_rotate", "group__cxvec__math.html#ga49125f3c259da9d7eec7fa4d98d609d4", null ], [ "osmo_cxvec_scale", "group__cxvec__math.html#ga5ac0adb49726087258381582582ef654", null ], [ "osmo_cxvec_sig_normalize", "group__cxvec__math.html#ga4579583a658fc33afd24a1d8508b212f", null ], [ "osmo_normsqf", "group__cxvec__math.html#ga1b169ec31cb01111c0def0c12d65f3a2", null ], [ "osmo_sinc", "group__cxvec__math.html#ga4e7a7183dc4e5ce77d72d2986495f348", null ] ];html/form_0.png0000644000175000017500000000543615067055114012706 0ustar buildbuildPNG  IHDR7&E:\iCCPdefault_gray.iccHy4ǿo23Xǒ5 Xh[]JI*d+E%mRQhFrPjAhgA;# ÍO` ,D$$@>Ă, [ (Lh;AP5.@נfWI0 Uaa' ^ pK$_X:h!,"HG yH R4#H/r EE1PZ(3C% P6T>j5&eКhS4Gs%:t+z=`&Da6a 01-.f3b%Xs+6ŖaObb8"Npٸ\# n7[ċUxW|>_wE(I0'xf S"H4!#[[qAIɤzRLV%[Iusg!W(D(KBMhX0^XE-N8CD^DU#,EBȘȼ(UTOU4V@Q4KQRB(9c *BUrBIiHKJ!5+M6II~,hxl9&/3/+'k//[&{]vV.g%%W,wEnF*o!)_,UCf0J=9djEEbb3%K)LX[iNY^E9SI ^rHWeA꫺S]u)23M̧jd5Kuza{FFƠ&iyXshzɊ5+ƴHZl&qmvve::?t uctkuQ:k+$[c;MP# .; 񍚍f+X4umbmer䋩iYӷfZfffӫBWծ0W466X0,,Z,,-k,_X)YXYMQ7ֺ|V)g3ɳzۖ>S k7dvpr0ƕ 9Gc͎=N$'Or|N*VWgnLw7 zT xy'{w4, t6KGw`|خ9f2007pt-smŬ^x}sA ߠƠo5*78C!V!!3ESaaEag",#J"f#9]룗b|cZbqA(qq=6m׌ύ$&L;ĵI?Y-yGxEJETsiiqiӧ22oBmmTܖ9z eÖ,ɭ[Ol#lv7[7(v99[s&vh4Y +rv ɻ_Wpgޞ=K{هotEEE\3?\vAI!¡CRҎ2}e#G*+Z*e*wW.9<|HslU~ףGVWը֔K9֧8xCT]~z = 2MpSrNٜhjnO:tfssUWR[ڠvA ݝf/_RTqYr•+KW3ww^ 6ѽuz{n8ݸu^v[.6}N{Q_[a]ûFmƃLu2l9|FV z> < y8(ѻ)l}~LYs5"0\o~yI~Y2%?0?}inޫ5&_ǿ^K7joοz?77n} >vϻ?iq!_X_z~ZLV]{Ob/oo pHYs^ tEXtSoftwareGPL Ghostscript 10.00.00qIDATHݔu0Do|܀Zx-(%hK`KЖ J%@ N \](ad?vIW<{ 9~vA*QKvQӜ[n .ZV/KNCYβm\q+~]+I{4X $0]xaxI}z$V5R [)UÑAR%C@K&/Zޒ!/|x5-9-}ڊ_7ȄYi<5pbd38eϱq2\ {[zJ$炒icL{) AM3&JS/\#ec|[DfeF'zx9IENDB`html/group__cxvec.js0000644000175000017500000000221015067055114014022 0ustar buildbuildvar group__cxvec = [ [ "Complex vectors math and signal processing", "group__cxvec__math.html", "group__cxvec__math" ], [ "cxvec.h", "cxvec_8h.html", null ], [ "cxvec.c", "cxvec_8c.html", null ], [ "osmo_cxvec", "structosmo__cxvec.html", [ [ "_data", "structosmo__cxvec.html#aa8a9de0ef88d44caa1c07bc91b99bffd", null ], [ "data", "structosmo__cxvec.html#aec620e4391a60de801eb23dec73e4d12", null ], [ "flags", "structosmo__cxvec.html#ab3bd5fac3c3a84df65bc82d1cae223ab", null ], [ "len", "structosmo__cxvec.html#a03722af5764b41c9151a7542546e3739", null ], [ "max_len", "structosmo__cxvec.html#a42469c5c904c26c45af3ff557ccd203f", null ] ] ], [ "osmo_cxvec_alloc", "group__cxvec.html#ga9461ac13f1d77ca832b140461e599caa", null ], [ "osmo_cxvec_alloc_from_data", "group__cxvec.html#ga4edecda809e91f11cf88b53a1db8d62a", null ], [ "osmo_cxvec_dbg_dump", "group__cxvec.html#ga69e6d1ea3d468954cedf7d6f8d44f825", null ], [ "osmo_cxvec_free", "group__cxvec.html#gaa57240ff2299122f9375e901b9700e7d", null ], [ "osmo_cxvec_init_from_data", "group__cxvec.html#gaa03ae6bbc24d094b8955d905832f0c36", null ] ];html/cfile_8h.html0000644000175000017500000001543115067055114013361 0ustar buildbuild libosmodsp: include/osmocom/dsp/cfile.h File Reference
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
cfile.h File Reference

Osmocom .cfile helpers header. More...

Go to the source code of this file.

Data Structures

struct  cfile
 Structure representing a currently mapped .cfile. More...
 

Functions

struct cfilecfile_load (const char *filename)
 .cfile loader: mmap() the data into memory (read-only) More...
 
void cfile_release (struct cfile *cf)
 Release all resources associated with a mapped .cfile. More...
 

Detailed Description

Osmocom .cfile helpers header.

html/struct__iqbal__estimate__state.js0000644000175000017500000000035115067055114017567 0ustar buildbuildvar struct__iqbal__estimate__state = [ [ "fft", "struct__iqbal__estimate__state.html#aa44240271f4835c080793da0b816bc1c", null ], [ "fft_plan", "struct__iqbal__estimate__state.html#a0a1a4f9083a6228f38e78702b8f710e9", null ] ];html/cxvec__math_8h_source.html0000644000175000017500000010034315067055114016134 0ustar buildbuild libosmodsp: include/osmocom/dsp/cxvec_math.h Source File
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
cxvec_math.h
Go to the documentation of this file.
1/*
2 * cxvec_math.h
3 *
4 * Complex vectors math and signal processing
5 *
6 * Copyright (C) 2011 Sylvain Munaut <tnt@246tNt.com>
7 *
8 * All Rights Reserved
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License along
21 * with this program; if not, write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 */
24
25#ifndef __OSMO_DSP_CXVEC_MATH_H__
26#define __OSMO_DSP_CXVEC_MATH_H__
27
37#include <complex.h>
38#include <math.h>
39
40#include <osmocom/dsp/cxvec.h>
41
42
43 /* Generic math stuff */
44
45#define M_PIf (3.14159265358979323846264338327f)
53static inline float
54osmo_sinc(float x)
55{
56 if ((x >= 0.01f) || (x <= -0.01f)) return (sinf(x)/x);
57 return 1.0f;
58}
59
64static inline float
65osmo_normsqf(float complex c)
66{
67 return crealf(c) * crealf(c) + cimagf(c) * cimagf(c);
68}
69
70
71 /* Complex vector math */
72
73struct osmo_cxvec *
74osmo_cxvec_scale(const struct osmo_cxvec *in, float complex scale,
75 struct osmo_cxvec *out);
76
77struct osmo_cxvec *
78osmo_cxvec_rotate(const struct osmo_cxvec *in, float freq_shift,
79 struct osmo_cxvec *out);
80
81struct osmo_cxvec *
82osmo_cxvec_delay(const struct osmo_cxvec *v, float delay,
83 struct osmo_cxvec *out);
84
93};
94
95struct osmo_cxvec *
96osmo_cxvec_convolve(const struct osmo_cxvec *f, const struct osmo_cxvec *g,
97 enum osmo_cxvec_conv_type type, struct osmo_cxvec *out);
98
99struct osmo_cxvec *
100osmo_cxvec_correlate(const struct osmo_cxvec *f, const struct osmo_cxvec *g,
101 int g_corr_step, struct osmo_cxvec *out);
102
103float complex
104osmo_cxvec_interpolate_point(const struct osmo_cxvec *cv, float pos);
105
106int
107osmo_cxvec_peaks_scan(const struct osmo_cxvec *cv, int *peaks_idx, int N);
108
117};
118
119float
120osmo_cxvec_peak_energy_find(const struct osmo_cxvec *cv, int win_size,
121 enum osmo_cxvec_peak_alg alg,
122 float complex *peak_val_p);
123
124struct osmo_cxvec *
125osmo_cxvec_sig_normalize(const struct osmo_cxvec *sig,
126 int decim, float freq_shift,
127 struct osmo_cxvec *out);
128
131#endif /* __OSMO_DSP_CXVEC_MATH_H__ */
Osmocom Complex vectors header.
static float osmo_normsqf(float complex c)
Squared norm of a given complex.
Definition: cxvec_math.h:65
osmo_cxvec_conv_type
Various possible types of convolution span.
Definition: cxvec_math.h:86
struct osmo_cxvec * osmo_cxvec_convolve(const struct osmo_cxvec *f, const struct osmo_cxvec *g, enum osmo_cxvec_conv_type type, struct osmo_cxvec *out)
Convolve two complex vectors.
Definition: cxvec_math.c:228
struct osmo_cxvec * osmo_cxvec_sig_normalize(const struct osmo_cxvec *sig, int decim, float freq_shift, struct osmo_cxvec *out)
'Normalize' an IQ signal and apply decimation/frequency shift
Definition: cxvec_math.c:613
struct osmo_cxvec * osmo_cxvec_rotate(const struct osmo_cxvec *in, float freq_shift, struct osmo_cxvec *out)
Rotate a complex vector (frequency shift)
Definition: cxvec_math.c:112
float osmo_cxvec_peak_energy_find(const struct osmo_cxvec *cv, int win_size, enum osmo_cxvec_peak_alg alg, float complex *peak_val_p)
Find the maximum energy ( ) peak in a sequence.
Definition: cxvec_math.c:484
static float osmo_sinc(float x)
Unnormalized sinc function.
Definition: cxvec_math.h:54
struct osmo_cxvec * osmo_cxvec_scale(const struct osmo_cxvec *in, float complex scale, struct osmo_cxvec *out)
Scale a complex vector (multiply by a constant)
Definition: cxvec_math.c:55
osmo_cxvec_peak_alg
Various possible peak finding algorithms.
Definition: cxvec_math.h:110
struct osmo_cxvec * osmo_cxvec_correlate(const struct osmo_cxvec *f, const struct osmo_cxvec *g, int g_corr_step, struct osmo_cxvec *out)
Cross-correlate two complex vectors.
Definition: cxvec_math.c:335
struct osmo_cxvec * osmo_cxvec_delay(const struct osmo_cxvec *v, float delay, struct osmo_cxvec *out)
Fractionally delay a vector while maintaining its length.
Definition: cxvec_math.c:146
float complex osmo_cxvec_interpolate_point(const struct osmo_cxvec *cv, float pos)
Interpolate any fractional position in a vector using sinc filtering.
Definition: cxvec_math.c:399
int osmo_cxvec_peaks_scan(const struct osmo_cxvec *cv, int *peaks_idx, int N)
Find the index of the N highest energy ( ) peaks.
Definition: cxvec_math.c:438
@ CONV_NO_DELAY
Center f sequence on every g sample.
Definition: cxvec_math.h:92
@ CONV_OVERLAP_ONLY
Every possible full overlap of f onto g.
Definition: cxvec_math.h:90
@ CONV_FULL_SPAN
Full span (every possible overlap of f onto g)
Definition: cxvec_math.h:88
@ PEAK_EARLY_LATE
Early-Late balancing around peak.
Definition: cxvec_math.h:116
@ PEAK_WEIGH_WIN_CENTER
Weighted position of the peak centered window.
Definition: cxvec_math.h:114
@ PEAK_WEIGH_WIN
Weigthed position for the max pwr window.
Definition: cxvec_math.h:112
Complex vector.
Definition: cxvec.h:41
html/form_1.png0000644000175000017500000000515715067055114012707 0ustar buildbuildPNG  IHDR#ViCCPdefault_gray.iccHy4ǿo23Xǒ5 Xh[]JI*d+E%mRQhFrPjAhgA;# ÍO` ,D$$@>Ă, [ (Lh;AP5.@נfWI0 Uaa' ^ pK$_X:h!,"HG yH R4#H/r EE1PZ(3C% P6T>j5&eКhS4Gs%:t+z=`&Da6a 01-.f3b%Xs+6ŖaObb8"Npٸ\# n7[ċUxW|>_wE(I0'xf S"H4!#[[qAIɤzRLV%[Iusg!W(D(KBMhX0^XE-N8CD^DU#,EBȘȼ(UTOU4V@Q4KQRB(9c *BUrBIiHKJ!5+M6II~,hxl9&/3/+'k//[&{]vV.g%%W,wEnF*o!)_,UCf0J=9djEEbb3%K)LX[iNY^E9SI ^rHWeA꫺S]u)23M̧jd5Kuza{FFƠ&iyXshzɊ5+ƴHZl&qmvve::?t uctkuQ:k+$[c;MP# .; 񍚍f+X4umbmer䋩iYӷfZfffӫBWծ0W466X0,,Z,,-k,_X)YXYMQ7ֺ|V)g3ɳzۖ>S k7dvpr0ƕ 9Gc͎=N$'Or|N*VWgnLw7 zT xy'{w4, t6KGw`|خ9f2007pt-smŬ^x}sA ߠƠo5*78C!V!!3ESaaEag",#J"f#9]룗b|cZbqA(qq=6m׌ύ$&L;ĵI?Y-yGxEJETsiiqiӧ22oBmmTܖ9z eÖ,ɭ[Ol#lv7[7(v99[s&vh4Y +rv ɻ_Wpgޞ=K{هotEEE\3?\vAI!¡CRҎ2}e#G*+Z*e*wW.9<|HslU~ףGVWը֔K9֧8xCT]~z = 2MpSrNٜhjnO:tfssUWR[ڠvA ݝf/_RTqYr•+KW3ww^ 6ѽuz{n8ݸu^v[.6}N{Q_[a]ûFmƃLu2l9|FV z> < y8(ѻ)l}~LYs5"0\o~yI~Y2%?0?}inޫ5&_ǿ^K7joοz?77n} >vϻ?iq!_X_z~ZLV]{Ob/oo pHYs^ tEXtSoftwareGPL Ghostscript 10.00.00qIDAT8]q0םQ0( @P 8\6Y[E3{۽ ]\j/I0v !+` uPJF+ϼ \hRrITB?Brgiffr|[޴B矷Wo (okP^=>?WY窔̞<֠f}`$Oym{х<4;y 2ɇ;նIENDB`html/structcfile.js0000644000175000017500000000037115067055114013674 0ustar buildbuildvar structcfile = [ [ "_blen", "structcfile.html#ad3d6965e1039aa1f648361b2f83b034a", null ], [ "data", "structcfile.html#aeeb1105659968baae5df24026bf1d281", null ], [ "len", "structcfile.html#a2c856227c89a929b863da15951fcaef4", null ] ];html/index.html0000644000175000017500000000735415067055114013014 0ustar buildbuild libosmodsp: Main Page
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
libosmodsp Documentation
html/resize.js0000644000175000017500000001261615067055114012653 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/files_dup.js0000644000175000017500000000033715067055114013321 0ustar buildbuildvar files_dup = [ [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ], [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] ];html/cxvec_8c.js0000644000175000017500000000075115067055114013051 0ustar buildbuildvar cxvec_8c = [ [ "osmo_cxvec_alloc", "group__cxvec.html#ga9461ac13f1d77ca832b140461e599caa", null ], [ "osmo_cxvec_alloc_from_data", "group__cxvec.html#ga4edecda809e91f11cf88b53a1db8d62a", null ], [ "osmo_cxvec_dbg_dump", "group__cxvec.html#ga69e6d1ea3d468954cedf7d6f8d44f825", null ], [ "osmo_cxvec_free", "group__cxvec.html#gaa57240ff2299122f9375e901b9700e7d", null ], [ "osmo_cxvec_init_from_data", "group__cxvec.html#gaa03ae6bbc24d094b8955d905832f0c36", null ] ];html/form_3.png0000644000175000017500000000712415067055114012705 0ustar buildbuildPNG  IHDR R\uiCCPdefault_gray.iccHy4ǿo23Xǒ5 Xh[]JI*d+E%mRQhFrPjAhgA;# ÍO` ,D$$@>Ă, [ (Lh;AP5.@נfWI0 Uaa' ^ pK$_X:h!,"HG yH R4#H/r EE1PZ(3C% P6T>j5&eКhS4Gs%:t+z=`&Da6a 01-.f3b%Xs+6ŖaObb8"Npٸ\# n7[ċUxW|>_wE(I0'xf S"H4!#[[qAIɤzRLV%[Iusg!W(D(KBMhX0^XE-N8CD^DU#,EBȘȼ(UTOU4V@Q4KQRB(9c *BUrBIiHKJ!5+M6II~,hxl9&/3/+'k//[&{]vV.g%%W,wEnF*o!)_,UCf0J=9djEEbb3%K)LX[iNY^E9SI ^rHWeA꫺S]u)23M̧jd5Kuza{FFƠ&iyXshzɊ5+ƴHZl&qmvve::?t uctkuQ:k+$[c;MP# .; 񍚍f+X4umbmer䋩iYӷfZfffӫBWծ0W466X0,,Z,,-k,_X)YXYMQ7ֺ|V)g3ɳzۖ>S k7dvpr0ƕ 9Gc͎=N$'Or|N*VWgnLw7 zT xy'{w4, t6KGw`|خ9f2007pt-smŬ^x}sA ߠƠo5*78C!V!!3ESaaEag",#J"f#9]룗b|cZbqA(qq=6m׌ύ$&L;ĵI?Y-yGxEJETsiiqiӧ22oBmmTܖ9z eÖ,ɭ[Ol#lv7[7(v99[s&vh4Y +rv ɻ_Wpgޞ=K{هotEEE\3?\vAI!¡CRҎ2}e#G*+Z*e*wW.9<|HslU~ףGVWը֔K9֧8xCT]~z = 2MpSrNٜhjnO:tfssUWR[ڠvA ݝf/_RTqYr•+KW3ww^ 6ѽuz{n8ݸu^v[.6}N{Q_[a]ûFmƃLu2l9|FV z> < y8(ѻ)l}~LYs5"0\o~yI~Y2%?0?}inޫ5&_ǿ^K7joοz?77n} >vϻ?iq!_X_z~ZLV]{Ob/oo pHYs^ tEXtSoftwareGPL Ghostscript 10.00.00qIDATXX!6}I* ՟@Lt4L6LlZf0IH{]6k<?hf$Yo+hnFR~}Sֿᐺb;4}%fo ]u!Iz[Rf245]/,ҋ wgvr5=fr52 PƠr*xތ!}Iu.˯/1>3-̣񵘟ϔS%z2gף䕄Tys٩[˫M-̏FDHi + 2Zsq Er71{2I'Id=Df\L)p)l_{ 2 K&v#aHZAtmU,ˮ0$h:^ j6[hi;p2 rCR a6O  <.j.41G1(Nk/cvENy PN$- HҤ))UA.Ʒk,130z$}k${r*Ikk^ړ`/L2Uiǐ)SlNKR(2;ięYC$XKמÒIf-F?M|Z3'ɞ$A) libosmodsp: include/osmocom/dsp/cxvec.h Source File
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
cxvec.h
Go to the documentation of this file.
1/*
2 * cxvec.h
3 *
4 * Complex vectors handling
5 *
6 * Copyright (C) 2011 Sylvain Munaut <tnt@246tNt.com>
7 *
8 * All Rights Reserved
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License along
21 * with this program; if not, write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 */
24
25#ifndef __OSMO_DSP_CXVEC_H__
26#define __OSMO_DSP_CXVEC_H__
27
36#include <complex.h>
37
38#define CXVEC_FLG_REAL_ONLY (1<<0)
41struct osmo_cxvec {
42 int len;
43 int max_len;
44 int flags;
45 float complex *data;
46 float complex _data[0];
47};
48
49void
51 float complex *data, int len);
52
53struct osmo_cxvec *
54osmo_cxvec_alloc_from_data(float complex *data, int len);
55
56struct osmo_cxvec *
58
59void
60osmo_cxvec_free(struct osmo_cxvec *cv);
61
62void
63osmo_cxvec_dbg_dump(struct osmo_cxvec *cv, const char *fname);
64
67#endif /* __OSMO_DSP_CXVEC_H__ */
struct osmo_cxvec * osmo_cxvec_alloc_from_data(float complex *data, int len)
Allocate a complex vector referencing a given data array.
Definition: cxvec.c:63
void osmo_cxvec_dbg_dump(struct osmo_cxvec *cv, const char *fname)
Save the data contained of a vector into a .cfile for debug.
Definition: cxvec.c:119
struct osmo_cxvec * osmo_cxvec_alloc(int max_len)
Allocate a complex vector of a given maximum length.
Definition: cxvec.c:83
void osmo_cxvec_init_from_data(struct osmo_cxvec *cv, float complex *data, int len)
Initialize a vector structure with a given data array.
Definition: cxvec.c:48
void osmo_cxvec_free(struct osmo_cxvec *cv)
Free a complex vector (and possibly associated data)
Definition: cxvec.c:109
Complex vector.
Definition: cxvec.h:41
int len
Valid length.
Definition: cxvec.h:42
int max_len
Maximum length in data field.
Definition: cxvec.h:43
float complex _data[0]
Optional inline data array.
Definition: cxvec.h:46
int flags
Flags, see CXVEC_FLG_xxx.
Definition: cxvec.h:44
float complex * data
Data field.
Definition: cxvec.h:45
html/dynsections.js0000644000175000017500000001054415067055113013711 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 (l1&m8SxLU޲iEOsnxKN~jIENDB`html/cxvec__math_8c.html0000644000175000017500000003073615067055114014557 0ustar buildbuild libosmodsp: src/cxvec_math.c File Reference
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library

Osmocom Complex vectors math implementation. More...

Functions

struct osmo_cxvecosmo_cxvec_scale (const struct osmo_cxvec *in, float complex scale, struct osmo_cxvec *out)
 Scale a complex vector (multiply by a constant) More...
 
struct osmo_cxvecosmo_cxvec_rotate (const struct osmo_cxvec *in, float rps, struct osmo_cxvec *out)
 Rotate a complex vector (frequency shift) More...
 
struct osmo_cxvecosmo_cxvec_delay (const struct osmo_cxvec *in, float delay, struct osmo_cxvec *out)
 Fractionally delay a vector while maintaining its length. More...
 
struct osmo_cxvecosmo_cxvec_convolve (const struct osmo_cxvec *f, const struct osmo_cxvec *g, enum osmo_cxvec_conv_type type, struct osmo_cxvec *out)
 Convolve two complex vectors. More...
 
struct osmo_cxvecosmo_cxvec_correlate (const struct osmo_cxvec *f, const struct osmo_cxvec *g, int g_corr_step, struct osmo_cxvec *out)
 Cross-correlate two complex vectors. More...
 
float complex osmo_cxvec_interpolate_point (const struct osmo_cxvec *cv, float pos)
 Interpolate any fractional position in a vector using sinc filtering. More...
 
int osmo_cxvec_peaks_scan (const struct osmo_cxvec *cv, int *peaks_idx, int N)
 Find the index of the N highest energy ( $|x|^2$) peaks. More...
 
float osmo_cxvec_peak_energy_find (const struct osmo_cxvec *cv, int win_size, enum osmo_cxvec_peak_alg alg, float complex *peak_val_p)
 Find the maximum energy ( $|x|^2$) peak in a sequence. More...
 
struct osmo_cxvecosmo_cxvec_sig_normalize (const struct osmo_cxvec *sig, int decim, float freq_shift, struct osmo_cxvec *out)
 'Normalize' an IQ signal and apply decimation/frequency shift More...
 

Detailed Description

Osmocom Complex vectors math implementation.

html/tab_a.png0000644000175000017500000000021615067055113012560 0ustar buildbuildPNG  IHDR$[UIDATxK 0C'o([Ž%x#٩ We# 3t I 3+E~\D9wM}Y_A4Y}IENDB`html/group__cfile.js0000644000175000017500000000105415067055114014001 0ustar buildbuildvar group__cfile = [ [ "cfile.h", "cfile_8h.html", null ], [ "cfile.c", "cfile_8c.html", null ], [ "cfile", "structcfile.html", [ [ "_blen", "structcfile.html#ad3d6965e1039aa1f648361b2f83b034a", null ], [ "data", "structcfile.html#aeeb1105659968baae5df24026bf1d281", null ], [ "len", "structcfile.html#a2c856227c89a929b863da15951fcaef4", null ] ] ], [ "cfile_load", "group__cfile.html#gacb0304d89096222df64f3f9a10f22167", null ], [ "cfile_release", "group__cfile.html#ga7728a89f370281e5da16ff27d8657b3d", null ] ];html/modules.html0000644000175000017500000001164415067055114013352 0ustar buildbuild libosmodsp: Modules
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
Modules
Here is a list of all modules:
html/group__iqbal.js0000644000175000017500000000465515067055114014021 0ustar buildbuildvar group__iqbal = [ [ "iqbal.h", "iqbal_8h.html", null ], [ "iqbal.c", "iqbal_8c.html", null ], [ "osmo_iqbal_opts", "structosmo__iqbal__opts.html", [ [ "fft_count", "structosmo__iqbal__opts.html#abb7854c9f674bf12022ce0b5485fd2a7", null ], [ "fft_size", "structosmo__iqbal__opts.html#a76e529e63af98a524caa8cf61c4de828", null ], [ "max_iter", "structosmo__iqbal__opts.html#ac6dc907d8a810172970426cac913f2b0", null ], [ "start_at_prev", "structosmo__iqbal__opts.html#ad36e80298fe63cb9f985401e30f768fc", null ] ] ], [ "_iqbal_estimate_state", "struct__iqbal__estimate__state.html", [ [ "fft", "struct__iqbal__estimate__state.html#aa44240271f4835c080793da0b816bc1c", null ], [ "fft_plan", "struct__iqbal__estimate__state.html#a0a1a4f9083a6228f38e78702b8f710e9", null ] ] ], [ "_iqbal_state", "struct__iqbal__state.html", [ [ "cache", "struct__iqbal__state.html#a9663b19ceb3a2ab337c5ad74699e4c23", null ], [ "feval", "struct__iqbal__state.html#ad82cbcec2dc9e52f4816cbe9a0af757f", null ], [ "opts", "struct__iqbal__state.html#a96f58c4debc176d484eb20b5e19b4209", null ], [ "org", "struct__iqbal__state.html#ab463e6d3cfc9d2f70e530dbe4f76458f", null ], [ "tmp", "struct__iqbal__state.html#a03100dde8b80dacdd0a4936511c5ab10", null ] ] ], [ "_iqbal_objfn_gradient", "group__iqbal.html#ga169a1a71bbe3ff22192dca26f4d9ef8d", null ], [ "_iqbal_objfn_val_gradient", "group__iqbal.html#ga62f9a247afbb52d576a1763ccd47397f", null ], [ "_iqbal_objfn_value", "group__iqbal.html#ga743af26acca4fa90afcf1e67dda95dba", null ], [ "_osmo_iqbal_estimate", "group__iqbal.html#ga129881cae54362d61dd2b4460f8af248", null ], [ "_osmo_iqbal_estimate_release", "group__iqbal.html#ga5ece20030938ef8e8f9e1c3f2d91482a", null ], [ "osmo_iqbal_cxvec_estimate", "group__iqbal.html#ga19298f48b07828c19bc54038d5abe5ad", null ], [ "osmo_iqbal_cxvec_fix", "group__iqbal.html#ga978fbf1c9f01694852c561c95d5ceb9d", null ], [ "osmo_iqbal_cxvec_optimize", "group__iqbal.html#gac74f9d37e2153fdf954e592b36f7c7c0", null ], [ "osmo_iqbal_estimate", "group__iqbal.html#ga23c6972ae206b4a60dbe49d954fc9caa", null ], [ "osmo_iqbal_fix", "group__iqbal.html#gaaca46bab25fe24148c3cb3c4d2158c79", null ], [ "osmo_iqbal_default_opts", "group__iqbal.html#ga2f0587c233b021d72a98a11312ff5e9f", null ], [ "osmo_iqbal_default_opts", "group__iqbal.html#ga2f0587c233b021d72a98a11312ff5e9f", null ] ];html/sync_off.png0000644000175000017500000000152515067055113013324 0ustar buildbuildPNG  IHDRw=IDATxKhTW1I&38MII3b$c I1V1-(T.* t!K[čf`l(l"Y6gT}sgܹ d{8?̝;u`:!FB?Űm'y>ѝlU_?]Y(N8f1qn-etm 0}b%׌=0?1s08;_ W|%\Zð >舽lnp.a{ )t; b n652?>Oдunm`׭ZWjC~>־0+ {{fMŕټ` ݛ%uA6,]kWu]7ihu1 l Ҷ̺:\cxhRQt$ fd<4B[fd7=.M9//O a},j?.5ښm?X2#d p(?c!a1ޗةܾ7dK:)3],H+ku<|`LhC7e םt H$^2%l.aeÉ|s }D^hz~Rá]|#@חև[k<|(*ݹdtM:,]' X_n| /cfOIENDB`html/form_5.png0000644000175000017500000000773115067055114012713 0ustar buildbuildPNG  IHDR.iCCPdefault_gray.iccHy4ǿo23Xǒ5 Xh[]JI*d+E%mRQhFrPjAhgA;# ÍO` ,D$$@>Ă, [ (Lh;AP5.@נfWI0 Uaa' ^ pK$_X:h!,"HG yH R4#H/r EE1PZ(3C% P6T>j5&eКhS4Gs%:t+z=`&Da6a 01-.f3b%Xs+6ŖaObb8"Npٸ\# n7[ċUxW|>_wE(I0'xf S"H4!#[[qAIɤzRLV%[Iusg!W(D(KBMhX0^XE-N8CD^DU#,EBȘȼ(UTOU4V@Q4KQRB(9c *BUrBIiHKJ!5+M6II~,hxl9&/3/+'k//[&{]vV.g%%W,wEnF*o!)_,UCf0J=9djEEbb3%K)LX[iNY^E9SI ^rHWeA꫺S]u)23M̧jd5Kuza{FFƠ&iyXshzɊ5+ƴHZl&qmvve::?t uctkuQ:k+$[c;MP# .; 񍚍f+X4umbmer䋩iYӷfZfffӫBWծ0W466X0,,Z,,-k,_X)YXYMQ7ֺ|V)g3ɳzۖ>S k7dvpr0ƕ 9Gc͎=N$'Or|N*VWgnLw7 zT xy'{w4, t6KGw`|خ9f2007pt-smŬ^x}sA ߠƠo5*78C!V!!3ESaaEag",#J"f#9]룗b|cZbqA(qq=6m׌ύ$&L;ĵI?Y-yGxEJETsiiqiӧ22oBmmTܖ9z eÖ,ɭ[Ol#lv7[7(v99[s&vh4Y +rv ɻ_Wpgޞ=K{هotEEE\3?\vAI!¡CRҎ2}e#G*+Z*e*wW.9<|HslU~ףGVWը֔K9֧8xCT]~z = 2MpSrNٜhjnO:tfssUWR[ڠvA ݝf/_RTqYr•+KW3ww^ 6ѽuz{n8ݸu^v[.6}N{Q_[a]ûFmƃLu2l9|FV z> < y8(ѻ)l}~LYs5"0\o~yI~Y2%?0?}inޫ5&_ǿ^K7joοz?77n} >vϻ?iq!_X_z~ZLV]{Ob/oo pHYs^ tEXtSoftwareGPL Ghostscript 10.00.00q[IDAThZݙ*]s4-SR`J-AJ} "*I&w]/&(ܰـWNQ5V$- KOy~43\DV enҟ6|ѩO E1@! Zd[O8_!F(A␴Ou3t .r"ғd١zk-WɠTd_D yr]  -/~`=q-*YyU2NK$ud\ڲ(\k<fymI1~@m2S4J=JmWK מHXǃP&4PK@H19WpFZuD;klbQ ~wÕ- @Dk.W}XMt7rjjXEˀ֩- 0]]]*As̈́ȮG0/7>oS2r7HV[`ܝm6/oe~>]*$O/#ʹ&uWL%IYD*c+ҧ7b} !J7VÚlػF~A0'jics@2[UM(Uמ:h+{F f -"hzqw\k8jKH5C/y[H6ތsLqTi7hWQq9q#8 I;4!ʙ;v6e5ܲ&]{/H2Qik(UD,ՎYB+aQ`v\u}ɪѨ/J,LˀFK=Ldu[܅ _wz1>IFγL㱸=}3܆s%JP/r&ѨJZh% Ӱ֙!`r)zMPژHHED9Нw{z!4}yfC9ٰqOצѼ\i_w누alZ1a%{}ȏ c(&.#뗓aߋ瀟BIENDB`html/cfile_8c.js0000644000175000017500000000027515067055114013024 0ustar buildbuildvar cfile_8c = [ [ "cfile_load", "group__cfile.html#gacb0304d89096222df64f3f9a10f22167", null ], [ "cfile_release", "group__cfile.html#ga7728a89f370281e5da16ff27d8657b3d", null ] ];html/dir_68267d1309a1af8e8297ef4c3efbcdba.js0000644000175000017500000000037715067055114017022 0ustar buildbuildvar dir_68267d1309a1af8e8297ef4c3efbcdba = [ [ "cfile.c", "cfile_8c.html", "cfile_8c" ], [ "cxvec.c", "cxvec_8c.html", "cxvec_8c" ], [ "cxvec_math.c", "cxvec__math_8c.html", "cxvec__math_8c" ], [ "iqbal.c", "iqbal_8c.html", "iqbal_8c" ] ];html/modules.js0000644000175000017500000000032515067055114013014 0ustar buildbuildvar modules = [ [ ".cfile helpers", "group__cfile.html", "group__cfile" ], [ "Complex vectors", "group__cxvec.html", "group__cxvec" ], [ "IQ balance utilities", "group__iqbal.html", "group__iqbal" ] ];html/tabs.css0000644000175000017500000002334515067055113012457 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/cxvec_8h.html0000644000175000017500000002171615067055114013412 0ustar buildbuild libosmodsp: include/osmocom/dsp/cxvec.h File Reference
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
cxvec.h File Reference

Osmocom Complex vectors header. More...

Go to the source code of this file.

Data Structures

struct  osmo_cxvec
 Complex vector. More...
 

Functions

void osmo_cxvec_init_from_data (struct osmo_cxvec *cv, float complex *data, int len)
 Initialize a vector structure with a given data array. More...
 
struct osmo_cxvecosmo_cxvec_alloc_from_data (float complex *data, int len)
 Allocate a complex vector referencing a given data array. More...
 
struct osmo_cxvecosmo_cxvec_alloc (int max_len)
 Allocate a complex vector of a given maximum length. More...
 
void osmo_cxvec_free (struct osmo_cxvec *cv)
 Free a complex vector (and possibly associated data) More...
 
void osmo_cxvec_dbg_dump (struct osmo_cxvec *cv, const char *fname)
 Save the data contained of a vector into a .cfile for debug. More...
 

Detailed Description

Osmocom Complex vectors header.

html/files.html0000644000175000017500000002006615067055114013002 0ustar buildbuild libosmodsp: File List
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
File List
Here is a list of all documented files with brief descriptions:
[detail level 1234]
  include
  osmocom
  dsp
 cfile.hOsmocom .cfile helpers header
 cxvec.hOsmocom Complex vectors header
 cxvec_math.hOsmocom Complex vectors math header
 iqbal.hOsmocom IQ balance utils header
 version.h
  src
 cfile.cOsmocom .cfile helpers implementation
 cxvec.cOsmocom Complex vectors implementation
 cxvec_math.cOsmocom Complex vectors math implementation
 iqbal.cIQ balance utils implementation
html/doc.png0000644000175000017500000000135215067055114012262 0ustar buildbuildPNG  IHDR}\IDATxMOS[sa?-XZ(PD4 AWbu`b 77wHFCԁ/`voAPqP@ 980 +y^Z9SW\83g3'Nçl_bpV"ֆXd]3xM[1W *PGz/Eg{ aoV:这1$RW,@56-,m/蹖 r5T*S(Vf89u գwa=<{ҡUr+dDF$`zNܮ0Q3~_^N=vpTLT}kqm<?ZhX_ݥ[) `ga_*2`'=F2EP l=8Wv%THqɿ<"GxH{#֫aJmKsVءM^ T ݛr߽m_?Wİ#uIENDB`html/doxygen.css0000644000175000017500000010161415067055113013177 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/bc_s.png0000644000175000017500000000124415067055113012422 0ustar buildbuildPNG  IHDR_ kIDATxkQϝ̤I&m&156*nąܸR,4 +H(Ub1J.(EmߏhJmKS'C(х & r3g(z&_9}՟@mu ` h`ԯ &~M4%3?h)\Yi>Jb @giވkg\轭EUv+?E"pB\Y&$vM+Dn)}:Xo 3گ'.f0u9Ljf6%3Gf#sm(,k*ʒJJˢou_~ r]%%mnu]zr5[ưXeI html/navtreeindex0.js0000644000175000017500000001224415067055114014123 0ustar buildbuildvar NAVTREEINDEX0 = { "annotated.html":[1,0], "cfile_8c.html":[0,0,1], "cfile_8h.html":[0,0,0], "cxvec_8c.html":[0,1,2], "cxvec_8h.html":[0,1,1], "cxvec__math_8c.html":[0,1,0,1], "cxvec__math_8h.html":[0,1,0,0], "dir_5b8fd40c25b8cda2528024e092698ab5.html":[2,0,0,0,0], "dir_68267d1309a1af8e8297ef4c3efbcdba.html":[2,0,1], "dir_abe9b486a10ccc5afdf8abc29637e0c1.html":[2,0,0,0], "dir_d44c64559bbebec7f509842c48db8b23.html":[2,0,0], "files.html":[2,0], "functions.html":[1,1,0], "functions_vars.html":[1,1,1], "globals.html":[2,1,0], "globals_enum.html":[2,1,3], "globals_eval.html":[2,1,4], "globals_func.html":[2,1,1], "globals_vars.html":[2,1,2], "group__cfile.html":[0,0], "group__cfile.html#ga7728a89f370281e5da16ff27d8657b3d":[0,0,4], "group__cfile.html#gacb0304d89096222df64f3f9a10f22167":[0,0,3], "group__cxvec.html":[0,1], "group__cxvec.html#ga4edecda809e91f11cf88b53a1db8d62a":[0,1,5], "group__cxvec.html#ga69e6d1ea3d468954cedf7d6f8d44f825":[0,1,6], "group__cxvec.html#ga9461ac13f1d77ca832b140461e599caa":[0,1,4], "group__cxvec.html#gaa03ae6bbc24d094b8955d905832f0c36":[0,1,8], "group__cxvec.html#gaa57240ff2299122f9375e901b9700e7d":[0,1,7], "group__cxvec__math.html":[0,1,0], "group__cxvec__math.html#ga1b169ec31cb01111c0def0c12d65f3a2":[0,1,0,13], "group__cxvec__math.html#ga2e183a0f24afa2e16199d1514629bf08":[0,1,0,2], "group__cxvec__math.html#ga2ebadb16e25768896013420a98ec666f":[0,1,0,4], "group__cxvec__math.html#ga4579583a658fc33afd24a1d8508b212f":[0,1,0,12], "group__cxvec__math.html#ga49125f3c259da9d7eec7fa4d98d609d4":[0,1,0,10], "group__cxvec__math.html#ga495219ee953336e15cd68c9b22d3850c":[0,1,0,8], "group__cxvec__math.html#ga4e7a7183dc4e5ce77d72d2986495f348":[0,1,0,14], "group__cxvec__math.html#ga5ac0adb49726087258381582582ef654":[0,1,0,11], "group__cxvec__math.html#ga7942b58b341e440c0e8796d395460b78":[0,1,0,3], "group__cxvec__math.html#ga99ff6e3baec3253f4e431b156f042a0f":[0,1,0,5], "group__cxvec__math.html#ga9fa20d926f9d313a4751cef1eff740ba":[0,1,0,6], "group__cxvec__math.html#gacb1c646e03a09b51b617467501639763":[0,1,0,7], "group__cxvec__math.html#gad25b04feb1cd30b24fe7de8f76e56c23":[0,1,0,9], "group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08a03ece74c3bcd50aeb9fb42329b9a59a5":[0,1,0,2,2], "group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08a47fb2e6e9d274d4512601828023ac1d2":[0,1,0,2,1], "group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08ae758172bda42f9b44aa9015c0e142717":[0,1,0,2,0], "group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78aa8df843abc147bca5860fee1ddff1378":[0,1,0,3,2], "group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78ab0fb6b29112253cc5d51fb119b5d812a":[0,1,0,3,1], "group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78abb4b91d1bfa5bd51ff0e48633d9b9891":[0,1,0,3,0], "group__iqbal.html":[0,2], "group__iqbal.html#ga129881cae54362d61dd2b4460f8af248":[0,2,8], "group__iqbal.html#ga169a1a71bbe3ff22192dca26f4d9ef8d":[0,2,5], "group__iqbal.html#ga19298f48b07828c19bc54038d5abe5ad":[0,2,10], "group__iqbal.html#ga23c6972ae206b4a60dbe49d954fc9caa":[0,2,13], "group__iqbal.html#ga2f0587c233b021d72a98a11312ff5e9f":[0,2,16], "group__iqbal.html#ga2f0587c233b021d72a98a11312ff5e9f":[0,2,15], "group__iqbal.html#ga5ece20030938ef8e8f9e1c3f2d91482a":[0,2,9], "group__iqbal.html#ga62f9a247afbb52d576a1763ccd47397f":[0,2,6], "group__iqbal.html#ga743af26acca4fa90afcf1e67dda95dba":[0,2,7], "group__iqbal.html#ga978fbf1c9f01694852c561c95d5ceb9d":[0,2,11], "group__iqbal.html#gaaca46bab25fe24148c3cb3c4d2158c79":[0,2,14], "group__iqbal.html#gac74f9d37e2153fdf954e592b36f7c7c0":[0,2,12], "index.html":[], "iqbal_8c.html":[0,2,1], "iqbal_8h.html":[0,2,0], "modules.html":[0], "pages.html":[], "struct__iqbal__estimate__state.html":[0,2,3], "struct__iqbal__estimate__state.html#a0a1a4f9083a6228f38e78702b8f710e9":[0,2,3,1], "struct__iqbal__estimate__state.html#aa44240271f4835c080793da0b816bc1c":[0,2,3,0], "struct__iqbal__state.html":[0,2,4], "struct__iqbal__state.html#a03100dde8b80dacdd0a4936511c5ab10":[0,2,4,4], "struct__iqbal__state.html#a9663b19ceb3a2ab337c5ad74699e4c23":[0,2,4,0], "struct__iqbal__state.html#a96f58c4debc176d484eb20b5e19b4209":[0,2,4,2], "struct__iqbal__state.html#ab463e6d3cfc9d2f70e530dbe4f76458f":[0,2,4,3], "struct__iqbal__state.html#ad82cbcec2dc9e52f4816cbe9a0af757f":[0,2,4,1], "structcfile.html":[0,0,2], "structcfile.html#a2c856227c89a929b863da15951fcaef4":[0,0,2,2], "structcfile.html#ad3d6965e1039aa1f648361b2f83b034a":[0,0,2,0], "structcfile.html#aeeb1105659968baae5df24026bf1d281":[0,0,2,1], "structosmo__cxvec.html":[0,1,3], "structosmo__cxvec.html#a03722af5764b41c9151a7542546e3739":[0,1,3,3], "structosmo__cxvec.html#a42469c5c904c26c45af3ff557ccd203f":[0,1,3,4], "structosmo__cxvec.html#aa8a9de0ef88d44caa1c07bc91b99bffd":[0,1,3,0], "structosmo__cxvec.html#ab3bd5fac3c3a84df65bc82d1cae223ab":[0,1,3,2], "structosmo__cxvec.html#aec620e4391a60de801eb23dec73e4d12":[0,1,3,1], "structosmo__iqbal__opts.html":[0,2,2], "structosmo__iqbal__opts.html#a76e529e63af98a524caa8cf61c4de828":[0,2,2,1], "structosmo__iqbal__opts.html#abb7854c9f674bf12022ce0b5485fd2a7":[0,2,2,0], "structosmo__iqbal__opts.html#ac6dc907d8a810172970426cac913f2b0":[0,2,2,2], "structosmo__iqbal__opts.html#ad36e80298fe63cb9f985401e30f768fc":[0,2,2,3], "version_8h_source.html":[2,0,0,0,0,4] }; html/menudata.js0000644000175000017500000000414115067055114013142 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"}, {text:"Variables",url:"functions_vars.html"}]}]}, {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:"_",url:"globals.html#index__5F"}, {text:"c",url:"globals.html#index_c"}, {text:"o",url:"globals.html#index_o"}, {text:"p",url:"globals.html#index_p"}]}, {text:"Functions",url:"globals_func.html"}, {text:"Variables",url:"globals_vars.html"}, {text:"Enumerations",url:"globals_enum.html"}, {text:"Enumerator",url:"globals_eval.html"}]}]}]} html/form_4.png0000644000175000017500000000760615067055114012713 0ustar buildbuildPNG  IHDRAiCCPdefault_gray.iccHy4ǿo23Xǒ5 Xh[]JI*d+E%mRQhFrPjAhgA;# ÍO` ,D$$@>Ă, [ (Lh;AP5.@נfWI0 Uaa' ^ pK$_X:h!,"HG yH R4#H/r EE1PZ(3C% P6T>j5&eКhS4Gs%:t+z=`&Da6a 01-.f3b%Xs+6ŖaObb8"Npٸ\# n7[ċUxW|>_wE(I0'xf S"H4!#[[qAIɤzRLV%[Iusg!W(D(KBMhX0^XE-N8CD^DU#,EBȘȼ(UTOU4V@Q4KQRB(9c *BUrBIiHKJ!5+M6II~,hxl9&/3/+'k//[&{]vV.g%%W,wEnF*o!)_,UCf0J=9djEEbb3%K)LX[iNY^E9SI ^rHWeA꫺S]u)23M̧jd5Kuza{FFƠ&iyXshzɊ5+ƴHZl&qmvve::?t uctkuQ:k+$[c;MP# .; 񍚍f+X4umbmer䋩iYӷfZfffӫBWծ0W466X0,,Z,,-k,_X)YXYMQ7ֺ|V)g3ɳzۖ>S k7dvpr0ƕ 9Gc͎=N$'Or|N*VWgnLw7 zT xy'{w4, t6KGw`|خ9f2007pt-smŬ^x}sA ߠƠo5*78C!V!!3ESaaEag",#J"f#9]룗b|cZbqA(qq=6m׌ύ$&L;ĵI?Y-yGxEJETsiiqiӧ22oBmmTܖ9z eÖ,ɭ[Ol#lv7[7(v99[s&vh4Y +rv ɻ_Wpgޞ=K{هotEEE\3?\vAI!¡CRҎ2}e#G*+Z*e*wW.9<|HslU~ףGVWը֔K9֧8xCT]~z = 2MpSrNٜhjnO:tfssUWR[ڠvA ݝf/_RTqYr•+KW3ww^ 6ѽuz{n8ݸu^v[.6}N{Q_[a]ûFmƃLu2l9|FV z> < y8(ѻ)l}~LYs5"0\o~yI~Y2%?0?}inޫ5&_ǿ^K7joοz?77n} >vϻ?iq!_X_z~ZLV]{Ob/oo pHYs^ tEXtSoftwareGPL Ghostscript 10.00.00qIDAThZە:3 膠6m8Mr8B B3g֏}VWZ"7 <ڈJ0ܘX?u{Zym;oӓZRhaB.؝ƚOxWVK8]/*ErGg#ݏɤ_ذp)ͪ#c:m~8c|/mrMգ_V$N=o3_]؎ vpO9nImcGޔ?2jE8n{Ⱥ ԉa(]Αi`ׯXOKGH"Poӹő6\ImTׄ%I5'rVz[ M>.2ЉCv?HMq.y71җmp0vlT%ňMlNJqз:X5a<8UVa"adُ8"f1{%7; ,qeV?YsXNMu0tbZm+HZ!Ҏ1UDF Ӡ ϼ=ދCIy'1E1YrTb7K-Ң"T$Y4N,Sp{wU xxLx-a{-ͦ< @d$"Y v˃㍼_ S$(XXrPd97)ZuɩR?넇x#dW?9oP\,q%qE $x{˞g@kEnoUdiIL2)V @='m t$󱓥{Ai}nDMi6$30t~8`!|Sp>9c!V['Uv+2<_}=l$ZmZ !]aCfOx|{K,ã=WS׺e-sIENDB`html/structosmo__cxvec.html0000644000175000017500000001637715067055114015463 0ustar buildbuild libosmodsp: osmo_cxvec Struct Reference
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
osmo_cxvec Struct Reference

Complex vector. More...

#include <cxvec.h>

Data Fields

int len
 Valid length.
 
int max_len
 Maximum length in data field.
 
int flags
 Flags, see CXVEC_FLG_xxx.
 
float complex * data
 Data field.
 
float complex _data [0]
 Optional inline data array.
 

Detailed Description

Complex vector.


The documentation for this struct was generated from the following file:
html/globals_enum.html0000644000175000017500000000763315067055114014354 0ustar buildbuild libosmodsp: Globals
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
 
html/tab_s.png0000644000175000017500000000027015067055113012602 0ustar buildbuildPNG  IHDR$[IDATx݁ @@ѣ?Q"%If6[HQ<]dr s?O=w'F -~rÍ[芭m֬ݯнF)Y% `n,9B!ь\<#IENDB`html/dir_68267d1309a1af8e8297ef4c3efbcdba.html0000644000175000017500000001316415067055114017350 0ustar buildbuild libosmodsp: src Directory Reference
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
src Directory Reference

Files

file  cfile.c
 Osmocom .cfile helpers implementation.
 
file  cxvec.c
 Osmocom Complex vectors implementation.
 
file  cxvec_math.c
 Osmocom Complex vectors math implementation.
 
file  iqbal.c
 IQ balance utils implementation.
 
html/cfile_8h_source.html0000644000175000017500000003152315067055114014741 0ustar buildbuild libosmodsp: include/osmocom/dsp/cfile.h Source File
libosmodsp 0.4.0.12-f6f4
Osmocom DSP library
cfile.h
Go to the documentation of this file.
1/*
2 * cfile.h
3 *
4 * Helpers to read .cfile (complex samples from gnuradio)
5 *
6 * Copyright (C) 2011 Sylvain Munaut <tnt@246tNt.com>
7 *
8 * All Rights Reserved
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License along
21 * with this program; if not, write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 */
24
25#ifndef __OSMO_DSP_CFILE_H__
26#define __OSMO_DSP_CFILE_H__
27
36#include <complex.h>
37
39struct cfile {
40 float complex *data;
41 unsigned int len;
42 size_t _blen;
43};
44
45struct cfile *cfile_load(const char *filename);
46void cfile_release(struct cfile *cf);
47
50#endif /* __OSMO_DSP_CFILE_H__ */
void cfile_release(struct cfile *cf)
Release all resources associated with a mapped .cfile.
Definition: cfile.c:102
struct cfile * cfile_load(const char *filename)
.cfile loader: mmap() the data into memory (read-only)
Definition: cfile.c:50
Structure representing a currently mapped .cfile.
Definition: cfile.h:39
unsigned int len
Length (in samples) of the data.
Definition: cfile.h:41
size_t _blen
Length (in bytes) of the data.
Definition: cfile.h:42
float complex * data
Data array (read only !)
Definition: cfile.h:40
html/open.png0000644000175000017500000000017315067055113012455 0ustar buildbuildPNG  IHDR BIDATx 0 ׬ՙ\39b!9{|I>$#ߴ8/z/>2[giU,/~\ 9ٸIENDB`html/sync_on.png0000644000175000017500000000151515067055113013165 0ustar buildbuildPNG  IHDRw=IDATx_HTY8i4-g6&kQ)!0URKڅ/PE>K-+K.YdEPaAZSܝ;3wgfsWK.Da'q_k DQCg 0Y:qZ)~L0HV z-C%g68%wUϿ }? ?3 K@h aaUe s~2&&B*Alji*˨,oƣT,d[3-*> LɟfkҠw#*AEjKUy>&{8m5Ki jjD*Nigw7DmzK۾M!k?o_lX#~XӑR*EՂדE;6e"Q(=Ezæ5Kؼָ_ 1zBJ X96jL^7{J1i@%8'7M_\Q#Uy Wo x8sv|Sn q_m >b[JX,4[T{Ratjjzz'ȶiIws KC^Y%6ꈺ]vhiWvh'̂|[^YrD=
Loading...
Searching...
No Matches
html/search/search.css0000644000175000017500000001072215067055113014233 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/functions_0.js0000644000175000017500000000131115067055113015033 0ustar buildbuildvar searchData= [ ['_5fiqbal_5fobjfn_5fgradient_0',['_iqbal_objfn_gradient',['../group__iqbal.html#ga169a1a71bbe3ff22192dca26f4d9ef8d',1,'iqbal.c']]], ['_5fiqbal_5fobjfn_5fval_5fgradient_1',['_iqbal_objfn_val_gradient',['../group__iqbal.html#ga62f9a247afbb52d576a1763ccd47397f',1,'iqbal.c']]], ['_5fiqbal_5fobjfn_5fvalue_2',['_iqbal_objfn_value',['../group__iqbal.html#ga743af26acca4fa90afcf1e67dda95dba',1,'iqbal.c']]], ['_5fosmo_5fiqbal_5festimate_3',['_osmo_iqbal_estimate',['../group__iqbal.html#ga129881cae54362d61dd2b4460f8af248',1,'iqbal.c']]], ['_5fosmo_5fiqbal_5festimate_5frelease_4',['_osmo_iqbal_estimate_release',['../group__iqbal.html#ga5ece20030938ef8e8f9e1c3f2d91482a',1,'iqbal.c']]] ]; html/search/close.svg0000644000175000017500000000240415067055113014100 0ustar buildbuild image/svg+xml html/search/groups_1.js0000644000175000017500000000036215067055113014350 0ustar buildbuildvar searchData= [ ['complex_20vectors_0',['Complex vectors',['../group__cxvec.html',1,'']]], ['complex_20vectors_20math_20and_20signal_20processing_1',['Complex vectors math and signal processing',['../group__cxvec__math.html',1,'']]] ]; html/search/all_1.js0000644000175000017500000000212215067055113013575 0ustar buildbuildvar searchData= [ ['_5fblen_0',['_blen',['../structcfile.html#ad3d6965e1039aa1f648361b2f83b034a',1,'cfile']]], ['_5fdata_1',['_data',['../structosmo__cxvec.html#aa8a9de0ef88d44caa1c07bc91b99bffd',1,'osmo_cxvec']]], ['_5fiqbal_5festimate_5fstate_2',['_iqbal_estimate_state',['../struct__iqbal__estimate__state.html',1,'']]], ['_5fiqbal_5fobjfn_5fgradient_3',['_iqbal_objfn_gradient',['../group__iqbal.html#ga169a1a71bbe3ff22192dca26f4d9ef8d',1,'iqbal.c']]], ['_5fiqbal_5fobjfn_5fval_5fgradient_4',['_iqbal_objfn_val_gradient',['../group__iqbal.html#ga62f9a247afbb52d576a1763ccd47397f',1,'iqbal.c']]], ['_5fiqbal_5fobjfn_5fvalue_5',['_iqbal_objfn_value',['../group__iqbal.html#ga743af26acca4fa90afcf1e67dda95dba',1,'iqbal.c']]], ['_5fiqbal_5fstate_6',['_iqbal_state',['../struct__iqbal__state.html',1,'']]], ['_5fosmo_5fiqbal_5festimate_7',['_osmo_iqbal_estimate',['../group__iqbal.html#ga129881cae54362d61dd2b4460f8af248',1,'iqbal.c']]], ['_5fosmo_5fiqbal_5festimate_5frelease_8',['_osmo_iqbal_estimate_release',['../group__iqbal.html#ga5ece20030938ef8e8f9e1c3f2d91482a',1,'iqbal.c']]] ]; html/search/groups_1.html0000644000175000017500000000263615067055113014706 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_6.html0000644000175000017500000000263315067055113014141 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_2.js0000644000175000017500000000274415067055113013610 0ustar buildbuildvar searchData= [ ['cache_0',['cache',['../struct__iqbal__state.html#a9663b19ceb3a2ab337c5ad74699e4c23',1,'_iqbal_state']]], ['cfile_1',['cfile',['../structcfile.html',1,'']]], ['cfile_2ec_2',['cfile.c',['../cfile_8c.html',1,'']]], ['cfile_2eh_3',['cfile.h',['../cfile_8h.html',1,'']]], ['cfile_5fload_4',['cfile_load',['../group__cfile.html#gacb0304d89096222df64f3f9a10f22167',1,'cfile.c']]], ['cfile_5frelease_5',['cfile_release',['../group__cfile.html#ga7728a89f370281e5da16ff27d8657b3d',1,'cfile.c']]], ['complex_20vectors_6',['Complex vectors',['../group__cxvec.html',1,'']]], ['complex_20vectors_20math_20and_20signal_20processing_7',['Complex vectors math and signal processing',['../group__cxvec__math.html',1,'']]], ['conv_5ffull_5fspan_8',['CONV_FULL_SPAN',['../group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08ae758172bda42f9b44aa9015c0e142717',1,'cxvec_math.h']]], ['conv_5fno_5fdelay_9',['CONV_NO_DELAY',['../group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08a03ece74c3bcd50aeb9fb42329b9a59a5',1,'cxvec_math.h']]], ['conv_5foverlap_5fonly_10',['CONV_OVERLAP_ONLY',['../group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08a47fb2e6e9d274d4512601828023ac1d2',1,'cxvec_math.h']]], ['cxvec_2ec_11',['cxvec.c',['../cxvec_8c.html',1,'']]], ['cxvec_2eh_12',['cxvec.h',['../cxvec_8h.html',1,'']]], ['cxvec_5fmath_2ec_13',['cxvec_math.c',['../cxvec__math_8c.html',1,'']]], ['cxvec_5fmath_2eh_14',['cxvec_math.h',['../cxvec__math_8h.html',1,'']]] ]; html/search/variables_4.js0000644000175000017500000000031215067055113014777 0ustar buildbuildvar searchData= [ ['len_0',['len',['../structcfile.html#a2c856227c89a929b863da15951fcaef4',1,'cfile::len()'],['../structosmo__cxvec.html#a03722af5764b41c9151a7542546e3739',1,'osmo_cxvec::len()']]] ]; html/search/files_1.js0000644000175000017500000000020615067055113014130 0ustar buildbuildvar searchData= [ ['iqbal_2ec_0',['iqbal.c',['../iqbal_8c.html',1,'']]], ['iqbal_2eh_1',['iqbal.h',['../iqbal_8h.html',1,'']]] ]; html/search/variables_8.html0000644000175000017500000000264115067055113015342 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_3.html0000644000175000017500000000263315067055113014136 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_0.html0000644000175000017500000000264115067055113015332 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_3.html0000644000175000017500000000264115067055113015335 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_2.html0000644000175000017500000000263615067055113014707 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_0.html0000644000175000017500000000263515067055113014467 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_b.html0000644000175000017500000000263315067055113014215 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_0.js0000644000175000017500000000014115067055113014342 0ustar buildbuildvar searchData= [ ['_2ecfile_20helpers_0',['.cfile helpers',['../group__cfile.html',1,'']]] ]; html/search/all_b.js0000644000175000017500000000017515067055113013664 0ustar buildbuildvar searchData= [ ['tmp_0',['tmp',['../struct__iqbal__state.html#a03100dde8b80dacdd0a4936511c5ab10',1,'_iqbal_state']]] ]; html/search/functions_1.html0000644000175000017500000000264115067055113015373 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_2.js0000644000175000017500000000031615067055113015001 0ustar buildbuildvar searchData= [ ['data_0',['data',['../structcfile.html#aeeb1105659968baae5df24026bf1d281',1,'cfile::data()'],['../structosmo__cxvec.html#aec620e4391a60de801eb23dec73e4d12',1,'osmo_cxvec::data()']]] ]; html/search/variables_1.js0000644000175000017500000000020115067055113014771 0ustar buildbuildvar searchData= [ ['cache_0',['cache',['../struct__iqbal__state.html#a9663b19ceb3a2ab337c5ad74699e4c23',1,'_iqbal_state']]] ]; html/search/nomatches.html0000644000175000017500000000076415067055113015130 0ustar buildbuild
    No Matches
    html/search/all_5.js0000644000175000017500000000033715067055113013607 0ustar buildbuildvar searchData= [ ['iq_20balance_20utilities_0',['IQ balance utilities',['../group__iqbal.html',1,'']]], ['iqbal_2ec_1',['iqbal.c',['../iqbal_8c.html',1,'']]], ['iqbal_2eh_2',['iqbal.h',['../iqbal_8h.html',1,'']]] ]; html/search/enums_0.js0000644000175000017500000000046215067055113014160 0ustar buildbuildvar searchData= [ ['osmo_5fcxvec_5fconv_5ftype_0',['osmo_cxvec_conv_type',['../group__cxvec__math.html#ga2e183a0f24afa2e16199d1514629bf08',1,'cxvec_math.h']]], ['osmo_5fcxvec_5fpeak_5falg_1',['osmo_cxvec_peak_alg',['../group__cxvec__math.html#ga7942b58b341e440c0e8796d395460b78',1,'cxvec_math.h']]] ]; html/search/functions_0.html0000644000175000017500000000264115067055113015372 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_6.js0000644000175000017500000000077315067055113015014 0ustar buildbuildvar searchData= [ ['opts_0',['opts',['../struct__iqbal__state.html#a96f58c4debc176d484eb20b5e19b4209',1,'_iqbal_state']]], ['org_1',['org',['../struct__iqbal__state.html#ab463e6d3cfc9d2f70e530dbe4f76458f',1,'_iqbal_state']]], ['osmo_5fiqbal_5fdefault_5fopts_2',['osmo_iqbal_default_opts',['../group__iqbal.html#ga2f0587c233b021d72a98a11312ff5e9f',1,'osmo_iqbal_default_opts(): iqbal.c'],['../group__iqbal.html#ga2f0587c233b021d72a98a11312ff5e9f',1,'osmo_iqbal_default_opts(): iqbal.c']]] ]; html/search/all_8.html0000644000175000017500000000263315067055113014143 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_0.js0000644000175000017500000000061615067055113014134 0ustar buildbuildvar searchData= [ ['cfile_2ec_0',['cfile.c',['../cfile_8c.html',1,'']]], ['cfile_2eh_1',['cfile.h',['../cfile_8h.html',1,'']]], ['cxvec_2ec_2',['cxvec.c',['../cxvec_8c.html',1,'']]], ['cxvec_2eh_3',['cxvec.h',['../cxvec_8h.html',1,'']]], ['cxvec_5fmath_2ec_4',['cxvec_math.c',['../cxvec__math_8c.html',1,'']]], ['cxvec_5fmath_2eh_5',['cxvec_math.h',['../cxvec__math_8h.html',1,'']]] ]; html/search/variables_2.html0000644000175000017500000000264115067055113015334 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_9.html0000644000175000017500000000263315067055113014144 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/search.js0000644000175000017500000005500415067055113014061 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/enums_0.html0000644000175000017500000000263515067055113014514 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/mag_sel.svg0000644000175000017500000000451215067055113014404 0ustar buildbuild image/svg+xml html/search/functions_2.html0000644000175000017500000000264115067055113015374 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/enumvalues_0.html0000644000175000017500000000264215067055113015547 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_1.html0000644000175000017500000000264115067055113015333 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_2.js0000644000175000017500000000553715067055113015053 0ustar buildbuildvar searchData= [ ['osmo_5fcxvec_5falloc_0',['osmo_cxvec_alloc',['../group__cxvec.html#ga9461ac13f1d77ca832b140461e599caa',1,'cxvec.c']]], ['osmo_5fcxvec_5falloc_5ffrom_5fdata_1',['osmo_cxvec_alloc_from_data',['../group__cxvec.html#ga4edecda809e91f11cf88b53a1db8d62a',1,'cxvec.c']]], ['osmo_5fcxvec_5fconvolve_2',['osmo_cxvec_convolve',['../group__cxvec__math.html#ga2ebadb16e25768896013420a98ec666f',1,'cxvec_math.c']]], ['osmo_5fcxvec_5fcorrelate_3',['osmo_cxvec_correlate',['../group__cxvec__math.html#ga99ff6e3baec3253f4e431b156f042a0f',1,'cxvec_math.c']]], ['osmo_5fcxvec_5fdbg_5fdump_4',['osmo_cxvec_dbg_dump',['../group__cxvec.html#ga69e6d1ea3d468954cedf7d6f8d44f825',1,'cxvec.c']]], ['osmo_5fcxvec_5fdelay_5',['osmo_cxvec_delay',['../group__cxvec__math.html#ga9fa20d926f9d313a4751cef1eff740ba',1,'cxvec_math.c']]], ['osmo_5fcxvec_5ffree_6',['osmo_cxvec_free',['../group__cxvec.html#gaa57240ff2299122f9375e901b9700e7d',1,'cxvec.c']]], ['osmo_5fcxvec_5finit_5ffrom_5fdata_7',['osmo_cxvec_init_from_data',['../group__cxvec.html#gaa03ae6bbc24d094b8955d905832f0c36',1,'cxvec.c']]], ['osmo_5fcxvec_5finterpolate_5fpoint_8',['osmo_cxvec_interpolate_point',['../group__cxvec__math.html#gacb1c646e03a09b51b617467501639763',1,'cxvec_math.c']]], ['osmo_5fcxvec_5fpeak_5fenergy_5ffind_9',['osmo_cxvec_peak_energy_find',['../group__cxvec__math.html#ga495219ee953336e15cd68c9b22d3850c',1,'cxvec_math.c']]], ['osmo_5fcxvec_5fpeaks_5fscan_10',['osmo_cxvec_peaks_scan',['../group__cxvec__math.html#gad25b04feb1cd30b24fe7de8f76e56c23',1,'cxvec_math.c']]], ['osmo_5fcxvec_5frotate_11',['osmo_cxvec_rotate',['../group__cxvec__math.html#ga49125f3c259da9d7eec7fa4d98d609d4',1,'cxvec_math.c']]], ['osmo_5fcxvec_5fscale_12',['osmo_cxvec_scale',['../group__cxvec__math.html#ga5ac0adb49726087258381582582ef654',1,'cxvec_math.c']]], ['osmo_5fcxvec_5fsig_5fnormalize_13',['osmo_cxvec_sig_normalize',['../group__cxvec__math.html#ga4579583a658fc33afd24a1d8508b212f',1,'cxvec_math.c']]], ['osmo_5fiqbal_5fcxvec_5festimate_14',['osmo_iqbal_cxvec_estimate',['../group__iqbal.html#ga19298f48b07828c19bc54038d5abe5ad',1,'iqbal.c']]], ['osmo_5fiqbal_5fcxvec_5ffix_15',['osmo_iqbal_cxvec_fix',['../group__iqbal.html#ga978fbf1c9f01694852c561c95d5ceb9d',1,'iqbal.c']]], ['osmo_5fiqbal_5fcxvec_5foptimize_16',['osmo_iqbal_cxvec_optimize',['../group__iqbal.html#gac74f9d37e2153fdf954e592b36f7c7c0',1,'iqbal.c']]], ['osmo_5fiqbal_5festimate_17',['osmo_iqbal_estimate',['../group__iqbal.html#ga23c6972ae206b4a60dbe49d954fc9caa',1,'iqbal.c']]], ['osmo_5fiqbal_5ffix_18',['osmo_iqbal_fix',['../group__iqbal.html#gaaca46bab25fe24148c3cb3c4d2158c79',1,'iqbal.c']]], ['osmo_5fnormsqf_19',['osmo_normsqf',['../group__cxvec__math.html#ga1b169ec31cb01111c0def0c12d65f3a2',1,'cxvec_math.h']]], ['osmo_5fsinc_20',['osmo_sinc',['../group__cxvec__math.html#ga4e7a7183dc4e5ce77d72d2986495f348',1,'cxvec_math.h']]] ]; html/search/variables_5.js0000644000175000017500000000037515067055113015011 0ustar buildbuildvar searchData= [ ['max_5fiter_0',['max_iter',['../structosmo__iqbal__opts.html#ac6dc907d8a810172970426cac913f2b0',1,'osmo_iqbal_opts']]], ['max_5flen_1',['max_len',['../structosmo__cxvec.html#a42469c5c904c26c45af3ff557ccd203f',1,'osmo_cxvec']]] ]; html/search/all_3.js0000644000175000017500000000031615067055113013602 0ustar buildbuildvar searchData= [ ['data_0',['data',['../structcfile.html#aeeb1105659968baae5df24026bf1d281',1,'cfile::data()'],['../structosmo__cxvec.html#aec620e4391a60de801eb23dec73e4d12',1,'osmo_cxvec::data()']]] ]; html/search/classes_1.html0000644000175000017500000000263715067055113015025 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_7.html0000644000175000017500000000263315067055113014142 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_9.js0000644000175000017500000000102215067055113013603 0ustar buildbuildvar searchData= [ ['peak_5fearly_5flate_0',['PEAK_EARLY_LATE',['../group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78aa8df843abc147bca5860fee1ddff1378',1,'cxvec_math.h']]], ['peak_5fweigh_5fwin_1',['PEAK_WEIGH_WIN',['../group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78abb4b91d1bfa5bd51ff0e48633d9b9891',1,'cxvec_math.h']]], ['peak_5fweigh_5fwin_5fcenter_2',['PEAK_WEIGH_WIN_CENTER',['../group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78ab0fb6b29112253cc5d51fb119b5d812a',1,'cxvec_math.h']]] ]; html/search/enumvalues_1.js0000644000175000017500000000102215067055113015207 0ustar buildbuildvar searchData= [ ['peak_5fearly_5flate_0',['PEAK_EARLY_LATE',['../group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78aa8df843abc147bca5860fee1ddff1378',1,'cxvec_math.h']]], ['peak_5fweigh_5fwin_1',['PEAK_WEIGH_WIN',['../group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78abb4b91d1bfa5bd51ff0e48633d9b9891',1,'cxvec_math.h']]], ['peak_5fweigh_5fwin_5fcenter_2',['PEAK_WEIGH_WIN_CENTER',['../group__cxvec__math.html#gga7942b58b341e440c0e8796d395460b78ab0fb6b29112253cc5d51fb119b5d812a',1,'cxvec_math.h']]] ]; html/search/groups_0.html0000644000175000017500000000263615067055113014705 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_2.html0000644000175000017500000000263315067055113014135 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_2.js0000644000175000017500000000026615067055113014472 0ustar buildbuildvar searchData= [ ['osmo_5fcxvec_0',['osmo_cxvec',['../structosmo__cxvec.html',1,'']]], ['osmo_5fiqbal_5fopts_1',['osmo_iqbal_opts',['../structosmo__iqbal__opts.html',1,'']]] ]; html/search/variables_3.js0000644000175000017500000000134515067055113015005 0ustar buildbuildvar searchData= [ ['feval_0',['feval',['../struct__iqbal__state.html#ad82cbcec2dc9e52f4816cbe9a0af757f',1,'_iqbal_state']]], ['fft_1',['fft',['../struct__iqbal__estimate__state.html#aa44240271f4835c080793da0b816bc1c',1,'_iqbal_estimate_state']]], ['fft_5fcount_2',['fft_count',['../structosmo__iqbal__opts.html#abb7854c9f674bf12022ce0b5485fd2a7',1,'osmo_iqbal_opts']]], ['fft_5fplan_3',['fft_plan',['../struct__iqbal__estimate__state.html#a0a1a4f9083a6228f38e78702b8f710e9',1,'_iqbal_estimate_state']]], ['fft_5fsize_4',['fft_size',['../structosmo__iqbal__opts.html#a76e529e63af98a524caa8cf61c4de828',1,'osmo_iqbal_opts']]], ['flags_5',['flags',['../structosmo__cxvec.html#ab3bd5fac3c3a84df65bc82d1cae223ab',1,'osmo_cxvec']]] ]; html/search/variables_7.js0000644000175000017500000000023315067055113015004 0ustar buildbuildvar searchData= [ ['start_5fat_5fprev_0',['start_at_prev',['../structosmo__iqbal__opts.html#ad36e80298fe63cb9f985401e30f768fc',1,'osmo_iqbal_opts']]] ]; html/search/classes_2.html0000644000175000017500000000263715067055113015026 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_a.js0000644000175000017500000000023315067055113013656 0ustar buildbuildvar searchData= [ ['start_5fat_5fprev_0',['start_at_prev',['../structosmo__iqbal__opts.html#ad36e80298fe63cb9f985401e30f768fc',1,'osmo_iqbal_opts']]] ]; html/search/variables_0.js0000644000175000017500000000033515067055113015000 0ustar buildbuildvar searchData= [ ['_5fblen_0',['_blen',['../structcfile.html#ad3d6965e1039aa1f648361b2f83b034a',1,'cfile']]], ['_5fdata_1',['_data',['../structosmo__cxvec.html#aa8a9de0ef88d44caa1c07bc91b99bffd',1,'osmo_cxvec']]] ]; html/search/variables_4.html0000644000175000017500000000264115067055113015336 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_1.js0000644000175000017500000000036415067055113015043 0ustar buildbuildvar searchData= [ ['cfile_5fload_0',['cfile_load',['../group__cfile.html#gacb0304d89096222df64f3f9a10f22167',1,'cfile.c']]], ['cfile_5frelease_1',['cfile_release',['../group__cfile.html#ga7728a89f370281e5da16ff27d8657b3d',1,'cfile.c']]] ]; html/search/enumvalues_0.js0000644000175000017500000000100415067055113015206 0ustar buildbuildvar searchData= [ ['conv_5ffull_5fspan_0',['CONV_FULL_SPAN',['../group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08ae758172bda42f9b44aa9015c0e142717',1,'cxvec_math.h']]], ['conv_5fno_5fdelay_1',['CONV_NO_DELAY',['../group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08a03ece74c3bcd50aeb9fb42329b9a59a5',1,'cxvec_math.h']]], ['conv_5foverlap_5fonly_2',['CONV_OVERLAP_ONLY',['../group__cxvec__math.html#gga2e183a0f24afa2e16199d1514629bf08a47fb2e6e9d274d4512601828023ac1d2',1,'cxvec_math.h']]] ]; html/search/classes_1.js0000644000175000017500000000011215067055113014457 0ustar buildbuildvar searchData= [ ['cfile_0',['cfile',['../structcfile.html',1,'']]] ]; html/search/searchdata.js0000644000175000017500000000072615067055113014714 0ustar buildbuildvar indexSectionsWithContent = { 0: "._cdfilmopst", 1: "_co", 2: "ci", 3: "_co", 4: "_cdflmost", 5: "o", 6: "cp", 7: ".ci" }; 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.js0000644000175000017500000000017515067055113015012 0ustar buildbuildvar searchData= [ ['tmp_0',['tmp',['../struct__iqbal__state.html#a03100dde8b80dacdd0a4936511c5ab10',1,'_iqbal_state']]] ]; html/search/search_m.png0000644000175000017500000000023615067055113014542 0ustar buildbuildPNG  IHDR5^KMgAMAOX2tEXtSoftwareAdobe ImageReadyqe<0IDATxb,//g```<~8#?bbZP,Xnݺ <~EIENDB`html/search/variables_5.html0000644000175000017500000000264115067055113015337 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_2.js0000644000175000017500000000015515067055113014351 0ustar buildbuildvar searchData= [ ['iq_20balance_20utilities_0',['IQ balance utilities',['../group__iqbal.html',1,'']]] ]; html/search/search_l.png0000644000175000017500000000106715067055113014544 0ustar buildbuildPNG  IHDR:>gAMA a cHRMms8zʴ3Dv6*bKGD̿ pHYs  tIME  OW*IDAT(ύJBQF&& >Ѥ|(FAI `AP ~&Fz A튷oM6u߁-/ityݞۍ 6bS%ݞ pA476IvܧxB6LD
    Loading...
    Searching...
    No Matches
    html/search/all_a.html0000644000175000017500000000263315067055113014214 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_0.js0000644000175000017500000000014115067055113013573 0ustar buildbuildvar searchData= [ ['_2ecfile_20helpers_0',['.cfile helpers',['../group__cfile.html',1,'']]] ]; html/search/all_8.js0000644000175000017500000000741515067055113013616 0ustar buildbuildvar searchData= [ ['opts_0',['opts',['../struct__iqbal__state.html#a96f58c4debc176d484eb20b5e19b4209',1,'_iqbal_state']]], ['org_1',['org',['../struct__iqbal__state.html#ab463e6d3cfc9d2f70e530dbe4f76458f',1,'_iqbal_state']]], ['osmo_5fcxvec_2',['osmo_cxvec',['../structosmo__cxvec.html',1,'']]], ['osmo_5fcxvec_5falloc_3',['osmo_cxvec_alloc',['../group__cxvec.html#ga9461ac13f1d77ca832b140461e599caa',1,'cxvec.c']]], ['osmo_5fcxvec_5falloc_5ffrom_5fdata_4',['osmo_cxvec_alloc_from_data',['../group__cxvec.html#ga4edecda809e91f11cf88b53a1db8d62a',1,'cxvec.c']]], ['osmo_5fcxvec_5fconv_5ftype_5',['osmo_cxvec_conv_type',['../group__cxvec__math.html#ga2e183a0f24afa2e16199d1514629bf08',1,'cxvec_math.h']]], ['osmo_5fcxvec_5fconvolve_6',['osmo_cxvec_convolve',['../group__cxvec__math.html#ga2ebadb16e25768896013420a98ec666f',1,'cxvec_math.c']]], ['osmo_5fcxvec_5fcorrelate_7',['osmo_cxvec_correlate',['../group__cxvec__math.html#ga99ff6e3baec3253f4e431b156f042a0f',1,'cxvec_math.c']]], ['osmo_5fcxvec_5fdbg_5fdump_8',['osmo_cxvec_dbg_dump',['../group__cxvec.html#ga69e6d1ea3d468954cedf7d6f8d44f825',1,'cxvec.c']]], ['osmo_5fcxvec_5fdelay_9',['osmo_cxvec_delay',['../group__cxvec__math.html#ga9fa20d926f9d313a4751cef1eff740ba',1,'cxvec_math.c']]], ['osmo_5fcxvec_5ffree_10',['osmo_cxvec_free',['../group__cxvec.html#gaa57240ff2299122f9375e901b9700e7d',1,'cxvec.c']]], ['osmo_5fcxvec_5finit_5ffrom_5fdata_11',['osmo_cxvec_init_from_data',['../group__cxvec.html#gaa03ae6bbc24d094b8955d905832f0c36',1,'cxvec.c']]], ['osmo_5fcxvec_5finterpolate_5fpoint_12',['osmo_cxvec_interpolate_point',['../group__cxvec__math.html#gacb1c646e03a09b51b617467501639763',1,'cxvec_math.c']]], ['osmo_5fcxvec_5fpeak_5falg_13',['osmo_cxvec_peak_alg',['../group__cxvec__math.html#ga7942b58b341e440c0e8796d395460b78',1,'cxvec_math.h']]], ['osmo_5fcxvec_5fpeak_5fenergy_5ffind_14',['osmo_cxvec_peak_energy_find',['../group__cxvec__math.html#ga495219ee953336e15cd68c9b22d3850c',1,'cxvec_math.c']]], ['osmo_5fcxvec_5fpeaks_5fscan_15',['osmo_cxvec_peaks_scan',['../group__cxvec__math.html#gad25b04feb1cd30b24fe7de8f76e56c23',1,'cxvec_math.c']]], ['osmo_5fcxvec_5frotate_16',['osmo_cxvec_rotate',['../group__cxvec__math.html#ga49125f3c259da9d7eec7fa4d98d609d4',1,'cxvec_math.c']]], ['osmo_5fcxvec_5fscale_17',['osmo_cxvec_scale',['../group__cxvec__math.html#ga5ac0adb49726087258381582582ef654',1,'cxvec_math.c']]], ['osmo_5fcxvec_5fsig_5fnormalize_18',['osmo_cxvec_sig_normalize',['../group__cxvec__math.html#ga4579583a658fc33afd24a1d8508b212f',1,'cxvec_math.c']]], ['osmo_5fiqbal_5fcxvec_5festimate_19',['osmo_iqbal_cxvec_estimate',['../group__iqbal.html#ga19298f48b07828c19bc54038d5abe5ad',1,'iqbal.c']]], ['osmo_5fiqbal_5fcxvec_5ffix_20',['osmo_iqbal_cxvec_fix',['../group__iqbal.html#ga978fbf1c9f01694852c561c95d5ceb9d',1,'iqbal.c']]], ['osmo_5fiqbal_5fcxvec_5foptimize_21',['osmo_iqbal_cxvec_optimize',['../group__iqbal.html#gac74f9d37e2153fdf954e592b36f7c7c0',1,'iqbal.c']]], ['osmo_5fiqbal_5fdefault_5fopts_22',['osmo_iqbal_default_opts',['../group__iqbal.html#ga2f0587c233b021d72a98a11312ff5e9f',1,'osmo_iqbal_default_opts(): iqbal.c'],['../group__iqbal.html#ga2f0587c233b021d72a98a11312ff5e9f',1,'osmo_iqbal_default_opts(): iqbal.c']]], ['osmo_5fiqbal_5festimate_23',['osmo_iqbal_estimate',['../group__iqbal.html#ga23c6972ae206b4a60dbe49d954fc9caa',1,'iqbal.c']]], ['osmo_5fiqbal_5ffix_24',['osmo_iqbal_fix',['../group__iqbal.html#gaaca46bab25fe24148c3cb3c4d2158c79',1,'iqbal.c']]], ['osmo_5fiqbal_5fopts_25',['osmo_iqbal_opts',['../structosmo__iqbal__opts.html',1,'']]], ['osmo_5fnormsqf_26',['osmo_normsqf',['../group__cxvec__math.html#ga1b169ec31cb01111c0def0c12d65f3a2',1,'cxvec_math.h']]], ['osmo_5fsinc_27',['osmo_sinc',['../group__cxvec__math.html#ga4e7a7183dc4e5ce77d72d2986495f348',1,'cxvec_math.h']]] ]; html/search/classes_0.js0000644000175000017500000000032415067055113014463 0ustar buildbuildvar searchData= [ ['_5fiqbal_5festimate_5fstate_0',['_iqbal_estimate_state',['../struct__iqbal__estimate__state.html',1,'']]], ['_5fiqbal_5fstate_1',['_iqbal_state',['../struct__iqbal__state.html',1,'']]] ]; html/search/enumvalues_1.html0000644000175000017500000000264215067055113015550 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_4.js0000644000175000017500000000134515067055113013606 0ustar buildbuildvar searchData= [ ['feval_0',['feval',['../struct__iqbal__state.html#ad82cbcec2dc9e52f4816cbe9a0af757f',1,'_iqbal_state']]], ['fft_1',['fft',['../struct__iqbal__estimate__state.html#aa44240271f4835c080793da0b816bc1c',1,'_iqbal_estimate_state']]], ['fft_5fcount_2',['fft_count',['../structosmo__iqbal__opts.html#abb7854c9f674bf12022ce0b5485fd2a7',1,'osmo_iqbal_opts']]], ['fft_5fplan_3',['fft_plan',['../struct__iqbal__estimate__state.html#a0a1a4f9083a6228f38e78702b8f710e9',1,'_iqbal_estimate_state']]], ['fft_5fsize_4',['fft_size',['../structosmo__iqbal__opts.html#a76e529e63af98a524caa8cf61c4de828',1,'osmo_iqbal_opts']]], ['flags_5',['flags',['../structosmo__cxvec.html#ab3bd5fac3c3a84df65bc82d1cae223ab',1,'osmo_cxvec']]] ]; html/search/search_r.png0000644000175000017500000000105115067055113014543 0ustar buildbuildPNG  IHDR7ygAMA a cHRMms8zʴ3Dv6*bKGD̿ pHYs  tIME  OWIDAT(υAKQFI+ ]AFH* )$EP6T ܳ=rnѪ>AxGT%+Xp8;~'%u" !~\l:4t>)O7.^)2VD6$ZR> nܳ (:TU\8͇J%'N&Ir=tҗ̮,nbfB$ʩ6rfn9-Ë׻w4Bx6z|kmq$H zXjyzŏeXZEcs%tEXtdate:create2018-12-07T11:28:17+00:00-?C%tEXtdate:modify2018-12-07T11:28:17+00:00\bgIENDB`html/search/all_5.html0000644000175000017500000000263315067055113014140 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_0.html0000644000175000017500000000263715067055113015024 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_7.js0000644000175000017500000000037515067055113013613 0ustar buildbuildvar searchData= [ ['max_5fiter_0',['max_iter',['../structosmo__iqbal__opts.html#ac6dc907d8a810172970426cac913f2b0',1,'osmo_iqbal_opts']]], ['max_5flen_1',['max_len',['../structosmo__cxvec.html#a42469c5c904c26c45af3ff557ccd203f',1,'osmo_cxvec']]] ]; html/search/variables_7.html0000644000175000017500000000264115067055113015341 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_0.html0000644000175000017500000000263315067055113014133 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_1.html0000644000175000017500000000263315067055113014134 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/group__cfile.html0000644000175000017500000002276315067055114014343 0ustar buildbuild libosmodsp: .cfile helpers
    libosmodsp 0.4.0.12-f6f4
    Osmocom DSP library
    .cfile helpers

    Files

    file  cfile.h
     Osmocom .cfile helpers header.
     
    file  cfile.c
     Osmocom .cfile helpers implementation.
     

    Data Structures

    struct  cfile
     Structure representing a currently mapped .cfile. More...
     

    Functions

    struct cfilecfile_load (const char *filename)
     .cfile loader: mmap() the data into memory (read-only) More...
     
    void cfile_release (struct cfile *cf)
     Release all resources associated with a mapped .cfile. More...
     

    Detailed Description

    Function Documentation

    ◆ cfile_load()

    struct cfile * cfile_load ( const char *  filename)

    .cfile loader: mmap() the data into memory (read-only)

    Parameters
    [in]filenameFilename of the .cfile to map
    Returns
    A structure desribing the mapped data

    References _blen, data, and len.

    ◆ cfile_release()

    void cfile_release ( struct cfile cf)

    Release all resources associated with a mapped .cfile.

    Parameters
    [in]cfStructure describing the cfile to unmap

    References _blen, and data.

    html/iqbal_8c.html0000644000175000017500000003521415067055114013363 0ustar buildbuild libosmodsp: src/iqbal.c File Reference
    libosmodsp 0.4.0.12-f6f4
    Osmocom DSP library

    IQ balance utils implementation. More...

    Data Structures

    struct  _iqbal_estimate_state
     Cache for _osmo_iqbal_estimate when doing lots of calls. More...
     
    struct  _iqbal_state
     Internal state structure for the IQ balance optimization algorithm. More...
     

    Functions

    void osmo_iqbal_fix (float complex *out, float complex *in, unsigned int len, float mag, float phase)
     Apply IQ balance correction to a given complex buffer. More...
     
    struct osmo_cxvecosmo_iqbal_cxvec_fix (const struct osmo_cxvec *in, float mag, float phase, struct osmo_cxvec *out)
     Apply IQ balance correction to a given complex vector. More...
     
    static void _osmo_iqbal_estimate_release (struct _iqbal_estimate_state *state)
     Release a cache object created by _osmo_iqbal_estimate.
     
    static float _osmo_iqbal_estimate (const float complex *data, int fft_size, int fft_count, struct _iqbal_estimate_state **state_p)
     Objectively estimate IQ balance in a given complex buffer. More...
     
    float osmo_iqbal_estimate (const float complex *data, int fft_size, int fft_count)
     Objectively estimate IQ balance in a given complex buffer. More...
     
    float osmo_iqbal_cxvec_estimate (const struct osmo_cxvec *sig, int fft_size, int fft_count)
     Objectively estimate IQ balance in a given complex vector. More...
     
    static float _iqbal_objfn_value (struct _iqbal_state *state, float x[2])
     Optimization objective function - Value. More...
     
    static void _iqbal_objfn_gradient (struct _iqbal_state *state, float x[2], float v, float grad[2])
     Optimization objective function - Gradient estimation. More...
     
    static float _iqbal_objfn_val_gradient (struct _iqbal_state *state, float x[2], float grad[2])
     Optimization objective function - Value & Gradient estimation. More...
     
    int osmo_iqbal_cxvec_optimize (const struct osmo_cxvec *sig, float *mag, float *phase, const struct osmo_iqbal_opts *opts)
     Finds the best IQ balance correction parameters for a given signal. More...
     

    Variables

    const struct osmo_iqbal_opts osmo_iqbal_default_opts
     Default values for the optimization algorithm. More...
     

    Detailed Description

    IQ balance utils implementation.

    The actual algorithm used for estimation of the imbalance and its optimization is inspired by the IQ balancer of SDR# by Youssef Touil and described here :

    http://sdrsharp.com/index.php/automatic-iq-correction-algorithm

    The main differences are:

    • Objective function uses complex correlation of left/right side of FFT
    • Optimization based on steepest gradient with dynamic step size
    html/folderopen.png0000644000175000017500000000112515067055114013650 0ustar buildbuildPNG  IHDR}\IDATx]?oP9i4i;iiZ7`b٬,HU'$*T]TDP6w};C; aӝߟjAInS}9Hӎ|? =_Ɗue*;YEsYBėsٌ ɫYq !Gǿv̇خ F}qb]70)d-}PfY{4@}2ԗNIǃc%UImcƝ>xt9$ OVE*Û#׈r@l$PrHaa dZrqIoT\,tj2FAxv-Lp׌p TI/ \sf; jViTo^cpb]€<a՜y9:+,E f6NEKU}^;nZuUS4 ѬbN.kjT% iV )GJ@TxIENDB`html/menu.js0000644000175000017500000001335215067055113012313 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/struct__iqbal__state.html0000644000175000017500000001701115067055114016066 0ustar buildbuild libosmodsp: _iqbal_state Struct Reference
    libosmodsp 0.4.0.12-f6f4
    Osmocom DSP library
    _iqbal_state Struct Reference

    Internal state structure for the IQ balance optimization algorithm. More...

    Data Fields

    const struct osmo_iqbal_optsopts
     Options.
     
    const struct osmo_cxvecorg
     Original vector.
     
    struct osmo_cxvectmp
     Temporary vector.
     
    int feval
     # of function evaluation
     
    struct _iqbal_estimate_statecache
     Cache for estimate func.
     

    Detailed Description

    Internal state structure for the IQ balance optimization algorithm.


    The documentation for this struct was generated from the following file:
    html/cfile_8h.js0000644000175000017500000000027515067055114013031 0ustar buildbuildvar cfile_8h = [ [ "cfile_load", "group__cfile.html#gacb0304d89096222df64f3f9a10f22167", null ], [ "cfile_release", "group__cfile.html#ga7728a89f370281e5da16ff27d8657b3d", null ] ];html/navtree.js0000644000175000017500000003653515067055114013024 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(/ libosmodsp: Globals
    libosmodsp 0.4.0.12-f6f4
    Osmocom DSP library
     
    html/form_2.png0000644000175000017500000000703215067055114012702 0ustar buildbuildPNG  IHDRǕiCCPdefault_gray.iccHy4ǿo23Xǒ5 Xh[]JI*d+E%mRQhFrPjAhgA;# ÍO` ,D$$@>Ă, [ (Lh;AP5.@נfWI0 Uaa' ^ pK$_X:h!,"HG yH R4#H/r EE1PZ(3C% P6T>j5&eКhS4Gs%:t+z=`&Da6a 01-.f3b%Xs+6ŖaObb8"Npٸ\# n7[ċUxW|>_wE(I0'xf S"H4!#[[qAIɤzRLV%[Iusg!W(D(KBMhX0^XE-N8CD^DU#,EBȘȼ(UTOU4V@Q4KQRB(9c *BUrBIiHKJ!5+M6II~,hxl9&/3/+'k//[&{]vV.g%%W,wEnF*o!)_,UCf0J=9djEEbb3%K)LX[iNY^E9SI ^rHWeA꫺S]u)23M̧jd5Kuza{FFƠ&iyXshzɊ5+ƴHZl&qmvve::?t uctkuQ:k+$[c;MP# .; 񍚍f+X4umbmer䋩iYӷfZfffӫBWծ0W466X0,,Z,,-k,_X)YXYMQ7ֺ|V)g3ɳzۖ>S k7dvpr0ƕ 9Gc͎=N$'Or|N*VWgnLw7 zT xy'{w4, t6KGw`|خ9f2007pt-smŬ^x}sA ߠƠo5*78C!V!!3ESaaEag",#J"f#9]룗b|cZbqA(qq=6m׌ύ$&L;ĵI?Y-yGxEJETsiiqiӧ22oBmmTܖ9z eÖ,ɭ[Ol#lv7[7(v99[s&vh4Y +rv ɻ_Wpgޞ=K{هotEEE\3?\vAI!¡CRҎ2}e#G*+Z*e*wW.9<|HslU~ףGVWը֔K9֧8xCT]~z = 2MpSrNٜhjnO:tfssUWR[ڠvA ݝf/_RTqYr•+KW3ww^ 6ѽuz{n8ݸu^v[.6}N{Q_[a]ûFmƃLu2l9|FV z> < y8(ѻ)l}~LYs5"0\o~yI~Y2%?0?}inޫ5&_ǿ^K7joοz?77n} >vϻ?iq!_X_z~ZLV]{Ob/oo pHYs^ tEXtSoftwareGPL Ghostscript 10.00.00qIDATXX!8m,Ta.=hZ(cZzL]BvMlZf2i? ٱtn^߽ /fF3cIo nZvdgxiryq%wkpᛇXɸ&IFYOb>*Vg< _O-Q]dg_g>u4G$=L֑{8+~3Pj-ySB#-EZ':a53שX׵Lݯv0PkӞz&'#Z5iBտ`Q^Pz _H%4{ xjcGa/\e^1.B@EIZX IǤ2nԙP!~TQ51'+tۙWE:`=KKVHqʜqL>f5cfݼV871dƼD,3n`$ƨqDڊ$(Ea]M_CsT[Ќ'11w9HY~0d{{)$MR$;Hޔ B M=k}2瘘O2[_2(jog2-E;ގ8 A'F.ЉBh\dV%7'LQ/ǔАidL1VڔcAy_uy^O="d+h#  E6ol,cfRA6˦uCm`qLVeYrb%4Z)JhRmdF -yE k821Ft@UEhȦ ٥WFdW[ͩ~띃<\4\y7/`^bݠCޮ.W'U2z l;x<Ǜw/g8>?酙IENDB`html/annotated_dup.js0000644000175000017500000000063515067055114014175 0ustar buildbuildvar annotated_dup = [ [ "_iqbal_estimate_state", "struct__iqbal__estimate__state.html", "struct__iqbal__estimate__state" ], [ "_iqbal_state", "struct__iqbal__state.html", "struct__iqbal__state" ], [ "cfile", "structcfile.html", "structcfile" ], [ "osmo_cxvec", "structosmo__cxvec.html", "structosmo__cxvec" ], [ "osmo_iqbal_opts", "structosmo__iqbal__opts.html", "structosmo__iqbal__opts" ] ];html/classes.html0000644000175000017500000001113415067055114013331 0ustar buildbuild libosmodsp: Data Structure Index
    libosmodsp 0.4.0.12-f6f4
    Osmocom DSP library
    html/nav_h.png0000644000175000017500000000014215067055113012603 0ustar buildbuildPNG  IHDR ,@)IDATxA @BQۛТ) ) aܿoRlIENDB`html/cxvec__math_8c.js0000644000175000017500000000164415067055114014223 0ustar buildbuildvar cxvec__math_8c = [ [ "osmo_cxvec_convolve", "group__cxvec__math.html#ga2ebadb16e25768896013420a98ec666f", null ], [ "osmo_cxvec_correlate", "group__cxvec__math.html#ga99ff6e3baec3253f4e431b156f042a0f", null ], [ "osmo_cxvec_delay", "group__cxvec__math.html#ga9fa20d926f9d313a4751cef1eff740ba", null ], [ "osmo_cxvec_interpolate_point", "group__cxvec__math.html#gacb1c646e03a09b51b617467501639763", null ], [ "osmo_cxvec_peak_energy_find", "group__cxvec__math.html#ga495219ee953336e15cd68c9b22d3850c", null ], [ "osmo_cxvec_peaks_scan", "group__cxvec__math.html#gad25b04feb1cd30b24fe7de8f76e56c23", null ], [ "osmo_cxvec_rotate", "group__cxvec__math.html#ga49125f3c259da9d7eec7fa4d98d609d4", null ], [ "osmo_cxvec_scale", "group__cxvec__math.html#ga5ac0adb49726087258381582582ef654", null ], [ "osmo_cxvec_sig_normalize", "group__cxvec__math.html#ga4579583a658fc33afd24a1d8508b212f", null ] ];html/tab_h.png0000644000175000017500000000026115067055113012567 0ustar buildbuildPNG  IHDR$[xIDATxM@~ΒEv"!d*rGq={SݧH uO^[_Xvyұ=VCff{R%_rug(?gh\i>|sIENDB`html/iqbal_8c.js0000644000175000017500000000205615067055114013031 0ustar buildbuildvar iqbal_8c = [ [ "_iqbal_objfn_gradient", "group__iqbal.html#ga169a1a71bbe3ff22192dca26f4d9ef8d", null ], [ "_iqbal_objfn_val_gradient", "group__iqbal.html#ga62f9a247afbb52d576a1763ccd47397f", null ], [ "_iqbal_objfn_value", "group__iqbal.html#ga743af26acca4fa90afcf1e67dda95dba", null ], [ "_osmo_iqbal_estimate", "group__iqbal.html#ga129881cae54362d61dd2b4460f8af248", null ], [ "_osmo_iqbal_estimate_release", "group__iqbal.html#ga5ece20030938ef8e8f9e1c3f2d91482a", null ], [ "osmo_iqbal_cxvec_estimate", "group__iqbal.html#ga19298f48b07828c19bc54038d5abe5ad", null ], [ "osmo_iqbal_cxvec_fix", "group__iqbal.html#ga978fbf1c9f01694852c561c95d5ceb9d", null ], [ "osmo_iqbal_cxvec_optimize", "group__iqbal.html#gac74f9d37e2153fdf954e592b36f7c7c0", null ], [ "osmo_iqbal_estimate", "group__iqbal.html#ga23c6972ae206b4a60dbe49d954fc9caa", null ], [ "osmo_iqbal_fix", "group__iqbal.html#gaaca46bab25fe24148c3cb3c4d2158c79", null ], [ "osmo_iqbal_default_opts", "group__iqbal.html#ga2f0587c233b021d72a98a11312ff5e9f", null ] ];html/dir_abe9b486a10ccc5afdf8abc29637e0c1.js0000644000175000017500000000022215067055114017125 0ustar buildbuildvar dir_abe9b486a10ccc5afdf8abc29637e0c1 = [ [ "dsp", "dir_5b8fd40c25b8cda2528024e092698ab5.html", "dir_5b8fd40c25b8cda2528024e092698ab5" ] ];html/bdwn.png0000644000175000017500000000022315067055113012442 0ustar buildbuildPNG  IHDR5ZIDATx DP1lm rj.e D[ɾ|6V3?Ls'(}>+ Kch` ^ލnIENDB`html/structcfile.html0000644000175000017500000001442015067055114014224 0ustar buildbuild libosmodsp: cfile Struct Reference
    libosmodsp 0.4.0.12-f6f4
    Osmocom DSP library
    cfile Struct Reference

    Structure representing a currently mapped .cfile. More...

    #include <cfile.h>

    Data Fields

    float complex * data
     Data array (read only !)
     
    unsigned int len
     Length (in samples) of the data.
     
    size_t _blen
     Length (in bytes) of the data.
     

    Detailed Description

    Structure representing a currently mapped .cfile.


    The documentation for this struct was generated from the following file:
    html/nav_f.png0000644000175000017500000000023115067055113012600 0ustar buildbuildPNG  IHDR8`IDATxK Eі[BmkHprӼ.ꎤR6Z VIE5jliIJ0/u޿6sH yIENDB`html/structosmo__iqbal__opts.js0000644000175000017500000000062715067055114016306 0ustar buildbuildvar structosmo__iqbal__opts = [ [ "fft_count", "structosmo__iqbal__opts.html#abb7854c9f674bf12022ce0b5485fd2a7", null ], [ "fft_size", "structosmo__iqbal__opts.html#a76e529e63af98a524caa8cf61c4de828", null ], [ "max_iter", "structosmo__iqbal__opts.html#ac6dc907d8a810172970426cac913f2b0", null ], [ "start_at_prev", "structosmo__iqbal__opts.html#ad36e80298fe63cb9f985401e30f768fc", null ] ];html/struct__iqbal__estimate__state.html0000644000175000017500000001360515067055114020125 0ustar buildbuild libosmodsp: _iqbal_estimate_state Struct Reference
    libosmodsp 0.4.0.12-f6f4
    Osmocom DSP library
    _iqbal_estimate_state Struct Reference

    Cache for _osmo_iqbal_estimate when doing lots of calls. More...

    Data Fields

    float complex * fft
     Temporary memory for FFT.
     
    fftwf_plan fft_plan
     FFTW plan.
     

    Detailed Description

    Cache for _osmo_iqbal_estimate when doing lots of calls.


    The documentation for this struct was generated from the following file:
    html/functions.html0000644000175000017500000001405015067055114013704 0ustar buildbuild libosmodsp: Data Fields
    libosmodsp 0.4.0.12-f6f4
    Osmocom DSP library
    Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
    html/formula.repository0000644000175000017500000000052315067055114014614 0ustar buildbuild\_form#0=28x19:$\frac{\sin(x)}{x}$ \_form#1=18x15:$|c|^2$ \_form#2=116x14:$out(k) = in(k) \cdot scale$ \_form#3=125x15:$out(k) = in(k) \cdot e^{j \cdot rps \cdot k}$ \_form#4=191x15:$(f * g)[n] = \sum_{m=-\infty}^{\infty} f[m] \; g[n-m]$ \_form#5=196x15:$(f \star g)[n] = \sum_{m=-\infty}^{\infty} f^*[m] \; g[n+m]$ \_form#6=19x15:$|x|^2$ html/globals_eval.html0000644000175000017500000001117215067055114014330 0ustar buildbuild libosmodsp: Globals
    libosmodsp 0.4.0.12-f6f4
    Osmocom DSP library
     
    html/group__cxvec.html0000644000175000017500000004656415067055114014376 0ustar buildbuild libosmodsp: Complex vectors
    libosmodsp 0.4.0.12-f6f4
    Osmocom DSP library
    Complex vectors

    Modules

     Complex vectors math and signal processing
     

    Files

    file  cxvec.h
     Osmocom Complex vectors header.
     
    file  cxvec.c
     Osmocom Complex vectors implementation.
     

    Data Structures

    struct  osmo_cxvec
     Complex vector. More...
     

    Functions

    void osmo_cxvec_init_from_data (struct osmo_cxvec *cv, float complex *data, int len)
     Initialize a vector structure with a given data array. More...
     
    struct osmo_cxvecosmo_cxvec_alloc_from_data (float complex *data, int len)
     Allocate a complex vector referencing a given data array. More...
     
    struct osmo_cxvecosmo_cxvec_alloc (int max_len)
     Allocate a complex vector of a given maximum length. More...
     
    void osmo_cxvec_free (struct osmo_cxvec *cv)
     Free a complex vector (and possibly associated data) More...
     
    void osmo_cxvec_dbg_dump (struct osmo_cxvec *cv, const char *fname)
     Save the data contained of a vector into a .cfile for debug. More...
     

    Detailed Description

    Function Documentation

    ◆ osmo_cxvec_alloc()

    struct osmo_cxvec * osmo_cxvec_alloc ( int  max_len)

    Allocate a complex vector of a given maximum length.

    Parameters
    [in]max_lenMaximum length of data

    Data array is allocated along with the structure, but is uninitialized. Length is set to 0.

    References osmo_cxvec::_data, osmo_cxvec::data, osmo_cxvec::flags, osmo_cxvec::len, and osmo_cxvec::max_len.

    Referenced by osmo_cxvec_convolve(), osmo_cxvec_correlate(), osmo_cxvec_delay(), osmo_cxvec_rotate(), osmo_cxvec_scale(), osmo_cxvec_sig_normalize(), osmo_iqbal_cxvec_fix(), and osmo_iqbal_cxvec_optimize().

    ◆ osmo_cxvec_alloc_from_data()

    struct osmo_cxvec * osmo_cxvec_alloc_from_data ( float complex *  data,
    int  len 
    )

    Allocate a complex vector referencing a given data array.

    Parameters
    [in]dataPointer to the complex data array
    [in]lenNumber of complex samples

    The data is not copied, it is just referenced.

    References osmo_cxvec::data, osmo_cxvec::len, and osmo_cxvec_init_from_data().

    ◆ osmo_cxvec_dbg_dump()

    void osmo_cxvec_dbg_dump ( struct osmo_cxvec cv,
    const char *  fname 
    )

    Save the data contained of a vector into a .cfile for debug.

    Parameters
    [in]cvComplex vector to save
    [in]fnameFilename to save the data to

    References osmo_cxvec::data, and osmo_cxvec::len.

    ◆ osmo_cxvec_free()

    void osmo_cxvec_free ( struct osmo_cxvec cv)

    Free a complex vector (and possibly associated data)

    Parameters
    [in]cvComplex vector to free

    Notes: - Can be safely called with NULL

    Referenced by osmo_cxvec_delay(), and osmo_iqbal_cxvec_optimize().

    ◆ osmo_cxvec_init_from_data()

    void osmo_cxvec_init_from_data ( struct osmo_cxvec cv,
    float complex *  data,
    int  len 
    )

    Initialize a vector structure with a given data array.

    Parameters
    [out]cvThe vector to be initialized
    [in]dataPointer to the complex data array
    [in]lenNumber of complex samples

    The data is not copied, it is just referenced.

    References osmo_cxvec::data, osmo_cxvec::flags, osmo_cxvec::len, and osmo_cxvec::max_len.

    Referenced by osmo_cxvec_alloc_from_data(), and osmo_cxvec_delay().

    html/splitbar.png0000644000175000017500000000047215067055114013337 0ustar buildbuildPNG  IHDRMIDATxݡJCa( %4 bȘͶ3v^EL ,b;{Ï/aYկq:\IIIIIIIIIIIIIIIIII-l揊_t/ϻYQVYivk_ۣI@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$C[V=[fIENDB`html/form_6.png0000644000175000017500000000521415067055114012706 0ustar buildbuildPNG  IHDR&e3iCCPdefault_gray.iccHy4ǿo23Xǒ5 Xh[]JI*d+E%mRQhFrPjAhgA;# ÍO` ,D$$@>Ă, [ (Lh;AP5.@נfWI0 Uaa' ^ pK$_X:h!,"HG yH R4#H/r EE1PZ(3C% P6T>j5&eКhS4Gs%:t+z=`&Da6a 01-.f3b%Xs+6ŖaObb8"Npٸ\# n7[ċUxW|>_wE(I0'xf S"H4!#[[qAIɤzRLV%[Iusg!W(D(KBMhX0^XE-N8CD^DU#,EBȘȼ(UTOU4V@Q4KQRB(9c *BUrBIiHKJ!5+M6II~,hxl9&/3/+'k//[&{]vV.g%%W,wEnF*o!)_,UCf0J=9djEEbb3%K)LX[iNY^E9SI ^rHWeA꫺S]u)23M̧jd5Kuza{FFƠ&iyXshzɊ5+ƴHZl&qmvve::?t uctkuQ:k+$[c;MP# .; 񍚍f+X4umbmer䋩iYӷfZfffӫBWծ0W466X0,,Z,,-k,_X)YXYMQ7ֺ|V)g3ɳzۖ>S k7dvpr0ƕ 9Gc͎=N$'Or|N*VWgnLw7 zT xy'{w4, t6KGw`|خ9f2007pt-smŬ^x}sA ߠƠo5*78C!V!!3ESaaEag",#J"f#9]룗b|cZbqA(qq=6m׌ύ$&L;ĵI?Y-yGxEJETsiiqiӧ22oBmmTܖ9z eÖ,ɭ[Ol#lv7[7(v99[s&vh4Y +rv ɻ_Wpgޞ=K{هotEEE\3?\vAI!¡CRҎ2}e#G*+Z*e*wW.9<|HslU~ףGVWը֔K9֧8xCT]~z = 2MpSrNٜhjnO:tfssUWR[ڠvA ݝf/_RTqYr•+KW3ww^ 6ѽuz{n8ݸu^v[.6}N{Q_[a]ûFmƃLu2l9|FV z> < y8(ѻ)l}~LYs5"0\o~yI~Y2%?0?}inޫ5&_ǿ^K7joοz?77n} >vϻ?iq!_X_z~ZLV]{Ob/oo pHYs^ tEXtSoftwareGPL Ghostscript 10.00.00qIDAT8ŒQu0D*!TVVH`% "!+PؒB:_$r')_{FJPut%T0 lCt{$)n7ZCR9%{ؖ\Ñ-Pb|k07_}N'7Z{s<TI6Z$~.cd%cxnrBDx4ۄp?2_s!|9)FkkN!lCnbsIENDB`html/cfile_8c.html0000644000175000017500000001352515067055114013356 0ustar buildbuild libosmodsp: src/cfile.c File Reference
    libosmodsp 0.4.0.12-f6f4
    Osmocom DSP library
    cfile.c File Reference

    Osmocom .cfile helpers implementation. More...

    Functions

    struct cfilecfile_load (const char *filename)
     .cfile loader: mmap() the data into memory (read-only) More...
     
    void cfile_release (struct cfile *cf)
     Release all resources associated with a mapped .cfile. More...
     

    Detailed Description

    Osmocom .cfile helpers implementation.

    html/dir_d44c64559bbebec7f509842c48db8b23.js0000644000175000017500000000022615067055114016655 0ustar buildbuildvar dir_d44c64559bbebec7f509842c48db8b23 = [ [ "osmocom", "dir_abe9b486a10ccc5afdf8abc29637e0c1.html", "dir_abe9b486a10ccc5afdf8abc29637e0c1" ] ];html/cxvec__math_8h.html0000644000175000017500000004041615067055114014560 0ustar buildbuild libosmodsp: include/osmocom/dsp/cxvec_math.h File Reference
    libosmodsp 0.4.0.12-f6f4
    Osmocom DSP library

    Osmocom Complex vectors math header. More...

    Go to the source code of this file.

    Enumerations

    enum  osmo_cxvec_conv_type { CONV_FULL_SPAN , CONV_OVERLAP_ONLY , CONV_NO_DELAY }
     Various possible types of convolution span. More...
     
    enum  osmo_cxvec_peak_alg { PEAK_WEIGH_WIN , PEAK_WEIGH_WIN_CENTER , PEAK_EARLY_LATE }
     Various possible peak finding algorithms. More...
     

    Functions

    static float osmo_sinc (float x)
     Unnormalized sinc function. More...
     
    static float osmo_normsqf (float complex c)
     Squared norm of a given complex. More...
     
    struct osmo_cxvecosmo_cxvec_scale (const struct osmo_cxvec *in, float complex scale, struct osmo_cxvec *out)
     Scale a complex vector (multiply by a constant) More...
     
    struct osmo_cxvecosmo_cxvec_rotate (const struct osmo_cxvec *in, float rps, struct osmo_cxvec *out)
     Rotate a complex vector (frequency shift) More...
     
    struct osmo_cxvecosmo_cxvec_delay (const struct osmo_cxvec *in, float delay, struct osmo_cxvec *out)
     Fractionally delay a vector while maintaining its length. More...
     
    struct osmo_cxvecosmo_cxvec_convolve (const struct osmo_cxvec *f, const struct osmo_cxvec *g, enum osmo_cxvec_conv_type type, struct osmo_cxvec *out)
     Convolve two complex vectors. More...
     
    struct osmo_cxvecosmo_cxvec_correlate (const struct osmo_cxvec *f, const struct osmo_cxvec *g, int g_corr_step, struct osmo_cxvec *out)
     Cross-correlate two complex vectors. More...
     
    float complex osmo_cxvec_interpolate_point (const struct osmo_cxvec *cv, float pos)
     Interpolate any fractional position in a vector using sinc filtering. More...
     
    int osmo_cxvec_peaks_scan (const struct osmo_cxvec *cv, int *peaks_idx, int N)
     Find the index of the N highest energy ( $|x|^2$) peaks. More...
     
    float osmo_cxvec_peak_energy_find (const struct osmo_cxvec *cv, int win_size, enum osmo_cxvec_peak_alg alg, float complex *peak_val_p)
     Find the maximum energy ( $|x|^2$) peak in a sequence. More...
     
    struct osmo_cxvecosmo_cxvec_sig_normalize (const struct osmo_cxvec *sig, int decim, float freq_shift, struct osmo_cxvec *out)
     'Normalize' an IQ signal and apply decimation/frequency shift More...
     

    Detailed Description

    Osmocom Complex vectors math header.

    html/nav_g.png0000644000175000017500000000013715067055113012606 0ustar buildbuildPNG  IHDR1&IDATx1 OHf_ ->~M iMS<IENDB`html/jquery.js0000644000175000017500000053125515067055113012675 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/functions_vars.html0000644000175000017500000001365515067055114014751 0ustar buildbuild libosmodsp: Data Fields - Variables
    libosmodsp 0.4.0.12-f6f4
    Osmocom DSP library
     
    html/struct__iqbal__state.js0000644000175000017500000000070715067055114015542 0ustar buildbuildvar struct__iqbal__state = [ [ "cache", "struct__iqbal__state.html#a9663b19ceb3a2ab337c5ad74699e4c23", null ], [ "feval", "struct__iqbal__state.html#ad82cbcec2dc9e52f4816cbe9a0af757f", null ], [ "opts", "struct__iqbal__state.html#a96f58c4debc176d484eb20b5e19b4209", null ], [ "org", "struct__iqbal__state.html#ab463e6d3cfc9d2f70e530dbe4f76458f", null ], [ "tmp", "struct__iqbal__state.html#a03100dde8b80dacdd0a4936511c5ab10", null ] ];