This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

C6455 VCP2 Viterbi Co-Processor - Soft decoding



Hello,

I need help about the soft decisions in the Viterbi Co-Processor (VCP2) of the DSP TSM320C6455. The input data to the module (called Branch Metrics) are always soft inputs, and the output data can correspond either to soft or hard decisions. The VCP2 User's Guide says that VCP2 can be configured to generate either hard decisions (one bit per decision), or soft decisions (8-bit value per decision).

The issue is that i would like to use soft decoding, but having hard outputs (i.e. 1 bit per output). Does the VCP2 always perform soft decoding even when hard decisions at the output are configured?

Many thanks in advance.

 

  • Yes, you are correct.  The VCP2 always performs soft decoding internally.  The "SDHD" input parameter only determines the output format.

    Regards,

    John

  • Thank you very much John, your help is very useful.

    Regards,

    Miguel

  • hello,I need about how compute the Branch Metrics in the Viterbi Co-Processor (VCP2) of the DSP TSM320C6455.The VCP2 User's Guide does not say it clearly,when i using the VCP2 how to compute it is the biggest problem.

     can you list the formula and explain it.

    thanks in advance. 

  • Hello kai zhu,

    Compute the Branch Metrics is as easy as shown at section 4.1 of the User's Guide.

    For example, for rate = 1/2, for each 2 input simbols [r0(t), r1(t)], there are two Branch Metrics [BM0(t), BM1(t)] to compute:

           BM0(t) = r0(t) + r1(t)

           BM1(t) = r0(t) - r1(t)

    If you have as input the received vector r =[ 1,2, -1,1,3,-2, ...,2,-1], then

            r0 = [1, -1, 3,...,2],

            r1 = [2, 1, -2,...,-1],

    and finally you obtain:

          BM0(0) = 1+2 = 3

          BM1(0) = 1 - 2 = -1

          BM0(T) = -1+1 = 0

          BM1(T) =  -1 - 1 = -2

          BM0(2T) = 3+2 = 5

          BM1(2T) = 3 - 2 =  1

          ...

          BM0(N) = 2+(-1) = 1

          BM1(N) = 2- (-1) = 3

     

    Kind regards,

    Miguel

  • but whether the input data is relevent to modulation method or not , the convolutional encoding is the bit operation and the outcome is only 0 or 1 but in your example,

    you use 3 ,2 ,etc. can you explain it?

    thanks for your help.

  • The input data for the VCP2 are branch metrics that are calculated from the received symbols.  The received symbols in a normal system are soft symbols with a resolution of more than one bit (usually closer to 8 bits).  Miguel was expressing these soft symbols in signed decimal.  It is true that the encoded bits are binary (0/1) at the transmitter of a system, but after being corrupted by the transmission channel they are usually sampled (and equalized, demodulated, etc.) at the receiver as soft symbols and then sent to the decoder for error correction decoding.  If you want to try out the decoder with perfect data directly from an encoder, you can convert the encoded binary bits to soft symbols (i.e. 0 = max_value, 1 => - max_value).  These symbols should be scaled as described in section 4.2 of the user's guide and then used to calculate the branch metrics.

    Regards,
    John

  • hello ,in the projiect  VCP2 ,there is a file tcpvcp2_3gpp.h .And line 130 has a sentence " asm("   IDLE");"note there is a lot of blanks before IDLE,I find

    the number of blank  will determine my result,I want to know why,and how many blanks is the best.Thank you ! 

  • The asm() function treats the text argument as assembly code.  If there is no space before IDLE then the assembler will treat the IDLE mnemonic as a label.
    Because of this, at least one space is needed before IDLE.

  • Thank you very much.But I find if there are three spaces before IDLE there is a dead loop on IDLE,when there is four ,the problem is solve.Whether I can replace it with a C sentence or not. And last I want to know the code VCP2 for 6455 whether can run on 6487!

  •      To calculate the branch metric,dose Modulation need to consider ?

    What's the Modulation  of the next code:

    void MapOnBaseband(unsigned int* in,int len, unsigned int* out)

    {

      unsigned int words,i;

      unsigned int inputWord;

     

      words=(len+31)>>5; /* round up */  

     

      for(i=0;i<words;i++)

      {

    #ifdef _LITTLE_ENDIAN

    //     inputWord=_bitr(~*in++);

    inputWord=~*in++;

         *out++=_sub4(_xpnd4(inputWord>>0 ) & 0x20202020 , 0x10101010);    

         *out++=_sub4(_xpnd4(inputWord>>4 ) & 0x20202020 , 0x10101010);    

         *out++=_sub4(_xpnd4(inputWord>>8 ) & 0x20202020 , 0x10101010);    

         *out++=_sub4(_xpnd4(inputWord>>12) & 0x20202020 , 0x10101010);    

         *out++=_sub4(_xpnd4(inputWord>>16) & 0x20202020 , 0x10101010);    

         *out++=_sub4(_xpnd4(inputWord>>20) & 0x20202020 , 0x10101010);    

         *out++=_sub4(_xpnd4(inputWord>>24) & 0x20202020 , 0x10101010);    

         *out++=_sub4(_xpnd4(inputWord>>28) & 0x20202020 , 0x10101010);    

    #else

         inputWord=_bitr(~*in++);

         *out++=_sub4(_xpnd4(inputWord>>28) & 0x20202020 , 0x10101010);    

         *out++=_sub4(_xpnd4(inputWord>>24) & 0x20202020 , 0x10101010);    

         *out++=_sub4(_xpnd4(inputWord>>20) & 0x20202020 , 0x10101010);    

         *out++=_sub4(_xpnd4(inputWord>>16) & 0x20202020 , 0x10101010);    

         *out++=_sub4(_xpnd4(inputWord>>12) & 0x20202020 , 0x10101010);    

         *out++=_sub4(_xpnd4(inputWord>>8 ) & 0x20202020 , 0x10101010);    

         *out++=_sub4(_xpnd4(inputWord>>4 ) & 0x20202020 , 0x10101010);    

         *out++=_sub4(_xpnd4(inputWord>>0 ) & 0x20202020 , 0x10101010);    

    #endif

      } 

    }

  • The branch metrics that are input to the VCP2 are calculated from encoded soft bits.  These bits should already be demodulated before they are used, and thus the modulation type does not matter.

    Regards,
    John Herrington

  • Thank you very much!6474 and 6482 all use VCP2 ,Why can not I transplanted it to 6482,Where should I change?Eager to get your answer

  • When two devices contain the same submodule, then the software from one can usually be adapted to work for the other device.  Even though the submodule may be identical, the device-specific characteristics may be different and thus need to be changed.  These are described in the device data manual and typically include the base addresses of the submodule, the interrupt and event connections/mappings (including which EDMA is used), and power domain control.  Some of this may be taken care of already when you switch to using the chip support library (CSL) for the new device.

    Regards,

    John

     

  • What's the difference between soft decision and hard decision at the output?

    Dose the output is the bit  on encode?

  • After all the function VCP2_Start(),The VcpConfig will transtrate to VCP register by EDMA channal 29.And after decode the decision will translate to array decision.But in the example you give on your web,the function (VCP2_statRun()) always return 1,which is indicate that VCP2 is always running.Why it has been complete decode,but VCP2_statRun() still return 1.So there is a dead loop.
  • Thank you very much!

         In the CCS software, I can normal decoding, when the program on 6455, I find can not start the decoder.When I call the function VCP2_Start(),I find it can not configue the register VCPIC0~VCPIC5.On other words,I can not start the decoder.Why!

  • Hello:

     When I call the function VCP2_Start(),does VCPXEVT are automatically generated ?Does channel 28 also need VCPREVT bind with it?Or VCPREVT  Automatic Binding with channel 28!