[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r5586 - gnuradio/branches/features/ofdm/receiver/gnura
From: |
trondeau |
Subject: |
[Commit-gnuradio] r5586 - gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general |
Date: |
Fri, 1 Jun 2007 10:24:21 -0600 (MDT) |
Author: trondeau
Date: 2007-06-01 10:24:21 -0600 (Fri, 01 Jun 2007)
New Revision: 5586
Added:
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.cc
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.h
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.i
Removed:
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.cc
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.h
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.i
Modified:
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/Makefile.am
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/general.i
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.cc
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_correlator.cc
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_sampler.cc
Log:
update to OFDM receiver structure including update to use multiple input types
to some triggering functions
Modified:
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/Makefile.am
===================================================================
---
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/Makefile.am
2007-06-01 16:23:40 UTC (rev 5585)
+++
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/Makefile.am
2007-06-01 16:24:21 UTC (rev 5586)
@@ -63,7 +63,7 @@
gr_diff_decoder_bb.cc \
gr_diff_encoder_bb.cc \
gr_diff_phasor_cc.cc \
- gr_dpll_ff.cc \
+ gr_dpll_bb.cc \
gr_fake_channel_coder_pp.cc \
gr_fast_atan2f.cc \
gr_feedforward_agc_cc.cc \
@@ -198,7 +198,7 @@
gr_deinterleave.h \
gr_delay.h \
gr_diff_phasor_cc.h \
- gr_dpll_ff.h \
+ gr_dpll_bb.h \
gr_expj.h \
gr_fake_channel_coder_pp.h \
gr_feedforward_agc_cc.h \
@@ -344,7 +344,7 @@
gr_diff_decoder_bb.i \
gr_diff_encoder_bb.i \
gr_diff_phasor_cc.i \
- gr_dpll_ff.i \
+ gr_dpll_bb.i \
gr_deinterleave.i \
gr_delay.i \
gr_fake_channel_coder_pp.i \
Modified:
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/general.i
===================================================================
---
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/general.i
2007-06-01 16:23:40 UTC (rev 5585)
+++
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/general.i
2007-06-01 16:24:21 UTC (rev 5586)
@@ -84,7 +84,7 @@
#include <gr_packet_sink.h>
#include <gr_lms_dfe_cc.h>
#include <gr_lms_dfe_ff.h>
-#include <gr_dpll_ff.h>
+#include <gr_dpll_bb.h>
#include <gr_pll_freqdet_cf.h>
#include <gr_pll_refout_cc.h>
#include <gr_pll_carriertracking_cc.h>
@@ -187,7 +187,7 @@
%include "gr_packet_sink.i"
%include "gr_lms_dfe_cc.i"
%include "gr_lms_dfe_ff.i"
-%include "gr_dpll_ff.i"
+%include "gr_dpll_bb.i"
%include "gr_pll_freqdet_cf.i"
%include "gr_pll_refout_cc.i"
%include "gr_pll_carriertracking_cc.i"
Copied:
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.cc
(from rev 5581,
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.cc)
===================================================================
---
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.cc
(rev 0)
+++
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.cc
2007-06-01 16:24:21 UTC (rev 5586)
@@ -0,0 +1,84 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2007 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 2, 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gr_dpll_bb.h>
+#include <gr_io_signature.h>
+
+gr_dpll_bb_sptr
+gr_make_dpll_bb (float period, float gain)
+{
+ return gr_dpll_bb_sptr (new gr_dpll_bb (period, gain));
+}
+
+gr_dpll_bb::gr_dpll_bb (float period, float gain)
+ : gr_sync_block ("dpll_bb",
+ gr_make_io_signature (1, 1, sizeof (char)),
+ gr_make_io_signature (1, 1, sizeof (char))),
+ d_restart(0),d_pulse_phase(0)
+{
+ d_pulse_frequency = 1.0/period;
+ d_gain = gain;
+ d_decision_threshold = 1.0 - 0.5*d_pulse_frequency;
+#if 1
+ fprintf(stderr,"frequency = %f period = %f gain = %f threshold = %f\n",
+ d_pulse_frequency,
+ period,
+ d_gain,
+ d_decision_threshold);
+#endif
+ set_history(1); // so we can look behind us
+}
+
+int
+gr_dpll_bb::work (int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+{
+ const char *iptr = (const char *) input_items[0];
+ char *optr = (char *) output_items[0];
+
+ for (int i = 0; i < noutput_items; i++){
+ optr[i]= 0;
+ if(iptr[i] == 1) {
+ if (d_restart == 0) {
+ d_pulse_phase = 1;
+ } else {
+ if (d_pulse_phase > 0.5) d_pulse_phase += d_gain*(1.0-d_pulse_phase);
+ else d_pulse_phase -= d_gain*d_pulse_phase;
+ }
+ d_restart = 3;
+ }
+ if (d_pulse_phase > d_decision_threshold) {
+ d_pulse_phase -= 1.0;
+ if (d_restart > 0) {
+ d_restart -= 1;
+ optr[i] = 1;
+ }
+ }
+ d_pulse_phase += d_pulse_frequency;
+ }
+ return noutput_items;
+}
Copied:
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.h
(from rev 5581,
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.h)
===================================================================
---
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.h
(rev 0)
+++
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.h
2007-06-01 16:24:21 UTC (rev 5586)
@@ -0,0 +1,57 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2007 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 2, 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_GR_DPLL_BB_H
+#define INCLUDED_GR_DPLL_BB_H
+
+#include <gr_sync_block.h>
+
+class gr_dpll_bb;
+typedef boost::shared_ptr<gr_dpll_bb> gr_dpll_bb_sptr;
+
+gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain);
+
+/*!
+ * \brief Detect the peak of a signal
+ * \ingroup block
+ *
+ * If a peak is detected, this block outputs a 1,
+ * or it outputs 0's.
+ */
+class gr_dpll_bb : public gr_sync_block
+{
+ friend gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain);
+
+ gr_dpll_bb (float period, float gain);
+
+ private:
+ unsigned char d_restart;
+ float d_pulse_phase, d_pulse_frequency,d_gain,d_decision_threshold;
+
+ public:
+
+ int work (int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+};
+
+#endif
Copied:
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.i
(from rev 5581,
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.i)
===================================================================
---
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.i
(rev 0)
+++
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.i
2007-06-01 16:24:21 UTC (rev 5586)
@@ -0,0 +1,31 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2007 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 2, 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.
+ */
+
+GR_SWIG_BLOCK_MAGIC(gr,dpll_bb)
+
+ gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain);
+
+class gr_dpll_bb : public gr_sync_block
+{
+ private:
+ gr_dpll_bb (float period, float gain);
+};
Deleted:
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.cc
Deleted:
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.h
Deleted:
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.i
Modified:
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.cc
===================================================================
---
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.cc
2007-06-01 16:23:40 UTC (rev 5585)
+++
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.cc
2007-06-01 16:24:21 UTC (rev 5586)
@@ -52,7 +52,7 @@
d_known_symbol2(known_symbol2)
{
- assert(d_occupied_carriers < d_vlen);
+ assert(d_occupied_carriers <= d_vlen);
assert(d_occupied_carriers == d_known_symbol1.size());
assert(d_occupied_carriers == d_known_symbol2.size());
}
@@ -69,6 +69,12 @@
ninput_items_required[i] = 1;
}
+float randombit()
+{
+ int r = rand()&1;
+ return (float)(-1 + 2*r);
+}
+
int
gr_ofdm_bpsk_mapper::general_work(int noutput_items,
gr_vector_int &ninput_items,
@@ -138,7 +144,7 @@
// Ran out of data to put in symbols
if(d_packet_offset == pkt_length) {
while(i < d_vlen-zeros_on_right) {
- out[i++] = gr_complex(0,0);
+ out[i++] = gr_complex(randombit(),0);
}
d_packet_offset = 0;
Modified:
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_correlator.cc
===================================================================
---
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_correlator.cc
2007-06-01 16:23:40 UTC (rev 5585)
+++
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_correlator.cc
2007-06-01 16:24:21 UTC (rev 5586)
@@ -46,7 +46,7 @@
std::vector<gr_complex> known_symbol2)
: gr_block ("ofdm_correlator",
gr_make_io_signature (1, 1, sizeof(gr_complex)*vlen),
- gr_make_io_signature (1, 1,
sizeof(gr_complex)*occupied_carriers)),
+ gr_make_io_signature2 (2, 2,
sizeof(gr_complex)*occupied_carriers, sizeof(char))),
d_occupied_carriers(occupied_carriers),
d_vlen(vlen),
d_cplen(cplen),
@@ -115,7 +115,7 @@
search_delta, h_sqrd.real(), h_sqrd.imag(), power,
h_sqrd.real()/power, arg(h_sqrd));
#endif
- if((h_sqrd.real() > 0.75*power) && (h_sqrd.real() < 1.1 * power)) {
+ if((h_sqrd.real() > 0.82*power) && (h_sqrd.real() < 1.1 * power)) {
found = true;
d_coarse_freq = search_delta;
d_phase_count = 1;
@@ -172,6 +172,7 @@
const gr_complex *current = &in[d_vlen];
gr_complex *out = (gr_complex *) output_items[0];
+ char *sig = (char *) output_items[1];
unsigned int i=0;
@@ -181,11 +182,19 @@
bool corr = correlate(previous, current, zeros_on_left);
if(corr) {
calculate_equalizer(previous, current, zeros_on_left);
+ sig[0] = 1;
}
+ else {
+ sig[0] = 0;
+ }
for(i = 0; i < d_occupied_carriers; i++) {
out[i] =
d_hestimate[i]*coarse_freq_comp(d_coarse_freq,d_phase_count)*current[i+zeros_on_left+d_coarse_freq];
+ //out[i] =
coarse_freq_comp(d_coarse_freq,d_phase_count)*current[i+zeros_on_left+d_coarse_freq];
+ //out[i] = current[i+zeros_on_left+d_coarse_freq];
}
+
+
d_phase_count++;
consume_each(1);
return 1;
Modified:
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
===================================================================
---
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
2007-06-01 16:23:40 UTC (rev 5585)
+++
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
2007-06-01 16:24:21 UTC (rev 5586)
@@ -29,7 +29,7 @@
#include <cstdio>
#include <stdexcept>
-#define VERBOSE 1
+#define VERBOSE 0
inline void
gr_ofdm_frame_sink::enter_search()
@@ -38,6 +38,10 @@
fprintf(stderr, "@ enter_search\n");
d_state = STATE_SYNC_SEARCH;
+
+ // clear state of demapper
+ d_byte_offset = 0;
+ d_partial_byte = 0;
}
inline void
@@ -48,18 +52,23 @@
d_state = STATE_HAVE_SYNC;
d_header = 0;
- d_headerbitlen_cnt = 0;
+ d_headerbytelen_cnt = 0;
}
inline void
-gr_ofdm_frame_sink::enter_have_header(int payload_len, int whitener_offset)
+gr_ofdm_frame_sink::enter_have_header()
{
if (VERBOSE)
- fprintf(stderr, "@ enter_have_header (payload_len = %d) (offset = %d)\n",
payload_len, whitener_offset);
+ fprintf(stderr, "@ enter_have_header (payload_len = %d) (offset = %d)\n",
+ d_packetlen, d_packet_whitener_offset);
d_state = STATE_HAVE_HEADER;
- d_packetlen = payload_len;
- d_packet_whitener_offset = whitener_offset;
+
+ // header consists of two 16-bit shorts in network byte order
+ // payload length is lower 12 bits
+ // whitener offset is upper 4 bits
+ d_packetlen = (d_header >> 16) & 0x0fff;
+ d_packet_whitener_offset = (d_header >> 28) & 0x000f;
d_packetlen_cnt = 0;
}
@@ -101,7 +110,7 @@
gr_ofdm_frame_sink::gr_ofdm_frame_sink(gr_msg_queue_sptr target_queue,
unsigned int occupied_carriers)
: gr_sync_block ("ofdm_frame_sink",
- gr_make_io_signature (1, 1,
sizeof(gr_complex)*occupied_carriers),
+ gr_make_io_signature2 (2, 2,
sizeof(gr_complex)*occupied_carriers, sizeof(char)),
gr_make_io_signature (0, 0, 0)),
d_target_queue(target_queue), d_occupied_carriers(occupied_carriers),
d_byte_offset(0), d_partial_byte(0)
@@ -119,110 +128,106 @@
gr_vector_void_star &output_items)
{
const gr_complex *in = (const gr_complex *) input_items[0];
- int count=0;
+ const char *sig = (const char *) input_items[1];
+ int count_tones=0, count_items=0;
unsigned int j = 0;
unsigned int bytes=0;
unsigned char *bytes_out = new unsigned
char[(int)floor(d_occupied_carriers/8.0)];
if (VERBOSE)
fprintf(stderr,">>> Entering state machine\n");
-
- while (count < noutput_items){
- switch(d_state) {
+
+ bytes = bpsk_demapper(&in[0], bytes_out);
+
+ switch(d_state) {
- case STATE_SYNC_SEARCH: // Look for flag indicating beginning of pkt
- if (VERBOSE)
- fprintf(stderr,"SYNC Search, noutput=%d\n", noutput_items);
+ case STATE_SYNC_SEARCH: // Look for flag indicating beginning of pkt
+ if (VERBOSE)
+ fprintf(stderr,"SYNC Search, noutput=%d\n", noutput_items);
+
+ if (sig[0]) { // Found it, set up for header decode
+ enter_have_sync();
+ }
+ break;
- while (count < noutput_items) {
- //if (in[count] & 0x2){ // Found it, set up for header decode
- // enter_have_sync();
- // break;
- //}
- count++;
- }
- break;
+ case STATE_HAVE_SYNC:
+ if(sig[0])
+ printf("ERROR -- Found SYNC in HAVE_SYNC\n");
+ if (VERBOSE)
+ fprintf(stderr,"Header Search bitcnt=%d, header=0x%08x\n",
+ d_headerbytelen_cnt, d_header);
- case STATE_HAVE_SYNC:
- if (VERBOSE)
- fprintf(stderr,"Header Search bitcnt=%d, header=0x%08x\n",
- d_headerbitlen_cnt, d_header);
-
- while (count < noutput_items) { // Shift bits one at a time into header
- bytes = bpsk_demapper(&in[count], bytes_out);
- count += d_occupied_carriers;
+ j = 0;
+ while(j < bytes) {
+ d_header = (d_header << 8) | (bytes_out[j] & 0xFF);
+ j++;
- j = 0;
- while(j < bytes) {
- d_header = (d_header << 8) | (bytes_out[j++] & 0x08);
- if (++d_headerbitlen_cnt == HEADERBITLEN) {
-
- if (VERBOSE)
- fprintf(stderr, "got header: 0x%08x\n", d_header);
-
- // we have a full header, check to see if it has been received
properly
- if (header_ok()){
- int payload_len;
- int whitener_offset;
- header_payload(&payload_len, &whitener_offset);
- enter_have_header(payload_len, whitener_offset);
-
- if (d_packetlen == 0){ // check for zero-length payload
- // build a zero-length message
- // NOTE: passing header field as arg1 is not scalable
- gr_message_sptr msg =
- gr_make_message(0, d_packet_whitener_offset, 0, 0);
-
- d_target_queue->insert_tail(msg); // send it
- msg.reset(); // free it up
-
- enter_search();
- }
- }
- else
- enter_search(); // bad header
+ if (++d_headerbytelen_cnt == HEADERBYTELEN) {
+
+ if (VERBOSE)
+ fprintf(stderr, "got header: 0x%08x\n", d_header);
+
+ // we have a full header, check to see if it has been received properly
+ if (header_ok()){
+ enter_have_header();
+ printf("\nPacket Length: %d\n", d_packetlen);
+ for(int k=0; k < d_packetlen; k++)
+ printf("%02x", d_packet[k]);
+ printf("\n");
+
+ assert(d_packetlen < 500);
+
+ while((j < bytes) && (d_packetlen_cnt < d_packetlen)) {
+ d_packet[d_packetlen_cnt++] = bytes_out[j++];
}
- break; // we're in a new state
+
+ if(d_packetlen_cnt == d_packetlen) {
+ gr_message_sptr msg =
+ gr_make_message(0, d_packet_whitener_offset, 0, d_packetlen);
+ memcpy(msg->msg(), d_packet, d_packetlen_cnt);
+ d_target_queue->insert_tail(msg); // send it
+ msg.reset(); // free it up
+
+ enter_search();
+ }
}
+ else {
+ enter_search(); // bad header
+ }
}
- break;
+ }
+ break;
case STATE_HAVE_HEADER:
+ if(sig[0])
+ printf("ERROR -- Found SYNC in HAVE_HEADER at %d, length of %d\n",
d_packetlen_cnt, d_packetlen);
if (VERBOSE)
fprintf(stderr,"Packet Build\n");
- while (count < noutput_items) { // shift bits into bytes of packet one
at a time
- bytes = bpsk_demapper(&in[count], bytes_out);
- count += d_occupied_carriers;
+ j = 0;
+ while(j < bytes) {
+ d_packet[d_packetlen_cnt++] = bytes_out[j++];
- j = 0;
- while(j < bytes) {
- d_packet[d_packetlen_cnt++] = bytes_out[j++];
-
- if (d_packetlen_cnt == d_packetlen){ // packet is filled
-
- // build a message
- // NOTE: passing header field as arg1 is not scalable
- gr_message_sptr msg =
- gr_make_message(0, d_packet_whitener_offset, 0, d_packetlen_cnt);
- memcpy(msg->msg(), d_packet, d_packetlen_cnt);
-
- d_target_queue->insert_tail(msg); // send it
- msg.reset(); // free it up
-
- enter_search();
- break;
- }
+ if (d_packetlen_cnt == d_packetlen){ // packet is filled
+ // build a message
+ // NOTE: passing header field as arg1 is not scalable
+ gr_message_sptr msg =
+ gr_make_message(0, d_packet_whitener_offset, 0, d_packetlen_cnt);
+ memcpy(msg->msg(), d_packet, d_packetlen_cnt);
+
+ d_target_queue->insert_tail(msg); // send it
+ msg.reset(); // free it up
+
+ enter_search();
+ break;
}
}
break;
- default:
- assert(0);
+ default:
+ assert(0);
- } // switch
+ } // switch
- } // while
-
- return noutput_items;
+ return 1;
}
Modified:
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
===================================================================
---
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
2007-06-01 16:23:40 UTC (rev 5585)
+++
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
2007-06-01 16:24:21 UTC (rev 5586)
@@ -59,12 +59,12 @@
enum state_t {STATE_SYNC_SEARCH, STATE_HAVE_SYNC, STATE_HAVE_HEADER};
static const int MAX_PKT_LEN = 4096;
- static const int HEADERBITLEN = 32;
+ static const int HEADERBYTELEN = 4;
gr_msg_queue_sptr d_target_queue; // where to send the packet
when received
state_t d_state;
unsigned int d_header; // header bits
- int d_headerbitlen_cnt; // how many so far
+ int d_headerbytelen_cnt; // how many so far
unsigned int d_occupied_carriers;
unsigned int d_byte_offset;
@@ -80,7 +80,7 @@
void enter_search();
void enter_have_sync();
- void enter_have_header(int payload_len, int whitener_offset);
+ void enter_have_header();
bool header_ok()
{
@@ -88,15 +88,6 @@
return ((d_header >> 16) ^ (d_header & 0xffff)) == 0;
}
- void header_payload(int *len, int *offset)
- {
- // header consists of two 16-bit shorts in network byte order
- // payload length is lower 12 bits
- // whitener offset is upper 4 bits
- *len = (d_header >> 16) & 0x0fff;
- *offset = (d_header >> 28) & 0x000f;
- }
-
unsigned char bpsk_slicer(gr_complex x);
unsigned int bpsk_demapper(const gr_complex *in,
unsigned char *out);
Modified:
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_sampler.cc
===================================================================
---
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_sampler.cc
2007-06-01 16:23:40 UTC (rev 5585)
+++
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_sampler.cc
2007-06-01 16:24:21 UTC (rev 5586)
@@ -38,7 +38,7 @@
gr_ofdm_sampler::gr_ofdm_sampler (unsigned int fft_length,
unsigned int symbol_length)
: gr_block ("ofdm_sampler",
- gr_make_io_signature (2, 2, sizeof (gr_complex)),
+ gr_make_io_signature2 (2, 2, sizeof (gr_complex), sizeof(char)),
gr_make_io_signature (1, 1, sizeof (gr_complex)*fft_length)),
d_fft_length(fft_length), d_symbol_length(symbol_length)
{
@@ -61,7 +61,7 @@
gr_vector_void_star &output_items)
{
gr_complex *iptr = (gr_complex *) input_items[0];
- gr_complex *trigger = (gr_complex *) input_items[1];
+ char *trigger = (char *) input_items[1];
gr_complex *optr = (gr_complex *) output_items[0];
@@ -70,7 +70,7 @@
unsigned int i=d_fft_length-1;
while(!found && i<std::min(ninput_items[0],ninput_items[1]) )
- if(trigger[i].real() > 0.5)
+ if(trigger[i])
found = 1;
else
i++;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r5586 - gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general,
trondeau <=