<!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>GNU Radio 3.2.2 C++ API: gri_iir< i_type, o_type, tap_type > Class Template Reference</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="doxygen.css" rel="stylesheet" type="text/css"/> </head> <body> <!-- Generated by Doxygen 1.6.2 --> <div class="contents"> <h1>gri_iir< i_type, o_type, tap_type > Class Template Reference</h1><!-- doxytag: class="gri_iir" --> <p>base class template for Infinite Impulse Response filter (IIR) <a href="#_details">More...</a></p> <p><code>#include <<a class="el" href="gri__iir_8h_source.html">gri_iir.h</a>></code></p> <p><a href="classgri__iir-members.html">List of all members.</a></p> <table border="0" cellpadding="0" cellspacing="0"> <tr><td colspan="2"><h2>Public Member Functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classgri__iir.html#a79ac3f84ffeb3c6190b249a639b0f2ca">gri_iir</a> (const <a class="el" href="classstd_1_1vector.html">std::vector</a>< tap_type > &fftaps, const <a class="el" href="classstd_1_1vector.html">std::vector</a>< tap_type > &fbtaps) throw (std::invalid_argument)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Construct an IIR with the given taps. <a href="#a79ac3f84ffeb3c6190b249a639b0f2ca"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classgri__iir.html#a9e7ea537a27b610aa96ba407be82831d">gri_iir</a> ()</td></tr> <tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classgri__iir.html#a50545f86e1ab90ef36893d3a2b81fb2f">~gri_iir</a> ()</td></tr> <tr><td class="memItemLeft" align="right" valign="top">o_type </td><td class="memItemRight" valign="bottom"><a class="el" href="classgri__iir.html#adb60d3d25c5fce9278d8f2cd5e3c74cb">filter</a> (const i_type input)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">compute a single output value. <a href="#adb60d3d25c5fce9278d8f2cd5e3c74cb"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgri__iir.html#aef452a0ffbc9d9040b08d58d0bbe0589">filter_n</a> (o_type output[], const i_type input[], long n)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">compute an array of N output values. <code>input</code> must have N valid entries. <a href="#aef452a0ffbc9d9040b08d58d0bbe0589"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="classgri__iir.html#a82e9ff44853cc878f317b5405e786038">ntaps_ff</a> () const </td></tr> <tr><td class="memItemLeft" align="right" valign="top">unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="classgri__iir.html#afe39444b015e40596401bc98c613264b">ntaps_fb</a> () const </td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgri__iir.html#abbc8febf2bccd566121688c66b0b0326">set_taps</a> (const <a class="el" href="classstd_1_1vector.html">std::vector</a>< tap_type > &fftaps, const <a class="el" href="classstd_1_1vector.html">std::vector</a>< tap_type > &fbtaps) throw (std::invalid_argument)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">install new taps. <a href="#abbc8febf2bccd566121688c66b0b0326"></a><br/></td></tr> <tr><td colspan="2"><h2>Protected Attributes</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classstd_1_1vector.html">std::vector</a>< tap_type > </td><td class="memItemRight" valign="bottom"><a class="el" href="classgri__iir.html#aadd595c780fc6b2ee50c7c8b3eb5eea3">d_fftaps</a></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classstd_1_1vector.html">std::vector</a>< tap_type > </td><td class="memItemRight" valign="bottom"><a class="el" href="classgri__iir.html#ae270ca4360515fbd80cf9ad513b96f24">d_fbtaps</a></td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classgri__iir.html#af7e5eba6e33011c68e168a1b75ed2baa">d_latest_n</a></td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classgri__iir.html#a325cbd21166ec28dc27ca0feccef7b38">d_latest_m</a></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classstd_1_1vector.html">std::vector</a>< tap_type > </td><td class="memItemRight" valign="bottom"><a class="el" href="classgri__iir.html#a566a5d039cf32bb27a750b123e8dae7a">d_prev_output</a></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classstd_1_1vector.html">std::vector</a>< i_type > </td><td class="memItemRight" valign="bottom"><a class="el" href="classgri__iir.html#aac5a985051761be98d5753f5a1542003">d_prev_input</a></td></tr> </table> <hr/><a name="_details"></a><h2>Detailed Description</h2> <h3>template<class i_type, class o_type, class tap_type><br/> class gri_iir< i_type, o_type, tap_type ></h3> <p>base class template for Infinite Impulse Response filter (IIR) </p> <hr/><h2>Constructor & Destructor Documentation</h2> <a class="anchor" id="a79ac3f84ffeb3c6190b249a639b0f2ca"></a><!-- doxytag: member="gri_iir::gri_iir" ref="a79ac3f84ffeb3c6190b249a639b0f2ca" args="(const std::vector< tap_type > &fftaps, const std::vector< tap_type > &fbtaps)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class i_type, class o_type, class tap_type> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classgri__iir.html">gri_iir</a>< i_type, o_type, tap_type >::<a class="el" href="classgri__iir.html">gri_iir</a> </td> <td>(</td> <td class="paramtype">const <a class="el" href="classstd_1_1vector.html">std::vector</a>< tap_type > & </td> <td class="paramname"> <em>fftaps</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="classstd_1_1vector.html">std::vector</a>< tap_type > & </td> <td class="paramname"> <em>fbtaps</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td> throw (std::invalid_argument)<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Construct an IIR with the given taps. </p> <p>This filter uses the Direct Form I implementation, where <code>fftaps</code> contains the feed-forward taps, and <code>fbtaps</code> the feedback ones.</p> <p><code>fftaps</code> and <code>fbtaps</code> must have equal numbers of taps</p> <p>The input and output satisfy a difference equation of the form</p> <p class="formulaDsp"> <img class="formulaDsp" alt="\[ y[n] - \sum_{k=1}^{M} a_k y[n-k] = \sum_{k=0}^{N} b_k x[n-k] \]" src="form_0.png"/> </p> <p>with the corresponding rational system function</p> <p class="formulaDsp"> <img class="formulaDsp" alt="\[ H(z) = \frac{\sum_{k=0}^{N} b_k z^{-k}}{1 - \sum_{k=1}^{M} a_k z^{-k}} \]" src="form_4.png"/> </p> <p>Note that some texts define the system function with a + in the denominator. If you're using that convention, you'll need to negate the feedback taps. </p> </div> </div> <a class="anchor" id="a9e7ea537a27b610aa96ba407be82831d"></a><!-- doxytag: member="gri_iir::gri_iir" ref="a9e7ea537a27b610aa96ba407be82831d" args="()" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class i_type, class o_type, class tap_type> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classgri__iir.html">gri_iir</a>< i_type, o_type, tap_type >::<a class="el" href="classgri__iir.html">gri_iir</a> </td> <td>(</td> <td class="paramname"></td> <td> ) </td> <td><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> </div> </div> <a class="anchor" id="a50545f86e1ab90ef36893d3a2b81fb2f"></a><!-- doxytag: member="gri_iir::~gri_iir" ref="a50545f86e1ab90ef36893d3a2b81fb2f" args="()" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class i_type, class o_type, class tap_type> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classgri__iir.html">gri_iir</a>< i_type, o_type, tap_type >::~<a class="el" href="classgri__iir.html">gri_iir</a> </td> <td>(</td> <td class="paramname"></td> <td> ) </td> <td><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> </div> </div> <hr/><h2>Member Function Documentation</h2> <a class="anchor" id="adb60d3d25c5fce9278d8f2cd5e3c74cb"></a><!-- doxytag: member="gri_iir::filter" ref="adb60d3d25c5fce9278d8f2cd5e3c74cb" args="(const i_type input)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class i_type, class o_type , class tap_type > </div> <table class="memname"> <tr> <td class="memname">o_type <a class="el" href="classgri__iir.html">gri_iir</a>< i_type, o_type, tap_type >::filter </td> <td>(</td> <td class="paramtype">const i_type </td> <td class="paramname"> <em>input</em></td> <td> ) </td> <td><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>compute a single output value. </p> <dl class="return"><dt><b>Returns:</b></dt><dd>the filtered input value. </dd></dl> <p>References <a class="el" href="gri__iir_8h_source.html#l00114">gri_iir< i_type, o_type, tap_type >::d_fbtaps</a>, <a class="el" href="gri__iir_8h_source.html#l00113">gri_iir< i_type, o_type, tap_type >::d_fftaps</a>, <a class="el" href="gri__iir_8h_source.html#l00116">gri_iir< i_type, o_type, tap_type >::d_latest_m</a>, <a class="el" href="gri__iir_8h_source.html#l00115">gri_iir< i_type, o_type, tap_type >::d_latest_n</a>, <a class="el" href="gri__iir_8h_source.html#l00118">gri_iir< i_type, o_type, tap_type >::d_prev_input</a>, <a class="el" href="gri__iir_8h_source.html#l00117">gri_iir< i_type, o_type, tap_type >::d_prev_output</a>, <a class="el" href="gri__iir_8h_source.html#l00084">gri_iir< i_type, o_type, tap_type >::ntaps_fb()</a>, and <a class="el" href="gri__iir_8h_source.html#l00083">gri_iir< i_type, o_type, tap_type >::ntaps_ff()</a>.</p> <p>Referenced by <a class="el" href="gri__iir_8h_source.html#l00167">gri_iir< i_type, o_type, tap_type >::filter_n()</a>.</p> </div> </div> <a class="anchor" id="aef452a0ffbc9d9040b08d58d0bbe0589"></a><!-- doxytag: member="gri_iir::filter_n" ref="aef452a0ffbc9d9040b08d58d0bbe0589" args="(o_type output[], const i_type input[], long n)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class i_type, class o_type, class tap_type > </div> <table class="memname"> <tr> <td class="memname">void <a class="el" href="classgri__iir.html">gri_iir</a>< i_type, o_type, tap_type >::filter_n </td> <td>(</td> <td class="paramtype">o_type </td> <td class="paramname"> <em>output</em>[], </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const i_type </td> <td class="paramname"> <em>input</em>[], </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">long </td> <td class="paramname"> <em>n</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>compute an array of N output values. <code>input</code> must have N valid entries. </p> <p>References <a class="el" href="gri__iir_8h_source.html#l00127">gri_iir< i_type, o_type, tap_type >::filter()</a>.</p> </div> </div> <a class="anchor" id="afe39444b015e40596401bc98c613264b"></a><!-- doxytag: member="gri_iir::ntaps_fb" ref="afe39444b015e40596401bc98c613264b" args="() const " --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class i_type, class o_type, class tap_type> </div> <table class="memname"> <tr> <td class="memname">unsigned <a class="el" href="classgri__iir.html">gri_iir</a>< i_type, o_type, tap_type >::ntaps_fb </td> <td>(</td> <td class="paramname"></td> <td> ) </td> <td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Referenced by <a class="el" href="gri__iir_8h_source.html#l00127">gri_iir< i_type, o_type, tap_type >::filter()</a>.</p> </div> </div> <a class="anchor" id="a82e9ff44853cc878f317b5405e786038"></a><!-- doxytag: member="gri_iir::ntaps_ff" ref="a82e9ff44853cc878f317b5405e786038" args="() const " --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class i_type, class o_type, class tap_type> </div> <table class="memname"> <tr> <td class="memname">unsigned <a class="el" href="classgri__iir.html">gri_iir</a>< i_type, o_type, tap_type >::ntaps_ff </td> <td>(</td> <td class="paramname"></td> <td> ) </td> <td> const<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <dl class="return"><dt><b>Returns:</b></dt><dd>number of taps in filter. </dd></dl> <p>Referenced by <a class="el" href="gri__iir_8h_source.html#l00127">gri_iir< i_type, o_type, tap_type >::filter()</a>.</p> </div> </div> <a class="anchor" id="abbc8febf2bccd566121688c66b0b0326"></a><!-- doxytag: member="gri_iir::set_taps" ref="abbc8febf2bccd566121688c66b0b0326" args="(const std::vector< tap_type > &fftaps, const std::vector< tap_type > &fbtaps)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class i_type, class o_type, class tap_type> </div> <table class="memname"> <tr> <td class="memname">void <a class="el" href="classgri__iir.html">gri_iir</a>< i_type, o_type, tap_type >::set_taps </td> <td>(</td> <td class="paramtype">const <a class="el" href="classstd_1_1vector.html">std::vector</a>< tap_type > & </td> <td class="paramname"> <em>fftaps</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="classstd_1_1vector.html">std::vector</a>< tap_type > & </td> <td class="paramname"> <em>fbtaps</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td> throw (std::invalid_argument)<code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p>install new taps. </p> <p>Referenced by <a class="el" href="gri__iir_8h_source.html#l00058">gri_iir< float, float, double >::gri_iir()</a>.</p> </div> </div> <hr/><h2>Member Data Documentation</h2> <a class="anchor" id="ae270ca4360515fbd80cf9ad513b96f24"></a><!-- doxytag: member="gri_iir::d_fbtaps" ref="ae270ca4360515fbd80cf9ad513b96f24" args="" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class i_type, class o_type, class tap_type> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classstd_1_1vector.html">std::vector</a><tap_type> <a class="el" href="classgri__iir.html">gri_iir</a>< i_type, o_type, tap_type >::<a class="el" href="classgri__iir.html#ae270ca4360515fbd80cf9ad513b96f24">d_fbtaps</a><code> [protected]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Referenced by <a class="el" href="gri__iir_8h_source.html#l00127">gri_iir< i_type, o_type, tap_type >::filter()</a>, <a class="el" href="gri__iir_8h_source.html#l00084">gri_iir< float, float, double >::ntaps_fb()</a>, and <a class="el" href="gri__iir_8h_source.html#l00089">gri_iir< float, float, double >::set_taps()</a>.</p> </div> </div> <a class="anchor" id="aadd595c780fc6b2ee50c7c8b3eb5eea3"></a><!-- doxytag: member="gri_iir::d_fftaps" ref="aadd595c780fc6b2ee50c7c8b3eb5eea3" args="" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class i_type, class o_type, class tap_type> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classstd_1_1vector.html">std::vector</a><tap_type> <a class="el" href="classgri__iir.html">gri_iir</a>< i_type, o_type, tap_type >::<a class="el" href="classgri__iir.html#aadd595c780fc6b2ee50c7c8b3eb5eea3">d_fftaps</a><code> [protected]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Referenced by <a class="el" href="gri__iir_8h_source.html#l00127">gri_iir< i_type, o_type, tap_type >::filter()</a>, <a class="el" href="gri__iir_8h_source.html#l00083">gri_iir< float, float, double >::ntaps_ff()</a>, and <a class="el" href="gri__iir_8h_source.html#l00089">gri_iir< float, float, double >::set_taps()</a>.</p> </div> </div> <a class="anchor" id="a325cbd21166ec28dc27ca0feccef7b38"></a><!-- doxytag: member="gri_iir::d_latest_m" ref="a325cbd21166ec28dc27ca0feccef7b38" args="" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class i_type, class o_type, class tap_type> </div> <table class="memname"> <tr> <td class="memname">int <a class="el" href="classgri__iir.html">gri_iir</a>< i_type, o_type, tap_type >::<a class="el" href="classgri__iir.html#a325cbd21166ec28dc27ca0feccef7b38">d_latest_m</a><code> [protected]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Referenced by <a class="el" href="gri__iir_8h_source.html#l00127">gri_iir< i_type, o_type, tap_type >::filter()</a>, and <a class="el" href="gri__iir_8h_source.html#l00089">gri_iir< float, float, double >::set_taps()</a>.</p> </div> </div> <a class="anchor" id="af7e5eba6e33011c68e168a1b75ed2baa"></a><!-- doxytag: member="gri_iir::d_latest_n" ref="af7e5eba6e33011c68e168a1b75ed2baa" args="" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class i_type, class o_type, class tap_type> </div> <table class="memname"> <tr> <td class="memname">int <a class="el" href="classgri__iir.html">gri_iir</a>< i_type, o_type, tap_type >::<a class="el" href="classgri__iir.html#af7e5eba6e33011c68e168a1b75ed2baa">d_latest_n</a><code> [protected]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Referenced by <a class="el" href="gri__iir_8h_source.html#l00127">gri_iir< i_type, o_type, tap_type >::filter()</a>, and <a class="el" href="gri__iir_8h_source.html#l00089">gri_iir< float, float, double >::set_taps()</a>.</p> </div> </div> <a class="anchor" id="aac5a985051761be98d5753f5a1542003"></a><!-- doxytag: member="gri_iir::d_prev_input" ref="aac5a985051761be98d5753f5a1542003" args="" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class i_type, class o_type, class tap_type> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classstd_1_1vector.html">std::vector</a><i_type> <a class="el" href="classgri__iir.html">gri_iir</a>< i_type, o_type, tap_type >::<a class="el" href="classgri__iir.html#aac5a985051761be98d5753f5a1542003">d_prev_input</a><code> [protected]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Referenced by <a class="el" href="gri__iir_8h_source.html#l00127">gri_iir< i_type, o_type, tap_type >::filter()</a>, and <a class="el" href="gri__iir_8h_source.html#l00089">gri_iir< float, float, double >::set_taps()</a>.</p> </div> </div> <a class="anchor" id="a566a5d039cf32bb27a750b123e8dae7a"></a><!-- doxytag: member="gri_iir::d_prev_output" ref="a566a5d039cf32bb27a750b123e8dae7a" args="" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class i_type, class o_type, class tap_type> </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classstd_1_1vector.html">std::vector</a><tap_type> <a class="el" href="classgri__iir.html">gri_iir</a>< i_type, o_type, tap_type >::<a class="el" href="classgri__iir.html#a566a5d039cf32bb27a750b123e8dae7a">d_prev_output</a><code> [protected]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Referenced by <a class="el" href="gri__iir_8h_source.html#l00127">gri_iir< i_type, o_type, tap_type >::filter()</a>, and <a class="el" href="gri__iir_8h_source.html#l00089">gri_iir< float, float, double >::set_taps()</a>.</p> </div> </div> <hr/>The documentation for this class was generated from the following file:<ul> <li><a class="el" href="gri__iir_8h_source.html">gri_iir.h</a></li> </ul> </div> <hr size="1"/><address style="text-align: right;"><small>Generated by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.2 </small></address> </body> </html>