2011/9/12 intermilan <[email protected]>
>
> 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 <pn_correlator1_ff.h>
> #include <gr_io_signature.h>
> #include <vector>
> #include <iostream>
> #include <fstream>
>
> /*
> * 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<noutput_items)
> {
> 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
> [email protected]
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
>
_______________________________________________
Discuss-gnuradio mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio