Re: [Discuss-gnuradio] a question about using new block in GNURadio

2011-09-21 Thread Tom Rondeau
2011/9/19 intermilan 

>  Hi Tom:
> I used function set_history() as you advised in mu code ,and after I
> tested many values,
> I found that the best situation is that there would be  continuous Zeros
> (may be 3 or more)in my output data which made
> my data is not the exactly order which I want.  Is that also the buffer
> thing make that happen? Did you had
> that before?
>
> Inter.
>

Using set_history(N) will insert N zeros (I think; it might be N-1) into the
buffer initially. This means that when you first get a block of data, you
have 0 to noutput_items+N items available (in a gr_sync_block), and 0 to N
items will be 0 while N to noutput_items will have your data.

Tom




> From: trondeau1...@gmail.com
> Date: Tue, 13 Sep 2011 09:27:28 -0400
>
> Subject: Re: [Discuss-gnuradio] a question about using new block in
> GNURadio
> To: tianxia...@hotmail.com
> CC: discuss-gnuradio@gnu.org
>
> 2011/9/13 intermilan 
>
>  Hi Tom:
>   Thanks for your reply. Can you tell me how to fix it?  May be I
> looked at my code too much, I do not know where to change.
>
> inter
>
>
> Sorry, this is something you're really going to have to work out yourself.
> I find it sometimes helps to draw a picture of the buffers as the work
> function iterates over it to see what's happening to the pointers.
>
> Just remember, if i is the index to the input buffer "in", then in[i] is
> only valid for 0 <= i <= ninput_items[0] (or noutput_items if you are using
> a gr_sync_block). If you need to look beyond the current input buffer, use
> set_history(nhist), and so the constraint becomes 0 <= i <= (ninput_items[0]
> + nhist).
>
> Tom
>
>
>
>
>  ------
> From: trondeau1...@gmail.com
> Date: Mon, 12 Sep 2011 22:42:39 -0400
> Subject: Re: [Discuss-gnuradio] a question about using new block in
> GNURadio
> To: tianxia...@hotmail.com
> CC: discuss-gnuradio@gnu.org
>
>
> 2011/9/12 intermilan 
>
>
>  Hi all:
> I wrote a new block and add it into the GnuRadio. The function of this
> block is to synchronize the spread signal,
> which means this block used local PN sequence to correlate the input
> signal. And I set the threshold, if the correlation value is
> larger than the threshold, that means I finish the synchronous part. Then
> use the local PN sequence to XOR the synchronized
> signal,  so we will get the de-spread signal.
> But there is a problem I can not figure out the reason. I test this
> block in GRC. This block can works well in short time. Then
> sometimes the value of the output of this block would become 0. And I do
> not know the reason of this situation. I put my code
> of the block in this e-mail.
> I hope someone can help me to find out where is the problem of my code.
> Thank you in advance.
>
>
>
> Just a very quick read-through, but it looks like you are advancing i too
> much. You're going to walk it out of bounds of the input buffer.
>
> Tom
>
>
>
>  #ifdef HAVE_CONFIG_H
> #include "config.h"
> #endif
>
> #include 
> #include 
> #include 
> #include 
> #include 
>
> /*
>  * Create a new instance of pn_correlator_cc and return
>  * a boost shared_ptr.  This is effectively the public constructor.
>  */
> pn_correlator_ff_sptr
> pn_make_correlator_ff (int degree, int mask, int seed)
> {
>   return pn_correlator_ff_sptr (new pn_correlator1_ff (degree, mask,
> seed));
> }
>
> /*
>  * Specify constraints on number of input and output streams.
>  * This info is used to construct the input and output signatures
>  * (2nd & 3rd args to gr_block's constructor).  The input and
>  * output signatures are used by the runtime system to
>  * check that a valid number and type of inputs and outputs
>  * are connected to this block.  In this case, we accept
>  * only 1 input and 1 output.
>  */
> static const int MIN_IN = 1;// mininum number of input streams
> static const int MAX_IN = 1;// maximum number of input streams
> static const int MIN_OUT = 1;// minimum number of output streams
> static const int MAX_OUT = 1;// maximum number of output streams
>
> /*
>  * The private constructor
>  */
> pn_correlator_ff::pn_correlator_ff (int degree, int mask, int seed)
>   : gr_block("correlator_ff",
>gr_make_io_signature (MIN_IN, MAX_IN, sizeof (float)),
>gr_make_io_signature (MIN_OUT, MAX_OUT, sizeof (float)))
>
> {
>   d_len = (unsigned int)((1ULL << degree)-1);
>   d = degree;
>   if (mask == 0)
> mask = gri_glfsr::glfsr_mask(degree);
>   d_reference = new g

Re: [Discuss-gnuradio] a question about using new block in GNURadio

2011-09-19 Thread intermilan

Hi Tom:
I used function set_history() as you advised in mu code ,and after I tested 
many values,
I found that the best situation is that there would be  continuous Zeros (may 
be 3 or more)in my output data which made
my data is not the exactly order which I want.  Is that also the buffer thing 
make that happen? Did you had
that before?

Inter.

From: trondeau1...@gmail.com
Date: Tue, 13 Sep 2011 09:27:28 -0400
Subject: Re: [Discuss-gnuradio] a question about using new block in GNURadio
To: tianxia...@hotmail.com
CC: discuss-gnuradio@gnu.org

2011/9/13 intermilan 







Hi Tom:

  Thanks for your reply. Can you tell me how to fix it?  May be I looked at 
my code too much, I do not know where to change.

 

inter
Sorry, this is something you're really going to have to work out yourself. I 
find it sometimes helps to draw a picture of the buffers as the work function 
iterates over it to see what's happening to the pointers.


Just remember, if i is the index to the input buffer "in", then in[i] is only 
valid for 0 <= i <= ninput_items[0] (or noutput_items if you are using a 
gr_sync_block). If you need to look beyond the current input buffer, use 
set_history(nhist), and so the constraint becomes 0 <= i <= (ninput_items[0] + 
nhist).


Tom

 


From: trondeau1...@gmail.com
Date: Mon, 12 Sep 2011 22:42:39 -0400
Subject: Re: [Discuss-gnuradio] a question about using new block in GNURadio
To: tianxia...@hotmail.com


CC: discuss-gnuradio@gnu.org


2011/9/12 intermilan 



 


Hi all:
I wrote a new block and add it into the GnuRadio. The function of this 
block is to synchronize the spread signal, 
which means this block used local PN sequence to correlate the input signal. 
And I set the threshold, if the correlation value is 


larger than the threshold, that means I finish the synchronous part. Then use 
the local PN sequence to XOR the synchronized
signal,  so we will get the de-spread signal. 
But there is a problem I can not figure out the reason. I test this block 
in GRC. This block can works well in short time. Then


sometimes the value of the output of this block would become 0. And I do not 
know the reason of this situation. I put my code
of the block in this e-mail. 
I hope someone can help me to find out where is the problem of my code. 
Thank you in advance.





Just a very quick read-through, but it looks like you are advancing i too much. 
You're going to walk it out of bounds of the input buffer.


Tom


 



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

#include 
#include 
#include 
#include 


#include 

/*
 * Create a new instance of pn_correlator_cc and return
 * a boost shared_ptr.  This is effectively the public constructor.
 */
pn_correlator_ff_sptr 
pn_make_correlator_ff (int degree, int mask, int seed)


{
  return pn_correlator_ff_sptr (new pn_correlator1_ff (degree, mask, seed));
}

/*
 * Specify constraints on number of input and output streams.
 * This info is used to construct the input and output signatures


 * (2nd & 3rd args to gr_block's constructor).  The input and
 * output signatures are used by the runtime system to
 * check that a valid number and type of inputs and outputs
 * are connected to this block.  In this case, we accept


 * only 1 input and 1 output.
 */
static const int MIN_IN = 1;// mininum number of input streams
static const int MAX_IN = 1;// maximum number of input streams
static const int MIN_OUT = 1;// minimum number of output streams


static const int MAX_OUT = 1;// maximum number of output streams

/*
 * The private constructor
 */
pn_correlator_ff::pn_correlator_ff (int degree, int mask, int seed)
  : gr_block("correlator_ff",


   gr_make_io_signature (MIN_IN, MAX_IN, sizeof (float)),
   gr_make_io_signature (MIN_OUT, MAX_OUT, sizeof (float)))
 
{
  d_len = (unsigned int)((1ULL << degree)-1);


  d = degree;
  if (mask == 0)
mask = gri_glfsr::glfsr_mask(degree);
  d_reference = new gri_glfsr(mask, seed);
  for (int i = 0; i < d_len; i++)// initialize to last value in sequence
d_pn = 2.0*d_reference->next_bit()-1.0;


}


void
pn_correlator_ff::forecast (int noutput_items, gr_vector_int 
&ninput_items_required)
{
  int input_required =   noutput_items + d*d_len ;
  unsigned ninputs = ninput_items_required.size();


  for (unsigned int i = 0; i < ninputs; i++) {
ninput_items_required[i] = input_required;
  }
}


/*
 * Our virtual destructor.
 */
pn_correlator_ff::~pn_correlator_ff()
{
  delete d_reference;


}



int 
pn_correlator_ff::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 *) o

