html/0000755000175000017500000000000014634656405011017 5ustar buildbuildhtml/doxygen.svg0000644000175000017500000003602614634656403013222 0ustar buildbuild html/iqbal_8c.html0000644000175000017500000003521314634656405013373 0ustar buildbuild libosmodsp: src/iqbal.c File Reference
libosmodsp 0.4.0.8-9128
Osmocom DSP library
iqbal.c File Reference

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/closed.png0000644000175000017500000000020414634656403012770 0ustar buildbuildPNG  IHDR KIDATxm @!Gk7-`&sts@k}2 P%_N .:0Dk›x" ֛)x5IENDB`html/structosmo__iqbal__opts.html0000644000175000017500000001556414634656405016655 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/cfile_8c.js0000644000175000017500000000027514634656405013035 0ustar buildbuildvar cfile_8c = [ [ "cfile_load", "group__cfile.html#gacb0304d89096222df64f3f9a10f22167", null ], [ "cfile_release", "group__cfile.html#ga7728a89f370281e5da16ff27d8657b3d", null ] ];html/doxygen.css0000644000175000017500000010161414634656403013207 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/group__cxvec__math.html0000644000175000017500000014175414634656405015554 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/bc_s.png0000644000175000017500000000124414634656403012432 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 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/structcfile.html0000644000175000017500000001441714634656405014243 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/dir_d44c64559bbebec7f509842c48db8b23.html0000644000175000017500000000760714634656405017230 0ustar buildbuild libosmodsp: include Directory Reference
libosmodsp 0.4.0.8-9128
Osmocom DSP library
include Directory Reference
html/menu.js0000644000175000017500000001335214634656403012323 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+=''; } 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.js0000644000175000017500000000070714634656405015553 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 ] ];html/annotated_dup.js0000644000175000017500000000063514634656405014206 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/group__cxvec.js0000644000175000017500000000221014634656405014033 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/globals.html0000644000175000017500000002220414634656405013330 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.js0000644000175000017500000003653514634656405013035 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: 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/globals_enum.html0000644000175000017500000000763214634656405014364 0ustar buildbuild libosmodsp: Globals
    libosmodsp 0.4.0.8-9128
    Osmocom DSP library
     
    html/cxvec__math_8h.js0000644000175000017500000000407214634656405014237 0ustar buildbuildvar cxvec__math_8h = [ [ "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/bdwn.png0000644000175000017500000000022314634656403012452 0ustar buildbuildPNG  IHDR5ZIDATx DP1lm rj.e D[ɾ|6V3?Ls'(}>+ Kch` ^ލnIENDB`html/dir_68267d1309a1af8e8297ef4c3efbcdba.js0000644000175000017500000000037714634656405017033 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/open.png0000644000175000017500000000017314634656403012465 0ustar buildbuildPNG  IHDR BIDATx 0 ׬ՙ\39b!9{|I>$#ߴ8/z/>2[giU,/~\ 9ٸIENDB`html/modules.js0000644000175000017500000000032514634656405013025 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/group__cfile.js0000644000175000017500000000105414634656405014012 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/navtreedata.js0000644000175000017500000000424414634656405013657 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/group__cxvec__math.js0000644000175000017500000000425014634656405015211 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/group__iqbal.html0000644000175000017500000012365714634656405014366 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/search/0000755000175000017500000000000014634656403012262 5ustar buildbuildhtml/search/groups_2.js0000644000175000017500000000015514634656403014361 0ustar buildbuildvar searchData= [ ['iq_20balance_20utilities_0',['IQ balance utilities',['../group__iqbal.html',1,'']]] ]; html/search/functions_1.html0000644000175000017500000000264114634656403015403 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_6.js0000644000175000017500000000077314634656403015024 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/variables_0.html0000644000175000017500000000264114634656403015342 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/close.svg0000644000175000017500000000240414634656403014110 0ustar buildbuild image/svg+xml html/search/all_a.js0000644000175000017500000000023314634656403013666 0ustar buildbuildvar searchData= [ ['start_5fat_5fprev_0',['start_at_prev',['../structosmo__iqbal__opts.html#ad36e80298fe63cb9f985401e30f768fc',1,'osmo_iqbal_opts']]] ]; html/search/variables_8.js0000644000175000017500000000017514634656403015022 0ustar buildbuildvar searchData= [ ['tmp_0',['tmp',['../struct__iqbal__state.html#a03100dde8b80dacdd0a4936511c5ab10',1,'_iqbal_state']]] ]; html/search/files_0.js0000644000175000017500000000061614634656403014144 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/classes_1.js0000644000175000017500000000011214634656403014467 0ustar buildbuildvar searchData= [ ['cfile_0',['cfile',['../structcfile.html',1,'']]] ]; html/search/functions_0.js0000644000175000017500000000131114634656403015043 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/all_4.js0000644000175000017500000000134514634656403013616 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.html0000644000175000017500000000264114634656403015351 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_4.html0000644000175000017500000000264114634656403015346 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_4.html0000644000175000017500000000263314634656403014147 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_1.js0000644000175000017500000000036414634656403015053 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/variables_1.js0000644000175000017500000000020114634656403015001 0ustar buildbuildvar searchData= [ ['cache_0',['cache',['../struct__iqbal__state.html#a9663b19ceb3a2ab337c5ad74699e4c23',1,'_iqbal_state']]] ]; html/search/groups_0.js0000644000175000017500000000014114634656403014352 0ustar buildbuildvar searchData= [ ['_2ecfile_20helpers_0',['.cfile helpers',['../group__cfile.html',1,'']]] ]; html/search/variables_3.js0000644000175000017500000000134514634656403015015 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/classes_1.html0000644000175000017500000000263714634656403015035 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/search.js0000644000175000017500000005500414634656403014071 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/groups_1.html0000644000175000017500000000263614634656403014716 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/search_r.png0000644000175000017500000000105114634656403014553 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/variables_5.html0000644000175000017500000000264114634656403015347 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_5.html0000644000175000017500000000263314634656403014150 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/enums_0.html0000644000175000017500000000263514634656403014524 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/enumvalues_1.js0000644000175000017500000000102214634656403015217 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/all_9.js0000644000175000017500000000102214634656403013613 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/search.css0000644000175000017500000001072214634656403014243 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/enumvalues_0.js0000644000175000017500000000100414634656403015216 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/groups_0.html0000644000175000017500000000263614634656403014715 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_0.html0000644000175000017500000000263314634656403014143 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_3.html0000644000175000017500000000263314634656403014146 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_8.html0000644000175000017500000000264114634656403015352 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_0.html0000644000175000017500000000263714634656403015034 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_0.html0000644000175000017500000000263514634656403014477 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_7.js0000644000175000017500000000037514634656403013623 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/functions_2.html0000644000175000017500000000264114634656403015404 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_0.html0000644000175000017500000000264114634656403015402 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/enums_0.js0000644000175000017500000000046214634656403014170 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/all_0.js0000644000175000017500000000014114634656403013603 0ustar buildbuildvar searchData= [ ['_2ecfile_20helpers_0',['.cfile helpers',['../group__cfile.html',1,'']]] ]; html/search/variables_6.html0000644000175000017500000000264114634656403015350 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_1.html0000644000175000017500000000263314634656403014144 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_b.js0000644000175000017500000000017514634656403013674 0ustar buildbuildvar searchData= [ ['tmp_0',['tmp',['../struct__iqbal__state.html#a03100dde8b80dacdd0a4936511c5ab10',1,'_iqbal_state']]] ]; html/search/variables_2.js0000644000175000017500000000031614634656403015011 0ustar buildbuildvar searchData= [ ['data_0',['data',['../structcfile.html#aeeb1105659968baae5df24026bf1d281',1,'cfile::data()'],['../structosmo__cxvec.html#aec620e4391a60de801eb23dec73e4d12',1,'osmo_cxvec::data()']]] ]; html/search/classes_0.js0000644000175000017500000000032414634656403014473 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/mag_sel.svg0000644000175000017500000000451214634656403014414 0ustar buildbuild image/svg+xml html/search/files_1.html0000644000175000017500000000263514634656403014500 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_6.html0000644000175000017500000000263314634656403014151 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_8.html0000644000175000017500000000263314634656403014153 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/enumvalues_0.html0000644000175000017500000000264214634656403015557 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_2.html0000644000175000017500000000263314634656403014145 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_2.js0000644000175000017500000000026614634656403014502 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_7.js0000644000175000017500000000023314634656403015014 0ustar buildbuildvar searchData= [ ['start_5fat_5fprev_0',['start_at_prev',['../structosmo__iqbal__opts.html#ad36e80298fe63cb9f985401e30f768fc',1,'osmo_iqbal_opts']]] ]; html/search/files_1.js0000644000175000017500000000020614634656403014140 0ustar buildbuildvar searchData= [ ['iqbal_2ec_0',['iqbal.c',['../iqbal_8c.html',1,'']]], ['iqbal_2eh_1',['iqbal.h',['../iqbal_8h.html',1,'']]] ]; html/search/all_a.html0000644000175000017500000000263314634656403014224 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/enumvalues_1.html0000644000175000017500000000264214634656403015560 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_2.js0000644000175000017500000000274414634656403013620 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/all_b.html0000644000175000017500000000263314634656403014225 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_8.js0000644000175000017500000000741514634656403013626 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/variables_3.html0000644000175000017500000000264114634656403015345 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_5.js0000644000175000017500000000037514634656403015021 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/search_m.png0000644000175000017500000000023614634656403014552 0ustar buildbuildPNG  IHDR5^KMgAMAOX2tEXtSoftwareAdobe ImageReadyqe<0IDATxb,//g```<~8#?bbZP,Xnݺ <~EIENDB`html/search/search_l.png0000644000175000017500000000106714634656403014554 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_9.html0000644000175000017500000000263314634656403014154 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_1.js0000644000175000017500000000212214634656403013605 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/variables_4.js0000644000175000017500000000031214634656403015007 0ustar buildbuildvar searchData= [ ['len_0',['len',['../structcfile.html#a2c856227c89a929b863da15951fcaef4',1,'cfile::len()'],['../structosmo__cxvec.html#a03722af5764b41c9151a7542546e3739',1,'osmo_cxvec::len()']]] ]; html/search/variables_2.html0000644000175000017500000000264114634656403015344 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/searchdata.js0000644000175000017500000000072614634656403014724 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/functions_2.js0000644000175000017500000000553714634656403015063 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/all_3.js0000644000175000017500000000031614634656403013612 0ustar buildbuildvar searchData= [ ['data_0',['data',['../structcfile.html#aeeb1105659968baae5df24026bf1d281',1,'cfile::data()'],['../structosmo__cxvec.html#aec620e4391a60de801eb23dec73e4d12',1,'osmo_cxvec::data()']]] ]; html/search/groups_1.js0000644000175000017500000000036214634656403014360 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_6.js0000644000175000017500000000031214634656403013611 0ustar buildbuildvar searchData= [ ['len_0',['len',['../structcfile.html#a2c856227c89a929b863da15951fcaef4',1,'cfile::len()'],['../structosmo__cxvec.html#a03722af5764b41c9151a7542546e3739',1,'osmo_cxvec::len()']]] ]; html/search/variables_0.js0000644000175000017500000000033514634656403015010 0ustar buildbuildvar searchData= [ ['_5fblen_0',['_blen',['../structcfile.html#ad3d6965e1039aa1f648361b2f83b034a',1,'cfile']]], ['_5fdata_1',['_data',['../structosmo__cxvec.html#aa8a9de0ef88d44caa1c07bc91b99bffd',1,'osmo_cxvec']]] ]; html/search/nomatches.html0000644000175000017500000000076414634656403015140 0ustar buildbuild
    No Matches
    html/search/all_7.html0000644000175000017500000000263314634656403014152 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_2.html0000644000175000017500000000263614634656403014717 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/dynsections.js0000644000175000017500000001054414634656403013721 0ustar buildbuild/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ function toggleVisibility(linkObj) { var base = $(linkObj).attr('id'); var summary = $('#'+base+'-summary'); var content = $('#'+base+'-content'); var trigger = $('#'+base+'-trigger'); var src=$(trigger).attr('src'); if (content.is(':visible')===true) { content.hide(); summary.show(); $(linkObj).addClass('closed').removeClass('opened'); $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); } else { content.show(); summary.hide(); $(linkObj).removeClass('closed').addClass('opened'); $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); } return false; } function updateStripes() { $('table.directory tr'). removeClass('even').filter(':visible:even').addClass('even'); } function toggleLevel(level) { $('table.directory tr').each(function() { var l = this.id.split('_').length-1; var i = $('#img'+this.id.substring(3)); var a = $('#arr'+this.id.substring(3)); if (l libosmodsp: include/osmocom Directory Reference
    libosmodsp 0.4.0.8-9128
    Osmocom DSP library
    osmocom Directory Reference

    Directories

    directory  dsp
     
    html/form_1.png0000644000175000017500000000515714634656404012717 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/nav_f.png0000644000175000017500000000023114634656403012610 0ustar buildbuildPNG  IHDR8`IDATxK Eі[BmkHprӼ.ꎤR6Z VIE5jliIJ0/u޿6sH yIENDB`html/globals_func.html0000644000175000017500000001645214634656405014353 0ustar buildbuild libosmodsp: Globals
    libosmodsp 0.4.0.8-9128
    Osmocom DSP library
     
    html/struct__iqbal__estimate__state.html0000644000175000017500000001360414634656405020135 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/structcfile.js0000644000175000017500000000037114634656405013705 0ustar buildbuildvar structcfile = [ [ "_blen", "structcfile.html#ad3d6965e1039aa1f648361b2f83b034a", null ], [ "data", "structcfile.html#aeeb1105659968baae5df24026bf1d281", null ], [ "len", "structcfile.html#a2c856227c89a929b863da15951fcaef4", null ] ];html/sync_on.png0000644000175000017500000000151514634656403013175 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=p9EEάʑ"un$R"?{<%PNt$߶+^<"2Dqq\ҙaA"ԵP}#Ez{.8i p(ADwDE߂z;Kק8t q:uvvݛvEn{MFXgfZ֝*ߩ:jYq#3SWr'  IENDB`html/cxvec_8c.js0000644000175000017500000000075114634656405013062 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/functions.html0000644000175000017500000001404714634656405013723 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/dir_68267d1309a1af8e8297ef4c3efbcdba.html0000644000175000017500000001316314634656405017360 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/modules.html0000644000175000017500000001164314634656405013362 0ustar buildbuild libosmodsp: Modules
    libosmodsp 0.4.0.8-9128
    Osmocom DSP library
    Modules
    Here is a list of all modules:
    html/form_0.png0000644000175000017500000000543614634656404012716 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/tab_h.png0000644000175000017500000000026114634656403012577 0ustar buildbuildPNG  IHDR$[xIDATxM@~ΒEv"!d*rGq={SݧH uO^[_Xvyұ=VCff{R%_rug(?gh\i>|sIENDB`html/cxvec__math_8h.html0000644000175000017500000004041514634656405014570 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/iqbal_8h_source.html0000644000175000017500000005212714634656405014763 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/nav_h.png0000644000175000017500000000014214634656403012613 0ustar buildbuildPNG  IHDR ,@)IDATxA @BQۛТ) ) aܿoRlIENDB`html/structosmo__cxvec.html0000644000175000017500000001637614634656405015473 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/classes.html0000644000175000017500000001113314634656405013341 0ustar buildbuild libosmodsp: Data Structure Index
    libosmodsp 0.4.0.8-9128
    Osmocom DSP library
    html/struct__iqbal__state.html0000644000175000017500000001701014634656405016076 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_8c.html0000644000175000017500000001352414634656405013366 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/functions_vars.html0000644000175000017500000001365414634656405014761 0ustar buildbuild libosmodsp: Data Fields - Variables
    libosmodsp 0.4.0.8-9128
    Osmocom DSP library
     
    html/dir_5b8fd40c25b8cda2528024e092698ab5.js0000644000175000017500000000037714634656405016520 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/globals_vars.html0000644000175000017500000000753714634656405014377 0ustar buildbuild libosmodsp: Globals
    libosmodsp 0.4.0.8-9128
    Osmocom DSP library
     
    html/structosmo__iqbal__opts.js0000644000175000017500000000062714634656405016317 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/form_6.png0000644000175000017500000000521414634656405012717 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/nav_g.png0000644000175000017500000000013714634656403012616 0ustar buildbuildPNG  IHDR1&IDATx1 OHf_ ->~M iMS<IENDB`html/tab_b.png0000644000175000017500000000025114634656403012570 0ustar buildbuildPNG  IHDR$[pIDATxM EǻԸu`V0}:t]Ds䮂u|x>1&m8SxLU޲iEOsnxKN~jIENDB`html/form_4.png0000644000175000017500000000760614634656404012723 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/form_5.png0000644000175000017500000000773114634656405012724 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/splitbar.png0000644000175000017500000000047214634656405013350 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/cxvec_8h_source.html0000644000175000017500000004410514634656405015000 0ustar buildbuild 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/cxvec__math_8c.js0000644000175000017500000000164414634656405014234 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/cxvec_8c.html0000644000175000017500000002003214634656405013404 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/iqbal_8h.html0000644000175000017500000002404214634656405013376 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/jquery.js0000644000175000017500000053125514634656403012705 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/form_3.png0000644000175000017500000000712414634656404012715 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: .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/resize.js0000644000175000017500000001261614634656405012664 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/cfile_8h_source.html0000644000175000017500000003152214634656405014751 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/struct__iqbal__estimate__state.js0000644000175000017500000000035114634656405017600 0ustar buildbuildvar struct__iqbal__estimate__state = [ [ "fft", "struct__iqbal__estimate__state.html#aa44240271f4835c080793da0b816bc1c", null ], [ "fft_plan", "struct__iqbal__estimate__state.html#a0a1a4f9083a6228f38e78702b8f710e9", null ] ];html/annotated.html0000644000175000017500000001302214634656405013660 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/globals_eval.html0000644000175000017500000001117114634656405014340 0ustar buildbuild libosmodsp: Globals
    libosmodsp 0.4.0.8-9128
    Osmocom DSP library
     
    html/folderopen.png0000644000175000017500000000112514634656405013661 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/navtree.css0000644000175000017500000000407414634656405013202 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/tab_s.png0000644000175000017500000000027014634656403012612 0ustar buildbuildPNG  IHDR$[IDATx݁ @@ѣ?Q"%If6[HQ<]dr s?O=w'F -~rÍ[芭m֬ݯнF)Y% `n,9B!ь\<#IENDB`html/cxvec_8h.js0000644000175000017500000000075114634656405013067 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/group__cxvec.html0000644000175000017500000004656314634656405014406 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/sync_off.png0000644000175000017500000000152514634656403013334 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_2.png0000644000175000017500000000703214634656404012712 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/cxvec_8h.html0000644000175000017500000002171514634656405013422 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/doc.png0000644000175000017500000000135214634656405012273 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/dir_abe9b486a10ccc5afdf8abc29637e0c1.js0000644000175000017500000000022214634656405017136 0ustar buildbuildvar dir_abe9b486a10ccc5afdf8abc29637e0c1 = [ [ "dsp", "dir_5b8fd40c25b8cda2528024e092698ab5.html", "dir_5b8fd40c25b8cda2528024e092698ab5" ] ];html/cxvec__math_8c.html0000644000175000017500000003073514634656405014567 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/tabs.css0000644000175000017500000002334514634656403012467 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/dir_d44c64559bbebec7f509842c48db8b23.js0000644000175000017500000000022614634656405016666 0ustar buildbuildvar dir_d44c64559bbebec7f509842c48db8b23 = [ [ "osmocom", "dir_abe9b486a10ccc5afdf8abc29637e0c1.html", "dir_abe9b486a10ccc5afdf8abc29637e0c1" ] ];html/dir_5b8fd40c25b8cda2528024e092698ab5.html0000644000175000017500000001373714634656405017054 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/files_dup.js0000644000175000017500000000033714634656405013332 0ustar buildbuildvar files_dup = [ [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ], [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] ];html/index.html0000644000175000017500000000735314634656405013024 0ustar buildbuild libosmodsp: Main Page
    libosmodsp 0.4.0.8-9128
    Osmocom DSP library
    libosmodsp Documentation
    html/files.html0000644000175000017500000001752114634656405013015 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