html/0000755000175000017500000000000014747247350011017 5ustar buildbuildhtml/iqbal_8h.js0000644000175000017500000000111414747247350013041 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.js0000644000175000017500000000037714747247350016520 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" ] ];html/group__cxvec__math.html0000644000175000017500000014175414747247350015554 0ustar buildbuild libosmodsp: Complex vectors math and signal processing
libosmodsp 0.4.0.8-9128
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.js0000644000175000017500000000067114747247350015132 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.png0000644000175000017500000000115014747247350014167 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.html0000644000175000017500000005212714747247350014763 0ustar buildbuild libosmodsp: include/osmocom/dsp/iqbal.h Source File
libosmodsp 0.4.0.8-9128
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.html0000644000175000017500000001066614747247350017503 0ustar buildbuild libosmodsp: include/osmocom Directory Reference
libosmodsp 0.4.0.8-9128
Osmocom DSP library
osmocom Directory Reference

Directories

directory  dsp
 
html/structosmo__iqbal__opts.html0000644000175000017500000001556414747247350016655 0ustar buildbuild libosmodsp: osmo_iqbal_opts Struct Reference
libosmodsp 0.4.0.8-9128
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.html0000644000175000017500000012365714747247350014366 0ustar buildbuild libosmodsp: IQ balance utilities
libosmodsp 0.4.0.8-9128
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.html0000644000175000017500000002220414747247350013330 0ustar buildbuild libosmodsp: Globals
libosmodsp 0.4.0.8-9128
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.css0000644000175000017500000000407414747247350013202 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.html0000644000175000017500000001645214747247350014353 0ustar buildbuild libosmodsp: Globals
libosmodsp 0.4.0.8-9128
Osmocom DSP library
 
html/closed.png0000644000175000017500000000020414747247347013000 0ustar buildbuildPNG  IHDR KIDATxm @!Gk7-`&sts@k}2 P%_N .:0Dk›x" ֛)x5IENDB`html/cxvec_8c.html0000644000175000017500000002003214747247350013404 0ustar buildbuild libosmodsp: src/cxvec.c File Reference
libosmodsp 0.4.0.8-9128
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.html0000644000175000017500000000760714747247350017230 0ustar buildbuild libosmodsp: include Directory Reference
libosmodsp 0.4.0.8-9128
Osmocom DSP library
include Directory Reference
html/iqbal_8h.html0000644000175000017500000002404214747247350013376 0ustar buildbuild libosmodsp: include/osmocom/dsp/iqbal.h File Reference
libosmodsp 0.4.0.8-9128
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.html0000644000175000017500000001302214747247350013660 0ustar buildbuild libosmodsp: Data Structures
libosmodsp 0.4.0.8-9128
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.js0000644000175000017500000000424414747247350013657 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/cxvec_8h.js0000644000175000017500000000075114747247350013067 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.html0000644000175000017500000001373714747247350017054 0ustar buildbuild libosmodsp: include/osmocom/dsp Directory Reference
libosmodsp 0.4.0.8-9128
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.
 