Re: [Discuss-gnuradio] a question about using new block in GNURadio

2011-09-13 Thread Tom Rondeau
2011/9/13 intermilan 

>  Hi Tom:
>   Thanks for your reply. Can you tell me how to fix it?  May be I
> looked at my code too much, I do not know where to change.
>
> inter
>

Sorry, this is something you're really going to have to work out yourself. I
find it sometimes helps to draw a picture of the buffers as the work
function iterates over it to see what's happening to the pointers.

Just remember, if i is the index to the input buffer "in", then in[i] is
only valid for 0 <= i <= ninput_items[0] (or noutput_items if you are using
a gr_sync_block). If you need to look beyond the current input buffer, use
set_history(nhist), and so the constraint becomes 0 <= i <= (ninput_items[0]
+ nhist).

Tom




>  --
> From: trondeau1...@gmail.com
> Date: Mon, 12 Sep 2011 22:42:39 -0400
> Subject: Re: [Discuss-gnuradio] a question about using new block in
> GNURadio
> To: tianxia...@hotmail.com
> CC: discuss-gnuradio@gnu.org
>
>
> 2011/9/12 intermilan 
>
>
>  Hi all:
> I wrote a new block and add it into the GnuRadio. The function of this
> block is to synchronize the spread signal,
> which means this block used local PN sequence to correlate the input
> signal. And I set the threshold, if the correlation value is
> larger than the threshold, that means I finish the synchronous part. Then
> use the local PN sequence to XOR the synchronized
> signal,  so we will get the de-spread signal.
> But there is a problem I can not figure out the reason. I test this
> block in GRC. This block can works well in short time. Then
> sometimes the value of the output of this block would become 0. And I do
> not know the reason of this situation. I put my code
> of the block in this e-mail.
> I hope someone can help me to find out where is the problem of my code.
> Thank you in advance.
>
>
>
> Just a very quick read-through, but it looks like you are advancing i too
> much. You're going to walk it out of bounds of the input buffer.
>
> Tom
>
>
>
>  #ifdef HAVE_CONFIG_H
> #include "config.h"
> #endif
>
> #include 
> #include 
> #include 
> #include 
> #include 
>
> /*
>  * Create a new instance of pn_correlator_cc and return
>  * a boost shared_ptr.  This is effectively the public constructor.
>  */
> pn_correlator_ff_sptr
> pn_make_correlator_ff (int degree, int mask, int seed)
> {
>   return pn_correlator_ff_sptr (new pn_correlator1_ff (degree, mask,
> seed));
> }
>
> /*
>  * Specify constraints on number of input and output streams.
>  * This info is used to construct the input and output signatures
>  * (2nd & 3rd args to gr_block's constructor).  The input and
>  * output signatures are used by the runtime system to
>  * check that a valid number and type of inputs and outputs
>  * are connected to this block.  In this case, we accept
>  * only 1 input and 1 output.
>  */
> static const int MIN_IN = 1;// mininum number of input streams
> static const int MAX_IN = 1;// maximum number of input streams
> static const int MIN_OUT = 1;// minimum number of output streams
> static const int MAX_OUT = 1;// maximum number of output streams
>
> /*
>  * The private constructor
>  */
> pn_correlator_ff::pn_correlator_ff (int degree, int mask, int seed)
>   : gr_block("correlator_ff",
>gr_make_io_signature (MIN_IN, MAX_IN, sizeof (float)),
>gr_make_io_signature (MIN_OUT, MAX_OUT, sizeof (float)))
>
> {
>   d_len = (unsigned int)((1ULL << degree)-1);
>   d = degree;
>   if (mask == 0)
> mask = gri_glfsr::glfsr_mask(degree);
>   d_reference = new gri_glfsr(mask, seed);
>   for (int i = 0; i < d_len; i++)// initialize to last value in
> sequence
> d_pn = 2.0*d_reference->next_bit()-1.0;
> }
>
>
> void
> pn_correlator_ff::forecast (int noutput_items, gr_vector_int
> &ninput_items_required)
> {
>   int input_required =   noutput_items + d*d_len ;
>   unsigned ninputs = ninput_items_required.size();
>   for (unsigned int i = 0; i < ninputs; i++) {
> ninput_items_required[i] = input_required;
>   }
> }
>
>
> /*
>  * Our virtual destructor.
>  */
> pn_correlator_ff::~pn_correlator_ff()
> {
>   delete d_reference;
> }
>
>
>
> int
> pn_correlator_ff::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];
>

