[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r4211 - gnuradio/branches/developers/trondeau/digital-
From: |
trondeau |
Subject: |
[Commit-gnuradio] r4211 - gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general |
Date: |
Mon, 1 Jan 2007 13:57:03 -0700 (MST) |
Author: trondeau
Date: 2007-01-01 13:57:03 -0700 (Mon, 01 Jan 2007)
New Revision: 4211
Modified:
gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.cc
gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.h
gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.i
Log:
fixing class name and bugs in mpsk receiver
Modified:
gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.cc
===================================================================
---
gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.cc
2007-01-01 19:59:43 UTC (rev 4210)
+++
gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.cc
2007-01-01 20:57:03 UTC (rev 4211)
@@ -26,7 +26,7 @@
#include <gr_io_signature.h>
#include <gr_prefs.h>
-#include <gr_timing_recovery_simple_cc.h>
+#include <gr_mpsk_receiver_cc.h>
#include <stdexcept>
#include <gr_math.h>
#include <gr_expj.h>
@@ -38,26 +38,26 @@
// Public constructor
-gr_timing_recovery_simple_cc_sptr
-gr_make_timing_recovery_simple_cc(unsigned int M, float theta,
+gr_mpsk_receiver_cc_sptr
+gr_make_mpsk_receiver_cc(unsigned int M, float theta,
float alpha, float beta,
float fmin, float fmax,
float mu, float gain_mu,
float omega, float gain_omega, float
omega_rel)
{
- return gr_timing_recovery_simple_cc_sptr (new gr_timing_recovery_simple_cc
(M, theta,
+ return gr_mpsk_receiver_cc_sptr (new gr_mpsk_receiver_cc (M, theta,
alpha, beta,
fmin, fmax,
mu, gain_mu,
omega, gain_omega, omega_rel));
}
-gr_timing_recovery_simple_cc::gr_timing_recovery_simple_cc (unsigned int M,
float theta,
+gr_mpsk_receiver_cc::gr_mpsk_receiver_cc (unsigned int M, float theta,
float alpha, float
beta,
float fmin, float
fmax,
float mu, float
gain_mu,
float omega, float
gain_omega, float omega_rel)
- : gr_block ("timing_recovery_simple_cc",
+ : gr_block ("mpsk_receiver_cc",
gr_make_io_signature (1, 1, sizeof (gr_complex)),
gr_make_io_signature (1, 1, sizeof (gr_complex))),
d_M(M), d_theta(theta),
@@ -74,18 +74,18 @@
// Select a phase detector and a decision maker for the modulation order
switch(d_M) {
case 2: // optimized algorithms for BPSK
- d_phase_error_detector =
&gr_timing_recovery_simple_cc::phase_error_detector_bpsk;
- d_decision = &gr_timing_recovery_simple_cc::decision_bpsk;
+ d_phase_error_detector = &gr_mpsk_receiver_cc::phase_error_detector_bpsk;
+ d_decision = &gr_mpsk_receiver_cc::decision_bpsk;
break;
case 4: // optimized algorithms for QPSK
- d_phase_error_detector =
&gr_timing_recovery_simple_cc::phase_error_detector_qpsk;
- d_decision = &gr_timing_recovery_simple_cc::decision_qpsk;
+ d_phase_error_detector = &gr_mpsk_receiver_cc::phase_error_detector_qpsk;
+ d_decision = &gr_mpsk_receiver_cc::decision_qpsk;
break;
default: // generic algorithms for any M (power of 2?) but not pretty
- d_phase_error_detector =
&gr_timing_recovery_simple_cc::phase_error_detector_generic;
- d_decision = &gr_timing_recovery_simple_cc::decision_generic;
+ d_phase_error_detector =
&gr_mpsk_receiver_cc::phase_error_detector_generic;
+ d_decision = &gr_mpsk_receiver_cc::decision_generic;
break;
}
@@ -93,7 +93,7 @@
fout.open("timing_recovery.txt");
}
-gr_timing_recovery_simple_cc::~gr_timing_recovery_simple_cc ()
+gr_mpsk_receiver_cc::~gr_mpsk_receiver_cc ()
{
// FIXME: remove when we've got everything working
fout.close();
@@ -101,27 +101,27 @@
}
void
-gr_timing_recovery_simple_cc::forecast(int noutput_items, gr_vector_int
&ninput_items_required)
+gr_mpsk_receiver_cc::forecast(int noutput_items, gr_vector_int
&ninput_items_required)
{
unsigned ninputs = ninput_items_required.size();
for (unsigned i=0; i < ninputs; i++)
- ninput_items_required[i] = d_samples_per_symbol+d_offset;
+ ninput_items_required[i] = (int)(d_omega);
}
float
-gr_timing_recovery_simple_cc::phase_error_detector_qpsk(gr_complex sample)
const
+gr_mpsk_receiver_cc::phase_error_detector_qpsk(gr_complex sample) const
{
return ((sample.real()>0 ? 1.0 : -1.0) * sample.imag() -
(sample.imag()>0 ? 1.0 : -1.0) * sample.real());
}
float
-gr_timing_recovery_simple_cc::phase_error_detector_bpsk(gr_complex sample)
const
+gr_mpsk_receiver_cc::phase_error_detector_bpsk(gr_complex sample) const
{
return (sample.real()*sample.imag());
}
-float gr_timing_recovery_simple_cc::phase_error_detector_generic(gr_complex
sample) const
+float gr_mpsk_receiver_cc::phase_error_detector_generic(gr_complex sample)
const
{
unsigned int min_m = 0;
gr_complex constpoint;
@@ -148,7 +148,7 @@
}
gr_complex
-gr_timing_recovery_simple_cc::decision_bpsk(gr_complex sample) const
+gr_mpsk_receiver_cc::decision_bpsk(gr_complex sample) const
{
float real=-0.5, imag=0.0;
@@ -159,7 +159,7 @@
}
gr_complex
-gr_timing_recovery_simple_cc::decision_qpsk(gr_complex sample) const
+gr_mpsk_receiver_cc::decision_qpsk(gr_complex sample) const
{
float real=-0.5, imag=-0.5;
@@ -172,7 +172,7 @@
}
gr_complex
-gr_timing_recovery_simple_cc::decision_generic(gr_complex sample) const
+gr_mpsk_receiver_cc::decision_generic(gr_complex sample) const
{
unsigned int min_m = 0;
gr_complex constpoint;
@@ -195,7 +195,7 @@
}
int
-gr_timing_recovery_simple_cc::general_work (int noutput_items,
+gr_mpsk_receiver_cc::general_work (int noutput_items,
gr_vector_int &ninput_items,
gr_vector_const_void_star
&input_items,
gr_vector_void_star &output_items)
@@ -241,7 +241,6 @@
}
if(i < ninput_items[0]) {
- d_offset = d_samples_per_symbol;
gr_complex interp_sample = d_interp->interpolate(&d_dl[d_dl_idx], d_mu);
// Make sample timing corrections
Modified:
gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.h
===================================================================
---
gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.h
2007-01-01 19:59:43 UTC (rev 4210)
+++
gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.h
2007-01-01 20:57:03 UTC (rev 4211)
@@ -20,8 +20,8 @@
* Boston, MA 02110-1301, USA.
*/
-#ifndef INCLUDED_GR_TIMING_RECOVERY_SIMPLE_CC_H
-#define INCLUDED_GR_TIMING_RECOVERY_SIMPLE_CC_H
+#ifndef INCLUDED_GR_MPSK_RECEIVER_CC_H
+#define INCLUDED_GR_MPSK_RECEIVER_CC_H
#include <gr_block.h>
#include <gr_complex.h>
@@ -29,16 +29,16 @@
class gri_mmse_fir_interpolator_cc;
-class gr_timing_recovery_simple_cc;
-typedef boost::shared_ptr<gr_timing_recovery_simple_cc>
gr_timing_recovery_simple_cc_sptr;
+class gr_mpsk_receiver_cc;
+typedef boost::shared_ptr<gr_mpsk_receiver_cc> gr_mpsk_receiver_cc_sptr;
// public constructor
-gr_timing_recovery_simple_cc_sptr
-gr_make_timing_recovery_simple_cc (unsigned int M, float theta,
- float alpha, float beta,
- float fmin, float fmax,
- float mu, float gain_mu,
- float omega, float gain_omega, float
omega_rel);
+gr_mpsk_receiver_cc_sptr
+gr_make_mpsk_receiver_cc (unsigned int M, float theta,
+ float alpha, float beta,
+ float fmin, float fmax,
+ float mu, float gain_mu,
+ float omega, float gain_omega, float omega_rel);
/*!
* \brief This block takes care of receiving M-PSK modulated signals through
phase, frequency, and symbol
@@ -68,10 +68,10 @@
*
*/
-class gr_timing_recovery_simple_cc : public gr_block
+class gr_mpsk_receiver_cc : public gr_block
{
public:
- ~gr_timing_recovery_simple_cc ();
+ ~gr_mpsk_receiver_cc ();
void forecast(int noutput_items, gr_vector_int &ninput_items_required);
int general_work (int noutput_items,
gr_vector_int &ninput_items,
@@ -121,19 +121,19 @@
float freq() const { return d_freq; }
//! (CL) Returns the current value of the phase of the NCO in the Costal loop
- float phase() const { return d_phaes; }
+ float phase() const { return d_phase; }
//! (CL) Sets the value for alpha (the phase gain term)
void set_alpha(float alpha) { d_alpha = alpha; }
//! (CL) Setss the value of beta (the frequency gain term)
- float set_beta(float beta) { d_beta = beta; }
+ void set_beta(float beta) { d_beta = beta; }
//! (CL) Sets the current value of the frequency of the NCO in the Costas
loop
- float set_freq(float freq) { d_freq = freq; }
+ void set_freq(float freq) { d_freq = freq; }
//! (CL) Setss the current value of the phase of the NCO in the Costal loop
- float set_phase(float phase) { d_phaes = phase; }
+ void set_phase(float phase) { d_phase = phase; }
protected:
@@ -156,7 +156,7 @@
* The constructor also chooses which phase detector and decision maker to
use in the work loop based on the
* value of M.
*/
- gr_timing_recovery_simple_cc (unsigned int M, float theta,
+ gr_mpsk_receiver_cc (unsigned int M, float theta,
float alpha, float beta,
float fmin, float fmax,
float mu, float gain_mu,
@@ -260,13 +260,13 @@
* This is a function pointer that is set in the constructor to point to the
proper decision function
* for the specified constellation order.
*/
- gr_complex (gr_timing_recovery_simple_cc::*d_decision)(gr_complex sample)
const; // pointer to decision function
+ gr_complex (gr_mpsk_receiver_cc::*d_decision)(gr_complex sample) const; //
pointer to decision function
// Members related to symbol timing
float d_mu, d_gain_mu;
- float d_omega, d_gain_omega, d_omega_rel, d_min_omega, d_max_omega;
+ float d_omega, d_gain_omega, d_omega_rel, d_max_omega, d_min_omega;
gr_complex d_p_2T, d_p_1T, d_p_0T;
gr_complex d_c_2T, d_c_1T, d_c_0T;
@@ -278,7 +278,7 @@
* This is a function pointer that is set in the constructor to point to the
proper phase error detector
* function for the specified constellation order.
*/
- float (gr_timing_recovery_simple_cc::*d_phase_error_detector)(gr_complex
sample) const;
+ float (gr_mpsk_receiver_cc::*d_phase_error_detector)(gr_complex sample)
const;
//! get interpolated value
@@ -296,12 +296,12 @@
// FIXME: remove this once we're satisfied it all works
std::ofstream fout;
- friend gr_timing_recovery_simple_cc_sptr
- gr_make_timing_recovery_simple_cc (unsigned int M, float theta,
- float alpha, float beta,
- float fmin, float fmax,
- float mu, float gain_mu,
- float omega, float gain_omega, float
omega_rel);
+ friend gr_mpsk_receiver_cc_sptr
+ gr_make_mpsk_receiver_cc (unsigned int M, float theta,
+ float alpha, float beta,
+ float fmin, float fmax,
+ float mu, float gain_mu,
+ float omega, float gain_omega, float omega_rel);
};
#endif
Modified:
gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.i
===================================================================
---
gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.i
2007-01-01 19:59:43 UTC (rev 4210)
+++
gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.i
2007-01-01 20:57:03 UTC (rev 4211)
@@ -20,23 +20,40 @@
* Boston, MA 02110-1301, USA.
*/
-GR_SWIG_BLOCK_MAGIC(gr,timing_recovery_simple_cc);
+GR_SWIG_BLOCK_MAGIC(gr,mpsk_receiver_cc);
-gr_timing_recovery_simple_cc_sptr gr_make_timing_recovery_simple_cc (unsigned
int M, float theta,
- float
alpha, float beta,
- float
fmin, float fmax,
- float mu,
float gain_mu,
- float
omega, float gain_omega, float omega_rel);
-class gr_timing_recovery_simple_cc : public gr_block
+gr_mpsk_receiver_cc_sptr gr_make_mpsk_receiver_cc (unsigned int M, float theta,
+ float alpha, float beta,
+ float fmin, float fmax,
+ float mu, float gain_mu,
+ float omega, float
gain_omega, float omega_rel);
+class gr_mpsk_receiver_cc : public gr_block
{
private:
- gr_timing_recovery_simple_cc (unsigned int M,float theta,
+ gr_mpsk_receiver_cc (unsigned int M,float theta,
float alpha, float beta,
float fmin, float fmax,
float mu, float gain_mu,
float omega, float gain_omega, float omega_rel);
public:
- unsigned int samples_per_symbol() const { return d_samples_per_symbol;}
-
- void set_samples_per_symbol (unsigned int samples_per_symbol) {
d_samples_per_symbol = samples_per_symbol; }
+ float mu() const { return d_mu;}
+ float omega() const { return d_omega;}
+ float gain_mu() const { return d_gain_mu;}
+ float gain_omega() const { return d_gain_omega;}
+ void set_mu (float mu) { d_mu = mu; }
+ void set_omega (float omega) {
+ d_omega = omega;
+ d_min_omega = omega*(1.0 - d_omega_rel);
+ d_max_omega = omega*(1.0 + d_omega_rel);
+ }
+ void set_gain_mu (float gain_mu) { d_gain_mu = gain_mu; }
+ void set_gain_omega (float gain_omega) { d_gain_omega = gain_omega; }
+ float alpha() const { return d_alpha; }
+ float beta() const { return d_beta; }
+ float freq() const { return d_freq; }
+ float phase() const { return d_phase; }
+ void set_alpha(float alpha) { d_alpha = alpha; }
+ void set_beta(float beta) { d_beta = beta; }
+ void set_freq(float freq) { d_freq = freq; }
+ void set_phase(float phase) { d_phase = phase; }
};
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r4211 - gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general,
trondeau <=