<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.18.0" xml:lang="en-US">
  <compounddef id="classgr_1_1blocks_1_1control__loop" kind="class" language="C++" prot="public">
    <compoundname>gr::blocks::control_loop</compoundname>
    <derivedcompoundref refid="classgr_1_1analog_1_1pll__carriertracking__cc" prot="public" virt="virtual">gr::analog::pll_carriertracking_cc</derivedcompoundref>
    <derivedcompoundref refid="classgr_1_1analog_1_1pll__freqdet__cf" prot="public" virt="virtual">gr::analog::pll_freqdet_cf</derivedcompoundref>
    <derivedcompoundref refid="classgr_1_1analog_1_1pll__refout__cc" prot="public" virt="virtual">gr::analog::pll_refout_cc</derivedcompoundref>
    <derivedcompoundref refid="classgr_1_1digital_1_1constellation__receiver__cb" prot="public" virt="virtual">gr::digital::constellation_receiver_cb</derivedcompoundref>
    <derivedcompoundref refid="classgr_1_1digital_1_1costas__loop__cc" prot="public" virt="virtual">gr::digital::costas_loop_cc</derivedcompoundref>
    <derivedcompoundref refid="classgr_1_1digital_1_1fll__band__edge__cc" prot="public" virt="virtual">gr::digital::fll_band_edge_cc</derivedcompoundref>
    <includes refid="control__loop_8h" local="no">gnuradio/blocks/control_loop.h</includes>
    <sectiondef kind="protected-attrib">
      <memberdef kind="variable" id="classgr_1_1blocks_1_1control__loop_1af36d9458b26770d6a6c7025808be2414" prot="protected" static="no" mutable="no">
        <type>float</type>
        <definition>float gr::blocks::control_loop::d_phase</definition>
        <argsstring></argsstring>
        <name>d_phase</name>
        <qualifiedname>gr::blocks::control_loop::d_phase</qualifiedname>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="53" column="11" bodyfile="gr-blocks/include/gnuradio/blocks/control_loop.h" bodystart="53" bodyend="-1"/>
        <referencedby refid="classgr_1_1blocks_1_1control__loop_1a9ddc1f8d8367fe5b436cca7e7b514bb8" compoundref="control__loop_8h" startline="76" endline="80">advance_loop</referencedby>
        <referencedby refid="classgr_1_1blocks_1_1control__loop_1a410bd28032522a9ea3357e1760b8846b" compoundref="control__loop_8h" startline="95" endline="101">phase_wrap</referencedby>
      </memberdef>
      <memberdef kind="variable" id="classgr_1_1blocks_1_1control__loop_1a45fe93c2722efee119906cef0b88e222" prot="protected" static="no" mutable="no">
        <type>float</type>
        <definition>float gr::blocks::control_loop::d_freq</definition>
        <argsstring></argsstring>
        <name>d_freq</name>
        <qualifiedname>gr::blocks::control_loop::d_freq</qualifiedname>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="53" column="19" bodyfile="gr-blocks/include/gnuradio/blocks/control_loop.h" bodystart="53" bodyend="-1"/>
        <referencedby refid="classgr_1_1blocks_1_1control__loop_1a9ddc1f8d8367fe5b436cca7e7b514bb8" compoundref="control__loop_8h" startline="76" endline="80">advance_loop</referencedby>
        <referencedby refid="classgr_1_1blocks_1_1control__loop_1a31b65cd76562c7ba387ceee475d3b102" compoundref="control__loop_8h" startline="116" endline="122">frequency_limit</referencedby>
      </memberdef>
      <memberdef kind="variable" id="classgr_1_1blocks_1_1control__loop_1aa9a824b4eecf293229d122c4cf557b22" prot="protected" static="no" mutable="no">
        <type>float</type>
        <definition>float gr::blocks::control_loop::d_max_freq</definition>
        <argsstring></argsstring>
        <name>d_max_freq</name>
        <qualifiedname>gr::blocks::control_loop::d_max_freq</qualifiedname>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="54" column="11" bodyfile="gr-blocks/include/gnuradio/blocks/control_loop.h" bodystart="54" bodyend="-1"/>
        <referencedby refid="classgr_1_1blocks_1_1control__loop_1a31b65cd76562c7ba387ceee475d3b102" compoundref="control__loop_8h" startline="116" endline="122">frequency_limit</referencedby>
      </memberdef>
      <memberdef kind="variable" id="classgr_1_1blocks_1_1control__loop_1ac674611142e1e98f57b2683d6cd9b903" prot="protected" static="no" mutable="no">
        <type>float</type>
        <definition>float gr::blocks::control_loop::d_min_freq</definition>
        <argsstring></argsstring>
        <name>d_min_freq</name>
        <qualifiedname>gr::blocks::control_loop::d_min_freq</qualifiedname>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="54" column="22" bodyfile="gr-blocks/include/gnuradio/blocks/control_loop.h" bodystart="54" bodyend="-1"/>
        <referencedby refid="classgr_1_1blocks_1_1control__loop_1a31b65cd76562c7ba387ceee475d3b102" compoundref="control__loop_8h" startline="116" endline="122">frequency_limit</referencedby>
      </memberdef>
      <memberdef kind="variable" id="classgr_1_1blocks_1_1control__loop_1a3668de07bed21c240ce31daeb4b5f563" prot="protected" static="no" mutable="no">
        <type>float</type>
        <definition>float gr::blocks::control_loop::d_damping</definition>
        <argsstring></argsstring>
        <name>d_damping</name>
        <qualifiedname>gr::blocks::control_loop::d_damping</qualifiedname>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="55" column="11" bodyfile="gr-blocks/include/gnuradio/blocks/control_loop.h" bodystart="55" bodyend="-1"/>
      </memberdef>
      <memberdef kind="variable" id="classgr_1_1blocks_1_1control__loop_1a6542b914418ec6586f782f9dc32c66e2" prot="protected" static="no" mutable="no">
        <type>float</type>
        <definition>float gr::blocks::control_loop::d_loop_bw</definition>
        <argsstring></argsstring>
        <name>d_loop_bw</name>
        <qualifiedname>gr::blocks::control_loop::d_loop_bw</qualifiedname>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="55" column="21" bodyfile="gr-blocks/include/gnuradio/blocks/control_loop.h" bodystart="55" bodyend="-1"/>
      </memberdef>
      <memberdef kind="variable" id="classgr_1_1blocks_1_1control__loop_1a67112cc95cb9f12cd09e9be144b8cc83" prot="protected" static="no" mutable="no">
        <type>float</type>
        <definition>float gr::blocks::control_loop::d_alpha</definition>
        <argsstring></argsstring>
        <name>d_alpha</name>
        <qualifiedname>gr::blocks::control_loop::d_alpha</qualifiedname>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="56" column="11" bodyfile="gr-blocks/include/gnuradio/blocks/control_loop.h" bodystart="56" bodyend="-1"/>
        <referencedby refid="classgr_1_1blocks_1_1control__loop_1a9ddc1f8d8367fe5b436cca7e7b514bb8" compoundref="control__loop_8h" startline="76" endline="80">advance_loop</referencedby>
      </memberdef>
      <memberdef kind="variable" id="classgr_1_1blocks_1_1control__loop_1a2c2c67fcce7a11abbed6eb18b62b1546" prot="protected" static="no" mutable="no">
        <type>float</type>
        <definition>float gr::blocks::control_loop::d_beta</definition>
        <argsstring></argsstring>
        <name>d_beta</name>
        <qualifiedname>gr::blocks::control_loop::d_beta</qualifiedname>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="56" column="19" bodyfile="gr-blocks/include/gnuradio/blocks/control_loop.h" bodystart="56" bodyend="-1"/>
        <referencedby refid="classgr_1_1blocks_1_1control__loop_1a9ddc1f8d8367fe5b436cca7e7b514bb8" compoundref="control__loop_8h" startline="76" endline="80">advance_loop</referencedby>
      </memberdef>
    </sectiondef>
    <sectiondef kind="public-func">
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1a58198399010524f9d24d2614c958a3f4" prot="public" static="no" const="no" explicit="no" inline="yes" virt="non-virtual">
        <type></type>
        <definition>gr::blocks::control_loop::control_loop</definition>
        <argsstring>(void)</argsstring>
        <name>control_loop</name>
        <qualifiedname>gr::blocks::control_loop::control_loop</qualifiedname>
        <param>
          <type>void</type>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="59" column="5" bodyfile="gr-blocks/include/gnuradio/blocks/control_loop.h" bodystart="59" bodyend="59"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1a3a26bce3693aefd4728660b7882f7fe2" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type></type>
        <definition>gr::blocks::control_loop::control_loop</definition>
        <argsstring>(float loop_bw, float max_freq, float min_freq)</argsstring>
        <name>control_loop</name>
        <qualifiedname>gr::blocks::control_loop::control_loop</qualifiedname>
        <param>
          <type>float</type>
          <declname>loop_bw</declname>
        </param>
        <param>
          <type>float</type>
          <declname>max_freq</declname>
        </param>
        <param>
          <type>float</type>
          <declname>min_freq</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="60" column="5"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1a115a3768d189b629e65297f9e12d28c4" prot="public" static="no" const="no" explicit="no" inline="no" virt="virtual">
        <type></type>
        <definition>virtual gr::blocks::control_loop::~control_loop</definition>
        <argsstring>()</argsstring>
        <name>~control_loop</name>
        <qualifiedname>gr::blocks::control_loop::~control_loop</qualifiedname>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="61" column="13"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1acb261d4921aae70126685b9bcb31c84f" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>void</type>
        <definition>void gr::blocks::control_loop::update_gains</definition>
        <argsstring>()</argsstring>
        <name>update_gains</name>
        <qualifiedname>gr::blocks::control_loop::update_gains</qualifiedname>
        <briefdescription>