Re: [Discuss-gnuradio] a question about using new block in GNURadio

2011-09-13 Thread intermilan

Hi Tom:
  Thanks for your reply. Can you tell me how to fix it?  May be I looked at 
my code too much, I do not know where to change.
 
inter
 



From: trondeau1...@gmail.com
Date: Mon, 12 Sep 2011 22:42:39 -0400
Subject: Re: [Discuss-gnuradio] a question about using new block in GNURadio
To: tianxia...@hotmail.com
CC: discuss-gnuradio@gnu.org


2011/9/12 intermilan 



 


Hi all:
I wrote a new block and add it into the GnuRadio. The function of this 
block is to synchronize the spread signal, 
which means this block used local PN sequence to correlate the input signal. 
And I set the threshold, if the correlation value is 
larger than the threshold, that means I finish the synchronous part. Then use 
the local PN sequence to XOR the synchronized
signal,  so we will get the de-spread signal. 
But there is a problem I can not figure out the reason. I test this block 
in GRC. This block can works well in short time. Then
sometimes the value of the output of this block would become 0. And I do not 
know the reason of this situation. I put my code
of the block in this e-mail. 
I hope someone can help me to find out where is the problem of my code. 
Thank you in advance.





Just a very quick read-through, but it looks like you are advancing i too much. 
You're going to walk it out of bounds of the input buffer.


