| 12
 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 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 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 <string.h></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "depukfb.H"</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'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'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<(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<(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<<<span class="stringliteral">"FastDepUKFB::af"</span><<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"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </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 
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.3 </small></address>
</body>
</html>
 |