<para>Update the system gains from the loop bandwidth and damping factor. </para>
        </briefdescription>
        <detaileddescription>
<para>This function updates the system gains based on the loop bandwidth and damping factor of the system. These two factors can be set separately through their own set functions. </para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="71" column="10"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1a9ddc1f8d8367fe5b436cca7e7b514bb8" prot="public" static="no" const="no" explicit="no" inline="yes" virt="non-virtual">
        <type>void</type>
        <definition>void gr::blocks::control_loop::advance_loop</definition>
        <argsstring>(float error)</argsstring>
        <name>advance_loop</name>
        <qualifiedname>gr::blocks::control_loop::advance_loop</qualifiedname>
        <param>
          <type>float</type>
          <declname>error</declname>
        </param>
        <briefdescription>
<para>Advance the control loop based on the current gain settings and the inputted error signal. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="76" column="10" bodyfile="gr-blocks/include/gnuradio/blocks/control_loop.h" bodystart="76" bodyend="80"/>
        <references refid="classgr_1_1blocks_1_1control__loop_1a67112cc95cb9f12cd09e9be144b8cc83" compoundref="control__loop_8h" startline="56">d_alpha</references>
        <references refid="classgr_1_1blocks_1_1control__loop_1a2c2c67fcce7a11abbed6eb18b62b1546" compoundref="control__loop_8h" startline="56">d_beta</references>
        <references refid="classgr_1_1blocks_1_1control__loop_1a45fe93c2722efee119906cef0b88e222" compoundref="control__loop_8h" startline="53">d_freq</references>
        <references refid="classgr_1_1blocks_1_1control__loop_1af36d9458b26770d6a6c7025808be2414" compoundref="control__loop_8h" startline="53">d_phase</references>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1a410bd28032522a9ea3357e1760b8846b" prot="public" static="no" const="no" explicit="no" inline="yes" virt="non-virtual">
        <type>void</type>
        <definition>void gr::blocks::control_loop::phase_wrap</definition>
        <argsstring>()</argsstring>
        <name>phase_wrap</name>
        <qualifiedname>gr::blocks::control_loop::phase_wrap</qualifiedname>
        <briefdescription>