Tom


 



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

#include 
#include 
#include 
#include 
#include 

/*
 * Create a new instance of pn_correlator_cc and return
 * a boost shared_ptr.  This is effectively the public constructor.
 */
pn_correlator_ff_sptr 
pn_make_correlator_ff (int degree, int mask, int seed)
{
  return pn_correlator_ff_sptr (new pn_correlator1_ff (degree, mask, seed));
}

/*
 * Specify constraints on number of input and output streams.
 * This info is used to construct the input and output signatures
 * (2nd & 3rd args to gr_block's constructor).  The input and
 * output signatures are used by the runtime system to
 * check that a valid number and type of inputs and outputs
 * are connected to this block.  In this case, we accept
 * only 1 input and 1 output.
 */
static const int MIN_IN = 1;// mininum number of input streams
static const int MAX_IN = 1;// maximum number of input streams
static const int MIN_OUT = 1;// minimum number of output streams
static const int MAX_OUT = 1;// maximum number of output streams

/*
 * The private constructor
 */
pn_correlator_ff::pn_correlator_ff (int degree, int mask, int seed)
  : gr_block("correlator_ff",
   gr_make_io_signature (MIN_IN, MAX_IN, sizeof (float)),
   gr_make_io_signature (MIN_OUT, MAX_OUT, sizeof (float)))
 
{
  d_len = (unsigned int)((1ULL << degree)-1);
  d = degree;
  if (mask == 0)
mask = gri_glfsr::glfsr_mask(degree);
  d_reference = new gri_glfsr(mask, seed);
  for (int i = 0; i < d_len; i++)// initialize to last value in sequence
d_pn = 2.0*d_reference->next_bit()-1.0;
}


void
pn_correlator_ff::forecast (int noutput_items, gr_vector_int 
&ninput_items_required)
{
  int input_required =   noutput_items + d*d_len ;
  unsigned ninputs = ninput_items_required.size();
  for (unsigned int i = 0; i < ninputs; i++) {
ninput_items_required[i] = input_required;
  }
}


