[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r4218 - gnuradio/branches/developers/trondeau/digital-
From: |
trondeau |
Subject: |
[Commit-gnuradio] r4218 - gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general |
Date: |
Tue, 2 Jan 2007 16:53:48 -0700 (MST) |
Author: trondeau
Date: 2007-01-02 16:53:48 -0700 (Tue, 02 Jan 2007)
New Revision: 4218
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
Log:
updates to mpsk receiver to take care of some limit checking and other
formatting issues
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-02 23:50:32 UTC (rev 4217)
+++
gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.cc
2007-01-02 23:53:48 UTC (rev 4218)
@@ -40,30 +40,30 @@
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)
+ float alpha, float beta,
+ float fmin, float fmax,
+ float mu, float gain_mu,
+ float omega, float gain_omega, float omega_rel)
{
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));
+ alpha, beta,
+ fmin, fmax,
+ mu, gain_mu,
+ omega, gain_omega,
omega_rel));
}
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)
+ float alpha, float beta,
+ float fmin, float fmax,
+ float mu, float gain_mu,
+ float omega, float gain_omega, float
omega_rel)
: 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),
- d_alpha(alpha), d_beta(beta), d_freq(0), d_phase(0),
+ d_alpha(alpha), d_beta(beta), d_freq(0), d_max_freq(fmax),
d_min_freq(fmin), d_phase(0),
d_mu(mu), d_gain_mu(gain_mu), d_gain_omega(gain_omega),
- d_max_omega(omega+omega_rel), d_min_omega(omega-omega_rel),
+ d_omega_rel(omega_rel), d_max_omega(0), d_min_omega(0),
d_p_2T(0), d_p_1T(0), d_p_0T(0), d_c_2T(0), d_c_1T(0), d_c_0T(0)
{
d_interp = new gri_mmse_fir_interpolator_cc();
@@ -71,6 +71,18 @@
set_omega(omega);
+ if (omega <= 0.0)
+ throw std::out_of_range ("clock rate must be > 0");
+ if (gain_mu < 0 || gain_omega < 0)
+ throw std::out_of_range ("Gains must be non-negative");
+
+ assert(d_interp->ntaps() <= DLLEN);
+
+ // zero double length delay line.
+ for (unsigned int i = 0; i < 2 * DLLEN; i++)
+ d_dl[i] = gr_complex(0.0,0.0);
+
+
// Select a phase detector and a decision maker for the modulation order
switch(d_M) {
case 2: // optimized algorithms for BPSK
@@ -196,9 +208,9 @@
int
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)
+ gr_vector_int &ninput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
{
const gr_complex *in = (const gr_complex *) input_items[0];
gr_complex *out = (gr_complex *) output_items[0];
@@ -209,7 +221,6 @@
int i=0, o=0;
while(i < ninput_items[0]) {
-
while((d_mu > 1) && (i < ninput_items[0])) {
d_mu--; // skip a number of symbols between sampling
d_phase += d_freq; // increment the phase based on the frequency of the
rotation
@@ -242,7 +253,7 @@
if(i < ninput_items[0]) {
gr_complex interp_sample = d_interp->interpolate(&d_dl[d_dl_idx], d_mu);
-
+
// Make sample timing corrections
d_p_2T = d_p_1T;
d_p_1T = d_p_0T;
@@ -256,7 +267,7 @@
y = (d_p_0T - d_p_2T) * conj(d_c_1T);
u = y - x;
mm_error = u.real();
-
+
// limit mm_val
if (mm_error > 1.0)
mm_error = 1.0;
@@ -281,12 +292,18 @@
d_freq += d_beta*phase_error;
d_phase += d_alpha*phase_error;
- // FIXME: Add frequency clamping
+ while(d_phase>M_TWOPI)
+ d_phase -= M_TWOPI;
+ while(d_phase<-M_TWOPI)
+ d_phase += M_TWOPI;
- out[o++] = d_p_0T; //interp_sample;
+ if (d_freq > d_max_freq)
+ d_freq = d_max_freq;
+ else if (d_freq < d_min_freq)
+ d_freq = d_min_freq;
+
+ out[o++] = d_p_0T;
}
-
- //printf("\t interpolated sample: %f+j*%f\n\n", interp_sample.real(),
interp_sample.imag());
}
consume_each(i);
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-02 23:50:32 UTC (rev 4217)
+++
gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.h
2007-01-02 23:53:48 UTC (rev 4218)
@@ -249,7 +249,7 @@
// Members related to carrier and phase tracking
float d_alpha;
float d_beta;
- float d_freq;
+ float d_freq, d_max_freq, d_min_freq;
float d_phase;
/*!
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r4218 - gnuradio/branches/developers/trondeau/digital-wip2/gnuradio-core/src/lib/general,
trondeau <=