lele

Dependencies:   mbed

Committer:
krishanprajapat
Date:
Fri Jul 31 12:30:28 2015 +0000
Revision:
0:984643af7d81
bro was working .......next step to reducr 2 sframes and eos to 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
krishanprajapat 0:984643af7d81 1
krishanprajapat 0:984643af7d81 2
krishanprajapat 0:984643af7d81 3 class Convolution{
krishanprajapat 0:984643af7d81 4
krishanprajapat 0:984643af7d81 5 private:
krishanprajapat 0:984643af7d81 6 typedef struct ConvNode{
krishanprajapat 0:984643af7d81 7 //next state
krishanprajapat 0:984643af7d81 8 //format : 8 bits mapped as [1]xxxx [0]xxxx
krishanprajapat 0:984643af7d81 9 unsigned char nextState;
krishanprajapat 0:984643af7d81 10
krishanprajapat 0:984643af7d81 11 //output
krishanprajapat 0:984643af7d81 12 // format : 8 bits mapped as
krishanprajapat 0:984643af7d81 13 // **** xxxx{2} [1]-[0] {1} [1]-[0] i.e. ****xxxx
krishanprajapat 0:984643af7d81 14 // x = data, * = junk
krishanprajapat 0:984643af7d81 15 unsigned char output;
krishanprajapat 0:984643af7d81 16 }ConvNode;
krishanprajapat 0:984643af7d81 17
krishanprajapat 0:984643af7d81 18 ConvNode convStateList[16];
krishanprajapat 0:984643af7d81 19
krishanprajapat 0:984643af7d81 20 public:
krishanprajapat 0:984643af7d81 21 /*
krishanprajapat 0:984643af7d81 22 @brief: Constructor : Initialise all the variables
krishanprajapat 0:984643af7d81 23 @param: none
krishanprajapat 0:984643af7d81 24 @return: none
krishanprajapat 0:984643af7d81 25 */
krishanprajapat 0:984643af7d81 26 Convolution(){
krishanprajapat 0:984643af7d81 27
krishanprajapat 0:984643af7d81 28 convStateList[0].nextState = 0x10;
krishanprajapat 0:984643af7d81 29 convStateList[1].nextState = 0x32;
krishanprajapat 0:984643af7d81 30 convStateList[2].nextState = 0x54;
krishanprajapat 0:984643af7d81 31 convStateList[3].nextState = 0x76;
krishanprajapat 0:984643af7d81 32 convStateList[4].nextState = 0x98;
krishanprajapat 0:984643af7d81 33 convStateList[5].nextState = 0xBA;
krishanprajapat 0:984643af7d81 34 convStateList[6].nextState = 0xDC;
krishanprajapat 0:984643af7d81 35 convStateList[7].nextState = 0xFE;
krishanprajapat 0:984643af7d81 36 convStateList[8].nextState = 0x10;
krishanprajapat 0:984643af7d81 37 convStateList[9].nextState = 0x32;
krishanprajapat 0:984643af7d81 38 convStateList[10].nextState = 0x54;
krishanprajapat 0:984643af7d81 39 convStateList[11].nextState = 0x76;
krishanprajapat 0:984643af7d81 40 convStateList[12].nextState = 0x98;
krishanprajapat 0:984643af7d81 41 convStateList[13].nextState = 0xBA;
krishanprajapat 0:984643af7d81 42 convStateList[14].nextState = 0xDC;
krishanprajapat 0:984643af7d81 43 convStateList[15].nextState = 0xFE;
krishanprajapat 0:984643af7d81 44
krishanprajapat 0:984643af7d81 45 convStateList[0].output = 0x0A;
krishanprajapat 0:984643af7d81 46 convStateList[1].output = 0x06;
krishanprajapat 0:984643af7d81 47 convStateList[2].output = 0x06;
krishanprajapat 0:984643af7d81 48 convStateList[3].output = 0x0A;
krishanprajapat 0:984643af7d81 49 convStateList[4].output = 0x09;
krishanprajapat 0:984643af7d81 50 convStateList[5].output = 0x05;
krishanprajapat 0:984643af7d81 51 convStateList[6].output = 0x05;
krishanprajapat 0:984643af7d81 52 convStateList[7].output = 0x09;
krishanprajapat 0:984643af7d81 53 convStateList[8].output = 0x05;
krishanprajapat 0:984643af7d81 54 convStateList[9].output = 0x09;
krishanprajapat 0:984643af7d81 55 convStateList[10].output = 0x09;
krishanprajapat 0:984643af7d81 56 convStateList[11].output = 0x05;
krishanprajapat 0:984643af7d81 57 convStateList[12].output = 0x06;
krishanprajapat 0:984643af7d81 58 convStateList[13].output = 0x0A;
krishanprajapat 0:984643af7d81 59 convStateList[14].output = 0x0A;
krishanprajapat 0:984643af7d81 60 convStateList[15].output = 0x06;
krishanprajapat 0:984643af7d81 61 }
krishanprajapat 0:984643af7d81 62
krishanprajapat 0:984643af7d81 63
krishanprajapat 0:984643af7d81 64 /*
krishanprajapat 0:984643af7d81 65 @brief: convolution encode the input bytes : in sync with => (1-TM-Frame -> 2-T-Frame)
krishanprajapat 0:984643af7d81 66 @param: inPtr : pointer to input unsigned char array
krishanprajapat 0:984643af7d81 67 inLength : length in bytes of input array
krishanprajapat 0:984643af7d81 68 outPtr : pointer to the output bytes, define it outside the function
krishanprajapat 0:984643af7d81 69 outLength : length of output array in bytes [call by reference, edited inside the function]
krishanprajapat 0:984643af7d81 70 @return: none
krishanprajapat 0:984643af7d81 71 */
krishanprajapat 0:984643af7d81 72 void convolutionEncode(unsigned char *input, unsigned char *output){
krishanprajapat 0:984643af7d81 73
krishanprajapat 0:984643af7d81 74 // cout << "inside convolution" << endl;
krishanprajapat 0:984643af7d81 75
krishanprajapat 0:984643af7d81 76 unsigned int convState = 0;
krishanprajapat 0:984643af7d81 77
krishanprajapat 0:984643af7d81 78 int inBit = 7;
krishanprajapat 0:984643af7d81 79 unsigned int inByte = 0;
krishanprajapat 0:984643af7d81 80
krishanprajapat 0:984643af7d81 81 unsigned int outState = 0;
krishanprajapat 0:984643af7d81 82 unsigned int outByte = 0;
krishanprajapat 0:984643af7d81 83
krishanprajapat 0:984643af7d81 84 for(unsigned int j = 0 ; j < 536 ; ++j){
krishanprajapat 0:984643af7d81 85 // printf("j = %u, inByte = %u\n", j, inByte);
krishanprajapat 0:984643af7d81 86 // read a new bit from input stream
krishanprajapat 0:984643af7d81 87 // cout << "inByte " <<inByte;
krishanprajapat 0:984643af7d81 88 unsigned char tempBit = (input[inByte] >> inBit) & 1;
krishanprajapat 0:984643af7d81 89 --inBit;
krishanprajapat 0:984643af7d81 90
krishanprajapat 0:984643af7d81 91 // convolute and write output
krishanprajapat 0:984643af7d81 92 switch(outState){
krishanprajapat 0:984643af7d81 93 case 0:
krishanprajapat 0:984643af7d81 94 outState = 2;
krishanprajapat 0:984643af7d81 95 output[outByte] = ( (convStateList[convState].output >> tempBit) & 1 ) << 7;
krishanprajapat 0:984643af7d81 96 output[outByte] += ( (convStateList[convState].output >> (tempBit + 2)) & 1 ) << 6;
krishanprajapat 0:984643af7d81 97 break;
krishanprajapat 0:984643af7d81 98 case 2:
krishanprajapat 0:984643af7d81 99 outState = 4;
krishanprajapat 0:984643af7d81 100 output[outByte] += ( (convStateList[convState].output >> tempBit) & 1 ) << 5;
krishanprajapat 0:984643af7d81 101 output[outByte] += ( (convStateList[convState].output >> (tempBit + 2)) & 1 ) << 4;
krishanprajapat 0:984643af7d81 102 break;
krishanprajapat 0:984643af7d81 103 case 4:
krishanprajapat 0:984643af7d81 104 outState = 6;
krishanprajapat 0:984643af7d81 105 output[outByte] += ( (convStateList[convState].output >> tempBit) & 1 ) << 3;
krishanprajapat 0:984643af7d81 106 output[outByte] += ( (convStateList[convState].output >> (tempBit + 2)) & 1 ) << 2;
krishanprajapat 0:984643af7d81 107 break;
krishanprajapat 0:984643af7d81 108 case 6:
krishanprajapat 0:984643af7d81 109 outState = 0;
krishanprajapat 0:984643af7d81 110 output[outByte] += ( (convStateList[convState].output >> tempBit) & 1 ) << 1;
krishanprajapat 0:984643af7d81 111 output[outByte] += ( (convStateList[convState].output >> (tempBit + 2)) & 1 );
krishanprajapat 0:984643af7d81 112 ++outByte;
krishanprajapat 0:984643af7d81 113 output[outByte] = 0x00;
krishanprajapat 0:984643af7d81 114 break;
krishanprajapat 0:984643af7d81 115 }
krishanprajapat 0:984643af7d81 116
krishanprajapat 0:984643af7d81 117 // next state transition
krishanprajapat 0:984643af7d81 118 switch(tempBit){
krishanprajapat 0:984643af7d81 119 case 0:
krishanprajapat 0:984643af7d81 120 convState = (convStateList[convState].nextState) & 0xF;
krishanprajapat 0:984643af7d81 121 break;
krishanprajapat 0:984643af7d81 122 case 1:
krishanprajapat 0:984643af7d81 123 convState = (convStateList[convState].nextState >> 4) & 0xF;
krishanprajapat 0:984643af7d81 124 break;
krishanprajapat 0:984643af7d81 125 }
krishanprajapat 0:984643af7d81 126
krishanprajapat 0:984643af7d81 127 if(inBit == -1){
krishanprajapat 0:984643af7d81 128 // printf("in byte = %u\n", inByte);
krishanprajapat 0:984643af7d81 129 ++inByte;
krishanprajapat 0:984643af7d81 130 inBit = 7;
krishanprajapat 0:984643af7d81 131 }
krishanprajapat 0:984643af7d81 132
krishanprajapat 0:984643af7d81 133 }
krishanprajapat 0:984643af7d81 134
krishanprajapat 0:984643af7d81 135 // printf("normal iteration complete, outByte = %u\n", outByte);
krishanprajapat 0:984643af7d81 136
krishanprajapat 0:984643af7d81 137 for(unsigned int j = 0 ; j < 4 ; ++j){
krishanprajapat 0:984643af7d81 138 // printf("j = %u\n, outByte = %u\n", j, outByte);
krishanprajapat 0:984643af7d81 139 // append zero at the end
krishanprajapat 0:984643af7d81 140 switch(outState){
krishanprajapat 0:984643af7d81 141 case 0:
krishanprajapat 0:984643af7d81 142 outState = 2;
krishanprajapat 0:984643af7d81 143 output[outByte] = ( (convStateList[convState].output) & 1 ) << 7;
krishanprajapat 0:984643af7d81 144 output[outByte] += ( (convStateList[convState].output >> 2) & 1 ) << 6;
krishanprajapat 0:984643af7d81 145 break;
krishanprajapat 0:984643af7d81 146 case 2:
krishanprajapat 0:984643af7d81 147 outState = 4;
krishanprajapat 0:984643af7d81 148 output[outByte] += ( (convStateList[convState].output) & 1 ) << 5;
krishanprajapat 0:984643af7d81 149 output[outByte] += ( (convStateList[convState].output >> 2) & 1 ) << 4;
krishanprajapat 0:984643af7d81 150 break;
krishanprajapat 0:984643af7d81 151 case 4:
krishanprajapat 0:984643af7d81 152 outState = 6;
krishanprajapat 0:984643af7d81 153 output[outByte] += ( (convStateList[convState].output ) & 1 ) << 3;
krishanprajapat 0:984643af7d81 154 output[outByte] += ( (convStateList[convState].output >> 2) & 1 ) << 2;
krishanprajapat 0:984643af7d81 155 break;
krishanprajapat 0:984643af7d81 156 case 6:
krishanprajapat 0:984643af7d81 157 outState = 0;
krishanprajapat 0:984643af7d81 158 output[outByte] += ( (convStateList[convState].output ) & 1 ) << 1;
krishanprajapat 0:984643af7d81 159 output[outByte] += ( (convStateList[convState].output >> 2) & 1 );
krishanprajapat 0:984643af7d81 160 ++outByte;
krishanprajapat 0:984643af7d81 161 // printf("outByte @ end of switch = %u\n", outByte);
krishanprajapat 0:984643af7d81 162 break;
krishanprajapat 0:984643af7d81 163 }
krishanprajapat 0:984643af7d81 164 // next state transition
krishanprajapat 0:984643af7d81 165 convState = (convStateList[convState].nextState) & 0xF;
krishanprajapat 0:984643af7d81 166 }
krishanprajapat 0:984643af7d81 167 // printf("complete\n");
krishanprajapat 0:984643af7d81 168 }
krishanprajapat 0:984643af7d81 169
krishanprajapat 0:984643af7d81 170 };