<para>Keep the phase between -2pi and 2pi. </para>
        </briefdescription>
        <detaileddescription>
<para>This function keeps the phase between -2pi and 2pi. If the phase is greater than 2pi by d, it wraps around to be -2pi+d; similarly if it is less than -2pi by d, it wraps around to 2pi-d.</para>
<para>This function should be called after advance_loop to keep the phase in a good operating region. It is set as a separate method in case another way is desired as this is fairly heavy-handed. </para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="95" column="10" bodyfile="gr-blocks/include/gnuradio/blocks/control_loop.h" bodystart="95" bodyend="101"/>
        <references refid="classgr_1_1blocks_1_1control__loop_1af36d9458b26770d6a6c7025808be2414" compoundref="control__loop_8h" startline="53">d_phase</references>
        <references refid="math_8h_1af58397066e4dbeafddbb2f331cd614a0" compoundref="math_8h" startline="32">GR_M_PI</references>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1a31b65cd76562c7ba387ceee475d3b102" prot="public" static="no" const="no" explicit="no" inline="yes" virt="non-virtual">
        <type>void</type>
        <definition>void gr::blocks::control_loop::frequency_limit</definition>
        <argsstring>()</argsstring>
        <name>frequency_limit</name>
        <qualifiedname>gr::blocks::control_loop::frequency_limit</qualifiedname>
        <briefdescription>
