Hi, I dont know how the Viterbi algorithm works, but do you want to (a) initialize the first 7 samples for only the first chunk of samples you get, or (b) for every chunk of samples you get? What you have implemented is option (b), and it seems only natural that the initialization code would be called multiple times.
If you're looking for option (a) you would need a flag that you set the first time general_work is called. This flag state must persist across multiple calls to general_work, so it would be a member variable of your signal processing block. class my_block : public gr_block { private: long d_init; ... }; //ctor my_block::my_block (....) : gr_block ("my_block", ....) { d_init = 0; ... } my_block::general_work(...) { if( !d_init ) { for (int i = 0; i < 7; i++) { use in[i] to intialize the Viterbi algorithm; } for (int i = 7; i < ninput_terms; i++) { use each in[i] to do Viterbi algorithm tracking; out[n] = something } d_init = 1; } else { for (int i = 0; i < ninput_terms; i++) { use each in[i] to do Viterbi algorithm tracking; out[n] = something } } }
From what I have read about the Viterbi algorithm, I am assuming this
algorithm is to be initialized only once, or at least once per transmission, which means you are looking for option (a) (or a more complex variation thereof.) Kunal On 10/10/06, Dawei Shen <[EMAIL PROTECTED]> wrote:
It varies from time to time, but I am pretty sure it's larger than 7. It's at least 100. Dawei On 10/10/06, Thomas Schmid < [EMAIL PROTECTED]> wrote: > Are you sure you get enough input items for the general_work? try to > print ninput_items and see what the result is. It might be that you > get always less than the 7 items you need to initialize the algorithm. > > Thomas > > On 10/10/06, Dawei Shen < [EMAIL PROTECTED]> wrote: > > Hello Everyone > > > > I have got a problem which arised from my project. Here is what I want to > > do: I am trying to implement a Viterbi algorithm. Suppose "in" is the input > > stream, I want to use in[0], in[1]....in[6], seven elements to initialize > > the Viterbi algorithm. Then from in[7], I start to use Viterbi algorithm to > > do tracking. Now the problem comes, in the "general_work()" function, I did > > something like this: > > > > int general_work(arg1, arg2, arg3, arg4) { > > for (int i = 0; i < 7; i++) { > > use in[i] to intialize the Viterbi algorithm; > > } > > for (int i = 8; i < ninput_terms; i++) { > > use each in[i] to do Viterbi algorithm tracking; > > out[n] = something > > } > > } > > > > However, the results told me this is a wrong way. Because the initialization > > part (the for i=0, i<7, i++ part) would be executed for many many times. It > > appeared to me that the scheduler would try to call the general_work > > function for many times and each time it calls it, everything in the > > function would be executed from the beginning to the end. For example, if I > > write a line > > > > printf("can you see me?\n"); > > > > and put it in front of the first 'for' iteration, I can see the printed > > output many times. This thing totally disturbed what I wish to do. Am I > > understood? > > > > Could anyone provide any help or insights? Thanks in advance. > > > > Best Regards > > Dawei
_______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org http://lists.gnu.org/mailman/listinfo/discuss-gnuradio