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