html/0000755000175000017500000000000014762421014011003 5ustar buildbuildhtml/iqbal_8h.js0000644000175000017500000000111414762421014013025 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.js0000644000175000017500000000037714762421014016504 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.html0000644000175000017500000014175314762421014015537 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.js0000644000175000017500000000067114762421014015116 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.png0000644000175000017500000000115014762421014014153 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.html0000644000175000017500000005212614762421014014746 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.html0000644000175000017500000001066514762421014017466 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.html0000644000175000017500000001556314762421014016640 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.html0000644000175000017500000012365614762421014014351 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.html0000644000175000017500000002220314762421014013313 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.css0000644000175000017500000000407414762421014013166 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.html0000644000175000017500000001645114762421014014336 0ustar buildbuild libosmodsp: Globals
libosmodsp 0.4.0.8-9128
Osmocom DSP library
 
html/closed.png0000644000175000017500000000020414762421012012754 0ustar buildbuildPNG  IHDR KIDATxm @!Gk7-`&sts@k}2 P%_N .:0Dk›x" ֛)x5IENDB`html/cxvec_8c.html0000644000175000017500000002003114762421014013367 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.html0000644000175000017500000000760614762421014017213 0ustar buildbuild libosmodsp: include Directory Reference
libosmodsp 0.4.0.8-9128
Osmocom DSP library
include Directory Reference
html/iqbal_8h.html0000644000175000017500000002404114762421014013361 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.html0000644000175000017500000001302114762421014013643 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.js0000644000175000017500000000424414762421014013643 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.js0000644000175000017500000000075114762421014013053 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.html0000644000175000017500000001373614762421014017037 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.js0000644000175000017500000000425014762421014015175 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.png0000644000175000017500000000543614762421012012701 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.js0000644000175000017500000000221014762421014014017 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.html0000644000175000017500000001542714762421014013363 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.js0000644000175000017500000000035114762421014017564 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.html0000644000175000017500000010034114762421014016127 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.png0000644000175000017500000000515714762421012012702 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.js0000644000175000017500000000037114762421014013671 0ustar buildbuildvar structcfile = [ [ "_blen", "structcfile.html#ad3d6965e1039aa1f648361b2f83b034a", null ], [ "data", "structcfile.html#aeeb1105659968baae5df24026bf1d281", null ], [ "len", "structcfile.html#a2c856227c89a929b863da15951fcaef4", null ] ];html/index.html0000644000175000017500000000735214762421014013007 0ustar buildbuild libosmodsp: Main Page
libosmodsp 0.4.0.8-9128
Osmocom DSP library
libosmodsp Documentation
html/resize.js0000644000175000017500000001261614762421014012650 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.js0000644000175000017500000000033714762421014013316 0ustar buildbuildvar files_dup = [ [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ], [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] ];html/cxvec_8c.js0000644000175000017500000000075114762421014013046 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.png0000644000175000017500000000712414762421013012701 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.js0000644000175000017500000001054414762421012013705 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.html0000644000175000017500000003073414762421014014552 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.png0000644000175000017500000000021614762421012012554 0ustar buildbuildPNG  IHDR$[UIDATxK 0C'o([Ž%x#٩ We# 3t I 3+E~\D9wM}Y_A4Y}IENDB`html/group__cfile.js0000644000175000017500000000105414762421014013776 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.html0000644000175000017500000001164214762421014013345 0ustar buildbuild libosmodsp: Modules
libosmodsp 0.4.0.8-9128
Osmocom DSP library
Modules
Here is a list of all modules:
html/group__iqbal.js0000644000175000017500000000465514762421014014016 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.png0000644000175000017500000000152514762421012013320 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.png0000644000175000017500000000773114762421013012707 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.js0000644000175000017500000000027514762421014013021 0ustar buildbuildvar cfile_8c = [ [ "cfile_load", "group__cfile.html#gacb0304d89096222df64f3f9a10f22167", null ], [ "cfile_release", "group__cfile.html#ga7728a89f370281e5da16ff27d8657b3d", null ] ];html/dir_68267d1309a1af8e8297ef4c3efbcdba.js0000644000175000017500000000037714762421014017017 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.js0000644000175000017500000000032514762421014013011 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.css0000644000175000017500000002334514762421012012453 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.html0000644000175000017500000002171414762421014013405 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.html0000644000175000017500000001752014762421014013000 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.png0000644000175000017500000000135214762421014012257 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.css0000644000175000017500000010161414762421012013173 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.png0000644000175000017500000000124414762421012012416 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.js0000644000175000017500000001217414762421014014122 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.js0000644000175000017500000000414114762421014013137 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.png0000644000175000017500000000760614762421013012707 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.html0000644000175000017500000001637514762421014015456 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.html0000644000175000017500000000763114762421014014347 0ustar buildbuild libosmodsp: Globals
libosmodsp 0.4.0.8-9128
Osmocom DSP library
 
html/tab_s.png0000644000175000017500000000027014762421012012576 0ustar buildbuildPNG  IHDR$[IDATx݁ @@ѣ?Q"%If6[HQ<]dr s?O=w'F -~rÍ[芭m֬ݯнF)Y% `n,9B!ь\<#IENDB`html/dir_68267d1309a1af8e8297ef4c3efbcdba.html0000644000175000017500000001316214762421014017343 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.html0000644000175000017500000003152114762421014014734 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.png0000644000175000017500000000017314762421012012451 0ustar buildbuildPNG  IHDR BIDATx 0 ׬ՙ\39b!9{|I>$#ߴ8/z/>2[giU,/~\ 9ٸIENDB`html/sync_on.png0000644000175000017500000000151514762421012013161 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.css0000644000175000017500000001072214762421012014227 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.js0000644000175000017500000000131114762421012015027 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.svg0000644000175000017500000000240414762421012014074 0ustar buildbuild image/svg+xml html/search/groups_1.js0000644000175000017500000000036214762421012014344 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.js0000644000175000017500000000212214762421012013571 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.html0000644000175000017500000000263614762421012014702 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_6.html0000644000175000017500000000263314762421012014135 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_2.js0000644000175000017500000000274414762421012013604 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.js0000644000175000017500000000031214762421012014773 0ustar buildbuildvar searchData= [ ['len_0',['len',['../structcfile.html#a2c856227c89a929b863da15951fcaef4',1,'cfile::len()'],['../structosmo__cxvec.html#a03722af5764b41c9151a7542546e3739',1,'osmo_cxvec::len()']]] ]; html/search/files_1.js0000644000175000017500000000020614762421012014124 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.html0000644000175000017500000000264114762421012015336 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_3.html0000644000175000017500000000263314762421012014132 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_0.html0000644000175000017500000000264114762421012015326 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_3.html0000644000175000017500000000264114762421012015331 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_2.html0000644000175000017500000000263614762421012014703 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_0.html0000644000175000017500000000263514762421012014463 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_b.html0000644000175000017500000000263314762421012014211 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_0.js0000644000175000017500000000014114762421012014336 0ustar buildbuildvar searchData= [ ['_2ecfile_20helpers_0',['.cfile helpers',['../group__cfile.html',1,'']]] ]; html/search/all_b.js0000644000175000017500000000017514762421012013660 0ustar buildbuildvar searchData= [ ['tmp_0',['tmp',['../struct__iqbal__state.html#a03100dde8b80dacdd0a4936511c5ab10',1,'_iqbal_state']]] ]; html/search/functions_1.html0000644000175000017500000000264114762421012015367 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_2.js0000644000175000017500000000031614762421012014775 0ustar buildbuildvar searchData= [ ['data_0',['data',['../structcfile.html#aeeb1105659968baae5df24026bf1d281',1,'cfile::data()'],['../structosmo__cxvec.html#aec620e4391a60de801eb23dec73e4d12',1,'osmo_cxvec::data()']]] ]; html/search/variables_1.js0000644000175000017500000000020114762421012014765 0ustar buildbuildvar searchData= [ ['cache_0',['cache',['../struct__iqbal__state.html#a9663b19ceb3a2ab337c5ad74699e4c23',1,'_iqbal_state']]] ]; html/search/nomatches.html0000644000175000017500000000076414762421012015124 0ustar buildbuild
    No Matches
    html/search/all_5.js0000644000175000017500000000033714762421012013603 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.js0000644000175000017500000000046214762421012014154 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.html0000644000175000017500000000264114762421012015366 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_6.js0000644000175000017500000000077314762421012015010 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.html0000644000175000017500000000263314762421012014137 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_0.js0000644000175000017500000000061614762421012014130 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.html0000644000175000017500000000264114762421012015330 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_9.html0000644000175000017500000000263314762421012014140 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/search.js0000644000175000017500000005500414762421012014055 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.html0000644000175000017500000000263514762421012014510 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/mag_sel.svg0000644000175000017500000000451214762421012014400 0ustar buildbuild image/svg+xml html/search/functions_2.html0000644000175000017500000000264114762421012015370 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/enumvalues_0.html0000644000175000017500000000264214762421012015543 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_1.html0000644000175000017500000000264114762421012015327 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_2.js0000644000175000017500000000553714762421012015047 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.js0000644000175000017500000000037514762421012015005 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.js0000644000175000017500000000031614762421012013576 0ustar buildbuildvar searchData= [ ['data_0',['data',['../structcfile.html#aeeb1105659968baae5df24026bf1d281',1,'cfile::data()'],['../structosmo__cxvec.html#aec620e4391a60de801eb23dec73e4d12',1,'osmo_cxvec::data()']]] ]; html/search/classes_1.html0000644000175000017500000000263714762421012015021 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_7.html0000644000175000017500000000263314762421012014136 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_9.js0000644000175000017500000000102214762421012013577 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.js0000644000175000017500000000102214762421012015203 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.html0000644000175000017500000000263614762421012014701 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_2.html0000644000175000017500000000263314762421012014131 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_2.js0000644000175000017500000000026614762421012014466 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.js0000644000175000017500000000134514762421012015001 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.js0000644000175000017500000000023314762421012015000 0ustar buildbuildvar searchData= [ ['start_5fat_5fprev_0',['start_at_prev',['../structosmo__iqbal__opts.html#ad36e80298fe63cb9f985401e30f768fc',1,'osmo_iqbal_opts']]] ]; html/search/classes_2.html0000644000175000017500000000263714762421012015022 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_a.js0000644000175000017500000000023314762421012013652 0ustar buildbuildvar searchData= [ ['start_5fat_5fprev_0',['start_at_prev',['../structosmo__iqbal__opts.html#ad36e80298fe63cb9f985401e30f768fc',1,'osmo_iqbal_opts']]] ]; html/search/variables_0.js0000644000175000017500000000033514762421012014774 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.html0000644000175000017500000000264114762421012015332 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_1.js0000644000175000017500000000036414762421012015037 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.js0000644000175000017500000000100414762421012015202 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.js0000644000175000017500000000011214762421012014453 0ustar buildbuildvar searchData= [ ['cfile_0',['cfile',['../structcfile.html',1,'']]] ]; html/search/searchdata.js0000644000175000017500000000072614762421012014710 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.js0000644000175000017500000000017514762421012015006 0ustar buildbuildvar searchData= [ ['tmp_0',['tmp',['../struct__iqbal__state.html#a03100dde8b80dacdd0a4936511c5ab10',1,'_iqbal_state']]] ]; html/search/search_m.png0000644000175000017500000000023614762421012014536 0ustar buildbuildPNG  IHDR5^KMgAMAOX2tEXtSoftwareAdobe ImageReadyqe<0IDATxb,//g```<~8#?bbZP,Xnݺ <~EIENDB`html/search/variables_5.html0000644000175000017500000000264114762421012015333 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_2.js0000644000175000017500000000015514762421012014345 0ustar buildbuildvar searchData= [ ['iq_20balance_20utilities_0',['IQ balance utilities',['../group__iqbal.html',1,'']]] ]; html/search/search_l.png0000644000175000017500000000106714762421012014540 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.html0000644000175000017500000000263314762421012014210 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_0.js0000644000175000017500000000014114762421012013567 0ustar buildbuildvar searchData= [ ['_2ecfile_20helpers_0',['.cfile helpers',['../group__cfile.html',1,'']]] ]; html/search/all_8.js0000644000175000017500000000741514762421012013612 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.js0000644000175000017500000000032414762421012014457 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.html0000644000175000017500000000264214762421012015544 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_4.js0000644000175000017500000000134514762421012013602 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.png0000644000175000017500000000105114762421012014537 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.html0000644000175000017500000000263314762421012014134 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_0.html0000644000175000017500000000263714762421012015020 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_7.js0000644000175000017500000000037514762421012013607 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.html0000644000175000017500000000264114762421012015335 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_0.html0000644000175000017500000000263314762421012014127 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_1.html0000644000175000017500000000263314762421012014130 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/group__cfile.html0000644000175000017500000002276114762421014014336 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.html0000644000175000017500000003521214762421014013356 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.png0000644000175000017500000000112514762421014013645 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.js0000644000175000017500000001335214762421012012307 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.html0000644000175000017500000001700714762421014016070 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.js0000644000175000017500000000027514762421014013026 0ustar buildbuildvar cfile_8h = [ [ "cfile_load", "group__cfile.html#gacb0304d89096222df64f3f9a10f22167", null ], [ "cfile_release", "group__cfile.html#ga7728a89f370281e5da16ff27d8657b3d", null ] ];html/navtree.js0000644000175000017500000003653514762421014013021 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.png0000644000175000017500000000703214762421013012676 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.js0000644000175000017500000000063514762421014014172 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.html0000644000175000017500000001113214762421014013324 0ustar buildbuild libosmodsp: Data Structure Index
    libosmodsp 0.4.0.8-9128
    Osmocom DSP library
    html/nav_h.png0000644000175000017500000000014214762421012012577 0ustar buildbuildPNG  IHDR ,@)IDATxA @BQۛТ) ) aܿoRlIENDB`html/cxvec__math_8c.js0000644000175000017500000000164414762421014014220 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.png0000644000175000017500000000026114762421012012563 0ustar buildbuildPNG  IHDR$[xIDATxM@~ΒEv"!d*rGq={SݧH uO^[_Xvyұ=VCff{R%_rug(?gh\i>|sIENDB`html/iqbal_8c.js0000644000175000017500000000205614762421014013026 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.js0000644000175000017500000000022214762421014017122 0ustar buildbuildvar dir_abe9b486a10ccc5afdf8abc29637e0c1 = [ [ "dsp", "dir_5b8fd40c25b8cda2528024e092698ab5.html", "dir_5b8fd40c25b8cda2528024e092698ab5" ] ];html/bdwn.png0000644000175000017500000000022314762421012012436 0ustar buildbuildPNG  IHDR5ZIDATx DP1lm rj.e D[ɾ|6V3?Ls'(}>+ Kch` ^ލnIENDB`html/structcfile.html0000644000175000017500000001441614762421014014226 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.png0000644000175000017500000000023114762421012012574 0ustar buildbuildPNG  IHDR8`IDATxK Eі[BmkHprӼ.ꎤR6Z VIE5jliIJ0/u޿6sH yIENDB`html/structosmo__iqbal__opts.js0000644000175000017500000000062714762421014016303 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.html0000644000175000017500000001360314762421014020120 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.html0000644000175000017500000001404614762421014013706 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.repository0000644000175000017500000000052314762421014014611 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.html0000644000175000017500000001117014762421014014323 0ustar buildbuild libosmodsp: Globals
    libosmodsp 0.4.0.8-9128
    Osmocom DSP library
     
    html/group__cxvec.html0000644000175000017500000004656214762421014014371 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.png0000644000175000017500000000047214762421014013334 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.png0000644000175000017500000000521414762421014012703 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.html0000644000175000017500000001352314762421014013351 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.js0000644000175000017500000000022614762421014016652 0ustar buildbuildvar dir_d44c64559bbebec7f509842c48db8b23 = [ [ "osmocom", "dir_abe9b486a10ccc5afdf8abc29637e0c1.html", "dir_abe9b486a10ccc5afdf8abc29637e0c1" ] ];html/cxvec__math_8h.html0000644000175000017500000004041414762421014014553 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.png0000644000175000017500000000013714762421012012602 0ustar buildbuildPNG  IHDR1&IDATx1 OHf_ ->~M iMS<IENDB`html/jquery.js0000644000175000017500000053125514762421012012671 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.html0000644000175000017500000001365314762421014014744 0ustar buildbuild libosmodsp: Data Fields - Variables
    libosmodsp 0.4.0.8-9128
    Osmocom DSP library
     
    html/struct__iqbal__state.js0000644000175000017500000000070714762421014015537 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 ] ];