Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > 6e7a2755bd78c9deedab199b86e675f3 > files > 4658

gnuradio-doc-3.2.2-9.fc14.x86_64.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.2.2 C++ API: gr_mpsk_receiver_cc.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.3 -->
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">GNU Radio 3.2.2 C++ API</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('gr__mpsk__receiver__cc_8h.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<h1>gr_mpsk_receiver_cc.h</h1>  </div>
</div>
<div class="contents">
<a href="gr__mpsk__receiver__cc_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* -*- c++ -*- */</span>
<a name="l00002"></a>00002 <span class="comment">/*</span>
<a name="l00003"></a>00003 <span class="comment"> * Copyright 2004,2007 Free Software Foundation, Inc.</span>
<a name="l00004"></a>00004 <span class="comment"> *</span>
<a name="l00005"></a>00005 <span class="comment"> * This file is part of GNU Radio</span>
<a name="l00006"></a>00006 <span class="comment"> *</span>
<a name="l00007"></a>00007 <span class="comment"> * GNU Radio is free software; you can redistribute it and/or modify</span>
<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 3, or (at your option)</span>
<a name="l00010"></a>00010 <span class="comment"> * any later version.</span>
<a name="l00011"></a>00011 <span class="comment"> *</span>
<a name="l00012"></a>00012 <span class="comment"> * GNU Radio is distributed in the hope that it will be useful,</span>
<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
<a name="l00016"></a>00016 <span class="comment"> *</span>
<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
<a name="l00018"></a>00018 <span class="comment"> * along with GNU Radio; see the file COPYING.  If not, write to</span>
<a name="l00019"></a>00019 <span class="comment"> * the Free Software Foundation, Inc., 51 Franklin Street,</span>
<a name="l00020"></a>00020 <span class="comment"> * Boston, MA 02110-1301, USA.</span>
<a name="l00021"></a>00021 <span class="comment"> */</span>
<a name="l00022"></a>00022 
<a name="l00023"></a>00023 <span class="preprocessor">#ifndef INCLUDED_GR_MPSK_RECEIVER_CC_H</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define INCLUDED_GR_MPSK_RECEIVER_CC_H</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span>
<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;gr_block.h&gt;</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include &lt;gr_complex.h&gt;</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;fstream&gt;</span>
<a name="l00029"></a>00029 
<a name="l00030"></a>00030 <span class="keyword">class </span><a class="code" href="classgri__mmse__fir__interpolator__cc.html" title="Compute intermediate samples between signal samples x(k*Ts)This implements a Mininum Mean Squared Err...">gri_mmse_fir_interpolator_cc</a>;
<a name="l00031"></a>00031 
<a name="l00032"></a>00032 <span class="keyword">class </span><a class="code" href="classgr__mpsk__receiver__cc.html" title="This block takes care of receiving M-PSK modulated signals through phase, frequency, and symbol synchronization.This block takes care of receiving M-PSK modulated signals through phase, frequency, and symbol synchronization. It performs carrier frequency and phase locking as well as symbol timing recovery. It works with (D)BPSK, (D)QPSK, and (D)8PSK as tested currently. It should also work for OQPSK and PI/4 DQPSK.">gr_mpsk_receiver_cc</a>;
<a name="l00033"></a>00033 <span class="keyword">typedef</span> <a class="code" href="classboost_1_1shared__ptr.html" title="shared_ptr documentation stub">boost::shared_ptr&lt;gr_mpsk_receiver_cc&gt;</a> <a class="code" href="classboost_1_1shared__ptr.html" title="shared_ptr documentation stub">gr_mpsk_receiver_cc_sptr</a>;
<a name="l00034"></a>00034 
<a name="l00035"></a>00035 <span class="comment">// public constructor</span>
<a name="l00036"></a>00036 <a class="code" href="classboost_1_1shared__ptr.html" title="shared_ptr documentation stub">gr_mpsk_receiver_cc_sptr</a> 
<a name="l00037"></a>00037 <a class="code" href="gr__mpsk__receiver__cc_8h.html#a302053914cb025ad3fe4eb65b9f30bf2">gr_make_mpsk_receiver_cc</a> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> M, <span class="keywordtype">float</span> theta, 
<a name="l00038"></a>00038                           <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a193dbf8c468eb40b901ea15d17f23837" title="(CL) Returns the value for alpha (the phase gain term)">alpha</a>, <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a2854f1584948a1ae9985c6466dc042bc" title="(CL) Returns the value of beta (the frequency gain term)">beta</a>,
<a name="l00039"></a>00039                           <span class="keywordtype">float</span> fmin, <span class="keywordtype">float</span> fmax,
<a name="l00040"></a>00040                           <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a5a8d656fed27db70a3b90bf8e5739c58" title="(M&amp;amp;M) Returns current value of mu">mu</a>, <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#ab35c94b9fa4206794dede51d2174f26f" title="(M&amp;amp;M) Returns mu gain factor">gain_mu</a>, 
<a name="l00041"></a>00041                           <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a871efa619b3de0882272c5c8def64250" title="(M&amp;amp;M) Returns current value of omega">omega</a>, <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a3bf2b3d7f8aa2f03b908ec1dd361ecb8" title="(M&amp;amp;M) Returns omega gain factor">gain_omega</a>, <span class="keywordtype">float</span> omega_rel);
<a name="l00042"></a>00042 <span class="comment"></span>
<a name="l00043"></a>00043 <span class="comment">/*!</span>
<a name="l00044"></a>00044 <span class="comment"> * \brief This block takes care of receiving M-PSK modulated signals through phase, frequency, and symbol</span>
<a name="l00045"></a>00045 <span class="comment"> * synchronization. </span>
<a name="l00046"></a>00046 <span class="comment"> * \ingroup sync_blk</span>
<a name="l00047"></a>00047 <span class="comment"> * \ingroup demod_blk</span>
<a name="l00048"></a>00048 <span class="comment"> *</span>
<a name="l00049"></a>00049 <span class="comment"> * This block takes care of receiving M-PSK modulated signals through phase, frequency, and symbol</span>
<a name="l00050"></a>00050 <span class="comment"> * synchronization. It performs carrier frequency and phase locking as well as symbol timing recovery. </span>
<a name="l00051"></a>00051 <span class="comment"> * It works with (D)BPSK, (D)QPSK, and (D)8PSK as tested currently. It should also work for OQPSK and </span>
<a name="l00052"></a>00052 <span class="comment"> * PI/4 DQPSK.</span>
<a name="l00053"></a>00053 <span class="comment"> *</span>
<a name="l00054"></a>00054 <span class="comment"> * The phase and frequency synchronization are based on a Costas loop that finds the error of the incoming</span>
<a name="l00055"></a>00055 <span class="comment"> * signal point compared to its nearest constellation point. The frequency and phase of the NCO are </span>
<a name="l00056"></a>00056 <span class="comment"> * updated according to this error. There are optimized phase error detectors for BPSK and QPSK, but 8PSK</span>
<a name="l00057"></a>00057 <span class="comment"> * is done using a brute-force computation of the constellation points to find the minimum.</span>
<a name="l00058"></a>00058 <span class="comment"> *</span>
<a name="l00059"></a>00059 <span class="comment"> * The symbol synchronization is done using a modified Mueller and Muller circuit from the paper:</span>
<a name="l00060"></a>00060 <span class="comment"> * </span>
<a name="l00061"></a>00061 <span class="comment"> *    G. R. Danesfahani, T.G. Jeans, &quot;Optimisation of modified Mueller and Muller </span>
<a name="l00062"></a>00062 <span class="comment"> *    algorithm,&quot;  Electronics Letters, Vol. 31, no. 13,  22 June 1995, pp. 1032 - 1033.</span>
<a name="l00063"></a>00063 <span class="comment"> *</span>
<a name="l00064"></a>00064 <span class="comment"> * This circuit interpolates the downconverted sample (using the NCO developed by the Costas loop)</span>
<a name="l00065"></a>00065 <span class="comment"> * every mu samples, then it finds the sampling error based on this and the past symbols and the decision</span>
<a name="l00066"></a>00066 <span class="comment"> * made on the samples. Like the phase error detector, there are optimized decision algorithms for BPSK</span>
<a name="l00067"></a>00067 <span class="comment"> * and QPKS, but 8PSK uses another brute force computation against all possible symbols. The modifications</span>
<a name="l00068"></a>00068 <span class="comment"> * to the M&amp;M used here reduce self-noise.</span>
<a name="l00069"></a>00069 <span class="comment"> *</span>
<a name="l00070"></a>00070 <span class="comment"> */</span>
<a name="l00071"></a>00071 
<a name="l00072"></a><a class="code" href="classgr__mpsk__receiver__cc.html">00072</a> <span class="keyword">class </span><a class="code" href="classgr__mpsk__receiver__cc.html" title="This block takes care of receiving M-PSK modulated signals through phase, frequency, and symbol synchronization.This block takes care of receiving M-PSK modulated signals through phase, frequency, and symbol synchronization. It performs carrier frequency and phase locking as well as symbol timing recovery. It works with (D)BPSK, (D)QPSK, and (D)8PSK as tested currently. It should also work for OQPSK and PI/4 DQPSK.">gr_mpsk_receiver_cc</a> : <span class="keyword">public</span> <a class="code" href="classgr__block.html" title="The abstract base class for all &amp;#39;terminal&amp;#39; processing blocks.A signal processing flow is cons...">gr_block</a>
<a name="l00073"></a>00073 {
<a name="l00074"></a>00074  <span class="keyword">public</span>:
<a name="l00075"></a>00075   <a class="code" href="classgr__mpsk__receiver__cc.html#a10ba226bab77791245135f070662dcf8">~gr_mpsk_receiver_cc</a> ();
<a name="l00076"></a>00076   <span class="keywordtype">void</span> <a class="code" href="classgr__mpsk__receiver__cc.html#acfde40e3149cdf0981b00ec7fd8b6109" title="Estimate input requirements given output request.">forecast</a>(<span class="keywordtype">int</span> noutput_items, <a class="code" href="classstd_1_1vector.html">gr_vector_int</a> &amp;ninput_items_required);
<a name="l00077"></a>00077   <span class="keywordtype">int</span> <a class="code" href="classgr__mpsk__receiver__cc.html#aaa5dc2c51fc0a558733edfafbf95e4c9" title="compute output items from input items">general_work</a> (<span class="keywordtype">int</span> noutput_items,
<a name="l00078"></a>00078                     <a class="code" href="classstd_1_1vector.html">gr_vector_int</a> &amp;ninput_items,
<a name="l00079"></a>00079                     <a class="code" href="classstd_1_1vector.html">gr_vector_const_void_star</a> &amp;input_items,
<a name="l00080"></a>00080                     <a class="code" href="classstd_1_1vector.html">gr_vector_void_star</a> &amp;output_items);
<a name="l00081"></a>00081 
<a name="l00082"></a>00082 
<a name="l00083"></a>00083   <span class="comment">// Member functions related to the symbol tracking portion of the receiver</span><span class="comment"></span>
<a name="l00084"></a>00084 <span class="comment">  //! (M&amp;M) Returns current value of mu</span>
<a name="l00085"></a><a class="code" href="classgr__mpsk__receiver__cc.html#a5a8d656fed27db70a3b90bf8e5739c58">00085</a> <span class="comment"></span>  <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a5a8d656fed27db70a3b90bf8e5739c58" title="(M&amp;amp;M) Returns current value of mu">mu</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d_mu;}
<a name="l00086"></a>00086 <span class="comment"></span>
<a name="l00087"></a>00087 <span class="comment">  //! (M&amp;M) Returns current value of omega</span>
<a name="l00088"></a><a class="code" href="classgr__mpsk__receiver__cc.html#a871efa619b3de0882272c5c8def64250">00088</a> <span class="comment"></span>  <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a871efa619b3de0882272c5c8def64250" title="(M&amp;amp;M) Returns current value of omega">omega</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d_omega;}
<a name="l00089"></a>00089 <span class="comment"></span>
<a name="l00090"></a>00090 <span class="comment">  //! (M&amp;M) Returns mu gain factor</span>
<a name="l00091"></a><a class="code" href="classgr__mpsk__receiver__cc.html#ab35c94b9fa4206794dede51d2174f26f">00091</a> <span class="comment"></span>  <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#ab35c94b9fa4206794dede51d2174f26f" title="(M&amp;amp;M) Returns mu gain factor">gain_mu</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d_gain_mu;}
<a name="l00092"></a>00092 <span class="comment"></span>
<a name="l00093"></a>00093 <span class="comment">  //! (M&amp;M) Returns omega gain factor</span>
<a name="l00094"></a><a class="code" href="classgr__mpsk__receiver__cc.html#a3bf2b3d7f8aa2f03b908ec1dd361ecb8">00094</a> <span class="comment"></span>  <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a3bf2b3d7f8aa2f03b908ec1dd361ecb8" title="(M&amp;amp;M) Returns omega gain factor">gain_omega</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d_gain_omega;}
<a name="l00095"></a>00095 <span class="comment"></span>
<a name="l00096"></a>00096 <span class="comment">  //! (M&amp;M) Sets value of mu</span>
<a name="l00097"></a><a class="code" href="classgr__mpsk__receiver__cc.html#a718112e3123378f3e79595c707564aec">00097</a> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a718112e3123378f3e79595c707564aec" title="(M&amp;amp;M) Sets value of mu">set_mu</a> (<span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a5a8d656fed27db70a3b90bf8e5739c58" title="(M&amp;amp;M) Returns current value of mu">mu</a>) { d_mu = <a class="code" href="classgr__mpsk__receiver__cc.html#a5a8d656fed27db70a3b90bf8e5739c58" title="(M&amp;amp;M) Returns current value of mu">mu</a>; }
<a name="l00098"></a>00098   <span class="comment"></span>
<a name="l00099"></a>00099 <span class="comment">  //! (M&amp;M) Sets value of omega and its min and max values </span>
<a name="l00100"></a><a class="code" href="classgr__mpsk__receiver__cc.html#a5858d935798398ed16221641a6e00254">00100</a> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a5858d935798398ed16221641a6e00254" title="(M&amp;amp;M) Sets value of omega and its min and max values">set_omega</a> (<span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a871efa619b3de0882272c5c8def64250" title="(M&amp;amp;M) Returns current value of omega">omega</a>) { 
<a name="l00101"></a>00101     d_omega = <a class="code" href="classgr__mpsk__receiver__cc.html#a871efa619b3de0882272c5c8def64250" title="(M&amp;amp;M) Returns current value of omega">omega</a>;
<a name="l00102"></a>00102     d_min_omega = omega*(1.0 - d_omega_rel);
<a name="l00103"></a>00103     d_max_omega = omega*(1.0 + d_omega_rel);
<a name="l00104"></a>00104     d_omega_mid = 0.5*(d_min_omega+d_max_omega);
<a name="l00105"></a>00105   }
<a name="l00106"></a>00106 <span class="comment"></span>
<a name="l00107"></a>00107 <span class="comment">  //! (M&amp;M) Sets value for mu gain factor</span>
<a name="l00108"></a><a class="code" href="classgr__mpsk__receiver__cc.html#a0f565a812cdf79bace6c9da16770c551">00108</a> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a0f565a812cdf79bace6c9da16770c551" title="(M&amp;amp;M) Sets value for mu gain factor">set_gain_mu</a> (<span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#ab35c94b9fa4206794dede51d2174f26f" title="(M&amp;amp;M) Returns mu gain factor">gain_mu</a>) { d_gain_mu = <a class="code" href="classgr__mpsk__receiver__cc.html#ab35c94b9fa4206794dede51d2174f26f" title="(M&amp;amp;M) Returns mu gain factor">gain_mu</a>; }
<a name="l00109"></a>00109 <span class="comment"></span>
<a name="l00110"></a>00110 <span class="comment">  //! (M&amp;M) Sets value for omega gain factor</span>
<a name="l00111"></a><a class="code" href="classgr__mpsk__receiver__cc.html#a38e6d044fed315c5b2c02d92aef05a41">00111</a> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a38e6d044fed315c5b2c02d92aef05a41" title="(M&amp;amp;M) Sets value for omega gain factor">set_gain_omega</a> (<span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a3bf2b3d7f8aa2f03b908ec1dd361ecb8" title="(M&amp;amp;M) Returns omega gain factor">gain_omega</a>) { d_gain_omega = <a class="code" href="classgr__mpsk__receiver__cc.html#a3bf2b3d7f8aa2f03b908ec1dd361ecb8" title="(M&amp;amp;M) Returns omega gain factor">gain_omega</a>; }
<a name="l00112"></a>00112 
<a name="l00113"></a>00113 
<a name="l00114"></a>00114 
<a name="l00115"></a>00115   <span class="comment">// Member function related to the phase/frequency tracking portion of the receiver</span><span class="comment"></span>
<a name="l00116"></a>00116 <span class="comment">  //! (CL) Returns the value for alpha (the phase gain term)</span>
<a name="l00117"></a><a class="code" href="classgr__mpsk__receiver__cc.html#a193dbf8c468eb40b901ea15d17f23837">00117</a> <span class="comment"></span>  <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a193dbf8c468eb40b901ea15d17f23837" title="(CL) Returns the value for alpha (the phase gain term)">alpha</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d_alpha; }
<a name="l00118"></a>00118   <span class="comment"></span>
<a name="l00119"></a>00119 <span class="comment">  //! (CL) Returns the value of beta (the frequency gain term)</span>
<a name="l00120"></a><a class="code" href="classgr__mpsk__receiver__cc.html#a2854f1584948a1ae9985c6466dc042bc">00120</a> <span class="comment"></span>  <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a2854f1584948a1ae9985c6466dc042bc" title="(CL) Returns the value of beta (the frequency gain term)">beta</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d_beta; }
<a name="l00121"></a>00121 <span class="comment"></span>
<a name="l00122"></a>00122 <span class="comment">  //! (CL) Returns the current value of the frequency of the NCO in the Costas loop</span>
<a name="l00123"></a><a class="code" href="classgr__mpsk__receiver__cc.html#a0e23b688c75c93f803c5e9ddf3635083">00123</a> <span class="comment"></span>  <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a0e23b688c75c93f803c5e9ddf3635083" title="(CL) Returns the current value of the frequency of the NCO in the Costas loop">freq</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d_freq; }
<a name="l00124"></a>00124 <span class="comment"></span>
<a name="l00125"></a>00125 <span class="comment">  //! (CL) Returns the current value of the phase of the NCO in the Costal loop</span>
<a name="l00126"></a><a class="code" href="classgr__mpsk__receiver__cc.html#a5ddaf419bdaa5e924d2c84e94edd47b2">00126</a> <span class="comment"></span>  <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a5ddaf419bdaa5e924d2c84e94edd47b2" title="(CL) Returns the current value of the phase of the NCO in the Costal loop">phase</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d_phase; }
<a name="l00127"></a>00127 <span class="comment"></span>
<a name="l00128"></a>00128 <span class="comment">  //! (CL) Sets the value for alpha (the phase gain term)</span>
<a name="l00129"></a><a class="code" href="classgr__mpsk__receiver__cc.html#a20a85bfa65ce8d48b02079866ad9be5c">00129</a> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a20a85bfa65ce8d48b02079866ad9be5c" title="(CL) Sets the value for alpha (the phase gain term)">set_alpha</a>(<span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a193dbf8c468eb40b901ea15d17f23837" title="(CL) Returns the value for alpha (the phase gain term)">alpha</a>) { d_alpha = <a class="code" href="classgr__mpsk__receiver__cc.html#a193dbf8c468eb40b901ea15d17f23837" title="(CL) Returns the value for alpha (the phase gain term)">alpha</a>; }
<a name="l00130"></a>00130   <span class="comment"></span>
<a name="l00131"></a>00131 <span class="comment">  //! (CL) Setss the value of beta (the frequency gain term)</span>
<a name="l00132"></a><a class="code" href="classgr__mpsk__receiver__cc.html#aaad856bd04d823d99c1e42e050a6297e">00132</a> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classgr__mpsk__receiver__cc.html#aaad856bd04d823d99c1e42e050a6297e" title="(CL) Setss the value of beta (the frequency gain term)">set_beta</a>(<span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a2854f1584948a1ae9985c6466dc042bc" title="(CL) Returns the value of beta (the frequency gain term)">beta</a>) { d_beta = <a class="code" href="classgr__mpsk__receiver__cc.html#a2854f1584948a1ae9985c6466dc042bc" title="(CL) Returns the value of beta (the frequency gain term)">beta</a>; }
<a name="l00133"></a>00133 <span class="comment"></span>
<a name="l00134"></a>00134 <span class="comment">  //! (CL) Sets the current value of the frequency of the NCO in the Costas loop</span>
<a name="l00135"></a><a class="code" href="classgr__mpsk__receiver__cc.html#aecbb08bd21f1d9a4b01a828a2177d4ec">00135</a> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classgr__mpsk__receiver__cc.html#aecbb08bd21f1d9a4b01a828a2177d4ec" title="(CL) Sets the current value of the frequency of the NCO in the Costas loop">set_freq</a>(<span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a0e23b688c75c93f803c5e9ddf3635083" title="(CL) Returns the current value of the frequency of the NCO in the Costas loop">freq</a>) { d_freq = <a class="code" href="classgr__mpsk__receiver__cc.html#a0e23b688c75c93f803c5e9ddf3635083" title="(CL) Returns the current value of the frequency of the NCO in the Costas loop">freq</a>; }
<a name="l00136"></a>00136 <span class="comment"></span>
<a name="l00137"></a>00137 <span class="comment">  //! (CL) Setss the current value of the phase of the NCO in the Costal loop</span>
<a name="l00138"></a><a class="code" href="classgr__mpsk__receiver__cc.html#a67f26ed1d5099d3ef09b39e389e1e85f">00138</a> <span class="comment"></span>  <span class="keywordtype">void</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a67f26ed1d5099d3ef09b39e389e1e85f" title="(CL) Setss the current value of the phase of the NCO in the Costal loop">set_phase</a>(<span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a5ddaf419bdaa5e924d2c84e94edd47b2" title="(CL) Returns the current value of the phase of the NCO in the Costal loop">phase</a>) { d_phase = <a class="code" href="classgr__mpsk__receiver__cc.html#a5ddaf419bdaa5e924d2c84e94edd47b2" title="(CL) Returns the current value of the phase of the NCO in the Costal loop">phase</a>; }
<a name="l00139"></a>00139 
<a name="l00140"></a>00140 
<a name="l00141"></a>00141 <span class="keyword">protected</span>:
<a name="l00142"></a>00142 <span class="comment"></span>
<a name="l00143"></a>00143 <span class="comment"> /*!</span>
<a name="l00144"></a>00144 <span class="comment">   * \brief Constructor to synchronize incoming M-PSK symbols</span>
<a name="l00145"></a>00145 <span class="comment">   *</span>
<a name="l00146"></a>00146 <span class="comment">   * \param M           modulation order of the M-PSK modulation</span>
<a name="l00147"></a>00147 <span class="comment">   * \param theta       any constant phase rotation from the real axis of the constellation</span>
<a name="l00148"></a>00148 <span class="comment">   * \param alpha       gain parameter to adjust the phase in the Costas loop (~0.01)</span>
<a name="l00149"></a>00149 <span class="comment">   * \param beta        gain parameter to adjust the frequency in the Costas loop (~alpha^2/4)  </span>
<a name="l00150"></a>00150 <span class="comment">   * \param fmin        minimum normalized frequency value the loop can achieve</span>
<a name="l00151"></a>00151 <span class="comment">   * \param fmax        maximum normalized frequency value the loop can achieve</span>
<a name="l00152"></a>00152 <span class="comment">   * \param mu          initial parameter for the interpolator [0,1]</span>
<a name="l00153"></a>00153 <span class="comment">   * \param gain_mu     gain parameter of the M&amp;M error signal to adjust mu (~0.05)</span>
<a name="l00154"></a>00154 <span class="comment">   * \param omega       initial value for the number of symbols between samples (~number of samples/symbol)</span>
<a name="l00155"></a>00155 <span class="comment">   * \param gain_omega  gain parameter to adjust omega based on the error (~omega^2/4)</span>
<a name="l00156"></a>00156 <span class="comment">   * \param omega_rel   sets the maximum (omega*(1+omega_rel)) and minimum (omega*(1+omega_rel)) omega (~0.005)</span>
<a name="l00157"></a>00157 <span class="comment">   *</span>
<a name="l00158"></a>00158 <span class="comment">   * The constructor also chooses which phase detector and decision maker to use in the work loop based on the</span>
<a name="l00159"></a>00159 <span class="comment">   * value of M.</span>
<a name="l00160"></a>00160 <span class="comment">   */</span>
<a name="l00161"></a>00161   <a class="code" href="classgr__mpsk__receiver__cc.html#ad80459b4f33dba47f555263abe617ff2" title="Constructor to synchronize incoming M-PSK symbols.">gr_mpsk_receiver_cc</a> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> M, <span class="keywordtype">float</span> theta, 
<a name="l00162"></a>00162                        <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a193dbf8c468eb40b901ea15d17f23837" title="(CL) Returns the value for alpha (the phase gain term)">alpha</a>, <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a2854f1584948a1ae9985c6466dc042bc" title="(CL) Returns the value of beta (the frequency gain term)">beta</a>,
<a name="l00163"></a>00163                        <span class="keywordtype">float</span> fmin, <span class="keywordtype">float</span> fmax,
<a name="l00164"></a>00164                        <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a5a8d656fed27db70a3b90bf8e5739c58" title="(M&amp;amp;M) Returns current value of mu">mu</a>, <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#ab35c94b9fa4206794dede51d2174f26f" title="(M&amp;amp;M) Returns mu gain factor">gain_mu</a>, 
<a name="l00165"></a>00165                        <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a871efa619b3de0882272c5c8def64250" title="(M&amp;amp;M) Returns current value of omega">omega</a>, <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a3bf2b3d7f8aa2f03b908ec1dd361ecb8" title="(M&amp;amp;M) Returns omega gain factor">gain_omega</a>, <span class="keywordtype">float</span> omega_rel);
<a name="l00166"></a>00166 
<a name="l00167"></a>00167   <span class="keywordtype">void</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a90c62a5f2f292dd19a89f27416abd99f">make_constellation</a>();
<a name="l00168"></a>00168   <span class="keywordtype">void</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a9b2e8da6e563eaea5403bc7050d96ebc">mm_sampler</a>(<span class="keyword">const</span> <a class="code" href="gr__complex_8h.html#aec4bfe41433369afae9327f1b0bc9109">gr_complex</a> symbol);
<a name="l00169"></a>00169   <span class="keywordtype">void</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a179ff1d027fc821ce6c14450bf66c880">mm_error_tracking</a>(<a class="code" href="gr__complex_8h.html#aec4bfe41433369afae9327f1b0bc9109">gr_complex</a> sample);
<a name="l00170"></a>00170   <span class="keywordtype">void</span> <a class="code" href="classgr__mpsk__receiver__cc.html#af901b02e3430c22a8a61469892408c44">phase_error_tracking</a>(<a class="code" href="gr__complex_8h.html#aec4bfe41433369afae9327f1b0bc9109">gr_complex</a> sample);
<a name="l00171"></a>00171 
<a name="l00172"></a>00172 <span class="comment"></span>
<a name="l00173"></a>00173 <span class="comment">/*!</span>
<a name="l00174"></a>00174 <span class="comment">   * \brief Phase error detector for MPSK modulations.</span>
<a name="l00175"></a>00175 <span class="comment">   *</span>
<a name="l00176"></a>00176 <span class="comment">   * \param sample   the I&amp;Q sample from which to determine the phase error</span>
<a name="l00177"></a>00177 <span class="comment">   *</span>
<a name="l00178"></a>00178 <span class="comment">   * This function determines the phase error for any MPSK signal by creating a set of PSK constellation points</span>
<a name="l00179"></a>00179 <span class="comment">   * and doing a brute-force search to see which point minimizes the Euclidean distance. This point is then used</span>
<a name="l00180"></a>00180 <span class="comment">   * to derotate the sample to the real-axis and a atan (using the fast approximation function) to determine the</span>
<a name="l00181"></a>00181 <span class="comment">   * phase difference between the incoming sample and the real constellation point</span>
<a name="l00182"></a>00182 <span class="comment">   *</span>
<a name="l00183"></a>00183 <span class="comment">   * This should be cleaned up and made more efficient.</span>
<a name="l00184"></a>00184 <span class="comment">   *</span>
<a name="l00185"></a>00185 <span class="comment">   * \returns the approximated phase error.</span>
<a name="l00186"></a>00186 <span class="comment"> */</span>
<a name="l00187"></a>00187   <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#ac20b225f3beb3cc0c62c931cda71797e" title="Phase error detector for MPSK modulations.">phase_error_detector_generic</a>(<a class="code" href="gr__complex_8h.html#aec4bfe41433369afae9327f1b0bc9109">gr_complex</a> sample) <span class="keyword">const</span>; <span class="comment">// generic for M but more costly</span>
<a name="l00188"></a>00188 <span class="comment"></span>
<a name="l00189"></a>00189 <span class="comment"> /*!</span>
<a name="l00190"></a>00190 <span class="comment">   * \brief Phase error detector for BPSK modulation.</span>
<a name="l00191"></a>00191 <span class="comment">   *</span>
<a name="l00192"></a>00192 <span class="comment">   * \param sample   the I&amp;Q sample from which to determine the phase error</span>
<a name="l00193"></a>00193 <span class="comment">   *</span>
<a name="l00194"></a>00194 <span class="comment">   * This function determines the phase error using a simple BPSK phase error detector by multiplying the real</span>
<a name="l00195"></a>00195 <span class="comment">   * and imaginary (the error signal) components together. As the imaginary part goes to 0, so does this error.</span>
<a name="l00196"></a>00196 <span class="comment">   *</span>
<a name="l00197"></a>00197 <span class="comment">   * \returns the approximated phase error.</span>
<a name="l00198"></a>00198 <span class="comment"> */</span>
<a name="l00199"></a>00199   <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a9dd3762234c6fa83673809e2a94b4bdb" title="Phase error detector for BPSK modulation.">phase_error_detector_bpsk</a>(<a class="code" href="gr__complex_8h.html#aec4bfe41433369afae9327f1b0bc9109">gr_complex</a> sample) <span class="keyword">const</span>;    <span class="comment">// optimized for BPSK</span>
<a name="l00200"></a>00200 <span class="comment"></span>
<a name="l00201"></a>00201 <span class="comment"> /*!</span>
<a name="l00202"></a>00202 <span class="comment">   * \brief Phase error detector for QPSK modulation.</span>
<a name="l00203"></a>00203 <span class="comment">   *</span>
<a name="l00204"></a>00204 <span class="comment">   * \param sample   the I&amp;Q sample from which to determine the phase error</span>
<a name="l00205"></a>00205 <span class="comment">   *</span>
<a name="l00206"></a>00206 <span class="comment">   * This function determines the phase error using the limiter approach in a standard 4th order Costas loop</span>
<a name="l00207"></a>00207 <span class="comment">   *</span>
<a name="l00208"></a>00208 <span class="comment">   * \returns the approximated phase error.</span>
<a name="l00209"></a>00209 <span class="comment"> */</span>
<a name="l00210"></a>00210   <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a53140b9e77b8f4b37cc04996319c3f2c" title="Phase error detector for QPSK modulation.">phase_error_detector_qpsk</a>(<a class="code" href="gr__complex_8h.html#aec4bfe41433369afae9327f1b0bc9109">gr_complex</a> sample) <span class="keyword">const</span>;
<a name="l00211"></a>00211 
<a name="l00212"></a>00212 
<a name="l00213"></a>00213 <span class="comment"></span>
<a name="l00214"></a>00214 <span class="comment"> /*!</span>
<a name="l00215"></a>00215 <span class="comment">   * \brief Decision maker for a generic MPSK constellation.</span>
<a name="l00216"></a>00216 <span class="comment">   *</span>
<a name="l00217"></a>00217 <span class="comment">   * \param sample   the baseband I&amp;Q sample from which to make the decision</span>
<a name="l00218"></a>00218 <span class="comment">   *</span>
<a name="l00219"></a>00219 <span class="comment">   * This decision maker is a generic implementation that does a brute-force search </span>
<a name="l00220"></a>00220 <span class="comment">   * for the constellation point that minimizes the error between it and the incoming signal.</span>
<a name="l00221"></a>00221 <span class="comment">   *</span>
<a name="l00222"></a>00222 <span class="comment">   * \returns the index to d_constellation that minimizes the error/</span>
<a name="l00223"></a>00223 <span class="comment"> */</span>
<a name="l00224"></a>00224   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a17ce465de930868d0e37017315458fa7" title="Decision maker for a generic MPSK constellation.">decision_generic</a>(<a class="code" href="gr__complex_8h.html#aec4bfe41433369afae9327f1b0bc9109">gr_complex</a> sample) <span class="keyword">const</span>;
<a name="l00225"></a>00225 
<a name="l00226"></a>00226 <span class="comment"></span>
<a name="l00227"></a>00227 <span class="comment"> /*!</span>
<a name="l00228"></a>00228 <span class="comment">   * \brief Decision maker for BPSK constellation.</span>
<a name="l00229"></a>00229 <span class="comment">   *</span>
<a name="l00230"></a>00230 <span class="comment">   * \param sample   the baseband I&amp;Q sample from which to make the decision</span>
<a name="l00231"></a>00231 <span class="comment">   *</span>
<a name="l00232"></a>00232 <span class="comment">   * This decision maker is a simple slicer function that makes a decision on the symbol based on its</span>
<a name="l00233"></a>00233 <span class="comment">   * placement on the real axis of greater than 0 or less than 0; the quadrature component is always 0.</span>
<a name="l00234"></a>00234 <span class="comment">   *</span>
<a name="l00235"></a>00235 <span class="comment">   * \returns the index to d_constellation that minimizes the error/</span>
<a name="l00236"></a>00236 <span class="comment"> */</span>
<a name="l00237"></a>00237   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a0233483a35601b8d8aa6cb4629014cf0" title="Decision maker for BPSK constellation.">decision_bpsk</a>(<a class="code" href="gr__complex_8h.html#aec4bfe41433369afae9327f1b0bc9109">gr_complex</a> sample) <span class="keyword">const</span>;
<a name="l00238"></a>00238   
<a name="l00239"></a>00239 <span class="comment"></span>
<a name="l00240"></a>00240 <span class="comment"> /*!</span>
<a name="l00241"></a>00241 <span class="comment">   * \brief Decision maker for QPSK constellation.</span>
<a name="l00242"></a>00242 <span class="comment">   *</span>
<a name="l00243"></a>00243 <span class="comment">   * \param sample   the baseband I&amp;Q sample from which to make the decision</span>
<a name="l00244"></a>00244 <span class="comment">   *</span>
<a name="l00245"></a>00245 <span class="comment">   * This decision maker is a simple slicer function that makes a decision on the symbol based on its</span>
<a name="l00246"></a>00246 <span class="comment">   * placement versus both axes and returns which quadrant the symbol is in.</span>
<a name="l00247"></a>00247 <span class="comment">   *</span>
<a name="l00248"></a>00248 <span class="comment">   * \returns the index to d_constellation that minimizes the error/</span>
<a name="l00249"></a>00249 <span class="comment"> */</span>
<a name="l00250"></a>00250   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a93ebc560d653963f6100c62a81db84be" title="Decision maker for QPSK constellation.">decision_qpsk</a>(<a class="code" href="gr__complex_8h.html#aec4bfe41433369afae9327f1b0bc9109">gr_complex</a> sample) <span class="keyword">const</span>;
<a name="l00251"></a>00251 
<a name="l00252"></a>00252   <span class="keyword">private</span>:
<a name="l00253"></a>00253   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> d_M;
<a name="l00254"></a>00254   <span class="keywordtype">float</span>        d_theta;
<a name="l00255"></a>00255 
<a name="l00256"></a>00256   <span class="comment">// Members related to carrier and phase tracking</span>
<a name="l00257"></a>00257   <span class="keywordtype">float</span> d_alpha;
<a name="l00258"></a>00258   <span class="keywordtype">float</span> d_beta;
<a name="l00259"></a>00259   <span class="keywordtype">float</span> d_freq, d_max_freq, d_min_freq;
<a name="l00260"></a>00260   <span class="keywordtype">float</span> d_phase;
<a name="l00261"></a>00261 <span class="comment"></span>
<a name="l00262"></a>00262 <span class="comment">/*!</span>
<a name="l00263"></a>00263 <span class="comment">   * \brief Decision maker function pointer </span>
<a name="l00264"></a>00264 <span class="comment">   *</span>
<a name="l00265"></a>00265 <span class="comment">   * \param sample   the baseband I&amp;Q sample from which to make the decision</span>
<a name="l00266"></a>00266 <span class="comment">   *</span>
<a name="l00267"></a>00267 <span class="comment">   * This is a function pointer that is set in the constructor to point to the proper decision function</span>
<a name="l00268"></a>00268 <span class="comment">   * for the specified constellation order.</span>
<a name="l00269"></a>00269 <span class="comment">   *</span>
<a name="l00270"></a>00270 <span class="comment">   * \return index into d_constellation point that is the closest to the recieved sample</span>
<a name="l00271"></a>00271 <span class="comment"> */</span>
<a name="l00272"></a>00272   <span class="keywordtype">unsigned</span> int (<a class="code" href="classgr__mpsk__receiver__cc.html" title="This block takes care of receiving M-PSK modulated signals through phase, frequency, and symbol synchronization.This block takes care of receiving M-PSK modulated signals through phase, frequency, and symbol synchronization. It performs carrier frequency and phase locking as well as symbol timing recovery. It works with (D)BPSK, (D)QPSK, and (D)8PSK as tested currently. It should also work for OQPSK and PI/4 DQPSK.">gr_mpsk_receiver_cc</a>::*d_decision)(<a class="code" href="gr__complex_8h.html#aec4bfe41433369afae9327f1b0bc9109">gr_complex</a> sample) <span class="keyword">const</span>; <span class="comment">// pointer to decision function</span>
<a name="l00273"></a>00273 
<a name="l00274"></a>00274 
<a name="l00275"></a>00275   <a class="code" href="classstd_1_1vector.html">std::vector&lt;gr_complex&gt;</a> d_constellation;
<a name="l00276"></a>00276   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> d_current_const_point;
<a name="l00277"></a>00277 
<a name="l00278"></a>00278   <span class="comment">// Members related to symbol timing</span>
<a name="l00279"></a>00279   <span class="keywordtype">float</span> d_mu, d_gain_mu;
<a name="l00280"></a>00280   <span class="keywordtype">float</span> d_omega, d_gain_omega, d_omega_rel, d_max_omega, d_min_omega, d_omega_mid;
<a name="l00281"></a>00281   <a class="code" href="gr__complex_8h.html#aec4bfe41433369afae9327f1b0bc9109">gr_complex</a> d_p_2T, d_p_1T, d_p_0T;
<a name="l00282"></a>00282   <a class="code" href="gr__complex_8h.html#aec4bfe41433369afae9327f1b0bc9109">gr_complex</a> d_c_2T, d_c_1T, d_c_0T;
<a name="l00283"></a>00283 <span class="comment"></span>
<a name="l00284"></a>00284 <span class="comment"> /*!</span>
<a name="l00285"></a>00285 <span class="comment">   * \brief Phase error detector function pointer </span>
<a name="l00286"></a>00286 <span class="comment">   *</span>
<a name="l00287"></a>00287 <span class="comment">   * \param sample   the I&amp;Q sample from which to determine the phase error</span>
<a name="l00288"></a>00288 <span class="comment">   *</span>
<a name="l00289"></a>00289 <span class="comment">   * This is a function pointer that is set in the constructor to point to the proper phase error detector</span>
<a name="l00290"></a>00290 <span class="comment">   * function for the specified constellation order.</span>
<a name="l00291"></a>00291 <span class="comment"> */</span>
<a name="l00292"></a>00292   float (<a class="code" href="classgr__mpsk__receiver__cc.html" title="This block takes care of receiving M-PSK modulated signals through phase, frequency, and symbol synchronization.This block takes care of receiving M-PSK modulated signals through phase, frequency, and symbol synchronization. It performs carrier frequency and phase locking as well as symbol timing recovery. It works with (D)BPSK, (D)QPSK, and (D)8PSK as tested currently. It should also work for OQPSK and PI/4 DQPSK.">gr_mpsk_receiver_cc</a>::*d_phase_error_detector)(<a class="code" href="gr__complex_8h.html#aec4bfe41433369afae9327f1b0bc9109">gr_complex</a> sample) <span class="keyword">const</span>;
<a name="l00293"></a>00293 
<a name="l00294"></a>00294 <span class="comment"></span>
<a name="l00295"></a>00295 <span class="comment">  //! get interpolated value</span>
<a name="l00296"></a>00296 <span class="comment"></span>  <a class="code" href="classgri__mmse__fir__interpolator__cc.html" title="Compute intermediate samples between signal samples x(k*Ts)This implements a Mininum Mean Squared Err...">gri_mmse_fir_interpolator_cc</a>  *d_interp;
<a name="l00297"></a>00297   <span class="comment"></span>
<a name="l00298"></a>00298 <span class="comment">  //! delay line length.</span>
<a name="l00299"></a>00299 <span class="comment"></span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> DLLEN = 8;
<a name="l00300"></a>00300   <span class="comment"></span>
<a name="l00301"></a>00301 <span class="comment">  //! delay line plus some length for overflow protection</span>
<a name="l00302"></a>00302 <span class="comment"></span>  <a class="code" href="gr__complex_8h.html#aec4bfe41433369afae9327f1b0bc9109">gr_complex</a> d_dl[2*DLLEN] __attribute__ ((aligned(8)));
<a name="l00303"></a>00303   <span class="comment"></span>
<a name="l00304"></a>00304 <span class="comment">  //! index to delay line</span>
<a name="l00305"></a>00305 <span class="comment"></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> d_dl_idx;
<a name="l00306"></a>00306 
<a name="l00307"></a>00307   <span class="keyword">friend</span> <a class="code" href="classboost_1_1shared__ptr.html" title="shared_ptr documentation stub">gr_mpsk_receiver_cc_sptr</a>
<a name="l00308"></a>00308   <a class="code" href="classgr__mpsk__receiver__cc.html#a302053914cb025ad3fe4eb65b9f30bf2">gr_make_mpsk_receiver_cc</a> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> M, <span class="keywordtype">float</span> theta,
<a name="l00309"></a>00309                             <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a193dbf8c468eb40b901ea15d17f23837" title="(CL) Returns the value for alpha (the phase gain term)">alpha</a>, <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a2854f1584948a1ae9985c6466dc042bc" title="(CL) Returns the value of beta (the frequency gain term)">beta</a>,
<a name="l00310"></a>00310                             <span class="keywordtype">float</span> fmin, <span class="keywordtype">float</span> fmax,
<a name="l00311"></a>00311                             <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a5a8d656fed27db70a3b90bf8e5739c58" title="(M&amp;amp;M) Returns current value of mu">mu</a>, <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#ab35c94b9fa4206794dede51d2174f26f" title="(M&amp;amp;M) Returns mu gain factor">gain_mu</a>, 
<a name="l00312"></a>00312                             <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a871efa619b3de0882272c5c8def64250" title="(M&amp;amp;M) Returns current value of omega">omega</a>, <span class="keywordtype">float</span> <a class="code" href="classgr__mpsk__receiver__cc.html#a3bf2b3d7f8aa2f03b908ec1dd361ecb8" title="(M&amp;amp;M) Returns omega gain factor">gain_omega</a>, <span class="keywordtype">float</span> omega_rel);
<a name="l00313"></a>00313 };
<a name="l00314"></a>00314 
<a name="l00315"></a>00315 <span class="preprocessor">#endif</span>
</pre></div></div>
</div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="gr__mpsk__receiver__cc_8h.html">gr_mpsk_receiver_cc.h</a>      </li>
      <li class="footer">Generated on Thu Feb 17 2011 for GNU Radio 3.2.2 C++ API by&#160;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.3 </li>
    </ul>
  </div>

</body>
</html>