Skip to content

Commit

Permalink
Merge pull request #709 from robotastic/op25-june-22
Browse files Browse the repository at this point in the history
Op25 june 22
  • Loading branch information
robotastic authored Jul 2, 2022
2 parents 68d3c71 + b500445 commit 75ee0c3
Show file tree
Hide file tree
Showing 40 changed files with 1,478 additions and 689 deletions.
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,7 @@ list(APPEND trunk_recorder_sources
trunk-recorder/gr_blocks/plugin_wrapper_impl.cc
trunk-recorder/gr_blocks/selector_impl.cc
trunk-recorder/gr_blocks/wavfile_gr3.8.cc
trunk-recorder/gr_blocks/rms_agc.cc
)


Expand Down
93 changes: 93 additions & 0 deletions lib/op25_repeater/include/op25_repeater/costas_loop_cc.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
/* -*- c++ -*- */
/*
* Copyright 2006,2011,2012,2014 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* GNU Radio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/

#ifndef INCLUDED_OP25_REPEATER_COSTAS_LOOP_CC_H
#define INCLUDED_OP25_REPEATER_COSTAS_LOOP_CC_H

#include <op25_repeater/api.h>
#include <gnuradio/sync_block.h>

namespace gr {
namespace op25_repeater {

/*!
* \brief A Costas loop carrier recovery module.
* \ingroup synchronizers_blk
*
* \details
* The Costas loop locks to the center frequency of a signal and
* downconverts it to baseband.
*
* \li When order=2: used for BPSK where the real part of the
* output signal is the baseband BPSK signal and the imaginary
* part is the error signal.
*
* \li When order=4: can be used for QPSK where both I and Q (real
* and imaginary) are outputted.
*
* \li When order=8: used for 8PSK.
*
* More details can be found online:
*
* J. Feigin, "Practical Costas loop design: Designing a simple
* and inexpensive BPSK Costas loop carrier recovery circuit," RF
* signal processing, pp. 20-36, 2002.
*
* http://rfdesign.com/images/archive/0102Feigin20.pdf
*
* The Costas loop has one output stream:
* \li stream 1 (required) is the baseband I and Q;
*
*/
class OP25_REPEATER_API costas_loop_cc : virtual public sync_block
{
public:
// gr::digital::costas_loop_cc::sptr

#if GNURADIO_VERSION < 0x030900
typedef boost::shared_ptr<costas_loop_cc> sptr;
#else
typedef std::shared_ptr<costas_loop_cc> sptr;
#endif

/*!
* Make a Costas loop carrier recovery block.
*
* \param loop_bw internal 2nd order loop bandwidth (~ 2pi/100)
* \param order the loop order, either 2, 4, or 8
*/
static sptr make(float loop_bw, int order, float max_phase);

/*!
* Returns the current value of the loop error.
*/
virtual float error() const = 0;
virtual float get_phase() const = 0;
virtual void set_frequency(float freq) { }
virtual void set_phase(float phase) { }
virtual void set_max_phase(float phase) { }
};

} /* namespace op25_repeater */
} /* namespace gr */

#endif /* INCLUDED_OP25_REPEATER_COSTAS_LOOP_CC_H */
9 changes: 3 additions & 6 deletions lib/op25_repeater/include/op25_repeater/fsk4_slicer_fb.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,12 @@ namespace gr {
class OP25_REPEATER_API fsk4_slicer_fb : virtual public gr::sync_block
{
public:
#if GNURADIO_VERSION < 0x030900
#if GNURADIO_VERSION < 0x030900
typedef boost::shared_ptr<fsk4_slicer_fb> sptr;
#else
typedef std::shared_ptr<fsk4_slicer_fb> sptr;
#endif
#if GNURADIO_VERSION < 0x030900

#else

#endif
/*!
* \brief Return a shared_ptr to a new instance of op25_repeater::fsk4_slicer_fb.
*
Expand All @@ -54,7 +50,8 @@ namespace gr {
* class. op25_repeater::fsk4_slicer_fb::make is the public interface for
* creating new instances.
*/
static sptr make(const std::vector<float> &slice_levels);
static sptr make(const int msgq_id, const int debug, const std::vector<float> &slice_levels);
virtual void set_debug(int debug) {}
};

} // namespace op25_repeater
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
*/


#ifndef INCLUDED_OP25_REPEATER_GARDNER_COSTAS_CC_H
#define INCLUDED_OP25_REPEATER_GARDNER_COSTAS_CC_H
#ifndef INCLUDED_OP25_REPEATER_GARDNER_CC_H
#define INCLUDED_OP25_REPEATER_GARDNER_CC_H

#include <op25_repeater/api.h>
#include <gnuradio/block.h>
Expand All @@ -33,34 +33,36 @@ namespace gr {
* \ingroup op25_repeater
*
*/
class OP25_REPEATER_API gardner_costas_cc : virtual public gr::block
class OP25_REPEATER_API gardner_cc : virtual public gr::block
{
public:

#if GNURADIO_VERSION < 0x030900
typedef boost::shared_ptr<gardner_costas_cc> sptr;
#else
typedef std::shared_ptr<gardner_costas_cc> sptr;
#endif
#if GNURADIO_VERSION < 0x030900
typedef boost::shared_ptr<gardner_cc> sptr;
#else
typedef std::shared_ptr<gardner_cc> sptr;
#endif


/*!
* \brief Return a shared_ptr to a new instance of op25_repeater::gardner_costas_cc.
* \brief Return a shared_ptr to a new instance of op25_repeater::gardner_cc.
*
* To avoid accidental use of raw pointers, op25_repeater::gardner_costas_cc's
* To avoid accidental use of raw pointers, op25_repeater::gardner_cc's
* constructor is in a private implementation
* class. op25_repeater::gardner_costas_cc::make is the public interface for
* class. op25_repeater::gardner_cc::make is the public interface for
* creating new instances.
*/
static sptr make(float samples_per_symbol, float gain_mu, float gain_omega, float alpha, float beta, float max_freq, float min_freq);
static sptr make(float samples_per_symbol,
float gain_mu,
float gain_omega,
float lock_threshold = 0.28);
virtual void set_omega(float omega) {}
virtual float get_freq_error(void) { return 0; }
virtual int get_error_band(void) { return 0; }
virtual void reset() {}
virtual void update_omega (float samples_per_symbol) {}
virtual void update_fmax (float max_freq) {}
virtual bool locked() { return false; }
virtual float quality() { return 0; }
};

} // namespace op25_repeater
} // namespace gr

#endif /* INCLUDED_OP25_REPEATER_GARDNER_COSTAS_CC_H */
#endif /* INCLUDED_OP25_REPEATER_GARDNER_CC_H */

3 changes: 2 additions & 1 deletion lib/op25_repeater/lib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ list(APPEND op25_repeater_sources
ysf_tx_sb_impl.cc
dstar_tx_sb_impl.cc
vocoder_impl.cc
gardner_costas_cc_impl.cc
gardner_cc_impl.cc
costas_loop_cc_impl.cc
p25_frame_assembler_impl.cc
frame_assembler_impl.cc
analog_udp_impl.cc
Expand Down
Loading

0 comments on commit 75ee0c3

Please sign in to comment.