From: trondeau Date: Mon, 8 Sep 2008 03:43:36 +0000 (+0000) Subject: merging branch -r9485:9498 to fix some warnings. This merge removes some of the old... X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=231f1bcb9aa9f431a61869c9f2c5b6194b4768b9;p=debian%2Fgnuradio merging branch -r9485:9498 to fix some warnings. This merge removes some of the old OFDM mappers that were specific to BPSK, QPSK, and QAM constellations. These were never really used and should not be. git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@9531 221aa14e-8319-0410-a670-987f0aec2ac5 --- diff --git a/gnuradio-core/src/lib/general/Makefile.am b/gnuradio-core/src/lib/general/Makefile.am index 73ba67a7..8ee90018 100644 --- a/gnuradio-core/src/lib/general/Makefile.am +++ b/gnuradio-core/src/lib/general/Makefile.am @@ -105,10 +105,6 @@ libgeneral_la_SOURCES = \ gr_ofdm_cyclic_prefixer.cc \ gr_ofdm_demapper_vcb.cc \ gr_ofdm_mapper_bcv.cc \ - gr_ofdm_bpsk_demapper.cc \ - gr_ofdm_bpsk_mapper.cc \ - gr_ofdm_qpsk_mapper.cc \ - gr_ofdm_qam_mapper.cc \ gr_ofdm_frame_sink.cc \ gr_ofdm_insert_preamble.cc \ gr_ofdm_sampler.cc \ @@ -255,10 +251,6 @@ grinclude_HEADERS = \ gr_ofdm_cyclic_prefixer.h \ gr_ofdm_demapper_vcb.h \ gr_ofdm_mapper_bcv.h \ - gr_ofdm_bpsk_mapper.h \ - gr_ofdm_qpsk_mapper.h \ - gr_ofdm_qam_mapper.h \ - gr_ofdm_bpsk_demapper.h \ gr_ofdm_frame_sink.h \ gr_ofdm_insert_preamble.h \ gr_ofdm_sampler.h \ @@ -408,10 +400,6 @@ swiginclude_HEADERS = \ gr_ofdm_cyclic_prefixer.i \ gr_ofdm_demapper_vcb.i \ gr_ofdm_mapper_bcv.i \ - gr_ofdm_bpsk_demapper.i \ - gr_ofdm_bpsk_mapper.i \ - gr_ofdm_qpsk_mapper.i \ - gr_ofdm_qam_mapper.i \ gr_ofdm_frame_sink.i \ gr_ofdm_insert_preamble.i \ gr_ofdm_sampler.i \ diff --git a/gnuradio-core/src/lib/general/general.i b/gnuradio-core/src/lib/general/general.i index 21bbdb2c..435271f7 100644 --- a/gnuradio-core/src/lib/general/general.i +++ b/gnuradio-core/src/lib/general/general.i @@ -95,11 +95,7 @@ #include #include #include -#include #include -#include -#include -#include #include #include #include @@ -208,11 +204,7 @@ %include "gr_probe_signal_f.i" %include "gr_ofdm_frame_acquisition.i" %include "gr_ofdm_cyclic_prefixer.i" -%include "gr_ofdm_bpsk_demapper.i" %include "gr_ofdm_mapper_bcv.i" -%include "gr_ofdm_bpsk_mapper.i" -%include "gr_ofdm_qpsk_mapper.i" -%include "gr_ofdm_qam_mapper.i" %include "gr_ofdm_frame_sink.i" %include "gr_ofdm_insert_preamble.i" %include "gr_ofdm_sampler.i" diff --git a/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.cc b/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.cc deleted file mode 100644 index 78658435..00000000 --- a/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.cc +++ /dev/null @@ -1,137 +0,0 @@ -/* -*- 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 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -gr_ofdm_bpsk_mapper_sptr -gr_make_ofdm_bpsk_mapper (unsigned int msgq_limit, - unsigned int occupied_carriers, unsigned int fft_length) -{ - return gr_ofdm_bpsk_mapper_sptr (new gr_ofdm_bpsk_mapper (msgq_limit, occupied_carriers, fft_length)); -} - -// Consumes 1 packet and produces as many OFDM symbols of fft_length to hold the full packet -gr_ofdm_bpsk_mapper::gr_ofdm_bpsk_mapper (unsigned int msgq_limit, - unsigned int occupied_carriers, unsigned int fft_length) - : gr_sync_block ("ofdm_bpsk_mapper", - gr_make_io_signature (0, 0, 0), - gr_make_io_signature2 (1, 2, sizeof(gr_complex)*fft_length, sizeof(char))), - d_msgq(gr_make_msg_queue(msgq_limit)), d_msg_offset(0), d_eof(false), - d_occupied_carriers(occupied_carriers), - d_fft_length(fft_length), - d_bit_offset(0), - d_pending_flag(0) -{ - if (!(d_occupied_carriers <= d_fft_length)) - throw std::invalid_argument("gr_ofdm_bpsk_mapper: occupied carriers must be <= fft_length"); -} - -gr_ofdm_bpsk_mapper::~gr_ofdm_bpsk_mapper(void) -{ -} - -static float -randombit() -{ - int r = rand()&1; - return (float)(1 - 2*r); -} - -int -gr_ofdm_bpsk_mapper::work(int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - gr_complex *out = (gr_complex *)output_items[0]; - - unsigned int i=0; - unsigned int unoccupied_carriers = d_fft_length - d_occupied_carriers; - unsigned int zeros_on_left = (unsigned)ceil(unoccupied_carriers/2.0); - - //printf("OFDM BPSK Mapper: ninput_items: %d noutput_items: %d\n", ninput_items[0], noutput_items); - - if(d_eof) { - return -1; - } - - if(!d_msg) { - d_msg = d_msgq->delete_head(); // block, waiting for a message - d_msg_offset = 0; - d_bit_offset = 0; - d_pending_flag = 1; // new packet, write start of packet flag - - if((d_msg->length() == 0) && (d_msg->type() == 1)) { - d_msg.reset(); - return -1; // We're done; no more messages coming. - } - } - - char *out_flag = 0; - if(output_items.size() == 2) - out_flag = (char *) output_items[1]; - - - // Build a single symbol: - - - // Initialize all bins to 0 to set unused carriers - memset(out, 0, d_fft_length*sizeof(gr_complex)); - - i = 0; - while((d_msg_offset < d_msg->length()) && (i < d_occupied_carriers)) { - unsigned char bit = (d_msg->msg()[d_msg_offset] >> (d_bit_offset)) & 0x01; - out[i + zeros_on_left] = gr_complex(1-2*(bit)); - i++; - d_bit_offset++; - if(d_bit_offset == 8) { - d_bit_offset = 0; - d_msg_offset++; - } - } - - // Ran out of data to put in symbol - if (d_msg_offset == d_msg->length()) { - while(i < d_occupied_carriers) { // finish filling out the symbol - out[i + zeros_on_left] = gr_complex(randombit(),0); - i++; - } - - if (d_msg->type() == 1) // type == 1 sets EOF - d_eof = true; - d_msg.reset(); // finished packet, free message - assert(d_bit_offset == 0); - } - - if (out_flag) - out_flag[0] = d_pending_flag; - d_pending_flag = 0; - - return 1; // produced symbol -} - diff --git a/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.h b/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.h deleted file mode 100644 index 9142228f..00000000 --- a/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.h +++ /dev/null @@ -1,77 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,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 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_GR_OFDM_BPSK_MAPPER_H -#define INCLUDED_GR_OFDM_BPSK_MAPPER_H - - -#include -#include -#include - -class gr_ofdm_bpsk_mapper; -typedef boost::shared_ptr gr_ofdm_bpsk_mapper_sptr; - -gr_ofdm_bpsk_mapper_sptr -gr_make_ofdm_bpsk_mapper (unsigned msgq_limit, - unsigned occupied_carriers, unsigned int fft_length); - -/*! - * \brief take a message in and map to a vector of complex - * constellation points suitable for IFFT input to be used in an ofdm - * modulator. Simple BPSK version. - * \ingroup modulation - */ - -class gr_ofdm_bpsk_mapper : public gr_sync_block -{ - friend gr_ofdm_bpsk_mapper_sptr - gr_make_ofdm_bpsk_mapper (unsigned msgq_limit, - unsigned occupied_carriers, unsigned int fft_length); - protected: - gr_ofdm_bpsk_mapper (unsigned msgq_limit, - unsigned occupied_carriers, unsigned int fft_length); - - private: - gr_msg_queue_sptr d_msgq; - gr_message_sptr d_msg; - unsigned d_msg_offset; - bool d_eof; - - unsigned int d_occupied_carriers; - unsigned int d_fft_length; - unsigned int d_bit_offset; - int d_pending_flag; - - public: - ~gr_ofdm_bpsk_mapper(void); - - gr_msg_queue_sptr msgq() const { return d_msgq; } - - int work(int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - -}; - - -#endif diff --git a/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.i b/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.i deleted file mode 100644 index a36827ec..00000000 --- a/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.i +++ /dev/null @@ -1,44 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,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 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. - */ - -GR_SWIG_BLOCK_MAGIC(gr,ofdm_bpsk_mapper); - -gr_ofdm_bpsk_mapper_sptr -gr_make_ofdm_bpsk_mapper (unsigned int msgq_limit, - unsigned int bits_per_symbol, - unsigned int fft_length); - - -class gr_ofdm_bpsk_mapper : public gr_sync_block -{ - protected: - gr_ofdm_bpsk_mapper (unsigned int msgq_limit, - unsigned int bits_per_symbol, - unsigned int fft_length); - - public: - gr_msg_queue_sptr msgq(); - - int work(int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; diff --git a/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc b/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc index 7e4996b0..26a5cf0f 100644 --- a/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc +++ b/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc @@ -227,11 +227,11 @@ gr_ofdm_frame_sink::gr_ofdm_frame_sink(const std::vector &sym_positi char c[2] = {0,0}; diff_left = (int)ceil((float)diff/2.0f); // number of carriers to put on the left side - c[0] = abc[((1 << diff_left) - 1)]; // convert to bits and move to ASCI integer + c[0] = abc[(1 << diff_left) - 1]; // convert to bits and move to ASCI integer carriers.insert(0, c); diff_right = diff - diff_left; // number of carriers to put on the right side - c[0] = abc[(0xF^(1 << diff_left) - 1)]; // convert to bits and move to ASCI integer + c[0] = abc[0xF^((1 << diff_right) - 1)]; // convert to bits and move to ASCI integer carriers.insert(carriers.length(), c); } diff --git a/gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.cc b/gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.cc index 56701b3c..02f09f5f 100644 --- a/gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.cc +++ b/gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.cc @@ -84,11 +84,11 @@ gr_ofdm_mapper_bcv::gr_ofdm_mapper_bcv (const std::vector &constella char c[2] = {0,0}; diff_left = (int)ceil((float)diff/2.0f); // number of carriers to put on the left side - c[0] = abc[((1 << diff_left) - 1)]; // convert to bits and move to ASCI integer + c[0] = abc[(1 << diff_left) - 1]; // convert to bits and move to ASCI integer carriers.insert(0, c); diff_right = diff - diff_left; // number of carriers to put on the right side - c[0] = abc[(0xF^(1 << diff_left) - 1)]; // convert to bits and move to ASCI integer + c[0] = abc[0xF^((1 << diff_right) - 1)]; // convert to bits and move to ASCI integer carriers.insert(carriers.length(), c); } diff --git a/gnuradio-core/src/lib/general/gr_ofdm_qam_mapper.cc b/gnuradio-core/src/lib/general/gr_ofdm_qam_mapper.cc deleted file mode 100644 index 0f974069..00000000 --- a/gnuradio-core/src/lib/general/gr_ofdm_qam_mapper.cc +++ /dev/null @@ -1,252 +0,0 @@ -/* -*- 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 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -gr_ofdm_qam_mapper_sptr -gr_make_ofdm_qam_mapper (unsigned int msgq_limit, - unsigned int occupied_carriers, unsigned int fft_length, - int m) -{ - return gr_ofdm_qam_mapper_sptr (new gr_ofdm_qam_mapper (msgq_limit, occupied_carriers, fft_length, m)); -} - -// Consumes 1 packet and produces as many OFDM symbols of fft_length to hold the full packet -gr_ofdm_qam_mapper::gr_ofdm_qam_mapper (unsigned int msgq_limit, - unsigned int occupied_carriers, unsigned int fft_length, - int m) - : gr_sync_block ("ofdm_qam_mapper", - gr_make_io_signature (0, 0, 0), - gr_make_io_signature2 (1, 2, sizeof(gr_complex)*fft_length, sizeof(char))), - d_msgq(gr_make_msg_queue(msgq_limit)), d_msg_offset(0), d_eof(false), - d_occupied_carriers(occupied_carriers), - d_fft_length(fft_length), - d_bit_offset(0), - d_pending_flag(0), - d_mod_order(m) -{ - if (!(d_occupied_carriers <= d_fft_length)) - throw std::invalid_argument("gr_ofdm_qam_mapper: occupied carriers must be <= fft_length"); - - bool ok = false; - if(m == 2) { - ok = true; - } - if(m == 4) { - ok = true; - } - if(m == 16) { - ok = true; - } - if(m == 64) { - ok = true; - } - if(m == 256) { - ok = true; - } - - if(!ok) - throw std::invalid_argument("Order M must be [2, 4, 16, 64, 256]"); - - make_constellation(); -} - -gr_ofdm_qam_mapper::~gr_ofdm_qam_mapper(void) -{ -} - -void gr_ofdm_qam_mapper::make_constellation() -{ - int i = 0, j = 0, ii = 0, jj = 0; - // number of bits/symbol (log2(M)) - int k = (int)(log10(d_mod_order) / log10(2.0)); - - int a, b; - float re, im; - float coeff = 1; - std::vector bits_i, bits_q; - - int rr = 0; - int ss = 0; - int ll = bits_i.size(); - - for(i=0; i < d_mod_order; i++) { - a = (i & (0x01 << (k-1))) >> (k-1); - b = (i & (0x01 << (k-2))) >> (k-2); - for(j=2; j < k; j+=2) { - bits_i.push_back( (i & (0x01 << (k-j-1))) >> (k-j-1)); - bits_q.push_back( (i & (0x01 << (k-(j+1)-1))) >> (k-(j+1)-1)); - } - - ss = 0; - ll = bits_i.size(); - for(ii = 0; ii < ll; ii++) { - rr = 0; - for(jj = 0; jj < (ll-ii); jj++) { - rr = abs(bits_i[jj] - rr); - } - ss += rr * pow(2.0, ii+1.0); - } - re = (2.0*a-1.0)*(ss+1.0); - - ss = 0; - ll = bits_q.size(); - for(ii = 0; ii < ll; ii++) { - rr = 0; - for(jj = 0; jj < (ll-ii); jj++) { - rr = abs(bits_q[jj] - rr); - } - ss += rr*pow(2.0, ii+1.0); - } - im = (2.0*b-1.0)*(ss+1.0); - - a = std::max(re, im); - if(a > coeff) { - coeff = a; - } - d_constellation_map.push_back(gr_complex(re, im)); - } - - d_constellation_map[0] = gr_complex(-3, -3); - d_constellation_map[1] = gr_complex(-3, -1); - d_constellation_map[2] = gr_complex(-3, 1); - d_constellation_map[3] = gr_complex(-3, 3); - d_constellation_map[4] = gr_complex(-1, -3); - d_constellation_map[5] = gr_complex(-1, -1); - d_constellation_map[6] = gr_complex(-1, 1); - d_constellation_map[7] = gr_complex(-1, 3); - d_constellation_map[8] = gr_complex(1, -3); - d_constellation_map[9] = gr_complex(1, -1); - d_constellation_map[10] = gr_complex(1, 1); - d_constellation_map[11] = gr_complex(1, 3); - d_constellation_map[12] = gr_complex(3, -3); - d_constellation_map[13] = gr_complex(3, -1); - d_constellation_map[14] = gr_complex(3, 1); - d_constellation_map[15] = gr_complex(3, 3); - - coeff = sqrt(31.0)/2.0; - for(i = 0; i < static_cast(d_constellation_map.size()); i++) { - d_constellation_map[i] /= coeff; - printf("const[%d]: %f + j%f\n", i, d_constellation_map[i].real(), d_constellation_map[i].imag()); - } -} - -#if 0 -static float -randombit() -{ - int r = rand()&1; - return (float)(-1 + 2*r); -} -#endif - -int -gr_ofdm_qam_mapper::work(int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - gr_complex *out = (gr_complex *)output_items[0]; - - unsigned int i=0; - unsigned int unoccupied_carriers = d_fft_length - d_occupied_carriers; - unsigned int zeros_on_left = (unsigned)ceil(unoccupied_carriers/2.0); - - //printf("OFDM QAM Mapper: ninput_items: %d noutput_items: %d\n", ninput_items[0], noutput_items); - - if(d_eof) { - return -1; - } - - if(!d_msg) { - d_msg = d_msgq->delete_head(); // block, waiting for a message - d_msg_offset = 0; - d_bit_offset = 0; - d_pending_flag = 1; // new packet, write start of packet flag - - if((d_msg->length() == 0) && (d_msg->type() == 1)) { - d_msg.reset(); - return -1; // We're done; no more messages coming. - } - } - - char *out_flag = 0; - if(output_items.size() == 2) - out_flag = (char *) output_items[1]; - - - // Build a single symbol: - - - // Initialize all bins to 0 to set unused carriers - memset(out, 0, d_fft_length*sizeof(gr_complex)); - - i = 0; - while((d_msg_offset < d_msg->length()) && (i < d_occupied_carriers)) { - unsigned char bit0 = (d_msg->msg()[d_msg_offset] >> (d_bit_offset)) & 0x01; - d_bit_offset++; - - unsigned char bit1 = (d_msg->msg()[d_msg_offset] >> (d_bit_offset)) & 0x01; - d_bit_offset++; - - unsigned char bit2 = (d_msg->msg()[d_msg_offset] >> (d_bit_offset)) & 0x01; - d_bit_offset++; - - unsigned char bit3 = (d_msg->msg()[d_msg_offset] >> (d_bit_offset)) & 0x01; - d_bit_offset++; - - unsigned char bit = (bit0 << 3) | (bit1 << 2) | (bit2 << 1) | (bit3 << 0); - - out[i + zeros_on_left] = d_constellation_map[bit]; - i++; - if(d_bit_offset == 8) { - d_bit_offset = 0; - d_msg_offset++; - } - } - - // Ran out of data to put in symbol - if (d_msg_offset == d_msg->length()) { - while(i < d_occupied_carriers) { // finish filling out the symbol - out[i + zeros_on_left] = d_constellation_map[rand() & 0x0F]; - i++; - } - - if (d_msg->type() == 1) // type == 1 sets EOF - d_eof = true; - d_msg.reset(); // finished packet, free message - assert(d_bit_offset == 0); - } - - if (out_flag) - out_flag[0] = d_pending_flag; - d_pending_flag = 0; - - return 1; // produced symbol -} - diff --git a/gnuradio-core/src/lib/general/gr_ofdm_qam_mapper.h b/gnuradio-core/src/lib/general/gr_ofdm_qam_mapper.h deleted file mode 100644 index 7be03b41..00000000 --- a/gnuradio-core/src/lib/general/gr_ofdm_qam_mapper.h +++ /dev/null @@ -1,85 +0,0 @@ -/* -*- 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 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_GR_OFDM_QAM_MAPPER_H -#define INCLUDED_GR_OFDM_QAM_MAPPER_H - - -#include -#include -#include - -class gr_ofdm_qam_mapper; -typedef boost::shared_ptr gr_ofdm_qam_mapper_sptr; - -gr_ofdm_qam_mapper_sptr -gr_make_ofdm_qam_mapper (unsigned msgq_limit, - unsigned occupied_carriers, unsigned int fft_length, - int m=4); - -/*! - * \brief take a message in and map to a vector of complex - * constellation points suitable for IFFT input to be used in an ofdm - * modulator. Simple QAM version. - * \ingroup modulation - */ - -class gr_ofdm_qam_mapper : public gr_sync_block -{ - friend gr_ofdm_qam_mapper_sptr - gr_make_ofdm_qam_mapper (unsigned msgq_limit, - unsigned occupied_carriers, unsigned int fft_length, - int m); - protected: - gr_ofdm_qam_mapper (unsigned msgq_limit, - unsigned occupied_carriers, unsigned int fft_length, - int m); - - private: - gr_msg_queue_sptr d_msgq; - gr_message_sptr d_msg; - unsigned d_msg_offset; - bool d_eof; - - unsigned int d_occupied_carriers; - unsigned int d_fft_length; - unsigned int d_bit_offset; - int d_pending_flag; - - int d_mod_order; - std::vector d_constellation_map; - - void make_constellation(); - - public: - ~gr_ofdm_qam_mapper(void); - - gr_msg_queue_sptr msgq() const { return d_msgq; } - - int work(int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - -}; - - -#endif diff --git a/gnuradio-core/src/lib/general/gr_ofdm_qam_mapper.i b/gnuradio-core/src/lib/general/gr_ofdm_qam_mapper.i deleted file mode 100644 index 85ea8402..00000000 --- a/gnuradio-core/src/lib/general/gr_ofdm_qam_mapper.i +++ /dev/null @@ -1,46 +0,0 @@ -/* -*- 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 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. - */ - -GR_SWIG_BLOCK_MAGIC(gr,ofdm_qam_mapper); - -gr_ofdm_qam_mapper_sptr -gr_make_ofdm_qam_mapper (unsigned int msgq_limit, - unsigned int bits_per_symbol, - unsigned int fft_length, - int m=16); - - -class gr_ofdm_qam_mapper : public gr_sync_block -{ - protected: - gr_ofdm_qam_mapper (unsigned int msgq_limit, - unsigned int bits_per_symbol, - unsigned int fft_length, - int m); - - public: - gr_msg_queue_sptr msgq(); - - int work(int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; diff --git a/gnuradio-core/src/lib/general/gr_ofdm_qpsk_mapper.cc b/gnuradio-core/src/lib/general/gr_ofdm_qpsk_mapper.cc deleted file mode 100644 index 2c6fe5a5..00000000 --- a/gnuradio-core/src/lib/general/gr_ofdm_qpsk_mapper.cc +++ /dev/null @@ -1,142 +0,0 @@ -/* -*- 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 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -gr_ofdm_qpsk_mapper_sptr -gr_make_ofdm_qpsk_mapper (unsigned int msgq_limit, - unsigned int occupied_carriers, unsigned int fft_length) -{ - return gr_ofdm_qpsk_mapper_sptr (new gr_ofdm_qpsk_mapper (msgq_limit, occupied_carriers, fft_length)); -} - -// Consumes 1 packet and produces as many OFDM symbols of fft_length to hold the full packet -gr_ofdm_qpsk_mapper::gr_ofdm_qpsk_mapper (unsigned int msgq_limit, - unsigned int occupied_carriers, unsigned int fft_length) - : gr_sync_block ("ofdm_qpsk_mapper", - gr_make_io_signature (0, 0, 0), - gr_make_io_signature2 (1, 2, sizeof(gr_complex)*fft_length, sizeof(char))), - d_msgq(gr_make_msg_queue(msgq_limit)), d_msg_offset(0), d_eof(false), - d_occupied_carriers(occupied_carriers), - d_fft_length(fft_length), - d_bit_offset(0), - d_pending_flag(0) -{ - if (!(d_occupied_carriers <= d_fft_length)) - throw std::invalid_argument("gr_ofdm_qpsk_mapper: occupied carriers must be <= fft_length"); -} - -gr_ofdm_qpsk_mapper::~gr_ofdm_qpsk_mapper(void) -{ -} - -static gr_complex -randombit() -{ - int r1 = rand()&1; - int r2 = rand()&1; - return gr_complex((0.707)*(1 - 2*r1),(0.707)*(1 - 2*r2)); -} - -int -gr_ofdm_qpsk_mapper::work(int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - gr_complex *out = (gr_complex *)output_items[0]; - - unsigned int i=0; - unsigned int unoccupied_carriers = d_fft_length - d_occupied_carriers; - unsigned int zeros_on_left = (unsigned)ceil(unoccupied_carriers/2.0); - - //printf("OFDM QPSK Mapper: ninput_items: %d noutput_items: %d\n", ninput_items[0], noutput_items); - - if(d_eof) { - return -1; - } - - if(!d_msg) { - d_msg = d_msgq->delete_head(); // block, waiting for a message - d_msg_offset = 0; - d_bit_offset = 0; - d_pending_flag = 1; // new packet, write start of packet flag - - if((d_msg->length() == 0) && (d_msg->type() == 1)) { - d_msg.reset(); - return -1; // We're done; no more messages coming. - } - } - - char *out_flag = 0; - if(output_items.size() == 2) - out_flag = (char *) output_items[1]; - - - // Build a single symbol: - - - // Initialize all bins to 0 to set unused carriers - memset(out, 0, d_fft_length*sizeof(gr_complex)); - - i = 0; - while((d_msg_offset < d_msg->length()) && (i < d_occupied_carriers)) { - unsigned char bit0 = (d_msg->msg()[d_msg_offset] >> (d_bit_offset)) & 0x01; - d_bit_offset++; - - unsigned char bit1 = (d_msg->msg()[d_msg_offset] >> (d_bit_offset)) & 0x01; - d_bit_offset++; - - out[i + zeros_on_left] = gr_complex((0.707)*(1-2*(bit0)), (0.707)*(1-2*(bit1)) ); - i++; - if(d_bit_offset == 8) { - d_bit_offset = 0; - d_msg_offset++; - } - } - - // Ran out of data to put in symbol - if (d_msg_offset == d_msg->length()) { - while(i < d_occupied_carriers) { // finish filling out the symbol - out[i + zeros_on_left] = randombit(); - i++; - } - - if (d_msg->type() == 1) // type == 1 sets EOF - d_eof = true; - d_msg.reset(); // finished packet, free message - assert(d_bit_offset == 0); - } - - if (out_flag) - out_flag[0] = d_pending_flag; - d_pending_flag = 0; - - return 1; // produced symbol -} - diff --git a/gnuradio-core/src/lib/general/gr_ofdm_qpsk_mapper.h b/gnuradio-core/src/lib/general/gr_ofdm_qpsk_mapper.h deleted file mode 100644 index aa424ad6..00000000 --- a/gnuradio-core/src/lib/general/gr_ofdm_qpsk_mapper.h +++ /dev/null @@ -1,77 +0,0 @@ -/* -*- 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 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_GR_OFDM_QPSK_MAPPER_H -#define INCLUDED_GR_OFDM_QPSK_MAPPER_H - - -#include -#include -#include - -class gr_ofdm_qpsk_mapper; -typedef boost::shared_ptr gr_ofdm_qpsk_mapper_sptr; - -gr_ofdm_qpsk_mapper_sptr -gr_make_ofdm_qpsk_mapper (unsigned msgq_limit, - unsigned occupied_carriers, unsigned int fft_length); - -/*! - * \brief take a message in and map to a vector of complex - * constellation points suitable for IFFT input to be used in an ofdm - * modulator. Simple QPSK version. - * \ingroup modulation - */ - -class gr_ofdm_qpsk_mapper : public gr_sync_block -{ - friend gr_ofdm_qpsk_mapper_sptr - gr_make_ofdm_qpsk_mapper (unsigned msgq_limit, - unsigned occupied_carriers, unsigned int fft_length); - protected: - gr_ofdm_qpsk_mapper (unsigned msgq_limit, - unsigned occupied_carriers, unsigned int fft_length); - - private: - gr_msg_queue_sptr d_msgq; - gr_message_sptr d_msg; - unsigned d_msg_offset; - bool d_eof; - - unsigned int d_occupied_carriers; - unsigned int d_fft_length; - unsigned int d_bit_offset; - int d_pending_flag; - - public: - ~gr_ofdm_qpsk_mapper(void); - - gr_msg_queue_sptr msgq() const { return d_msgq; } - - int work(int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - -}; - - -#endif diff --git a/gnuradio-core/src/lib/general/gr_ofdm_qpsk_mapper.i b/gnuradio-core/src/lib/general/gr_ofdm_qpsk_mapper.i deleted file mode 100644 index a36005c8..00000000 --- a/gnuradio-core/src/lib/general/gr_ofdm_qpsk_mapper.i +++ /dev/null @@ -1,44 +0,0 @@ -/* -*- 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 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. - */ - -GR_SWIG_BLOCK_MAGIC(gr,ofdm_qpsk_mapper); - -gr_ofdm_qpsk_mapper_sptr -gr_make_ofdm_qpsk_mapper (unsigned int msgq_limit, - unsigned int bits_per_symbol, - unsigned int fft_length); - - -class gr_ofdm_qpsk_mapper : public gr_sync_block -{ - protected: - gr_ofdm_qpsk_mapper (unsigned int msgq_limit, - unsigned int bits_per_symbol, - unsigned int fft_length); - - public: - gr_msg_queue_sptr msgq(); - - int work(int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -};