Add files via upload

pull/1/head
Wojciech Kaczmarski 2022-12-06 14:06:02 +01:00 zatwierdzone przez GitHub
rodzic bf212ee421
commit b242a00ed9
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
3 zmienionych plików z 17 dodań i 15 usunięć

Wyświetl plik

@ -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;

Wyświetl plik

@ -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));
}
}

Wyświetl plik

@ -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);