html/group__cxvec__math.js0000644000175000017500000000425014747247350015211 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.png0000644000175000017500000000543614747247350012717 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.js0000644000175000017500000000221014747247350014033 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.html0000644000175000017500000001543014747247350013371 0ustar buildbuild libosmodsp: include/osmocom/dsp/cfile.h File Reference
libosmodsp 0.4.0.8-9128
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.js0000644000175000017500000000035114747247350017600 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.html0000644000175000017500000010034214747247350016144 0ustar buildbuild libosmodsp: include/osmocom/dsp/cxvec_math.h Source File
libosmodsp 0.4.0.8-9128
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.png0000644000175000017500000000515714747247350012720 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.js0000644000175000017500000000037114747247350013705 0ustar buildbuildvar structcfile = [ [ "_blen", "structcfile.html#ad3d6965e1039aa1f648361b2f83b034a", null ], [ "data", "structcfile.html#aeeb1105659968baae5df24026bf1d281", null ], [ "len", "structcfile.html#a2c856227c89a929b863da15951fcaef4", null ] ];html/index.html0000644000175000017500000000735314747247350013024 0ustar buildbuild libosmodsp: Main Page
libosmodsp 0.4.0.8-9128
Osmocom DSP library
libosmodsp Documentation
html/resize.js0000644000175000017500000001261614747247350012664 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.js0000644000175000017500000000033714747247350013332 0ustar buildbuildvar files_dup = [ [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ], [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] ];html/cxvec_8c.js0000644000175000017500000000075114747247350013062 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.png0000644000175000017500000000712414747247350012716 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.8-9128
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.js0000644000175000017500000001054414747247347013731 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.html0000644000175000017500000003073514747247350014567 0ustar buildbuild libosmodsp: src/cxvec_math.c File Reference
libosmodsp 0.4.0.8-9128
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.png0000644000175000017500000000021614747247347012600 0ustar buildbuildPNG  IHDR$[UIDATxK 0C'o([Ž%x#٩ We# 3t I 3+E~\D9wM}Y_A4Y}IENDB`html/group__cfile.js0000644000175000017500000000105414747247350014012 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.html0000644000175000017500000001164314747247350013362 0ustar buildbuild libosmodsp: Modules
libosmodsp 0.4.0.8-9128
Osmocom DSP library
Modules
Here is a list of all modules:
html/group__iqbal.js0000644000175000017500000000465514747247350014032 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.png0000644000175000017500000000152514747247347013344 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.png0000644000175000017500000000773114747247350012724 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.js0000644000175000017500000000027514747247350013035 0ustar buildbuildvar cfile_8c = [ [ "cfile_load", "group__cfile.html#gacb0304d89096222df64f3f9a10f22167", null ], [ "cfile_release", "group__cfile.html#ga7728a89f370281e5da16ff27d8657b3d", null ] ];html/dir_68267d1309a1af8e8297ef4c3efbcdba.js0000644000175000017500000000037714747247350017033 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.js0000644000175000017500000000032514747247350013025 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.css0000644000175000017500000002334514747247347012477 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.html0000644000175000017500000002171514747247350013422 0ustar buildbuild libosmodsp: include/osmocom/dsp/cxvec.h File Reference
libosmodsp 0.4.0.8-9128
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.html0000644000175000017500000001752114747247350013015 0ustar buildbuild libosmodsp: File List
libosmodsp 0.4.0.8-9128
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
  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.png0000644000175000017500000000135214747247350012273 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.css0000644000175000017500000010161414747247347013217 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.png0000644000175000017500000000124414747247347012442 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.js0000644000175000017500000001217414747247350014136 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] }; html/menudata.js0000644000175000017500000000414114747247350013153 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.png0000644000175000017500000000760614747247350012724 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.html0000644000175000017500000001637614747247350015473 0ustar buildbuild libosmodsp: osmo_cxvec Struct Reference
libosmodsp 0.4.0.8-9128
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.html0000644000175000017500000000763214747247350014364 0ustar buildbuild libosmodsp: Globals
libosmodsp 0.4.0.8-9128
Osmocom DSP library
 