/*
 * Our virtual destructor.
 */
pn_correlator_ff::~pn_correlator_ff()
{
  delete d_reference;
}



int 
pn_correlator_ff::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];
  int a=0;
  int i=0;
  float sum =0;

 while(anext_bit()-1.0; // no conditionals
  sum+= (2*(in[i])-1) * d_pn;   
i++;
 }
sum = abs(sum/d_len); //calculate the correlate value 
}

  d_pn = d_reference->next_bit();

  if(d_pn == in[i]) //  use local PN sequence to XOR the synchronized signal
 out[a]=0;
  else
 out[a]=1;
  
 i++;
 a++;
 
 }
  consume_each (noutput_items);
  return noutput_items;
} 

___
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio


  ___
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio


Re: [Discuss-gnuradio] a question about using new block in GNURadio

2011-09-12 Thread Tom Rondeau
2011/9/12 intermilan 

>
>  Hi all:
> I wrote a new block and add it into the GnuRadio. The function of this
> block is to synchronize the spread signal,
> which means this block used local PN sequence to correlate the input
> signal. And I set the threshold, if the correlation value is
> larger than the threshold, that means I finish the synchronous part. Then
> use the local PN sequence to XOR the synchronized
> signal,  so we will get the de-spread signal.
> But there is a problem I can not figure out the reason. I test this
> block in GRC. This block can works well in short time. Then
> sometimes the value of the output of this block would become 0. And I do
> not know the reason of this situation. I put my code
> of the block in this e-mail.
> I hope someone can help me to find out where is the problem of my code.
> Thank you in advance.
>


Just a very quick read-through, but it looks like you are advancing i too
much. You're going to walk it out of bounds of the input buffer.

Tom



> #ifdef HAVE_CONFIG_H
> #include "config.h"
> #endif
>
> #include 
> #include 
> #include 
> #include 
> #include 
>
> /*
>  * Create a new instance of pn_correlator_cc and return
>  * a boost shared_ptr.  This is effectively the public constructor.
>  */
> pn_correlator_ff_sptr
> pn_make_correlator_ff (int degree, int mask, int seed)
> {
>   return pn_correlator_ff_sptr (new pn_correlator1_ff (degree, mask,
> seed));
> }
>
> /*
>  * Specify constraints on number of input and output streams.
>  * This info is used to construct the input and output signatures
>  * (2nd & 3rd args to gr_block's constructor).  The input and
>  * output signatures are used by the runtime system to
>  * check that a valid number and type of inputs and outputs
>  * are connected to this block.  In this case, we accept
>  * only 1 input and 1 output.
>  */
> static const int MIN_IN = 1;// mininum number of input streams
> static const int MAX_IN = 1;// maximum number of input streams
> static const int MIN_OUT = 1;// minimum number of output streams
> static const int MAX_OUT = 1;// maximum number of output streams
>
> /*
>  * The private constructor
>  */
> pn_correlator_ff::pn_correlator_ff (int degree, int mask, int seed)
>   : gr_block("correlator_ff",
>gr_make_io_signature (MIN_IN, MAX_IN, sizeof (float)),
>gr_make_io_signature (MIN_OUT, MAX_OUT, sizeof (float)))
>
> {
>   d_len = (unsigned int)((1ULL << degree)-1);
>   d = degree;
>   if (mask == 0)
> mask = gri_glfsr::glfsr_mask(degree);
>   d_reference = new gri_glfsr(mask, seed);
>   for (int i = 0; i < d_len; i++)// initialize to last value in
> sequence
> d_pn = 2.0*d_reference->next_bit()-1.0;
> }
>
>
> void
> pn_correlator_ff::forecast (int noutput_items, gr_vector_int
> &ninput_items_required)
> {
>   int input_required =   noutput_items + d*d_len ;
>   unsigned ninputs = ninput_items_required.size();
>   for (unsigned int i = 0; i < ninputs; i++) {
> ninput_items_required[i] = input_required;
>   }
> }
>
>
> /*
>  * Our virtual destructor.
>  */
> pn_correlator_ff::~pn_correlator_ff()
> {
>   delete d_reference;
> }
>
>
>
> int
> pn_correlator_ff::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];
>   int a=0;
>   int i=0;
>   float sum =0;
>
>  while(a  {
>   while(sum<0.8)
>  {
> sum =0;
> for (int j = 0; j < d_len; j++) {
>   if (j != 0)// retard PN generator one
> sample per period
> d_pn = 2.0*d_reference->next_bit()-1.0; // no conditionals
>   sum+= (2*(in[i])-1) * d_pn;
> i++;
>  }
> sum = abs(sum/d_len); //calculate the correlate value
> }
>
>   d_pn = d_reference->next_bit();
>
>   if(d_pn == in[i]) //  use local PN sequence to XOR the synchronized
> signal
>  out[a]=0;
>   else
>  out[a]=1;
>
>  i++;
>  a++;
>
>  }
>   consume_each (noutput_items);
>   return noutput_items;
> }
>
> ___
> Discuss-gnuradio mailing list
> Discuss-gnuradio@gnu.org
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
>
___
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio


