Sophie

Sophie

distrib > Mandriva > 2010.2 > i586 > by-pkgid > def0228095a1541e2d3632b6b6da7c38 > files > 1729

gnuradio-doc-3.3.0-8mdv2010.1.i586.rpm

<!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.3.0 C++ API: gr_fll_band_edge_cc Class 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.3 -->
<div class="contents">
<h1>gr_fll_band_edge_cc Class Reference</h1><!-- doxytag: class="gr_fll_band_edge_cc" --><!-- doxytag: inherits="gr_sync_block" -->
<p>Frequency Lock Loop using band-edge filters.  
<a href="#_details">More...</a></p>

<p><code>#include &lt;<a class="el" href="gr__fll__band__edge__cc_8h_source.html">gr_fll_band_edge_cc.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for gr_fll_band_edge_cc:</div>
<div class="dynsection">
<div class="center"><img src="classgr__fll__band__edge__cc__inherit__graph.png" border="0" usemap="#gr__fll__band__edge__cc_inherit__map" alt="Inheritance graph"/></div>
<map name="gr__fll__band__edge__cc_inherit__map" id="gr__fll__band__edge__cc_inherit__map">
<area shape="rect" id="node2" href="classgr__sync__block.html" title="synchronous 1:1 input to output with historyOverride work to provide the signal processing..." alt="" coords="23,315,129,344"/><area shape="rect" id="node4" href="classgr__block.html" title="The abstract base class for all &#39;terminal&#39; processing blocks.A signal processing..." alt="" coords="41,237,111,267"/><area shape="rect" id="node6" href="classgr__basic__block.html" title="The abstract base class for all signal processing blocks.Basic blocks are the bare..." alt="" coords="21,160,131,189"/><area shape="rect" id="node8" href="classgr__msg__accepter.html" title="Accepts messages and inserts them into a message queue, then notifies subclass gr_basic_block..." alt="" coords="15,83,137,112"/><area shape="rect" id="node10" href="classgruel_1_1msg__accepter.html" title="Virtual base class that accepts messages." alt="" coords="7,5,145,35"/></map>
<center><span class="legend">[<a target="top" href="graph_legend.html">legend</a>]</span></center></div>