<para>Keep the frequency between d_min_freq and d_max_freq. </para>
        </briefdescription>
        <detaileddescription>
<para>This function keeps the frequency between d_min_freq and d_max_freq. If the frequency is greater than d_max_freq, it is set to d_max_freq. If the frequency is less than d_min_freq, it is set to d_min_freq.</para>
<para>This function should be called after advance_loop to keep the frequency in the specified region. It is set as a separate method in case another way is desired as this is fairly heavy-handed. </para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="116" column="10" bodyfile="gr-blocks/include/gnuradio/blocks/control_loop.h" bodystart="116" bodyend="122"/>
        <references refid="classgr_1_1blocks_1_1control__loop_1a45fe93c2722efee119906cef0b88e222" compoundref="control__loop_8h" startline="53">d_freq</references>
        <references refid="classgr_1_1blocks_1_1control__loop_1aa9a824b4eecf293229d122c4cf557b22" compoundref="control__loop_8h" startline="54">d_max_freq</references>
        <references refid="classgr_1_1blocks_1_1control__loop_1ac674611142e1e98f57b2683d6cd9b903" compoundref="control__loop_8h" startline="54">d_min_freq</references>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1ad0f94dae4f7d1d47c6bd34d8513aba0f" prot="public" static="no" const="no" explicit="no" inline="no" virt="virtual">
        <type>void</type>
        <definition>virtual void gr::blocks::control_loop::set_loop_bandwidth</definition>
        <argsstring>(float bw)</argsstring>
        <name>set_loop_bandwidth</name>
        <qualifiedname>gr::blocks::control_loop::set_loop_bandwidth</qualifiedname>
        <param>
          <type>float</type>
          <declname>bw</declname>
        </param>
        <briefdescription>
<para>Set the loop bandwidth. </para>
        </briefdescription>
        <detaileddescription>
<para>Set the loop filter&apos;s bandwidth to <computeroutput>bw</computeroutput>. This should be between 2*pi/200 and 2*pi/100 (in rads/samp). It must also be a positive number.</para>
<para>When a new damping factor is set, the gains, alpha and beta, of the loop are recalculated by a call to <ref refid="classgr_1_1blocks_1_1control__loop_1acb261d4921aae70126685b9bcb31c84f" kindref="member">update_gains()</ref>.</para>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>bw</parametername>
</parameternamelist>
<parameterdescription>
<para>(float) new bandwidth </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="142" column="18"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1abb3497f1bbae1f1835808e80e8d5d24f" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>void</type>
        <definition>void gr::blocks::control_loop::set_damping_factor</definition>
        <argsstring>(float df)</argsstring>
        <name>set_damping_factor</name>
        <qualifiedname>gr::blocks::control_loop::set_damping_factor</qualifiedname>
        <param>
          <type>float</type>
          <declname>df</declname>
        </param>
        <briefdescription>