[Discuss-gnuradio] a question about using new block in GNURadio

2011-09-12 Thread intermilan


 

Hi all:
I wrote a new block and add it into the GnuRadio. The function of this 
block is to synchronize the spread signal, 
which means this block used local PN sequence to correlate the input signal. 
And I set the threshold, if the correlation value is 
larger than the threshold, that means I finish the synchronous part. Then use 
the local PN sequence to XOR the synchronized
signal,  so we will get the de-spread signal. 
But there is a problem I can not figure out the reason. I test this block 
in GRC. This block can works well in short time. Then
sometimes the value of the output of this block would become 0. And I do not 
know the reason of this situation. I put my code
of the block in this e-mail. 
I hope someone can help me to find out where is the problem of my code. 
Thank you in advance.


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

#include 
#include 
#include 
#include 
#include 

/*
 * Create a new instance of pn_correlator_cc and return
 * a boost shared_ptr.  This is effectively the public constructor.
 */
pn_correlator_ff_sptr 
pn_make_correlator_ff (int degree, int mask, int seed)
{
  return pn_correlator_ff_sptr (new pn_correlator1_ff (degree, mask, seed));
}

/*
 * Specify constraints on number of input and output streams.
 * This info is used to construct the input and output signatures
 * (2nd & 3rd args to gr_block's constructor).  The input and
 * output signatures are used by the runtime system to
 * check that a valid number and type of inputs and outputs
 * are connected to this block.  In this case, we accept
 * only 1 input and 1 output.
 */
static const int MIN_IN = 1;// mininum number of input streams
static const int MAX_IN = 1;// maximum number of input streams
static const int MIN_OUT = 1;// minimum number of output streams
static const int MAX_OUT = 1;// maximum number of output streams

/*
 * The private constructor
 */
pn_correlator_ff::pn_correlator_ff (int degree, int mask, int seed)
  : gr_block("correlator_ff",
   gr_make_io_signature (MIN_IN, MAX_IN, sizeof (float)),
   gr_make_io_signature (MIN_OUT, MAX_OUT, sizeof (float)))
 
{
  d_len = (unsigned int)((1ULL << degree)-1);
  d = degree;
  if (mask == 0)
mask = gri_glfsr::glfsr_mask(degree);
  d_reference = new gri_glfsr(mask, seed);
  for (int i = 0; i < d_len; i++)// initialize to last value in sequence
d_pn = 2.0*d_reference->next_bit()-1.0;
}


void
pn_correlator_ff::forecast (int noutput_items, gr_vector_int 
&ninput_items_required)
{
  int input_required =   noutput_items + d*d_len ;
  unsigned ninputs = ninput_items_required.size();
  for (unsigned int i = 0; i < ninputs; i++) {
ninput_items_required[i] = input_required;
  }
}


/*
 * Our virtual destructor.
 */
pn_correlator_ff::~pn_correlator_ff()
{
  delete d_reference;
}



int 
pn_correlator_ff::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];
  int a=0;
  int i=0;
  float sum =0;

 while(anext_bit()-1.0; // no conditionals
  sum+= (2*(in[i])-1) * d_pn;   
i++;
 }
sum = abs(sum/d_len); //calculate the correlate value 
}

  d_pn = d_reference->next_bit();

  if(d_pn == in[i]) //  use local PN sequence to XOR the synchronized signal
 out[a]=0;
  else
 out[a]=1;
  
 i++;
 a++;
 
 }
  consume_each (noutput_items);
  return noutput_items;
} 
  ___
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio