Patent Publication Number: US-10790853-B2

Title: QC-LDPC coding methods and apparatus

Description:
CROSS REFERENCE TO RELATED PATENT APPLICATIONS 
     The present disclosure is part of a continuation of U.S. patent application Ser. No. 15/594,239, which was filed 12 May 2017 and which claims the priority benefit of U.S. Provisional Patent Application Ser. No. 62/335,095, filed 12 May 2016, U.S. Provisional Patent Application Ser. No. 62/404,236, filed 5 Oct. 2016, U.S. Provisional Patent Application Ser. No. 62/412,337, filed 25 Oct. 2016, U.S. Provisional Patent Application Ser. No. 62/429,915, filed 5 Dec. 2016, and U.S. Provisional Patent Application Ser. No. 62/488,089, filed 21 Apr. 2017. The contents of the aforementioned patent documents are herein incorporated by reference in their entirety. 
    
    
     TECHNICAL FIELD 
     The present disclosure is generally related to information coding and decoding and, more particularly, to methods and apparatus of quasi-cyclic-low-density parity-check (QC-LDPC) coding. 
     BACKGROUND 
     Unless otherwise indicated herein, approaches described in this section are not prior art to the claims listed below and are not admitted to be prior art by inclusion in this section. 
     The 3 rd  Generation Partnership Project (3GPP) has approved plans to speed up the development of the 5th-generation (5G) New Radio (NR) specifications, it thus can be expected that standards-based 5G NR wireless communications services can be launched in the near future. The 3GPP has also agreed that QC-LDPC will be used for in 5G NR data channel. However, specifics are how QC-LDPC-based coding and decoding are not yet defined. 
     SUMMARY 
     The following summary is illustrative only and is not intended to be limiting in any way. That is, the following summary is provided to introduce concepts, highlights, benefits and advantages of the novel and non-obvious techniques described herein. Select implementations are further described below in the detailed description. Thus, the following summary is not intended to identify essential features of the claimed subject matter, nor is it intended for use in determining the scope of the claimed subject matter. 
     An objective of the present disclosure is to propose various novel concepts and schemes pertaining to QC-LDPC coding and decoding, which can be implemented in next-generation communications, whether wired or wireless, including 5G NR wireless communications. 
     In one aspect, a method may involve a processor of an apparatus generating a QC-LDPC code having a plurality of codebooks embedded therein. The method may also involve the processor selecting a codebook from the plurality of codebooks. The method may further involve the processor encoding data using the selected codebook. 
     In one aspect, a method may involve a processor of an apparatus generating a QC-LDPC code that comprises at least one quasi-row orthogonal layer. The method may also involve the processor encoding data using the QC-LDPC code. 
     In one aspect, a method may involve a processor of an apparatus generating a QC-LDPC code that comprises a base matrix a portion of which forming a kernel matrix that corresponds to a code rate of at least a threshold value. The method may also involve the processor encoding data using the QC-LDPC code. 
     In one aspect, a method may involve a processor of an apparatus generating a QC-LDPC code. The method may also involve the processor encoding data using the QC-LDPC code. In generating the QC-LDPC code, the method may also involve the processor generating a respective table of shift values for each lifting factor of a first set of lifting factors. The method may further involve the processor optimizing the first set of lifting factors to produce a second set of lifting factors. A number of lifting factors of the first set may be greater than a number of lifting factors of the second set. A first lifting factor that exists in the first set but not in the second set may share a respective table of shift values of a second lifting factor that exists in both the first set and the second set. The second lifting factor may be smaller than the first lifting factor in value and closest to the first lifting factor than other lifting factors in the first set. 
     It is noteworthy that, although description of the proposed scheme and various examples is provided below in the context of 5G NR wireless communications, the proposed concepts, schemes and any variation(s)/derivative(s) thereof may be implemented in communications in accordance with other protocols, standards and specifications where implementation is suitable. Thus, the scope of the proposed scheme is not limited to the description provided herein. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       The accompanying drawings are included to provide a further understanding of the disclosure, and are incorporated in and constitute a part of the present disclosure. The drawings illustrate implementations of the disclosure and, together with the description, serve to explain the principles of the disclosure. It is appreciable that the drawings are not necessarily in scale as some components may be shown to be out of proportion than the size in actual implementation in order to clearly illustrate the concept of the present disclosure. 
         FIG. 1  is a diagram of an example multi-embedded LDPC code design in accordance with an implementation of the present disclosure. 
         FIG. 2  is a diagram of an example logic flow related to multi-embedded LDPC code design in accordance with an implementation of the present disclosure. 
         FIG. 3  is a diagram of an example quasi-row orthogonal layer design in accordance with an implementation of the present disclosure. 
         FIG. 4  is a diagram of an example hybrid orthogonality layer design in accordance with an implementation of the present disclosure. 
         FIG. 5  is a diagram of an example QC-LDPC code that supports extreme low code rate in accordance with an implementation of the present disclosure. 
         FIG. 6  is a diagram of an example kernel matrix design in accordance with an implementation of the present disclosure. 
         FIG. 7  is a diagram of an example concept of kernel base matrix in accordance with an implementation of the present disclosure. 
         FIG. 8  is a diagram of an example concept of kernel base matrix in accordance with another implementation of the present disclosure. 
         FIG. 9  is a diagram of an example shift-coefficient design in accordance with an implementation of the present disclosure. 
         FIG. 10  is a block diagram of an example communications system in accordance with an implementation of the present disclosure. 
         FIG. 11  is a flowchart of an example process in accordance with an implementation of the present disclosure. 
         FIG. 12  is a flowchart of an example process in accordance with another implementation of the present disclosure. 
         FIG. 13  is a flowchart of an example process in accordance with another implementation of the present disclosure. 
         FIG. 14  is a flowchart of an example process in accordance with another implementation of the present disclosure. 
     
    
    
     DETAILED DESCRIPTION OF PREFERRED IMPLEMENTATIONS 
     Detailed embodiments and implementations of the claimed subject matters are disclosed herein. However, it shall be understood that the disclosed embodiments and implementations are merely illustrative of the claimed subject matters which may be embodied in various forms. The present disclosure may, however, be embodied in many different forms and should not be construed as limited to the exemplary embodiments and implementations set forth herein. Rather, these exemplary embodiments and implementations are provided so that description of the present disclosure is thorough and complete and will fully convey the scope of the present disclosure to those skilled in the art. In the description below, details of well-known features and techniques may be omitted to avoid unnecessarily obscuring the presented embodiments and implementations. 
     Overview 
     The proposed concepts and schemes generally relate to the following areas: multi-embedded LDPC code design, hybrid orthogonal LDPC layer design, QC-LDPC support of extreme low code rate (CR), kernel matrix design, and shift-coefficient design. The area of hybrid orthogonal LDPC layer design includes the novel concepts and schemes of quasi-row orthogonal layer design and hybrid orthogonality layer design. Description of the proposed concepts and schemes is provided below with reference to  FIG. 1 - FIG. 9 . 
       FIG. 1  illustrates an example multi-embedded LDPC code design in accordance with an implementation of the present disclosure. Referring to  FIG. 1 , a QC-LDPC code  100  in accordance with the present disclosure may have a plurality of codebooks embedded therein. 
     As shown in  FIG. 1 , QC-LDPC code  100  may include a base matrix that includes a parity matrix of a plurality of parity bits and an information matrix of a plurality of information bits. Accordingly, each codebook of the plurality of codebooks may include the parity matrix and a respective portion of the information matrix of a corresponding size such that sizes of the plurality of codebooks are different from one another. In the example shown in  FIG. 1 , a codebook may be expressed as follows:
 