<para>Set the loop damping factor. </para>
        </briefdescription>
        <detaileddescription>
<para>Set the loop filter&apos;s damping factor to <computeroutput>df</computeroutput>. The damping factor should be sqrt(2)/2.0 for critically damped systems. Set it to anything else only if you know what you are doing. It must be a number between 0 and 1.</para>
<para>When a new damping factor is set, the gains, alpha and beta, of the loop are recalculated by a call to <ref refid="classgr_1_1blocks_1_1control__loop_1acb261d4921aae70126685b9bcb31c84f" kindref="member">update_gains()</ref>.</para>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>df</parametername>
</parameternamelist>
<parameterdescription>
<para>(float) new damping factor </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="158" column="10"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1a96941dd371da64d83e3c3f8eab7bfc8a" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>void</type>
        <definition>void gr::blocks::control_loop::set_alpha</definition>
        <argsstring>(float alpha)</argsstring>
        <name>set_alpha</name>
        <qualifiedname>gr::blocks::control_loop::set_alpha</qualifiedname>
        <param>
          <type>float</type>
          <declname>alpha</declname>
        </param>
        <briefdescription>
<para>Set the loop gain alpha. </para>
        </briefdescription>
        <detaileddescription>
<para>Sets the loop filter&apos;s alpha gain parameter.</para>
<para>This value should really only be set by adjusting the loop bandwidth and damping factor.</para>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>alpha</parametername>
</parameternamelist>
<parameterdescription>
<para>(float) new alpha gain </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="171" column="10"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1a1bb58989ff0c57cf2cc90d0804788f6f" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>void</type>
        <definition>void gr::blocks::control_loop::set_beta</definition>
        <argsstring>(float beta)</argsstring>
        <name>set_beta</name>
        <qualifiedname>gr::blocks::control_loop::set_beta</qualifiedname>
        <param>
          <type>float</type>
          <declname>beta</declname>
        </param>
        <briefdescription>
<para>Set the loop gain beta. </para>
        </briefdescription>
        <detaileddescription>
<para>Sets the loop filter&apos;s beta gain parameter.</para>
<para>This value should really only be set by adjusting the loop bandwidth and damping factor.</para>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>beta</parametername>
</parameternamelist>
<parameterdescription>
<para>(float) new beta gain </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="184" column="10"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1a7739f1f594784e5757fa3f7aecf1de8b" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>void</type>
        <definition>void gr::blocks::control_loop::set_frequency</definition>
        <argsstring>(float freq)</argsstring>
        <name>set_frequency</name>
        <qualifiedname>gr::blocks::control_loop::set_frequency</qualifiedname>
        <param>
          <type>float</type>
          <declname>freq</declname>
        </param>
        <briefdescription>
<para>Set the control loop&apos;s frequency. </para>
        </briefdescription>
        <detaileddescription>
<para>Sets the control loop&apos;s frequency. While this is normally updated by the inner loop of the algorithm, it could be useful to manually initialize, set, or reset this under certain circumstances.</para>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>freq</parametername>
</parameternamelist>
<parameterdescription>
<para>(float) new frequency </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="197" column="10"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1ad3a05e49d58e840c46cbffe4b10b9a6b" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>void</type>
        <definition>void gr::blocks::control_loop::set_phase</definition>
        <argsstring>(float phase)</argsstring>
        <name>set_phase</name>
        <qualifiedname>gr::blocks::control_loop::set_phase</qualifiedname>
        <param>
          <type>float</type>
          <declname>phase</declname>
        </param>
        <briefdescription>
<para>Set the control loop&apos;s phase. </para>
        </briefdescription>
        <detaileddescription>
