File: fastDepukfb_8H_source.html

package info (click to toggle)
libaudiomask 1.0-3
  • links: PTS
  • area: main
  • in suites: bullseye, buster, stretch
  • size: 17,668 kB
  • ctags: 636
  • sloc: cpp: 787; perl: 108; makefile: 67
file content (160 lines) | stat: -rw-r--r-- 11,692 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<!-- This comment will put IE 6, 7 and 8 in quirks mode -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libaudiomask: fastDepukfb.H Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javaScript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body onload='searchBox.OnSelectItem(0);'>
<!-- Generated by Doxygen 1.6.3 -->
<script type="text/javascript"><!--
var searchBox = new SearchBox("searchBox", "search",false,'Search');
--></script>
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="examples.html"><span>Examples</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <img id="MSearchSelect" src="search/search.png"
             onmouseover="return searchBox.OnSearchSelectShow()"
             onmouseout="return searchBox.OnSearchSelectHide()"
             alt=""/>
        <input type="text" id="MSearchField" value="Search" accesskey="S"
             onfocus="searchBox.OnSearchFieldFocus(true)" 
             onblur="searchBox.OnSearchFieldFocus(false)" 
             onkeyup="searchBox.OnSearchFieldChange(event)"/>
        <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
        </div>
      </li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
    </ul>
  </div>
