discuss-gnuradio
[Top][All Lists]
Advanced

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

Re: [Discuss-gnuradio] help with add a new block to GNURadio


From: intermilan
Subject: Re: [Discuss-gnuradio] help with add a new block to GNURadio
Date: Wed, 1 Jun 2011 09:38:51 +0800

hi Tom:
      Thank you for your reply.
      At the beginning, I want to tell you about the function of my block.I want to use this block to correlate the received signal(spread signal) and local PN code,after I have a the max value of the correlate value,I should use the local PN code to despread the received demodulated signal and get the original data. So my input number and output number may not be strictly 1:1. And the value of d_len is the length of PN code,it may be 7,31,etc. So it can be too large.
 And in the block,it firstly test the in[0]...in[d_len-1],then in[d_len]...in[2*d_len-1] in while loop,  and after I get the max correlate value(which means the value of  sum is lager than the threshold), then go to the for loop to despread the spread signal.and in that loop,the in pointer should be incremented until the program end.
      The input of the block is 0 means the inputs themselves are 0,and after several bytes it will back to the correct value as the output value of the last block.And as you suggested,I use gr_sync_block instead of the gr_block,but it work worse than before.The input still will become to 0 and will never back the correct value. In my opinion,it may be the problem of the in pointer,after the block work for a while ,the value in this pointer become to 0,and then it back the value of the output of the last block.
      I hope I make myself clearly.So what do you think about this problem and how to fix it.
      Thank you again.

Inter


From: address@hidden
Date: Tue, 31 May 2011 13:54:44 -0400
To: address@hidden
Subject: Re: [Discuss-gnuradio] help with add a new block to GNURadio

2011/5/31 intermilan <address@hidden>
Hi:
    I recently add a new block to the GNURadio and GRC.The function of the block is to correlate the received spread signal and the local PN code.
I think my block can work well,but there is one thing I do not know how to fix.Sometimes the input of my block is 0 and then it will back to the normal.
But I saw the  output data from the last block ,they are correct.Did anyone have situation  before? and how did it happen? In the accessory are the code
of my block.
   thank you in advance.


I haven't looked over the code too closely, but a few comments. First, because you are consuming and returning the same number of items, you can just make this a gr_sync_block instead of a gr_block, which means you don't have to worry about the forecast function and it simplifies the interface.

On the other hand, since you need at least d_len to make a decision, you'll have to either deal with it by holding state or by forcing the scheduler to give you the correct number of samples, minimum (set_output_multiple can be useful for things like this if d_len is not too large).

Also, you are not initializing sum to anything in the work function, so the initial test in the while loop might trigger incorrectly.

You are also incrementing the in pointer during the for loop, but it looks like you want to remain there until the sum is greater than your threshold. I would think that you would want to test in[0] to in[d_len-1] in one loop, then in[1] to in[d_len], and so on. Here, you are going to skip an entire d_len of inputs.

I'm not sure what you mean by the input of your block is 0. Does this mean the number of input items is 0 or that the inputs themselves are 0?

Hope this helps some.

Tom


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

reply via email to

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