<para>Sets the control loop&apos;s phase. While this is normally updated by the inner loop of the algorithm, it could be useful to manually initialize, set, or reset this under certain circumstances.</para>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>phase</parametername>
</parameternamelist>
<parameterdescription>
<para>(float) new phase </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="210" column="10"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1aebbd72604f730759ec3b2caa52539bb3" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>void</type>
        <definition>void gr::blocks::control_loop::set_max_freq</definition>
        <argsstring>(float freq)</argsstring>
        <name>set_max_freq</name>
        <qualifiedname>gr::blocks::control_loop::set_max_freq</qualifiedname>
        <param>
          <type>float</type>
          <declname>freq</declname>
        </param>
        <briefdescription>
<para>Set the control loop&apos;s maximum frequency. </para>
        </briefdescription>
        <detaileddescription>
<para>Set the maximum frequency the control loop can track.</para>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>freq</parametername>
</parameternamelist>
<parameterdescription>
<para>(float) new max frequency </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="220" column="10"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1a2115b23308e2143b23c5ee6fc8f41e6d" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>void</type>
        <definition>void gr::blocks::control_loop::set_min_freq</definition>
        <argsstring>(float freq)</argsstring>
        <name>set_min_freq</name>
        <qualifiedname>gr::blocks::control_loop::set_min_freq</qualifiedname>
        <param>
          <type>float</type>
          <declname>freq</declname>
        </param>
        <briefdescription>
<para>Set the control loop&apos;s minimum frequency. </para>
        </briefdescription>
        <detaileddescription>
<para>Set the minimum frequency the control loop can track.</para>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>freq</parametername>
</parameternamelist>
<parameterdescription>
<para>(float) new min frequency </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="230" column="10"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1a3710c19b35c0b1a59db5a9cd5515f952" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
        <type>float</type>
        <definition>float gr::blocks::control_loop::get_loop_bandwidth</definition>
        <argsstring>() const</argsstring>
        <name>get_loop_bandwidth</name>
        <qualifiedname>gr::blocks::control_loop::get_loop_bandwidth</qualifiedname>
        <briefdescription>
<para>Returns the loop bandwidth. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="239" column="11"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1a070cc8aefc1bb3dbdff76c0f544a0bb0" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
        <type>float</type>
        <definition>float gr::blocks::control_loop::get_damping_factor</definition>
        <argsstring>() const</argsstring>
        <name>get_damping_factor</name>
        <qualifiedname>gr::blocks::control_loop::get_damping_factor</qualifiedname>
        <briefdescription>
<para>Returns the loop damping factor. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="244" column="11"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1a5a41324fba8159d00e74ceb033c02fcf" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
        <type>float</type>
        <definition>float gr::blocks::control_loop::get_alpha</definition>
        <argsstring>() const</argsstring>
        <name>get_alpha</name>
        <qualifiedname>gr::blocks::control_loop::get_alpha</qualifiedname>
        <briefdescription>
<para>Returns the loop gain alpha. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="249" column="11"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1a8c0e01186feb812dd5e244c084f30a8d" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
        <type>float</type>
        <definition>float gr::blocks::control_loop::get_beta</definition>
        <argsstring>() const</argsstring>
        <name>get_beta</name>
        <qualifiedname>gr::blocks::control_loop::get_beta</qualifiedname>
        <briefdescription>
<para>Returns the loop gain beta. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="254" column="11"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1a54b262246cef1895167549a6ceb82fff" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
        <type>float</type>
        <definition>float gr::blocks::control_loop::get_frequency</definition>
        <argsstring>() const</argsstring>
        <name>get_frequency</name>
        <qualifiedname>gr::blocks::control_loop::get_frequency</qualifiedname>
        <briefdescription>
<para>Get the control loop&apos;s frequency estimate. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="259" column="11"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1a3072d8c0fc324500dc7d6e052476627d" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
        <type>float</type>
        <definition>float gr::blocks::control_loop::get_phase</definition>
        <argsstring>() const</argsstring>
        <name>get_phase</name>
        <qualifiedname>gr::blocks::control_loop::get_phase</qualifiedname>
        <briefdescription>