<p><a href="classgr__fll__band__edge__cc-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">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgr__fll__band__edge__cc.html#a0ee6ad05307c6a5e373d950c0ceb2f4d">~gr_fll_band_edge_cc</a> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgr__fll__band__edge__cc.html#a7c2e8ce6b5bf3df42638a25a21ba7d50">design_filter</a> (float samps_per_sym, float rolloff, int filter_size)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgr__fll__band__edge__cc.html#a68924abf51cc8a89c8b1bb607393bad2">set_alpha</a> (float alpha)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgr__fll__band__edge__cc.html#ad72c8be97b8ab0ecdfdd85c9f173ee3d">set_beta</a> (float beta)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgr__fll__band__edge__cc.html#ae6a5e618ea0e85bb3ea15375a24195b7">print_taps</a> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgr__fll__band__edge__cc.html#ac7757cfebce35e4ff869d0636875760f">work</a> (int noutput_items, <a class="el" href="classstd_1_1vector.html">gr_vector_const_void_star</a> &amp;input_items, <a class="el" href="classstd_1_1vector.html">gr_vector_void_star</a> &amp;output_items)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">just like <a class="el" href="classgr__block.html#a137b93d87dc83bbdb6369d33f4ea8197" title="compute output items from input items">gr_block::general_work</a>, only this arranges to call consume_each for you  <a href="#ac7757cfebce35e4ff869d0636875760f"></a><br/></td></tr>
<tr><td colspan="2"><h2>Friends</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classboost_1_1shared__ptr.html">gr_fll_band_edge_cc_sptr</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgr__fll__band__edge__cc.html#a08ba6b1f1e708e854d1bfd4533819bd9">gr_make_fll_band_edge_cc</a> (float samps_per_sym, float rolloff, int filter_size, float alpha, float beta)</td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>Frequency Lock Loop using band-edge filters. </p>
<p>The frequency lock loop derives a band-edge filter that covers the upper and lower bandwidths of a digitally-modulated signal. The bandwidth range is determined by the excess bandwidth (e.g., rolloff factor) of the modulated signal. The placement in frequency of the band-edges is determined by the oversampling ratio (number of samples per symbol) and the excess bandwidth. The size of the filters should be fairly large so as to average over a number of symbols.</p>
<p>The FLL works by filtering the upper and lower band edges into x_u(t) and x_l(t), respectively. These are combined to form cc(t) = x_u(t) + x_l(t) and ss(t) = x_u(t) - x_l(t). Combining these to form the signal e(t) = Re{cc(t) \times ss(t)^*} (where ^* is the complex conjugate) provides an error signal at the DC term that is directly proportional to the carrier frequency. We then make a second-order loop using the error signal that is the running average of e(t).</p>
<p>In theory, the band-edge filter is the derivative of the matched filter in frequency, (H_be(f) = \frac{H(f)}{df}. In practice, this comes down to a quarter sine wave at the point of the matched filter's rolloff (if it's a raised-cosine, the derivative of a cosine is a sine). Extend this sine by another quarter wave to make a half wave around the band-edges is equivalent in time to the sum of two sinc functions. The baseband filter fot the band edges is therefore derived from this sum of sincs. The band edge filters are then just the baseband signal modulated to the correct place in frequency. All of these calculations are done in the 'design_filter' function.</p>
<p>Note: We use FIR filters here because the filters have to have a flat phase response over the entire frequency range to allow their comparisons to be valid. </p>
<hr/><h2>Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="a0ee6ad05307c6a5e373d950c0ceb2f4d"></a><!-- doxytag: member="gr_fll_band_edge_cc::~gr_fll_band_edge_cc" ref="a0ee6ad05307c6a5e373d950c0ceb2f4d" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gr_fll_band_edge_cc::~gr_fll_band_edge_cc </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<hr/><h2>Member Function Documentation</h2>
<a class="anchor" id="a7c2e8ce6b5bf3df42638a25a21ba7d50"></a><!-- doxytag: member="gr_fll_band_edge_cc::design_filter" ref="a7c2e8ce6b5bf3df42638a25a21ba7d50" args="(float samps_per_sym, float rolloff, int filter_size)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void gr_fll_band_edge_cc::design_filter </td>
          <td>(</td>
          <td class="paramtype">float&nbsp;</td>
          <td class="paramname"> <em>samps_per_sym</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&nbsp;</td>
          <td class="paramname"> <em>rolloff</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>filter_size</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Design the band-edge filter based on the number of samples per symbol, filter rolloff factor, and the filter size </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>samps_per_sym</em>&nbsp;</td><td>(float) Number of samples per symbol of signal </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rolloff</em>&nbsp;</td><td>(float) Rolloff factor of signal </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>filter_size</em>&nbsp;</td><td>(int) Size (in taps) of the filter </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ae6a5e618ea0e85bb3ea15375a24195b7"></a><!-- doxytag: member="gr_fll_band_edge_cc::print_taps" ref="ae6a5e618ea0e85bb3ea15375a24195b7" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void gr_fll_band_edge_cc::print_taps </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Print the taps to screen. </p>

</div>
</div>
<a class="anchor" id="a68924abf51cc8a89c8b1bb607393bad2"></a><!-- doxytag: member="gr_fll_band_edge_cc::set_alpha" ref="a68924abf51cc8a89c8b1bb607393bad2" args="(float alpha)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void gr_fll_band_edge_cc::set_alpha </td>
          <td>(</td>
          <td class="paramtype">float&nbsp;</td>
          <td class="paramname"> <em>alpha</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set the alpha gainvalue </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>alpha</em>&nbsp;</td><td>(float) new gain value </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ad72c8be97b8ab0ecdfdd85c9f173ee3d"></a><!-- doxytag: member="gr_fll_band_edge_cc::set_beta" ref="ad72c8be97b8ab0ecdfdd85c9f173ee3d" args="(float beta)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void gr_fll_band_edge_cc::set_beta </td>
          <td>(</td>
          <td class="paramtype">float&nbsp;</td>
          <td class="paramname"> <em>beta</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set the beta gain value </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>beta</em>&nbsp;</td><td>(float) new gain value </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ac7757cfebce35e4ff869d0636875760f"></a><!-- doxytag: member="gr_fll_band_edge_cc::work" ref="ac7757cfebce35e4ff869d0636875760f" args="(int noutput_items, gr_vector_const_void_star &amp;input_items, gr_vector_void_star &amp;output_items)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int gr_fll_band_edge_cc::work </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>noutput_items</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classstd_1_1vector.html">gr_vector_const_void_star</a> &amp;&nbsp;</td>
          <td class="paramname"> <em>input_items</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classstd_1_1vector.html">gr_vector_void_star</a> &amp;&nbsp;</td>
          <td class="paramname"> <em>output_items</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [virtual]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>just like <a class="el" href="classgr__block.html#a137b93d87dc83bbdb6369d33f4ea8197" title="compute output items from input items">gr_block::general_work</a>, only this arranges to call consume_each for you </p>
<p>The user must override work to define the signal processing code </p>

<p>Implements <a class="el" href="classgr__sync__block.html#a0c523f4285a6eb690f677ee6295ab117">gr_sync_block</a>.</p>

</div>
</div>
<hr/><h2>Friends And Related Function Documentation</h2>
<a class="anchor" id="a08ba6b1f1e708e854d1bfd4533819bd9"></a><!-- doxytag: member="gr_fll_band_edge_cc::gr_make_fll_band_edge_cc" ref="a08ba6b1f1e708e854d1bfd4533819bd9" args="(float samps_per_sym, float rolloff, int filter_size, float alpha, float beta)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classboost_1_1shared__ptr.html">gr_fll_band_edge_cc_sptr</a> gr_make_fll_band_edge_cc </td>
          <td>(</td>
          <td class="paramtype">float&nbsp;</td>
          <td class="paramname"> <em>samps_per_sym</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&nbsp;</td>
          <td class="paramname"> <em>rolloff</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>filter_size</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&nbsp;</td>
          <td class="paramname"> <em>alpha</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&nbsp;</td>
          <td class="paramname"> <em>beta</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [friend]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Build the FLL </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>samps_per_sym</em>&nbsp;</td><td>(float) Number of samples per symbol of signal </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rolloff</em>&nbsp;</td><td>(float) Rolloff factor of signal </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>filter_size</em>&nbsp;</td><td>(int) Size (in taps) of the filter </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>alpha</em>&nbsp;</td><td>(float) Loop gain 1 </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>beta</em>&nbsp;</td><td>(float) Loop gain 2 </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="gr__fll__band__edge__cc_8h_source.html">gr_fll_band_edge_cc.h</a></li>
</ul>
</div>
<hr class="footer"/><address style="text-align: right;"><small>Generated on Wed Dec 29 19:52:45 2010 for GNU Radio 3.3.0 C++ API 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>