Here are all the related files.

C++ header
***************
* dsss_firdes.h *
***************
#ifndef _DSSS_FIRDES_H_
#define _DSSS_FIRDES_H_

#include <vector>
#include <cmath>

class dsss_firdes {
public:
  dsss_firdes();

static std::vector<float> raised_cosine (double gain, double sampling_freq,
double symbol_rate,  double alpha,  int ntaps);
};

#endif



C++ Source file -
*****************
* dsss_firdes.cc  *
*****************

#include "dsss_firdes.h"
#include <stdexcept>

using std::vector;

// Raised Cosine Filter

vector<float>
dsss_firdes::raised_cosine (double gain, double sampling_freq, double
symbol_rate, double alpha, int ntaps)
{
   ntaps |= 1; // ensure that ntaps is odd

   double spb = sampling_freq/symbol_rate; // samples per bit/symbol
   vector<float> taps(ntaps);
   double scale = 0;
   for(int i=0;i<ntaps;i++)
   {
       double x1,x2,rc1;
       double xindx = i - ntaps/2;
       x1 = M_PI * xindx/spb;
       x2 = 1-(4*alpha*alpha*(xindx/spb)*(xindx/spb));

      if(i == ntaps/2){
            taps[i] = 1;
            continue;
       }
      if(fabs(x2) < 0.000001){ // manage rounding errors. treat 0.000001 as
zero
           x2 = 8*alpha*(xindx/spb)*(xindx/spb);
           rc1 = sin(x1)*sin(alpha*x1)/x2;
       }
       else{
       rc1 = (sin(x1)*cos(alpha*x1))/(x1*x2);
       }
      taps[i] = rc1;
      scale += taps[i];
      }

      for(int i=0;i<ntaps;i++){
           taps[i] = taps[i] * gain / scale;
        }
      return taps;
}


SWIG interface
** dsss.i **

%include "gnuradio.i"

%{
#include "dsss_firdes.h"
%}


//GR_SWIG_BLOCK_MAGIC(dsss,firdes);
class dsss_firdes
{
public:
static std::vector<float> raised_cosine(double gain, double sampling_freq,
double symbol_rate, double alpha, int ntaps);
};

 ***************
*  Makefile.am   *
 ***************

include $(top_srcdir)/Makefile.common

# C/C++ headers get installed in ${prefix}/include/gnuradio
grinclude_HEADERS =  dsss_firdes.h

###################################
# SWIG Python interface and library

TOP_SWIG_IFILES = dsss.i

# Install so that they end up available as:
# import gnuradio.dsss
# This ends up at:
# ${prefix}/lib/python${python_version}/site-packages/gnuradio
dsss_pythondir_category = gnuradio


# additional sources for the SWIG-generated library
dsss_la_swig_sources =  dsss_firdes.cc

include $(top_srcdir)/Makefile.swig

# add some of the variables generated inside the Makefile.swig.gen
BUILT_SOURCES = $(swig_built_sources)

# Do not distribute the output of SWIG
no_dist_files = $(swig_built_sources)








On Sun, Jul 3, 2011 at 10:33 AM, Tom Rondeau <trondeau1...@gmail.com> wrote:

> On Sun, Jul 3, 2011 at 3:25 AM, John Andrews <gnu.f...@gmail.com> wrote:
>
>> Hi Tom,
>>
>>
>>
>>> Are you doing this in your own top-level block (dsss from the looks of
>>> it) or under a current GNU Radio directory like gnuradio-core where the
>>> gr_firdes currently is?
>>>
>> Yes, I am doing this in my own top-level directory named 'dsss'
>> (abbreviation for direct sequence spread spectrum)
>>
>>>
>>> You haven't mentioned adding anything to the Makefile so that it is built
>>> properly. If you are working under gnuradio-core/src/lib/general, you'll
>>> also want to add your .h and .i files to general.i so that it get's
>>> compiled.
>>>
>>
>> I added the names to Makefile.am like I added the remaining names of
>> files. The Makefile.am has been adapted from howto-write-a-block. The C++
>> part gets compiled without any problem but when importing in python it
>> throws an undefined_variable_dsss_firdes_Z*** type of error, which according
>> to my previous experience occurs with wrong SWIG interface problem. I am
>> pretty sure I am having a SWIG related issue here.
>>
>
> Ok, it _sounds_ like you are doing everything correctly. In my experience
> with this stuff, it usually comes down to a small typo somewhere. You can
> post your files here (.i, .h, and Makefile) so others to maybe have a look
> to see if there's anything incorrect in them.
>
>
>> Also, just curious, what application are you interested in that requires a
>>> raised cosine filter? And couldn't you just create a root raised cosine
>>> filter and convolve the the taps against themselves to make the raised
>>> cosine taps?
>>>
>>
>> I am developing a  BPSK based Direct sequence spread spectrum Tx/Rx and at
>> the transmitter i wanted to use a raised cosine filter when interpolating
>> from symbol to N samples before sending it to the USRP. I am not sure if
>> this is the preferred method but I haven't found any documentation  related
>> to DSSS that mentions pulse-shaping.
>>
>>>
>>> Tom
>>>
>>
> There is definitely some work on pulse shaping of DSSS systems. I believe,
> though, that they all use root raised cosine filters. This is done at both
> the transmitter and receiver so that the received signal has gone through
> two root raised cosine filters to make the raised cosine filter, which is a
> Nyquist filter.
>
> Tom
>
>
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to