discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Discuss-gnuradio] DBPSK rework (SDPSK implementation)


From: Thunder87
Subject: [Discuss-gnuradio] DBPSK rework (SDPSK implementation)
Date: Fri, 23 Jul 2010 09:20:38 -0700 (PDT)

My goal is to rework DBPSK module, so that it is possible to easily implement
SDPSK module.

DBPSK goes like this: differential_encoding > ordinary BPSK, so there is no
actual constellation rotation. All rotation part is done by diff.encoder.
But this can be done only when shifting between 2 states. SDPSK shifts
between 4 states (1 = +90', 0 = -90').

So my intention was to make a class which would do something like the
following:



state = 1+0j #initial phase

if (chunk&0x01==1)
     state = state * p_change;
else
     state = state * n_change;



for DBPSK p_change=1+0j (no change in phase if bit = 1)
               n_change=-1+0j (reverse phase if bit = 0)

for SDPSK p_change =0+1j (+90' turn if bit = 1)
               n_change =0-1j (-90' turn if bit = 0)



It can't be implemented as a function because it has to store current state
somewhere. So I should probably write a class, where state would be
initialized at constructor.

So I have read this "How to write a signal processing block" guide.

Also have written howto_diffconst.h file:

#ifndef INCLUDED_HOWTO_DIFFCONST_BC_H
#define INCLUDED_HOWTO_DIFFCONST_BC_H

#include <gr_block.h>

class howto_diffconst_bc;

typedef boost::shared_ptr<howto_diffconst_bc> howto_diffconst_bc_sptr;

howto_diffconst_bc_sptr howto_make_diffconst_bc ();

class howto_diffconst_bc : public gr_block
{
  private:
    friend howto_diffconst_bc_sptr howto_make_diffconst_bc ();
    howto_diffconst_bc ();

  public:
    ~howto_diffconst_bc ();
    int general_work (int noutput_items, gr_vector_int &ninput_items,
                      gr_vector_const_void_star &input_items,
                      gr_vector_void_star &output_items);
};

#endif


and stopped at howto_diffconst.cc file:

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include <howto_diffconst_bc.h>
#include <gr_io_signature.h>


howto_diffconst_bc_sptr howto_make_diffconst_bc () {return
howto_diffconst_bc_sptr
                                                                                
(new howto_diffconst_bc ());}

howto_diffconst_bc::howto_diffconst_bc (): gr_block ("diffconst_bc",
                                                            
gr_make_io_signature (1, 1, 1),
                                                            
gr_make_io_signature (1, 1, 8)) {}

howto_diffconst_bc::~howto_diffconst_bc () {}


int howto_diffconst_bc::general_work (int noutput_items, gr_vector_int
&ninput_items,
                                      gr_vector_const_void_star
&input_items,
                                      gr_vector_void_star &output_items)
{

//const float *in = (const float *) input_items[0];
//float *out = (float *) output_items[0];
//out[0] = in[0] * in[0];

consume_each (noutput_items);
return noutput_items;
}


Now, finally about what bothers me.

First - signatures. Input should be a single chunk, output - signle complex.
So I wrote input signature: gr_make_io_signature(1,1,1), output signature:
gr_make_io_signature(1,1,8)

Would that be correct?


Next - variables. Thing is I have no idea what type of variables to use for
chunk and complex.

My guess - int for chunk, and complex class (complex<float>) from standart
c++ library ( http://cplusplus.com/reference/std/complex/complex/
std/complex ) for complex. But would that be compatible with gnu-radio
complex?

Third - initialization. Do I set initial phase

howto_diffconst_bc::howto_diffconst_bc (): gr_block ("diffconst_bc",
                                                            
gr_make_io_signature (1, 1, 1),
                                                            
gr_make_io_signature (1, 1, 8)) {here?}


Please help! Any suggestions accepted.
-- 
View this message in context: 
http://old.nabble.com/DBPSK-rework-%28SDPSK-implementation%29-tp29249098p29249098.html
Sent from the GnuRadio mailing list archive at Nabble.com.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]