2011/9/19 intermilan <tianxia...@hotmail.com> > 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 <tianxia...@hotmail.com> > > 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 <tianxia...@hotmail.com> > > > 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 > 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