Codebook=( I 1 or  I 2 or  I 3)+ P  
 
     The notation “I1” represents a first portion of the information matrix, the notation “I2” represents a second portion of the information matrix, the notation “I3” represents a third portion of the information matrix, and the notation “P” represents the parity matrix. Here, a size (e.g., in terms of number of bits and/or memory size) of I1 is greater than a size of I2, which is greater than the size of I3. 
     Thus, the size of the resultant codebook may vary, depending on the size of the portion of the information matrix that is utilized in combination with the parity matrix to form the codebook. It is noteworthy that, although the example shown in  FIG. 1  depicts three codebooks of different sizes due to the combinations of I1+P, I2+P and I3+P, the number of codebooks of different sizes is not limited to three (and may be fewer or more than three) in various implementations in accordance with the present disclosure. 
     In some implementations, each codebook of the plurality of codebooks may correspond to a respective hybrid automatic repeat request (HARQ) threads of a plurality of HARQ threads that are different from one another. For instance, a first codebook may correspond to a first HARQ thread with a value in the range of 0.33-0.89. A second codebook may correspond to a second HARQ thread with a value in the range of 0.2-0.66. A third codebook may correspond to a third HARQ thread with a small code block size less than 400. 
     In some implementations, each codebook of the plurality of codebooks may correspond to a respective memory size (Kb). For instance, a first codebook may correspond to a first memory size Kb=16. A second codebook may correspond to a second memory size Kb=12. A third codebook may correspond to a third memory size Kb=5. 
     In some implementations, all codebooks may share one base matrix with different zero-padding sizes. In some implementations, different codebooks may correspond to different shift-coefficient designs or share one shift-coefficient design. 
     In some implementations, the selection of which codebook of the multiple codebooks to use may be based on an initial code rate for transmission of the data, a code block size of the data, or both. 
       FIG. 2  illustrates an example logic flow  200  related to multi-embedded LDPC code design in accordance with an implementation of the present disclosure. Logic flow  200  may be implemented in or by an encoder or a processor to effect various features and/or aspects of the proposed concepts and schemes of the present disclosure. More specifically, logic flow  200  may pertain to selection of a codebook from a number of codebooks. Logic flow  200  may include one or more operations, actions, or functions as represented by one or more of blocks  210 ,  220 ,  230 ,  240  and  250 . Although illustrated as discrete blocks, various blocks of logic flow  200  may be divided into additional blocks, combined into fewer blocks, or eliminated, depending on the desired implementation. Logic flow  200  may be implemented by each of first apparatus  1005  and second apparatus  1050  described below. Solely for illustrative purposes and without limiting the scope, description of logic flow  200  is provided below in the context of second apparatus  1050 . Logic flow  200  may begin at  210 . 
     At  210 , logic flow  200  may involve second apparatus  1050  determining whether a code block size of data to be encoded is less than a threshold code block size. In an event that the code block size of the data is determined to be less than the threshold code block size, logic flow  200  may proceed from  210  to  220 . In an event that the code block size of the data is determined to be not less than the threshold code block size, logic flow  200  may proceed from  210  to  230 . 
     At  220 , logic flow may involve second apparatus  1050  selecting a first codebook of the plurality of codebooks. 
     At  230 , logic flow may involve second apparatus  1050  determining whether an initial code rate for transmission of the data is greater than a threshold code rate. In an event that the initial code rate is determined to be not greater than the threshold code rate, logic flow  200  may proceed from  230  to  240 . In an event that the initial code rate is determined to be greater than the threshold code rate, logic flow  200  may proceed from  230  to  250 . 
     At  240 , logic flow  200  may involve second apparatus  1050  selecting a second codebook of the plurality of codebooks. 
     At  250 , logic flow  200  may involve second apparatus  1050  selecting a third codebook of the plurality of codebooks. 
     Here, a size of the third codebook is larger than a size of the second codebook. Additionally, the size of the second codebook is larger than a size of the first codebook. 
       FIG. 3  illustrates an example quasi-row orthogonal layer design  300  in accordance with an implementation of the present disclosure. Orthogonality is good for LDPC decoder throughput efficiency. In the LDPC code, several rows may be grouped together to form a layer and each column within the layer may be of degree one (i.e., orthogonal). In such cases the layer is referred as a pure row orthogonal layer. 
     Referring to  FIG. 3 , in quasi-row orthogonal layer design  300 , several rows may be grouped together to form a quasi-row orthogonal layer. Each column within the layer may be of degree one (i.e., orthogonal) with the exception of one or more punctured columns. In the example shown in part (A) of  FIG. 3 , the two leftmost columns are punctured columns. 
     Moreover, in quasi-row orthogonal layer design  300 , there is no cycle within the punctured columns in the quasi-row orthogonal layer. In the example shown in part (B) of  FIG. 3 , as a cycle exists within the two punctured columns, the corresponding layer is not considered as a quasi-row orthogonal layer in accordance with the present disclosure. 
       FIG. 4  illustrates an example hybrid orthogonality layer design  400  in accordance with an implementation of the present disclosure. In hybrid orthogonality layer design  400 , a QC-LDPC code may include a plurality of portions of different degrees of orthogonality. In the example shown in  FIG. 4 , blocks of darker color represent bits of 1 while blocks of lighter color represent bits of 0. For instance, a first portion of the plurality of portions may be of a low degree of orthogonality and may correspond to a high code rate. Likewise, a second portion of the plurality of portions may be of a medium degree of orthogonality and may correspond to a medium code rate. Similarly, a third portion of the plurality of portions may be of a high degree of orthogonality and may correspond to a low code rate. 
     In the example shown in  FIG. 4 , the plurality of portions of different degrees of orthogonality include the following: (1) a non-row orthogonal portion including a plurality of rows and a plurality of columns that form at least one non-row orthogonal layer corresponding to relatively higher code rate(s), (2) a quasi-row orthogonal portion including a plurality of rows and a plurality of columns that form the at least one quasi-row orthogonal layer corresponding to medium code rate(s), and (3) a pure-row orthogonal portion including a plurality of rows and a plurality of columns that form at least one pure-row orthogonal layer corresponding to relatively lower code rate(s). Here, each column of the plurality of columns of the non-row orthogonal portion is a column of degree two or more. Additionally, one or more columns of the plurality of columns of the quasi-row orthogonal portion include punctured columns of degree two or more. Moreover, the remaining columns of the plurality of columns of the quasi-row orthogonal portion include non-punctured columns of degree one. Furthermore, each column of the plurality of columns of the pure-row orthogonal portion includes a column of degree one. 
       FIG. 5  illustrates an example QC-LDPC code  500  that supports extreme low code rate in accordance with an implementation of the present disclosure. Referring to  FIG. 5 , QC-LDPC code  500  may include a parity matrix of a plurality of parity bits and an information matrix of a plurality of information bits. The information matrix may include one or more rows of bits each of degree two. Moreover, each bit of bits of the degree two of the one or more rows of bits of degree two may be a previously-used parity bit or a previously-transmitted information bit. 
       FIG. 6  illustrates an example kernel matrix design  600  in accordance with an implementation of the present disclosure. Referring to  FIG. 6 , in kernel matrix design  600 , a QC-LDPC code may include a base matrix with a portion of forming a kernel matrix that corresponds to a code rate of at least a threshold value. For instance, in the example shown in  FIG. 6 , the kernel matrix supports a code rate of 0.89. 
       FIG. 7  illustrates an example concept  700  of kernel base matrix in accordance with an implementation of the present disclosure. Referring to  FIG. 7 , the kernel matrix may include a plurality of rows and a plurality of columns of bits, with two or more of the columns being punctured columns having a specific pattern of bits (e.g., one or more bits of 0). In some implementations, the specific pattern of bits in the punctured columns may include an isosceles right triangle of bits of 0, with a right angle of the triangle corresponding to a bit of 0 at an upper-left corner of the punctured columns. 
     The kernel matrix may include a parity matrix of a plurality of rows and a plurality of columns of bits. The kernel matrix may also include an information matrix of a plurality of rows and a plurality of columns of bits. The parity matrix may include a matrix having a Wi-Fi pattern (e.g., Wi-Fi like parity matrix). Moreover, more than one rows of bits of the information matrix may include rows of high density of bits of 1 with no or one bit of 0. A bottom row of bits of the plurality of rows may include a first number of bits of 1. The first number may be equal to or greater than a number of punctured columns by 1. 
     In the example shown in part (A) of  FIG. 7 , the first several rows (e.g., three rows) are composed of Wi-Fi like parity matrix, and the information matrix has very high density of bits of 1. Specifically, each row in the information matrix includes mostly, if not all, bits of 1 with none or one bit of 0. The punctured columns include a specific pattern of one or more bits of 0 after any number of column permutation(s) and/or row permutation(s) (e.g., at least one column permutation, at least one row permutation, or any combination thereof). 
     The bottom row may have three or four edge blocks. One edge block may correspond to parity variable node (VN) block. Two edge blocks may correspond to the two punctured columns (e.g., VN0 and VN1). In cases where there are four edge blocks, the fourth edge block may be added to increaser the minimum distance. 
     In the example shown in part (B) of  FIG. 7 , an example pattern of the punctured column is shown. For a base matrix of size m×n and assuming a number of p columns is/are punctured, a m×p matrix may be constructed with an isosceles right triangle of bits of 0, with a right angle of the triangle corresponding to a bit of 0 at an upper-left corner of the punctured columns. Other bits in the punctured column(s) may be randomly selected to be 0 or 1. As row permutation and/or column permutation may be performed, the actual location of the specific pattern may be different from the upper-left corner of the puncture column(s). 
       FIG. 8  illustrates an example concept  800  of kernel base matrix in accordance with another implementation of the present disclosure. In concept  800 , the kernel matrix includes a Wi-Fi pattern (or Wi-Fi like parity matrix), punctured columns, and remaining portion of the information matrix. The remaining portion of the information matrix may be designed with one of a number of degree distributions. For instance, the kernel matrix may include five rows of bits and twenty columns of bits. A variable node (VN) degree of the twenty columns of bits may include one of the following: [2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3], [2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3], [2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3], and [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]. A check node (CN) degree of the five rows of bits may include one of the following: [13, 10, 14, 17, 2], [13, 10, 13, 17, 2], [13, 10, 13, 18, 3], [13, 11, 13, 18, 2], [13, 10, 14, 18, 2], [13, 10, 13, 19, 2], [14, 10, 13, 18, 1], [13, 11, 13, 18, 1], [13, 10, 14, 18, 1], [13, 11, 13, 19, 1], [13, 10, 13, 18, 2], and [13, 10, 13, 18, 1]. 
       FIG. 9  illustrates of an example shift-coefficient design  900  in accordance with an implementation of the present disclosure. For each lifting factor, there may be a table of corresponding shift values. The tables among different lifting factors may be nested designed. In shift-coefficient design  900 , a valid set of lifting factors may be defined for use in LDPC encoding. In the example shown in  FIG. 9 , the valid set of lifting factors includes the following lifting factors of different values: Z=16, Z=24, Z=32, Z=48, Z=64, Z=96, Z=128, Z=192, Z=256 and Z=384. In shift-coefficient design  900 , the valid set of lifting factors may be optimized to obtain an optimized set of lifting factors. The number of lifting factors in the optimized set is less than the number of lifting factors in the valid set. The table of shift values designed for the closest and smaller or equal lifting factor within the optimized set may be used. For instance, the table of shift values designed for the lifting factor Z=32 may be shared by the lifting factor Z=48. Similarly, the table of shift values designed for the lifting factor Z=128 may be shared by the lifting factor Z=192. 
     For illustrative purposes and without limitation, in a LDPC codebook in accordance with the present disclosure, an optimized set of lifting factors (Z) may be defined as four sets with Z∈X={a×2 j } ∀a∈{9, 11, 13, 15}, j∈{0, 1, 2, 3, 4, 5}. A valid set of lifting factors may also be defined as eight sets with Z∈φ={a×2 j }∀a∈{9, 10, 11, 12, 13, 14, 15, 16}, j∈{0, 1, 2, 3, 4, 5}. The corresponding shift values may be represented by four shift-coefficient tables which may correspond to shift coefficients of {288, 352, 416, 480}. For any lifting factor of Z=a×2 j  within the valid set φ, the corresponding shift coefficient may be obtained by p z   m,n =(p m,n  mod {circumflex over (Z)})+f(Z), where p m,n  is the shift coefficient of the (m,n)-th element in the shift-coefficient tables for â×2 5  where â is the largest value within {9, 11, 13, 15} which is smaller than or equal to a and {circumflex over (Z)}=â×2 j . Moreover, f(Z) is the perturbation which is a function of Z and may be represented by a table. 
     Illustrative Implementations 
       FIG. 10  illustrates an example communications system  1000  in accordance with an implementation of the present disclosure. Communications systems may include a first apparatus  1005  and a second apparatus  1050 , which may be in communications with each other via a communications link  1040 . Communications link  1040  may be a wireless link in some implementations, and may be a wired link in some other implementations. Each of first apparatus  1005  and second apparatus  1050  may perform various functions as a communication device to implement concepts, schemes, techniques, processes and methods described herein pertaining to QC-LDPC coding, including those described with respect to some or all of  FIG. 1 - FIG. 9  as well as processes  1100 ,  1200  and  1300  described below. More specifically, each of first apparatus  1005  and second apparatus  1050  may implement various aspects of the proposed concepts and schemes pertaining to multi-embedded LDPC code design, hybrid orthogonal LDPC layer design, QC-LDPC support of extreme low code rate, kernel matrix design, and shift-coefficient design. 
     Each of first apparatus  1005  and second apparatus  1050  may be a part of an electronic apparatus which may be a communication device, a computing apparatus, a portable or mobile apparatus, or a wearable apparatus. For instance, first apparatus  1005  may be implemented in a Wi-Fi access point, a smartphone, a smartwatch, a smart bracelet, a smart necklace, a personal digital assistant, or a computing device such as a tablet computer, a laptop computer, a notebook computer, a desktop computer, or a server. Likewise, second apparatus  1050  may be implemented in a Wi-Fi mobile client or station, a smartphone, a smartwatch, a smart bracelet, a smart necklace, a personal digital assistant, or a computing device such as a tablet computer, a laptop computer, a notebook computer, a desktop computer, or a server. Alternatively, each of first apparatus  1005  and second apparatus  1050  may be implemented in the form of one or more integrated-circuit (IC) chips such as, for example and not limited to, one or more single-core processors, one or more multi-core processors, or one or more complex-instruction-set-computing (CISC) processors. 
     Each of first apparatus  1005  and second apparatus  1050  may include at least some of those components shown in  FIG. 10 , respectively. For instance, first apparatus  1005  may include at least a processor  1010 , and second apparatus  1050  may include at least a processor  1060 . Additionally, first apparatus  1005  may include a memory  1020  and/or a transceiver  1030  configured to transmit and receive data wirelessly (e.g., in compliance with one or more 3GPP stands, protocols, specifications and/or any applicable wireless protocols and standards). Each of memory  1020  and transceiver  1030  may be communicatively and operably coupled to processor  1010 . Similarly, second apparatus  1050  may also include a memory  1070  and/or a transceiver  1080  configured to transmit and receive data wirelessly (e.g., in compliance with the IEEE 802.11 specification and/or any applicable wireless protocols and standards). Each of memory  1070  and transceiver  1080  may be communicatively and operably coupled to processor  1060 . Each of first apparatus  1005  and second apparatus  1050  may further include other components (e.g., power system, display device and user interface device), which are not pertinent to the proposed scheme of the present disclosure and, thus, are neither shown in  FIG. 10  nor described herein in the interest of simplicity and brevity. 
     Transceiver  1030  may be configured to communicate wirelessly in a single frequency band or multiple frequency bands. Transceiver  1030  may include a transmitter  1032  capable of transmitting data wirelessly and a receiver  1034  capable of receiving data wirelessly. Likewise, transceiver  1080  may be configured to communicate wirelessly in a single frequency band or multiple frequency bands. Transceiver  1080  may include a transmitter  1082  capable of transmitting data wirelessly and a receiver  1084  capable of receiving data wirelessly. 
     Each of memory  1020  and memory  1070  may be a storage device configured to store one or more sets of codes, programs and/or instructions and/or data therein. In the example shown in  FIG. 10 , memory  1020  stores one or more sets of processor-executable instructions  1022  and data  1024  therein, and memory  1070  stores one or more sets of processor-executable instructions  1072  and data  1074  therein. Each of memory  1020  and memory  1070  may be implemented by any suitable technology and may include volatile memory and/or non-volatile memory. For example, each of memory  1020  and memory  1070  may include a type of random access memory (RAM) such as dynamic RAM (DRAM), static RAM (SRAM), thyristor RAM (T-RAM) and/or zero-capacitor RAM (Z-RAM). Alternatively or additionally, memory  520  may include a type of read-only memory (ROM) such as mask ROM, programmable ROM (PROM), erasable programmable ROM (EPROM) and/or electrically erasable programmable ROM (EEPROM). Alternatively or additionally, each of memory  1020  and memory  1070  may include a type of non-volatile random-access memory (NVRAM) such as flash memory, solid-state memory, ferroelectric RAM (FeRAM), magnetoresistive RAM (MRAM) and/or phase-change memory. 
     In one aspect, each of processor  1010  and processor  1060  may be implemented in the form of one or more single-core processors, one or more multi-core processors, or one or more CISC processors. That is, even though a singular term “a processor” is used herein to refer to each of processor  1010  and processor  1060 , each of processor  1010  and processor  1060  may include multiple processors in some implementations and a single processor in other implementations in accordance with the present disclosure. In another aspect, each of processor  1010  and processor  1060  may be implemented in the form of hardware (and, optionally, firmware) with electronic components including, for example and without limitation, one or more transistors, one or more diodes, one or more capacitors, one or more resistors, one or more inductors, one or more memristors and/or one or more varactors that are configured and arranged to achieve specific purposes in accordance with the present disclosure. In other words, in at least some implementations, each of processor  1010  and processor  1060  is a special-purpose machine specifically designed, arranged and configured to perform specific tasks including QC-LDPC coding in accordance with various implementations of the present disclosure. 
     Processor  1010 , as a special-purpose machine, may include non-generic and specially-designed hardware circuits that are designed, arranged and configured to perform specific tasks pertaining to QC-LDPC coding in accordance with various implementations of the present disclosure. In one aspect, processor  1010  may execute the one or more sets of codes, programs and/or instructions  1022  stored in memory  1020  to perform various operations to render QC-LDPC coding in accordance with various implementations of the present disclosure. In another aspect, processor  1010  may include an encoder  1012  and a decoder  1014  that, together, perform specific tasks and functions to render QC-LDPC coding in accordance with various implementations of the present disclosure. For instance, encoder  1012  may be configured to encode data in accordance with various concepts and schemes of the present disclosure. Similarly, decoder  1014  may be configured to decode data in accordance with various concepts and schemes of the present disclosure. 
     Processor  1060 , as a special-purpose machine, may include non-generic and specially-designed hardware circuits that are designed, arranged and configured to perform specific tasks pertaining to QC-LDPC coding in accordance with various implementations of the present disclosure. In one aspect, processor  1060  may execute the one or more sets of codes, programs and/or instructions  1072  stored in memory  1070  to perform various operations to render power-save operations in accordance with various implementations of the present disclosure. In another aspect, processor  1060  may include an encoder  1062  and a decoder  1064  that performs specific tasks and functions to render QC-LDPC coding in accordance with various implementations of the present disclosure. For instance, encoder  1062  may be configured to encode data in accordance with various concepts and schemes of the present disclosure. Likewise, decoder  1064  may be configured to decode data in accordance with various concepts and schemes of the present disclosure. 
     Each of first apparatus  1005  and second apparatus  1050  may be configured to implement each of processes  1100 ,  1200  and  1300  described below. Thus, to avoid redundancy and in the interest of brevity, operations of first apparatus  1005  and second apparatus  1050 , as well as processor  1010  and processor  1060 , are described below in the context of processes  1100 ,  1200  and  1300 . It is noteworthy that, although the description below is provided in the context of first apparatus  1005 , the description below is also applicable to second apparatus  1050 . 
       FIG. 11  illustrates an example process  1100  in accordance with an implementation of the present disclosure. Process  1100  may represent an aspect of implementing the proposed concepts and schemes such as those described with respect to some or all of  FIG. 1 - FIG. 9 . More specifically, process  1100  may represent an aspect of the proposed concepts and schemes pertaining to multi-embedded LDPC code design and shift-coefficient design. Process  1100  may include one or more operations, actions, or functions as illustrated by one or more of blocks  1110 ,  1120 ,  1130  and  1140 . Although illustrated as discrete blocks, various blocks of process  1100  may be divided into additional blocks, combined into fewer blocks, or eliminated, depending on the desired implementation. Moreover, the blocks/sub-blocks of process  1100  may be executed in the order shown in  FIG. 11  or, alternatively in a different order. Process  1100  may be implemented by communications system  1000  and any variations thereof. For instance, process  1100  may be implemented in or by first apparatus  1005  and/or second apparatus  1050 . Solely for illustrative purposes and without limiting the scope, process  1100  is described below in the context of first apparatus  1005 . Process  1100  may begin at block  1110 . 
     At  1110 , process  1100  may involve processor  1010  of first apparatus  1005  generating a QC-LDPC code having a plurality of codebooks embedded therein. Process  1100  may proceed from  1110  to  1120 . 
     At  1120 , process  1100  may involve processor  1010  selecting a codebook from the plurality of codebooks. Process  1100  may proceed from  1120  to  1130 . 
     At  1130 , process  1100  may involve processor  1010  encoding data using the selected codebook. Process  1100  may proceed from  1130  to  1140 . 
     At  1140 , process  1100  may involve processor  1010  transmitting, via transceiver  1030 , the encoded data (e.g., to second apparatus  1050 ). 
     In some implementations, each codebook of the plurality of codebooks may correspond to a respective hybrid automatic repeat request (HARQ) threads of a plurality of HARQ threads that are different from one another. 
     In some implementations, in generating the QC-LDPC code having the plurality of codebooks embedded therein, process  1100  may involve processor  1010  generating the QC-LDPC code which includes a base matrix and a shift-coefficient matrix. The base matrix may include a parity matrix of a plurality of parity bits and an information matrix of a plurality of information bits. Each codebook of the plurality of codebooks may include the parity matrix and a respective portion of the information matrix of a corresponding size such that sizes of the plurality of codebooks are different from one another. 
     In some implementations, each codebook of the plurality of codebooks may correspond to a respective design of a plurality of designs of the shift-coefficient matrix. 
     In some implementations, in generating the QC-LDPC code having the plurality of codebooks embedded therein, process  1100  may involve processor  1010  generating a respective table of shift values for each lifting factor of a first set of lifting factors. Moreover, process  1100  may involve processor  1010  optimizing the first set of lifting factors to produce a second set of lifting factors. The number of lifting factors of the first set may be greater than a number of lifting factors of the second set. A first lifting factor that exists in the first set but not in the second set may share a respective table of shift values of a second lifting factor that exists in both the first set and the second set. The second lifting factor may be smaller than the first lifting factor in value and closest to the first lifting factor than other lifting factors in the first set. 
     In some implementations, in selecting the codebook from the plurality of codebooks, process  1100  may involve processor  1010  selecting the codebook from the plurality of codebooks based on an initial code rate for transmission of the data, a code block size of the data, or both. 
     In some implementations, in selecting the codebook from the plurality of codebooks, process  1100  may involve processor  1010  performing a number of operations (e.g., similar to those involved in logic flow  200 ). For instance, process  1100  may involve processor  1010  determining whether a code block size of the data is less than a threshold code block size. In response to the code block size of the data being less than the threshold code block size, process  1100  may involve processor  1010  selecting a third codebook of the plurality of codebooks. In response to the code block size of the data being not less than the threshold code block size, process  1100  may involve processor  1010  determining whether an initial code rate for transmission of the data is greater than a threshold code rate. In response to the initial code rate being not greater than the threshold code rate, process  1100  may involve processor  1010  selecting a second codebook of the plurality of codebooks. In response to the initial code rate being greater than the threshold code rate, process  1100  may involve processor  1010  selecting a first codebook of the plurality of codebooks. A size of the first codebook may be larger than a size of the second codebook. The size of the second codebook may be larger than a size of the third codebook. 
     Alternatively or additionally, in selecting the codebook from the plurality of codebooks, process  1100  may involve processor  1010  performing a number of other operations. For instance, process  1100  may involve processor  1010  determining a code block size of the data. Based on a result of the determination, process  1100  may involve processor  1010  selecting a first codebook of the plurality of codebooks responsive to the code block size being determined to be greater than a first threshold code block size. Additionally, process  1100  may involve processor  1010  selecting a second codebook of the plurality of codebooks responsive to the code block size being determined to be greater than a second threshold code block size. Moreover, process  1100  may involve processor  1010  selecting a third codebook of the plurality of codebooks responsive to the code block size being determined to be greater than a third threshold code block size. The first threshold code block size may be greater than the second threshold code block size. The second threshold code block size may be greater than the third threshold code block size. A size of the first codebook may be larger than a size of the second codebook. The size of the second codebook may be larger than a size of the third codebook. 
       FIG. 12  illustrates an example process  1200  in accordance with an implementation of the present disclosure. Process  1200  may represent an aspect of implementing the proposed concepts and schemes such as those described with respect to some or all of  FIG. 1 - FIG. 9 . More specifically, process  1200  may represent an aspect of the proposed concepts and schemes pertaining to hybrid orthogonal LDPC layer design and QC-LDPC support of extreme low code rate. Process  1200  may include one or more operations, actions, or functions as illustrated by one or more of blocks  1210 ,  1220  and  1230 . Although illustrated as discrete blocks, various blocks of process  1200  may be divided into additional blocks, combined into fewer blocks, or eliminated, depending on the desired implementation. Moreover, the blocks/sub-blocks of process  1200  may be executed in the order shown in  FIG. 12  or, alternatively in a different order. Process  1200  may be implemented by communications system  1000  and any variations thereof. For instance, process  1200  may be implemented in or by first apparatus  1005  and/or second apparatus  1050 . Solely for illustrative purposes and without limiting the scope, process  1200  is described below in the context of first apparatus  1005 . Process  1200  may begin at block  1210 . 
     At  1210 , process  1200  may involve processor  1010  of first apparatus  1005  generating a QC-LDPC code that comprises at least one quasi-row orthogonal layer. Process  1200  may proceed from  1210  to  1220 . 
     At  1220 , process  1200  may involve processor  1010  encoding data using the QC-LDPC code. Process  1200  may proceed from  1220  to  1230 . 
     At  1230 , process  1200  may involve processor  1010  transmitting, via transceiver  1030 , the encoded data (e.g., to second apparatus  1050 ). 
     In some implementations, the at least one quasi-row orthogonal layer may include a plurality of rows and a plurality of columns of bits. One or more columns of the plurality of columns of the at least one quasi-row orthogonal layer may include at least one punctured column of degree two or more. The remaining columns of the plurality of columns of the at least one quasi-row orthogonal layer may include non-punctured columns of degree one or zero. 
     In some implementations, there may be no cycle within the punctured columns. 
     In some implementations, the QC-LDPC code may include a hybrid orthogonality design having a plurality of portions of different degrees of orthogonality. A first portion of the plurality of portions of a low degree of orthogonality may correspond to a high code rate, and a second portion of the plurality of portions of a high degree of orthogonality may correspond to a low code rate. 
     In some implementations, the plurality of portions of different degrees of orthogonality may include some or all of the following: (1) a non-row orthogonal portion comprising a plurality of rows and a plurality of columns forming at least one non-row orthogonal layer, (2) a quasi-row orthogonal portion comprising a plurality of rows and a plurality of columns forming the at least one quasi-row orthogonal layer, and (3) a pure-row orthogonal portion comprising a plurality of rows and a plurality of columns forming at least one pure-row orthogonal layer. The plurality of columns of the non-row orthogonal portion may include at least one punctured column of degree two or more as well as non-punctured columns of degree one or zero. One or more columns of the plurality of columns of the quasi-row orthogonal portion may include at least one punctured column of degree two or more. The remaining columns of the plurality of columns of the quasi-row orthogonal portion may include non-punctured columns of degree one or zero. Each column of the plurality of columns of the pure-row orthogonal portion may include a column of degree one or zero. 
     In some implementations, the QC-LDPC code may include a parity matrix of a plurality of parity bits and an information matrix of a plurality of information bits. One or more rows of bits through the information matrix and the parity matrix may include one or more rows of bits each of degree two. 
     In some implementations, each bit of bits of the degree two of the one or more rows of bits of degree two may include a previously-used parity bit or a previously-transmitted information bit. 
       FIG. 13  illustrates an example process  1300  in accordance with an implementation of the present disclosure. Process  1300  may represent an aspect of implementing the proposed concepts and schemes such as those described with respect to some or all of  FIG. 1 - FIG. 9 . More specifically, process  1300  may represent an aspect of the proposed concepts and schemes pertaining to kernel matrix design. Process  1300  may include one or more operations, actions, or functions as illustrated by one or more of blocks  1310 ,  1320  and  1330 . Although illustrated as discrete blocks, various blocks of process  1300  may be divided into additional blocks, combined into fewer blocks, or eliminated, depending on the desired implementation. Moreover, the blocks/sub-blocks of process  1300  may be executed in the order shown in  FIG. 13  or, alternatively in a different order. Process  1300  may be implemented by communications system  1000  and any variations thereof. For instance, process  1300  may be implemented in or by first apparatus  1005  and/or second apparatus  1050 . Solely for illustrative purposes and without limiting the scope, process  1300  is described below in the context of first apparatus  1005 . Process  1300  may begin at block  1310 . 
     At  1310 , process  1300  may involve processor  1010  of first apparatus  1005  generating a QC-LDPC code that including a base matrix a portion of which forming a kernel matrix that corresponds to a code rate of at least a threshold value. Process  1300  may proceed from  1310  to  1320 . 
     At  1320 , process  1300  may involve processor  1010  encoding data using the QC-LDPC code. Process  1300  may proceed from  1320  to  1330 . 
     At  1330 , process  1300  may involve processor  1010  transmitting, via transceiver  1030 , the encoded data (e.g., to second apparatus  1050 ). 
     In some implementations, the code rate may be 0.89. 
     In some implementations, the kernel matrix may include a plurality of rows and a plurality of columns of bits. Two or more of the columns may include punctured columns having a specific pattern of bits. 
     In some implementations, the specific pattern of bits in the punctured columns may include one or more bits of 0 within the punctured columns after any number of column permutation(s) and/or row permutation(s) (e.g., at least one column permutation, at least one row permutation, or any combination thereof). Two examples of a specific pattern including one or more bits of 0 after column permutation(s) and/or row permutation(s) are shown in part (A) of  FIG. 7 . In some implementations, the specific pattern of bits in the punctured columns may include an isosceles right triangle of bits of 0, with a right angle of the triangle corresponding to a bit of 0 at an upper-left corner of the punctured columns. An example of such an isosceles right triangle of bits of 0 is shown in part (B) of  FIG. 7 . 
     In some implementations, the kernel matrix may include a parity matrix of a plurality of rows and a plurality of columns of bits. The kernel matrix may also include an information matrix of a plurality of rows and a plurality of columns of bits. The parity matrix may include a matrix having a Wi-Fi pattern. More than one rows of bits of the information matrix excluding punctured columns of the kernel matrix may include rows of high density of bits of 1 with no or one bit of 0. The rows of high density bits may correspond to rows of the Wi-Fi pattern. 
     In some implementations, a bottom row of bits of the plurality of rows may include a first number of bits of 1. The first number may be equal to or greater than a number of punctured columns by zero, one, two or three (e.g., by a few). In some implementations, a portion of the first number of bits of 1 in the bottom row may correspond to the punctured columns and a right-most column of the kernel matrix bordering a right side of the Wi-Fi pattern. 
     In some implementations, the kernel matrix may include five rows of bits and twenty columns of bits. A variable node degree of the twenty columns of bits may include one of the following: [2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3], [2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3], [2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3], and [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]. A check node degree of the five rows of bits may include one of the following: [13, 10, 14, 17, 2], [13, 10, 13, 17, 2], [13, 10, 13, 18, 3], [13, 11, 13, 18, 2], [13, 10, 14, 18, 2], [13, 10, 13, 19, 2], [14, 10, 13, 18, 1], [13, 11, 13, 18, 1], [13, 10, 14, 18, 1], [13, 11, 13, 19, 1], [13, 10, 13, 18, 2], and [13, 10, 13, 18, 1]. 
       FIG. 14  illustrates an example process  1400  in accordance with an implementation of the present disclosure. Process  1400  may represent an aspect of implementing the proposed concepts and schemes such as those described with respect to  FIG. 9 . More specifically, process  1300  may represent an aspect of the proposed concepts and schemes pertaining to shift-coefficient design. Process  1400  may include one or more operations, actions, or functions as illustrated by one or more of blocks  1410 ,  1420  and  1430  as well as sub-blocks  1412  and  1414 . Although illustrated as discrete blocks, various blocks of process  1400  may be divided into additional blocks, combined into fewer blocks, or eliminated, depending on the desired implementation. Moreover, the blocks/sub-blocks of process  1400  may be executed in the order shown in  FIG. 14  or, alternatively in a different order. Process  1400  may be implemented by communications system  1000  and any variations thereof. For instance, process  1400  may be implemented in or by first apparatus  1005  and/or second apparatus  1050 . Solely for illustrative purposes and without limiting the scope, process  1400  is described below in the context of first apparatus  1005 . Process  1400  may begin at block  1410 . 
     At  1410 , process  1400  may involve processor  1010  of first apparatus  1005  generating a QC-LDPC code. Process  1400  may proceed from  1410  to  1420 . 
     At  1420 , process  1400  may involve processor  1010  encoding data using the QC-LDPC code. Process  1400  may proceed from  1420  to  1430 . 
     At  1430 , process  1400  may involve processor  1010  transmitting, via transceiver  1030 , the encoded data (e.g., to second apparatus  1050 ). 
     In generating the QC-LDPC code, process  1400  may involve processor  1010  performing a number of operations as represented by sub-blocks  1412  and  1414 . 
     At  1412 , process  1400  may involve processor  1010  generating a respective table of shift values for each lifting factor of a first set of lifting factors. Process  1400  may proceed from  1412  to  1414 . 
     At  1414 , process  1400  may involve processor  1010  optimizing the first set of lifting factors to produce a second set of lifting factors. 
     A number of lifting factors of the first set may be greater than a number of lifting factors of the second set. A first lifting factor that exists in the first set but not in the second set may share a respective table of shift values of a second lifting factor that exists in both the first set and the second set. The second lifting factor may be smaller than the first lifting factor in value and closest to the first lifting factor than other lifting factors in the first set. 
     ADDITIONAL NOTES 
     The herein-described subject matter sometimes illustrates different components contained within, or connected with, different other components. It is to be understood that such depicted architectures are merely examples, and that in fact many other architectures can be implemented which achieve the same functionality. In a conceptual sense, any arrangement of components to achieve the same functionality is effectively “associated” such that the desired functionality is achieved. Hence, any two components herein combined to achieve a particular functionality can be seen as “associated with” each other such that the desired functionality is achieved, irrespective of architectures or intermedial components. Likewise, any two components so associated can also be viewed as being “operably connected”, or “operably coupled”, to each other to achieve the desired functionality, and any two components capable of being so associated can also be viewed as being “operably couplable”, to each other to achieve the desired functionality. Specific examples of operably couplable include but are not limited to physically mateable and/or physically interacting components and/or wirelessly interactable and/or wirelessly interacting components and/or logically interacting and/or logically interactable components. 
     Further, with respect to the use of substantially any plural and/or singular terms herein, those having skill in the art can translate from the plural to the singular and/or from the singular to the plural as is appropriate to the context and/or application. The various singular/plural permutations may be expressly set forth herein for sake of clarity. 
     Moreover, it will be understood by those skilled in the art that, in general, terms used herein, and especially in the appended claims, e.g., bodies of the appended claims, are generally intended as “open” terms, e.g., the term “including” should be interpreted as “including but not limited to,” the term “having” should be interpreted as “having at least,” the term “includes” should be interpreted as “includes but is not limited to,” etc. It will be further understood by those within the art that if a specific number of an introduced claim recitation is intended, such an intent will be explicitly recited in the claim, and in the absence of such recitation no such intent is present. For example, as an aid to understanding, the following appended claims may contain usage of the introductory phrases “at least one” and “one or more” to introduce claim recitations. However, the use of such phrases should not be construed to imply that the introduction of a claim recitation by the indefinite articles “a” or “an” limits any particular claim containing such introduced claim recitation to implementations containing only one such recitation, even when the same claim includes the introductory phrases “one or more” or “at least one” and indefinite articles such as “a” or “an,” e.g., “a” and/or “an” should be interpreted to mean “at least one” or “one or more;” the same holds true for the use of definite articles used to introduce claim recitations. In addition, even if a specific number of an introduced claim recitation is explicitly recited, those skilled in the art will recognize that such recitation should be interpreted to mean at least the recited number, e.g., the bare recitation of “two recitations,” without other modifiers, means at least two recitations, or two or more recitations. Furthermore, in those instances where a convention analogous to “at least one of A, B, and C, etc.” is used, in general such a construction is intended in the sense one having skill in the art would understand the convention, e.g., “a system having at least one of A, B, and C” would include but not be limited to systems that have A alone, B alone, C alone, A and B together, A and C together, B and C together, and/or A, B, and C together, etc. In those instances where a convention analogous to “at least one of A, B, or C, etc.” is used, in general such a construction is intended in the sense one having skill in the art would understand the convention, e.g., “a system having at least one of A, B, or C” would include but not be limited to systems that have A alone, B alone, C alone, A and B together, A and C together, B and C together, and/or A, B, and C together, etc. It will be further understood by those within the art that virtually any disjunctive word and/or phrase presenting two or more alternative terms, whether in the description, claims, or drawings, should be understood to contemplate the possibilities of including one of the terms, either of the terms, or both terms. For example, the phrase “A or B” will be understood to include the possibilities of “A” or “B” or “A and B.” 
     From the foregoing, it will be appreciated that various implementations of the present disclosure have been described herein for purposes of illustration, and that various modifications may be made without departing from the scope and spirit of the present disclosure. Accordingly, the various implementations disclosed herein are not intended to be limiting, with the true scope and spirit being indicated by the following claims.