<h1>fastDepukfb.H</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef FASTDEPUKFB_H_</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define FASTDEPUKFB_H_</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="preprocessor">#include &lt;string.h&gt;</span>
<a name="l00004"></a>00004 <span class="preprocessor">#include &quot;depukfb.H&quot;</span>
<a name="l00005"></a>00005 
<a name="l00006"></a><a class="code" href="classFastDepUKFB.html">00006</a> <span class="keyword">class </span><a class="code" href="classFastDepUKFB.html">FastDepUKFB</a> : <span class="keyword">public</span> <a class="code" href="classDepUKFB.html">DepUKFB</a> {
<a name="l00007"></a>00007 
<a name="l00008"></a>00008   <span class="keywordtype">double</span> n_l[2], d_l[3]; <span class="comment">// Lower filter IIR coeff.</span>
<a name="l00009"></a>00009   <span class="keywordtype">double</span> n_u[2], d_u[3]; <span class="comment">// Upper filter IIR coeff.</span>
<a name="l00010"></a>00010 
<a name="l00011"></a>00011   <span class="keywordtype">void</span> findIIRCoeff(<span class="keywordtype">double</span> fc, <span class="keywordtype">double</span> pl, <span class="keywordtype">double</span> pu){
<a name="l00012"></a>00012     <span class="keywordtype">double</span> c1, c2, c3, c4; <span class="comment">// Numerator coefficients</span>
<a name="l00013"></a>00013     <span class="keywordtype">double</span> d1, d2, d3, d4; <span class="comment">// Denominator coefficients</span>
<a name="l00014"></a>00014 
<a name="l00015"></a>00015     <span class="comment">// Find the lower filter&#39;s IIR coefficients first</span>
<a name="l00016"></a>00016     c1=exp(pl/fc);
<a name="l00017"></a>00017     c2=exp(pl);
<a name="l00018"></a>00018     <span class="comment">//c5=c1*c1;</span>
<a name="l00019"></a>00019     c4=c1*c2;
<a name="l00020"></a>00020     c3=c1*c4;
<a name="l00021"></a>00021     d_l[0]=(c2*fc); <span class="comment">// Do this first so we can divide by it</span>
<a name="l00022"></a>00022     n_l[0]=(fc+fc*pl)/d_l[0]; <span class="comment">// Numerator</span>
<a name="l00023"></a>00023     n_l[1]=(-c1*fc-c1*pl-c1*fc*pl)/d_l[0];
<a name="l00024"></a>00024     d_l[1]=(-2*c4*fc)/d_l[0]; <span class="comment">// Denominator</span>
<a name="l00025"></a>00025     d_l[2]=(c3*fc)/d_l[0];
<a name="l00026"></a>00026     d_l[0]=1.0;
<a name="l00027"></a>00027 
<a name="l00028"></a>00028     <span class="comment">// Find the upper filter&#39;s IIR coefficients</span>
<a name="l00029"></a>00029     d4=exp(pu/fc);
<a name="l00030"></a>00030     d3=d4*d4;
<a name="l00031"></a>00031     d2=exp(pu+pu/fc);
<a name="l00032"></a>00032     d1=d2*d4;
<a name="l00033"></a>00033     
<a name="l00034"></a>00034     d_u[0]=(d3*fc);
<a name="l00035"></a>00035     n_u[0]=(d1*fc-d1*fc*pu)/d_u[0]; <span class="comment">// Numerator</span>
<a name="l00036"></a>00036     n_u[1]=d2*(-fc+pu+pu*fc)/d_u[0];
<a name="l00037"></a>00037     d_u[1]=(-2*d4*fc)/d_u[0]; <span class="comment">// Denominator</span>
<a name="l00038"></a>00038     d_u[2]=(fc)/d_u[0];
<a name="l00039"></a>00039     d_u[0]=1.0;
<a name="l00040"></a>00040   }
<a name="l00041"></a>00041 
<a name="l00042"></a>00042   <span class="keywordtype">void</span> filter(<span class="keywordtype">double</span> fc, <span class="keywordtype">double</span> *out){
<a name="l00043"></a>00043     <span class="comment">//Second order impulse response</span>
<a name="l00044"></a>00044 
<a name="l00045"></a>00045     <span class="comment">// Reset the state vars and the output</span>
<a name="l00046"></a>00046     <span class="keywordtype">double</span> z1=0.0, z2=0.0;
<a name="l00047"></a>00047     bzero(out, (<span class="keywordtype">int</span>)rint(<a class="code" href="classDepUKFB.html#a13cbfe921394b68c53a17878367566a9" title="The sample frequency.">fs</a>/2.0)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
<a name="l00048"></a>00048 
<a name="l00049"></a>00049     <span class="comment">// Upper filter ...</span>
<a name="l00050"></a>00050     <span class="comment">// First excite with a unit input ....</span>
<a name="l00051"></a>00051     out[0] = n_u[0] - d_u[0]*out[0] + z1;
<a name="l00052"></a>00052     z1     = n_u[1] - d_u[1]*out[0] + z2;
<a name="l00053"></a>00053     z2     =        - d_u[2]*out[0];
<a name="l00054"></a>00054 
<a name="l00055"></a>00055     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=1;i&lt;(int)rint(<a class="code" href="classDepUKFB.html#a13cbfe921394b68c53a17878367566a9" title="The sample frequency.">fs</a>/2.0);i++){ <span class="comment">// the input now equals zero</span>
<a name="l00056"></a>00056       out[i] = - d_u[0]*out[i] + z1;
<a name="l00057"></a>00057       z1 =     - d_u[1]*out[i] + z2;
<a name="l00058"></a>00058       z2 =     - d_u[2]*out[i];
<a name="l00059"></a>00059     }
<a name="l00060"></a>00060 
<a name="l00061"></a>00061     <span class="comment">// Reset the state vars and the lower output</span>
<a name="l00062"></a>00062     z1=z2=0.0;
<a name="l00063"></a>00063     bzero(out, (<span class="keywordtype">int</span>)rint(fc)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
<a name="l00064"></a>00064 
<a name="l00065"></a>00065     <span class="comment">// Lower filter ...</span>
<a name="l00066"></a>00066     <span class="comment">// First excite with a unit input ....</span>
<a name="l00067"></a>00067     out[0] = n_l[0] - d_l[0]*out[0] + z1;
<a name="l00068"></a>00068     z1     = n_l[1] - d_l[1]*out[0] + z2;
<a name="l00069"></a>00069     z2     =        - d_l[2]*out[0];
<a name="l00070"></a>00070 
<a name="l00071"></a>00071     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=1;i&lt;(int)rint(fc);i++){ <span class="comment">// the input now equals zero</span>
<a name="l00072"></a>00072       out[i] = - d_l[0]*out[i] + z1;
<a name="l00073"></a>00073       z1 =     - d_l[1]*out[i] + z2;
<a name="l00074"></a>00074       z2 =     - d_l[2]*out[i];
<a name="l00075"></a>00075     }
<a name="l00076"></a>00076   }
<a name="l00077"></a>00077 
<a name="l00078"></a>00078   <span class="keywordtype">void</span> afZ(<span class="keywordtype">double</span> fc, <span class="keywordtype">int</span> whichFilter, <span class="keywordtype">double</span> pl, <span class="keywordtype">double</span> pu){
<a name="l00079"></a>00079     <span class="keywordtype">double</span> *filt=<a class="code" href="classDepUKFB.html#adefe805565fa01861468b5a51ca87a89" title="The filters.">w</a>[whichFilter];
<a name="l00080"></a>00080     findIIRCoeff(fc, pl, pu); <span class="comment">// Find the IIR coefficients to filter with</span>
<a name="l00081"></a>00081     filter(fc, filt); <span class="comment">// Find the lower filter shape</span>
<a name="l00082"></a>00082   }
<a name="l00083"></a>00083 
<a name="l00085"></a>00085   <span class="keyword">virtual</span> <span class="keywordtype">void</span> af(<span class="keywordtype">double</span> fc, <span class="keywordtype">int</span> whichFilter){
<a name="l00086"></a>00086     cout&lt;&lt;<span class="stringliteral">&quot;FastDepUKFB::af&quot;</span>&lt;&lt;endl;
<a name="l00087"></a>00087 
<a name="l00088"></a>00088     <span class="comment">// Produce the filter</span>
<a name="l00089"></a>00089     afZ(fc, whichFilter, <a class="code" href="classDepUKFB.html#add2cdb1268800eade95915f209e09166">p_l</a>(fc), <a class="code" href="classDepUKFB.html#ac9c9ed1ccc3a941359ff1d5d8c243c65">p_u</a>(fc));
<a name="l00090"></a>00090   }
<a name="l00091"></a>00091 
<a name="l00092"></a>00092 <span class="keyword">public</span>:
<a name="l00093"></a>00093   <a class="code" href="classFastDepUKFB.html">FastDepUKFB</a>(<span class="keywordtype">int</span> sampleFreq, <span class="keywordtype">int</span> fCnt=50) {
<a name="l00094"></a>00094     <a class="code" href="classDepUKFB.html#ae39f616845a715311d9c2666bb5b086c">init</a>(sampleFreq, fCnt);
<a name="l00095"></a>00095   }
<a name="l00096"></a>00096 };
<a name="l00097"></a>00097 
<a name="l00098"></a>00098 <span class="preprocessor">#endif //FASTDEPUKFB_H_</span>
</pre></div></div>
<!--- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&nbsp;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&nbsp;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&nbsp;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&nbsp;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&nbsp;</span>Variables</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<hr class="footer"/><address style="text-align: right;"><small>Generated on Sat Jun 19 15:23:29 2010 for libaudiomask by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.3 </small></address>
</body>
</html>