kopia lustrzana https://github.com/M17-Project/M17_Implementations
Add files via upload
rodzic
bf212ee421
commit
b242a00ed9
|
|
@ -22,7 +22,7 @@ uint8_t lich_cnt; //LICH_CNT
|
|||
uint8_t lich_chunks_rcvd=0; //flags set for each LSF chunk received
|
||||
|
||||
uint16_t enc_data[272]; //raw frame data soft bits
|
||||
uint8_t frame_data[18]; //decoded frame data, 144 bits (16+128)
|
||||
uint8_t frame_data[19]; //decoded frame data, 144 bits (16+128), plus 4 flushing bits
|
||||
|
||||
uint8_t syncd=0; //syncword found?
|
||||
uint8_t pushed; //counter for pushed symbols
|
||||
|
|
@ -162,7 +162,7 @@ int main(void)
|
|||
//debug - dump LICH
|
||||
if(lich_chunks_rcvd==0x3F)
|
||||
{
|
||||
/*//DST
|
||||
//DST
|
||||
printf("DST: ");
|
||||
for(uint8_t i=0; i<6; i++)
|
||||
printf("%02X", lsf[i]);
|
||||
|
|
@ -190,7 +190,7 @@ int main(void)
|
|||
printf("CRC: ");
|
||||
for(uint8_t i=0; i<2; i++)
|
||||
printf("%02X", lsf[28+i]);
|
||||
printf("\n");*/
|
||||
printf("\n");
|
||||
|
||||
lich_chunks_rcvd=0; //reset all flags
|
||||
}
|
||||
|
|
@ -202,15 +202,15 @@ int main(void)
|
|||
}
|
||||
|
||||
//data part
|
||||
memset((uint8_t*)frame_data, 0, 18);
|
||||
decodePunctured(frame_data, enc_data, P2_pat, 272, 12);
|
||||
uint32_t e=decodePunctured(frame_data, enc_data, P2_pat, 272, 12);
|
||||
|
||||
//dump data
|
||||
for(uint8_t i=0; i<18; i++)
|
||||
//dump data - first byte is empty
|
||||
printf("FN: %02X%02X PLD: ", frame_data[1], frame_data[2]);
|
||||
for(uint8_t i=3; i<19; i++)
|
||||
{
|
||||
printf("%02X ", frame_data[i]);
|
||||
printf("%02X", frame_data[i]);
|
||||
}
|
||||
printf("\n");
|
||||
printf(" e=%1.1f\n", (float)e/0xFFFF);
|
||||
|
||||
//job done
|
||||
syncd=0;
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ uint32_t decode(uint8_t* out, const uint16_t* in, uint16_t len)
|
|||
* @param p_len: puncturing matrix length (entries).
|
||||
* @return number of bit errors corrected.
|
||||
*/
|
||||
uint16_t decodePunctured(uint8_t* out, const uint16_t* in, const uint8_t* punct, uint16_t in_len, uint16_t p_len) //input length, puncturing pattern length
|
||||
uint32_t decodePunctured(uint8_t* out, const uint16_t* in, const uint8_t* punct, uint16_t in_len, uint16_t p_len) //input length, puncturing pattern length
|
||||
{
|
||||
if(in_len > 244*2)
|
||||
fprintf((FILE*)STDERR_FILENO, "Input size exceeds max history\n");
|
||||
|
|
@ -83,7 +83,7 @@ uint16_t decodePunctured(uint8_t* out, const uint16_t* in, const uint8_t* punct,
|
|||
p%=p_len;
|
||||
}
|
||||
|
||||
return decode(out, umsg, u);
|
||||
return decode(out, umsg, u) - (u-in_len)*0x7FFF;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -160,18 +160,20 @@ void decodeBit(uint16_t s0, uint16_t s1, size_t pos)
|
|||
uint32_t chainback(uint8_t* out, size_t pos, uint16_t len)
|
||||
{
|
||||
uint8_t state = 0;
|
||||
size_t bitPos = len;
|
||||
size_t bitPos = len+4;
|
||||
|
||||
memset(out, 0, (len-1)/8+1);
|
||||
|
||||
while(bitPos > 0)
|
||||
{
|
||||
bitPos--;
|
||||
pos--;
|
||||
uint8_t bit = history[pos]&((1<<(state>>4)));
|
||||
uint16_t bit = history[pos]&((1<<(state>>4)));
|
||||
state >>= 1;
|
||||
if(bit)
|
||||
{
|
||||
state |= 0x80;
|
||||
out[bitPos/8]|=1<<(bitPos%8);
|
||||
out[bitPos/8]|=1<<(7-(bitPos%8));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
#define VITERBI_H
|
||||
|
||||
uint32_t decode(uint8_t* out, const uint16_t* in, uint16_t len);
|
||||
uint16_t decodePunctured(uint8_t* out, const uint16_t* in, const uint8_t* punct, uint16_t in_len, uint16_t p_len);
|
||||
uint32_t decodePunctured(uint8_t* out, const uint16_t* in, const uint8_t* punct, uint16_t in_len, uint16_t p_len);
|
||||
void decodeBit(uint16_t s0, uint16_t s1, size_t pos);
|
||||
uint32_t chainback(uint8_t* out, size_t pos, uint16_t len);
|
||||
uint16_t q_AbsDiff(const uint16_t v1, const uint16_t v2);
|
||||
|
|
|
|||
Ładowanie…
Reference in New Issue