Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Op25 june 22 #709

Merged
merged 5 commits into from
Jul 2, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,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