html/tab_s.png0000644000175000017500000000027014747247347012622 0ustar buildbuildPNG  IHDR$[IDATx݁ @@ѣ?Q"%If6[HQ<]dr s?O=w'F -~rÍ[芭m֬ݯнF)Y% `n,9B!ь\<#IENDB`html/dir_68267d1309a1af8e8297ef4c3efbcdba.html0000644000175000017500000001316314747247350017360 0ustar buildbuild libosmodsp: src Directory Reference
libosmodsp 0.4.0.8-9128
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.html0000644000175000017500000003152214747247350014751 0ustar buildbuild libosmodsp: include/osmocom/dsp/cfile.h Source File
libosmodsp 0.4.0.8-9128
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.png0000644000175000017500000000017314747247347012475 0ustar buildbuildPNG  IHDR BIDATx 0 ׬ՙ\39b!9{|I>$#ߴ8/z/>2[giU,/~\ 9ٸIENDB`html/sync_on.png0000644000175000017500000000151514747247347013205 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.css0000644000175000017500000001072214747247347014253 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.js0000644000175000017500000000131114747247347015053 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.svg0000644000175000017500000000240414747247347014120 0ustar buildbuild image/svg+xml html/search/groups_1.js0000644000175000017500000000036214747247347014370 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.js0000644000175000017500000000212214747247347013615 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.html0000644000175000017500000000263614747247347014726 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_6.html0000644000175000017500000000263314747247347014161 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_2.js0000644000175000017500000000274414747247347013630 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.js0000644000175000017500000000031214747247347015017 0ustar buildbuildvar searchData= [ ['len_0',['len',['../structcfile.html#a2c856227c89a929b863da15951fcaef4',1,'cfile::len()'],['../structosmo__cxvec.html#a03722af5764b41c9151a7542546e3739',1,'osmo_cxvec::len()']]] ]; html/search/files_1.js0000644000175000017500000000020614747247347014150 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.html0000644000175000017500000000264114747247347015362 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_3.html0000644000175000017500000000263314747247347014156 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_0.html0000644000175000017500000000264114747247347015352 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_3.html0000644000175000017500000000264114747247347015355 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_2.html0000644000175000017500000000263614747247347014727 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_0.html0000644000175000017500000000263514747247347014507 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_b.html0000644000175000017500000000263314747247347014235 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_0.js0000644000175000017500000000014114747247347014362 0ustar buildbuildvar searchData= [ ['_2ecfile_20helpers_0',['.cfile helpers',['../group__cfile.html',1,'']]] ]; html/search/all_b.js0000644000175000017500000000017514747247347013704 0ustar buildbuildvar searchData= [ ['tmp_0',['tmp',['../struct__iqbal__state.html#a03100dde8b80dacdd0a4936511c5ab10',1,'_iqbal_state']]] ]; html/search/functions_1.html0000644000175000017500000000264114747247347015413 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_2.js0000644000175000017500000000031614747247347015021 0ustar buildbuildvar searchData= [ ['data_0',['data',['../structcfile.html#aeeb1105659968baae5df24026bf1d281',1,'cfile::data()'],['../structosmo__cxvec.html#aec620e4391a60de801eb23dec73e4d12',1,'osmo_cxvec::data()']]] ]; html/search/variables_1.js0000644000175000017500000000020114747247347015011 0ustar buildbuildvar searchData= [ ['cache_0',['cache',['../struct__iqbal__state.html#a9663b19ceb3a2ab337c5ad74699e4c23',1,'_iqbal_state']]] ]; html/search/nomatches.html0000644000175000017500000000076414747247347015150 0ustar buildbuild
    No Matches
    html/search/all_5.js0000644000175000017500000000033714747247347013627 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.js0000644000175000017500000000046214747247347014200 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.html0000644000175000017500000000264114747247347015412 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_6.js0000644000175000017500000000077314747247347015034 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.html0000644000175000017500000000263314747247347014163 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_0.js0000644000175000017500000000061614747247347014154 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.html0000644000175000017500000000264114747247347015354 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_9.html0000644000175000017500000000263314747247347014164 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/search.js0000644000175000017500000005500414747247347014101 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.html0000644000175000017500000000263514747247347014534 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/mag_sel.svg0000644000175000017500000000451214747247347014424 0ustar buildbuild image/svg+xml html/search/functions_2.html0000644000175000017500000000264114747247347015414 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/enumvalues_0.html0000644000175000017500000000264214747247347015567 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_1.html0000644000175000017500000000264114747247347015353 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_2.js0000644000175000017500000000553714747247347015073 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.js0000644000175000017500000000037514747247347015031 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.js0000644000175000017500000000031614747247347013622 0ustar buildbuildvar searchData= [ ['data_0',['data',['../structcfile.html#aeeb1105659968baae5df24026bf1d281',1,'cfile::data()'],['../structosmo__cxvec.html#aec620e4391a60de801eb23dec73e4d12',1,'osmo_cxvec::data()']]] ]; html/search/classes_1.html0000644000175000017500000000263714747247347015045 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_7.html0000644000175000017500000000263314747247347014162 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_9.js0000644000175000017500000000102214747247347013623 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.js0000644000175000017500000000102214747247347015227 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.html0000644000175000017500000000263614747247347014725 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_2.html0000644000175000017500000000263314747247347014155 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_2.js0000644000175000017500000000026614747247347014512 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.js0000644000175000017500000000134514747247347015025 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.js0000644000175000017500000000023314747247347015024 0ustar buildbuildvar searchData= [ ['start_5fat_5fprev_0',['start_at_prev',['../structosmo__iqbal__opts.html#ad36e80298fe63cb9f985401e30f768fc',1,'osmo_iqbal_opts']]] ]; html/search/classes_2.html0000644000175000017500000000263714747247347015046 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_a.js0000644000175000017500000000023314747247347013676 0ustar buildbuildvar searchData= [ ['start_5fat_5fprev_0',['start_at_prev',['../structosmo__iqbal__opts.html#ad36e80298fe63cb9f985401e30f768fc',1,'osmo_iqbal_opts']]] ]; html/search/variables_0.js0000644000175000017500000000033514747247347015020 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.html0000644000175000017500000000264114747247347015356 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_1.js0000644000175000017500000000036414747247347015063 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.js0000644000175000017500000000100414747247347015226 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.js0000644000175000017500000000011214747247347014477 0ustar buildbuildvar searchData= [ ['cfile_0',['cfile',['../structcfile.html',1,'']]] ]; html/search/searchdata.js0000644000175000017500000000072614747247347014734 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.js0000644000175000017500000000017514747247347015032 0ustar buildbuildvar searchData= [ ['tmp_0',['tmp',['../struct__iqbal__state.html#a03100dde8b80dacdd0a4936511c5ab10',1,'_iqbal_state']]] ]; html/search/search_m.png0000644000175000017500000000023614747247347014562 0ustar buildbuildPNG  IHDR5^KMgAMAOX2tEXtSoftwareAdobe ImageReadyqe<0IDATxb,//g```<~8#?bbZP,Xnݺ <~EIENDB`html/search/variables_5.html0000644000175000017500000000264114747247347015357 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_2.js0000644000175000017500000000015514747247347014371 0ustar buildbuildvar searchData= [ ['iq_20balance_20utilities_0',['IQ balance utilities',['../group__iqbal.html',1,'']]] ]; html/search/search_l.png0000644000175000017500000000106714747247347014564 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.html0000644000175000017500000000263314747247347014234 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_0.js0000644000175000017500000000014114747247347013613 0ustar buildbuildvar searchData= [ ['_2ecfile_20helpers_0',['.cfile helpers',['../group__cfile.html',1,'']]] ]; html/search/all_8.js0000644000175000017500000000741514747247347013636 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.js0000644000175000017500000000032414747247347014503 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.html0000644000175000017500000000264214747247347015570 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_4.js0000644000175000017500000000134514747247347013626 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.png0000644000175000017500000000105114747247347014563 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.html0000644000175000017500000000263314747247347014160 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_0.html0000644000175000017500000000263714747247347015044 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_7.js0000644000175000017500000000037514747247347013633 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.html0000644000175000017500000000264114747247347015361 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_0.html0000644000175000017500000000263314747247347014153 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_1.html0000644000175000017500000000263314747247347014154 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/group__cfile.html0000644000175000017500000002276214747247350014353 0ustar buildbuild libosmodsp: .cfile helpers
    libosmodsp 0.4.0.8-9128
    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.html0000644000175000017500000003521314747247350013373 0ustar buildbuild libosmodsp: src/iqbal.c File Reference
    libosmodsp 0.4.0.8-9128
    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.png0000644000175000017500000000112514747247350013661 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.js0000644000175000017500000001335214747247347012333 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.html0000644000175000017500000001701014747247350016076 0ustar buildbuild libosmodsp: _iqbal_state Struct Reference
    libosmodsp 0.4.0.8-9128
    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.js0000644000175000017500000000027514747247350013042 0ustar buildbuildvar cfile_8h = [ [ "cfile_load", "group__cfile.html#gacb0304d89096222df64f3f9a10f22167", null ], [ "cfile_release", "group__cfile.html#ga7728a89f370281e5da16ff27d8657b3d", null ] ];html/navtree.js0000644000175000017500000003653514747247350013035 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.8-9128
    Osmocom DSP library
     
    html/form_2.png0000644000175000017500000000703214747247350012713 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.js0000644000175000017500000000063514747247350014206 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.html0000644000175000017500000001113314747247350013341 0ustar buildbuild libosmodsp: Data Structure Index
    libosmodsp 0.4.0.8-9128
    Osmocom DSP library
    html/nav_h.png0000644000175000017500000000014214747247347012623 0ustar buildbuildPNG  IHDR ,@)IDATxA @BQۛТ) ) aܿoRlIENDB`html/cxvec__math_8c.js0000644000175000017500000000164414747247350014234 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.png0000644000175000017500000000026114747247347012607 0ustar buildbuildPNG  IHDR$[xIDATxM@~ΒEv"!d*rGq={SݧH uO^[_Xvyұ=VCff{R%_rug(?gh\i>|sIENDB`html/iqbal_8c.js0000644000175000017500000000205614747247350013042 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.js0000644000175000017500000000022214747247350017136 0ustar buildbuildvar dir_abe9b486a10ccc5afdf8abc29637e0c1 = [ [ "dsp", "dir_5b8fd40c25b8cda2528024e092698ab5.html", "dir_5b8fd40c25b8cda2528024e092698ab5" ] ];html/bdwn.png0000644000175000017500000000022314747247347012462 0ustar buildbuildPNG  IHDR5ZIDATx DP1lm rj.e D[ɾ|6V3?Ls'(}>+ Kch` ^ލnIENDB`html/structcfile.html0000644000175000017500000001441714747247350014243 0ustar buildbuild libosmodsp: cfile Struct Reference
    libosmodsp 0.4.0.8-9128
    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.png0000644000175000017500000000023114747247347012620 0ustar buildbuildPNG  IHDR8`IDATxK Eі[BmkHprӼ.ꎤR6Z VIE5jliIJ0/u޿6sH yIENDB`html/structosmo__iqbal__opts.js0000644000175000017500000000062714747247350016317 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.html0000644000175000017500000001360414747247350020135 0ustar buildbuild libosmodsp: _iqbal_estimate_state Struct Reference
    libosmodsp 0.4.0.8-9128
    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.html0000644000175000017500000001404714747247350013723 0ustar buildbuild libosmodsp: Data Fields
    libosmodsp 0.4.0.8-9128
    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.repository0000644000175000017500000000052314747247350014625 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.html0000644000175000017500000001117114747247350014340 0ustar buildbuild libosmodsp: Globals
    libosmodsp 0.4.0.8-9128
    Osmocom DSP library
     
    html/group__cxvec.html0000644000175000017500000004656314747247350014406 0ustar buildbuild libosmodsp: Complex vectors
    libosmodsp 0.4.0.8-9128
    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.png0000644000175000017500000000047214747247350013350 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.png0000644000175000017500000000521414747247350012717 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.html0000644000175000017500000001352414747247350013366 0ustar buildbuild libosmodsp: src/cfile.c File Reference
    libosmodsp 0.4.0.8-9128
    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.js0000644000175000017500000000022614747247350016666 0ustar buildbuildvar dir_d44c64559bbebec7f509842c48db8b23 = [ [ "osmocom", "dir_abe9b486a10ccc5afdf8abc29637e0c1.html", "dir_abe9b486a10ccc5afdf8abc29637e0c1" ] ];html/cxvec__math_8h.html0000644000175000017500000004041514747247350014570 0ustar buildbuild libosmodsp: include/osmocom/dsp/cxvec_math.h File Reference
    libosmodsp 0.4.0.8-9128
    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.png0000644000175000017500000000013714747247347012626 0ustar buildbuildPNG  IHDR1&IDATx1 OHf_ ->~M iMS<IENDB`html/jquery.js0000644000175000017500000053125514747247347012715 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.html0000644000175000017500000001365414747247350014761 0ustar buildbuild libosmodsp: Data Fields - Variables
    libosmodsp 0.4.0.8-9128
    Osmocom DSP library
     
    html/struct__iqbal__state.js0000644000175000017500000000070714747247350015553 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 ] ];