<para>Get the control loop&apos;s phase estimate. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="264" column="11"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1ae3b8ed82a240da12580d21f413289f98" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
        <type>float</type>
        <definition>float gr::blocks::control_loop::get_max_freq</definition>
        <argsstring>() const</argsstring>
        <name>get_max_freq</name>
        <qualifiedname>gr::blocks::control_loop::get_max_freq</qualifiedname>
        <briefdescription>
<para>Get the control loop&apos;s maximum frequency. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="269" column="11"/>
      </memberdef>
      <memberdef kind="function" id="classgr_1_1blocks_1_1control__loop_1a2a60887a2e9f76651c34ba34f30313fa" prot="public" static="no" const="yes" explicit="no" inline="no" virt="non-virtual">
        <type>float</type>
        <definition>float gr::blocks::control_loop::get_min_freq</definition>
        <argsstring>() const</argsstring>
        <name>get_min_freq</name>
        <qualifiedname>gr::blocks::control_loop::get_min_freq</qualifiedname>
        <briefdescription>
<para>Get the control loop&apos;s minimum frequency. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="274" column="11"/>
      </memberdef>
    </sectiondef>
    <briefdescription>
<para>A second-order control loop implementation class. </para>
    </briefdescription>
    <detaileddescription>
<para>This class implements a second order control loop and is intended to act as a parent class to blocks which need a control loop (e.g., <ref refid="classgr_1_1digital_1_1costas__loop__cc" kindref="compound">gr::digital::costas_loop_cc</ref>, <ref refid="classgr_1_1analog_1_1pll__refout__cc" kindref="compound">gr::analog::pll_refout_cc</ref>, etc.). It takes in a loop bandwidth as well as a max and min frequency and provides the functions that control the update of the loop.</para>
<para>The loop works of alpha and beta gains. These gains are calculated using the input loop bandwidth and a pre-set damping factor. The damping factor can be changed using the <ref refid="classgr_1_1blocks_1_1control__loop_1abb3497f1bbae1f1835808e80e8d5d24f" kindref="member">set_damping_factor</ref> after the block is constructed. The alpha and beta values can be set using their respective <ref refid="classgr_1_1blocks_1_1control__loop_1a96941dd371da64d83e3c3f8eab7bfc8a" kindref="member">set_alpha</ref> or <ref refid="classgr_1_1blocks_1_1control__loop_1a1bb58989ff0c57cf2cc90d0804788f6f" kindref="member">set_beta</ref> functions if very precise control over these is required.</para>
<para>The class tracks both phase and frequency of a signal based on an error signal. The error calculation is unique for each algorithm and is calculated externally and passed to the advance_loop function, which uses this to update its phase and frequency estimates.</para>
<para>This class also provides the functions <ref refid="classgr_1_1blocks_1_1control__loop_1a410bd28032522a9ea3357e1760b8846b" kindref="member">phase_wrap</ref> and <ref refid="classgr_1_1blocks_1_1control__loop_1a31b65cd76562c7ba387ceee475d3b102" kindref="member">frequency_limit</ref> to easily keep the phase and frequency estimates within our set bounds (phase_wrap keeps it within +/-2pi). </para>
    </detaileddescription>
    <inheritancegraph>
      <node id="2">
        <label>gr::analog::pll_carriertracking_cc</label>
        <link refid="classgr_1_1analog_1_1pll__carriertracking__cc"/>
        <childnode refid="1" relation="public-inheritance">
        </childnode>
      </node>
      <node id="3">
        <label>gr::analog::pll_freqdet_cf</label>
        <link refid="classgr_1_1analog_1_1pll__freqdet__cf"/>
        <childnode refid="1" relation="public-inheritance">
        </childnode>
      </node>
      <node id="4">
        <label>gr::analog::pll_refout_cc</label>
        <link refid="classgr_1_1analog_1_1pll__refout__cc"/>
        <childnode refid="1" relation="public-inheritance">
        </childnode>
      </node>
      <node id="1">
        <label>gr::blocks::control_loop</label>
        <link refid="classgr_1_1blocks_1_1control__loop"/>
      </node>
      <node id="5">
        <label>gr::digital::constellation_receiver_cb</label>
        <link refid="classgr_1_1digital_1_1constellation__receiver__cb"/>
        <childnode refid="1" relation="public-inheritance">
        </childnode>
      </node>
      <node id="6">
        <label>gr::digital::costas_loop_cc</label>
        <link refid="classgr_1_1digital_1_1costas__loop__cc"/>
        <childnode refid="1" relation="public-inheritance">
        </childnode>
      </node>
      <node id="7">
        <label>gr::digital::fll_band_edge_cc</label>
        <link refid="classgr_1_1digital_1_1fll__band__edge__cc"/>
        <childnode refid="1" relation="public-inheritance">
        </childnode>
      </node>
    </inheritancegraph>
    <location file="gr-blocks/include/gnuradio/blocks/control_loop.h" line="50" column="1" bodyfile="gr-blocks/include/gnuradio/blocks/control_loop.h" bodystart="51" bodyend="275"/>
    <listofallmembers>
      <member refid="classgr_1_1blocks_1_1control__loop_1a9ddc1f8d8367fe5b436cca7e7b514bb8" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>advance_loop</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a58198399010524f9d24d2614c958a3f4" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>control_loop</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a3a26bce3693aefd4728660b7882f7fe2" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>control_loop</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a67112cc95cb9f12cd09e9be144b8cc83" prot="protected" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>d_alpha</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a2c2c67fcce7a11abbed6eb18b62b1546" prot="protected" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>d_beta</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a3668de07bed21c240ce31daeb4b5f563" prot="protected" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>d_damping</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a45fe93c2722efee119906cef0b88e222" prot="protected" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>d_freq</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a6542b914418ec6586f782f9dc32c66e2" prot="protected" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>d_loop_bw</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1aa9a824b4eecf293229d122c4cf557b22" prot="protected" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>d_max_freq</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1ac674611142e1e98f57b2683d6cd9b903" prot="protected" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>d_min_freq</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1af36d9458b26770d6a6c7025808be2414" prot="protected" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>d_phase</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a31b65cd76562c7ba387ceee475d3b102" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>frequency_limit</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a5a41324fba8159d00e74ceb033c02fcf" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>get_alpha</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a8c0e01186feb812dd5e244c084f30a8d" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>get_beta</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a070cc8aefc1bb3dbdff76c0f544a0bb0" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>get_damping_factor</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a54b262246cef1895167549a6ceb82fff" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>get_frequency</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a3710c19b35c0b1a59db5a9cd5515f952" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>get_loop_bandwidth</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1ae3b8ed82a240da12580d21f413289f98" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>get_max_freq</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a2a60887a2e9f76651c34ba34f30313fa" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>get_min_freq</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a3072d8c0fc324500dc7d6e052476627d" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>get_phase</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a410bd28032522a9ea3357e1760b8846b" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>phase_wrap</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a96941dd371da64d83e3c3f8eab7bfc8a" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>set_alpha</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a1bb58989ff0c57cf2cc90d0804788f6f" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>set_beta</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1abb3497f1bbae1f1835808e80e8d5d24f" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>set_damping_factor</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a7739f1f594784e5757fa3f7aecf1de8b" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>set_frequency</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1ad0f94dae4f7d1d47c6bd34d8513aba0f" prot="public" virt="virtual"><scope>gr::blocks::control_loop</scope><name>set_loop_bandwidth</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1aebbd72604f730759ec3b2caa52539bb3" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>set_max_freq</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a2115b23308e2143b23c5ee6fc8f41e6d" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>set_min_freq</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1ad3a05e49d58e840c46cbffe4b10b9a6b" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>set_phase</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1acb261d4921aae70126685b9bcb31c84f" prot="public" virt="non-virtual"><scope>gr::blocks::control_loop</scope><name>update_gains</name></member>
      <member refid="classgr_1_1blocks_1_1control__loop_1a115a3768d189b629e65297f9e12d28c4" prot="public" virt="virtual"><scope>gr::blocks::control_loop</scope><name>~control_loop</name></member>
    </listofallmembers>
  </compounddef>
</doxygen>
