Document

TS004-2.0.0 Fragmented Data Block Transport

Issue link: https://read.uberflip.com/i/1464683

Contents of this Issue

Navigation

Page 26 of 31

LoRaWAN ® Fragmented Data Block Transport Specification TS004-2.0.0 ©2022 LoRa Alliance ® Page 27 of 32 The authors reserve the right to change specifications without notice. A.2 Fragment Decoding and Reassembly 689 690 The receiver of a fragmentation session must perform a series of operations. For each frame 691 received, the receiver must extract the coded fragment and its index. The receiver also 692 needs to create a null binary A = MxM bit matrix structure in its memory and then process 693 the fragments one by one. 694 695 1. For each new fragment P M N , fetch the corresponding line of the parity check matrix: 696 C=matrix_line(N,M). 697 2. Proceed from left to right along the C vector ( 1 ). For each entry 698 where is equal to 1, check if line of matrix A contains a 1 in row . If yes, perform 699 an XOR between line of matrix A "A( )" and the vector C, storing the result in C. 700 Also, perform an XOR between P M N and the coded fragment stored at position in the 701 fragment memory store and update P M N with the result. 702 3. Once this process is finished, there are two options: 703 a. C now contains only zeros. In this case, get rid of the coded fragment P M N ; it is 704 not providing any new information. 705 b. The vector C is non-null. Write it in matrix A at line corresponding to the first 706 non-zero element of C. Also, add the modified P M N fragment to the memory 707 store at position : . 708 4. Loop to 1 until all lines of matrix A have been updated. Matrix A will have only 1s on 709 its diagonal and will be a triangular matrix with only 0s on the lower left half. The 710 fragment memory store will contain exactly M fragments. 711 5. Starting from matrix line = M-1 down to 1, fetch the ℎ line of matrix A: A(i). Line 712 A(i) has a 1 at position and only zeros on the left. For any 1 at position j> , perform 713 an XOR between and and update with the result. 714 6. The fragment memory store now contains the original uncoded fragments = . 715 7. Reassemble the data block by concatenating all the uncoded fragments. If the 716 fragment memory store is actually allocated as a continuous memory range, this step 717 is not necessary, because the original data block consists of 1 : 2 : … : , where : 718 represents the concatenation operator. 719 8. If necessary, remove the padding bytes from . 720 721 722

Articles in this issue

view archives of Document - TS004-2.0.0 Fragmented Data Block Transport