[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r4659 - gnuradio/branches/developers/n4hy/ofdm/gnuradi
From: |
trondeau |
Subject: |
[Commit-gnuradio] r4659 - gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general |
Date: |
Tue, 27 Feb 2007 08:26:44 -0700 (MST) |
Author: trondeau
Date: 2007-02-27 08:26:44 -0700 (Tue, 27 Feb 2007)
New Revision: 4659
Modified:
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_correlator.cc
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_correlator.h
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_correlator.i
Log:
updates correlator to use multiple signals and estimation of SNR
Modified:
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_correlator.cc
===================================================================
---
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_correlator.cc
2007-02-27 15:24:07 UTC (rev 4658)
+++
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_correlator.cc
2007-02-27 15:26:44 UTC (rev 4659)
@@ -27,7 +27,7 @@
#include <gr_ofdm_correlator.h>
#include <gr_io_signature.h>
-#define VERBOSE 0
+#define VERBOSE 0
#define M_TWOPI (2*M_PI)
gr_ofdm_correlator_sptr
@@ -119,7 +119,11 @@
found = true;
d_coarse_freq = search_delta;
d_phase_count = 1;
- printf("found at search delta: %d\n", search_delta);
+ d_snr_est = 10*log10(power/(power-h_sqrd.real()));
+
+ printf("CORR: Found, bin %d\tSNR Est %f dB\tcorr power fraction %f\n",
+ search_delta, d_snr_est, h_sqrd.real()/power);
+ //
search_delta,10*log10(h_sqrd.real()/fabs(h_sqrd.imag())),h_sqrd.real()/power);
break;
}
else {
@@ -133,18 +137,20 @@
}
void
-gr_ofdm_correlator::calculate_equalizer(const gr_complex *current, int
zeros_on_left)
+gr_ofdm_correlator::calculate_equalizer(const gr_complex *previous, const
gr_complex *current,
+ int zeros_on_left)
{
unsigned int i=0;
- gr_complex hesttemp;
for(i = 0; i < d_occupied_carriers; i++) {
// FIXME possibly add small epsilon in divisor to protect from div 0
- //hesttemp = d_known_symbol1[i] / previous[i+zeros_on_left];
- hesttemp = d_known_symbol2[i] /
(coarse_freq_comp(d_coarse_freq,1)*current[i+zeros_on_left+d_coarse_freq]);
+ //d_hestimate[i] = 0.5F * (d_known_symbol1[i] / previous[i+zeros_on_left] +
+ // d_known_symbol2[i] /
(coarse_freq_comp(d_coarse_freq,1)*
+ //
current[i+zeros_on_left+d_coarse_freq]));
+ d_hestimate[i] = 0.5F * (d_known_symbol1[i] /
previous[i+zeros_on_left+d_coarse_freq] +
+ d_known_symbol2[i] /
(coarse_freq_comp(d_coarse_freq,1)*
+
current[i+zeros_on_left+d_coarse_freq]));
- d_hestimate[i] = hesttemp;
-
#if VERBOSE
fprintf(stderr, "%f %f ", d_hestimate[i].real(), d_hestimate[i].imag());
#endif
@@ -173,7 +179,7 @@
bool corr = correlate(previous, current, zeros_on_left);
if(corr) {
- calculate_equalizer(current, zeros_on_left);
+ calculate_equalizer(previous, current, zeros_on_left);
}
for(i = 0; i < d_occupied_carriers; i++) {
Modified:
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_correlator.h
===================================================================
---
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_correlator.h
2007-02-27 15:24:07 UTC (rev 4658)
+++
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_correlator.h
2007-02-27 15:26:44 UTC (rev 4659)
@@ -81,7 +81,8 @@
private:
unsigned char slicer(gr_complex x);
bool correlate(const gr_complex *previous, const gr_complex *current, int
zeros_on_left);
- void calculate_equalizer(const gr_complex *current, int zeros_on_left);
+ void calculate_equalizer(const gr_complex *previous,
+ const gr_complex *current, int zeros_on_left);
gr_complex coarse_freq_comp(int freq_delta, int count);
unsigned int d_occupied_carriers; // !< \brief number of subcarriers with
data
@@ -93,10 +94,16 @@
std::vector<gr_complex> d_hestimate; // !< channel estimate
signed int d_coarse_freq; // !< \brief search distance in number of bins
unsigned int d_phase_count; // !< \brief accumulator for coarse freq
correction
+ float d_snr_est; // !< an estimation of the signal to noise ratio
void forecast(int noutput_items, gr_vector_int &ninput_items_required);
public:
+ /*!
+ * \brief Return an estimate of the SNR of the channel
+ */
+ float snr() { return d_snr_est; }
+
~gr_ofdm_correlator(void);
int general_work(int noutput_items,
gr_vector_int &ninput_items,
Modified:
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_correlator.i
===================================================================
---
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_correlator.i
2007-02-27 15:24:07 UTC (rev 4658)
+++
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_correlator.i
2007-02-27 15:26:44 UTC (rev 4659)
@@ -40,10 +40,8 @@
std::vector<gr_complex> known_symbol1,
std::vector<gr_complex> known_symbol2);
- bool correlate(const gr_complex *in);
- void equalize(const gr_complex *in);
-
public:
+ float snr() { return d_snr_est; }
int general_work(int noutput_items,
gr_vector_int &ninput_items,
gr_vector_const_void_star &input_items,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r4659 - gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general,
trondeau <=