SYSTEMS AND METHODS FOR PROVIDING MULTIPLE CODE RATES IN MULTI-ANTENNA COMMUNICATION SYSTEMS
20250365020 ยท 2025-11-27
Assignee
Inventors
Cpc classification
H04L5/006
ELECTRICITY
H04L1/0017
ELECTRICITY
H04L5/0044
ELECTRICITY
H04B17/336
ELECTRICITY
International classification
H03M13/25
ELECTRICITY
H04L1/00
ELECTRICITY
H04B17/336
ELECTRICITY
Abstract
In some implementations, an apparatus may include a plurality of transmitters and one or more processors. The one or more processors may identify a plurality of wireless channels corresponding to the plurality of transmitters for transmitting respective data streams. The one or more processors may determine, based at least on a difference in signal quality between the plurality of wireless channels, respective target code rates for the plurality of wireless channels. The respective target code rates may be different from each other and different from a base code rate of a low density parity check (LDPC) code. The one or more processors may encode, by an LDPC encoder using the LDPC code with the base code rate, the respective data streams to generate respective encoded data streams at the respective target code rates. The plurality of transmitters may transmit the respective encoded data streams via respective wireless channels.
Claims
1. An apparatus comprising: a plurality of transmitters and one or more processors, wherein the one or more processors are configured to: identify a plurality of wireless channels corresponding to the plurality of transmitters for transmitting respective data streams; determine, based at least on a difference in signal quality between the plurality of wireless channels, respective target code rates for the plurality of wireless channels, wherein the respective target code rates are different from each other and different from a base code rate of a low density parity check (LDPC) code; and encode, by an LDPC encoder using the LDPC code with the base code rate, the respective data streams to generate respective encoded data streams at the respective target code rates; and wherein the plurality of transmitters are configured to transmit the respective encoded data streams via respective wireless channels.
2. The apparatus of claim 1, wherein the difference in signal quality between the plurality of wireless channels is the difference in signal-to-noise ratio (SNR) between the plurality of wireless channels.
3. The apparatus of claim 1, wherein the one or more processors are further configured to: receive a data stream; determine, by a medium access control (MAC) layer, (1) different traffic types of the data stream, (2) different levels of priority of the data stream or (3) different levels of quality of service (QoS) of the data stream; based at least on the different traffic types, the different levels of priority or the different levels of QoS, split, by the MAC layer, the data stream into the respective data streams.
4. The apparatus of claim 1, wherein the one or more processors are further configured to: select, based at least on the respective target code rates and the base code rate, respective sizes of information bits for encoding for the plurality of wireless channels.
5. The apparatus of claim 4, wherein the one or more processors are further configured to: based at least on the respective sizes of information bits, split, by a physical (PHY) layer, a data stream into the respective data streams; and add, by the PHY layer, respective data to the respective data streams according to the selected respective sizes of information bits.
6. The apparatus of claim 4, wherein in encoding the respective data streams, the one or more processors are further configured to: determine a base size of information bits corresponding to the base code rate; generate, from each respective data stream, a second set of information bits to include a first set of information bits corresponding to the selected respective size of information bits and one or more bits to increase a size of the second set of information to correspond to the base size of information bits; encode, by the LDPC encoder using the base code rate, the second set of information bits to generate parity data; and generate the respective encoded data stream by concatenating the second set of information bits and the parity data.
7. The apparatus of claim 1, wherein the one or more processors are further configured to encode the respective data streams serially or in parallel.
8. The apparatus of claim 1, wherein the one or more processors are further configured to multiplex the respective encoded data streams to perform a stream-wise modulation.
9. A method comprising: identifying, by one or more processors, a plurality of wireless channels corresponding to a plurality of transmitters for transmitting respective data streams; determining, by the one or more processors based at least on a difference in signal quality between the plurality of wireless channels, respective target code rates for the plurality of wireless channels, wherein the respective target code rates are different from each other and different from a base code rate of a low density parity check (LDPC) code; encoding, by an LDPC encoder using the LDPC code with the base code rate, the respective data streams to generate respective encoded data streams at the respective target code rates; and transmitting, by the plurality of transmitters, the respective encoded data streams via respective wireless channels.
10. The method of claim 9, wherein the difference in signal quality between the plurality of wireless channels is a difference in signal-to-noise ratio (SNR) between the plurality of wireless channels.
11. The method of claim 9, further comprising: receiving a data stream; determining, by a medium access control (MAC) layer, (1) different traffic types of the data stream, (2) different levels of priority of the data stream or (3) different levels of quality of service (QoS) of the data stream; based at least on the different traffic types, the different levels of priority or the different levels of QoS, splitting, by the MAC layer, the data stream into the respective data streams.
12. The method of claim 9, further comprising: selecting, based at least on the respective target code rates and the base code rate, respective sizes of information bits for encoding for the plurality of wireless channels.
13. The method of claim 12, further comprising: based at least on the respective sizes of information bits, splitting, by a physical (PHY) layer, a data stream into the respective data streams; and adding, by the PHY layer, respective data to the respective data streams according to the selected respective sizes of information bits.
14. The method of claim 12, wherein encoding the respective data streams comprises: determining a base size of information bits corresponding to the base code rate; generating, from each respective data stream, a second set of information bits to include a first set of information bits corresponding to the selected respective size of information bits and one or more bits to increase a size of the second set of information to correspond to the base size of information bits; encoding, by the LDPC encoder using the base code rate, the second set of information bits to generate parity data; and generating the respective encoded data stream by concatenating the second set of information bits and the parity data.
15. The method of claim 9, wherein encoding the respective data streams comprises: encoding the respective data streams serially or in parallel.
16. The method of claim 9, further comprising: multiplexing the respective encoded data streams to perform a stream-wise modulation.
17. An apparatus comprising: a plurality of transmitters and one or more processors, wherein the one or more processors are configured to: identify a plurality of wireless channels corresponding to the plurality of transmitters for transmitting respective data streams; determine, based on the difference in signal quality between the plurality of wireless channels, respective numbers of bits for the plurality of wireless channels, wherein the respective numbers of bits are different from each other; and modulate, using the respective numbers of bits, the respective data streams to generate respective modulated data streams; and wherein the plurality of transmitters are configured to transmit the respective encoded data streams via respective wireless channels.
18. The apparatus of claim 17, wherein the difference in signal quality between the plurality of wireless channels is a difference in signal-to-noise ratio (SNR) between the plurality of wireless channels.
19. The apparatus of claim 17, wherein in modulating the respective data streams, the one or more processors are configured to perform, for each wireless channel, a quadrature amplitude modulation (QAM) using the respective number of bits as a number of bits per symbol.
20. The apparatus of claim 17, wherein the one or more processors are configured to: receive a data stream; determine, by a medium access control (MAC) layer, (1) different traffic types of the data stream, (2) different levels of priority of the data stream or (3) different levels of quality of service (QoS) of the data stream; based at least on the different traffic types, the different levels of priority or the different levels of QoS, split, by the MAC layer, the data stream into the respective data streams.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
[0004] Various objects, aspects, features, and advantages of the disclosure will become more apparent and better understood by referring to the detailed description taken in conjunction with the accompanying drawings, in which like reference characters identify corresponding elements throughout. In the drawings, like reference numbers generally indicate identical, functionally similar, and/or structurally similar elements.
[0005]
[0006]
[0007]
[0008]
[0009]
[0010]
[0011]
[0012]
[0013]
[0014]
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
[0026] The details of various embodiments of the methods and systems are set forth in the accompanying drawings and the description below.
DETAILED DESCRIPTION
[0027] The following disclosure provides many different embodiments, or examples, for implementing different features of the provided subject matter. Specific examples of components and arrangements are described below to simplify the present disclosure. These are, of course, merely examples and are not intended to be limiting. For example, a first feature in communication with or communicatively coupled to a second feature in the description that follows may include embodiments in which the first feature is in direct communication with or directly coupled to the second feature and may also include embodiments in which additional features may intervene between the first and second features, such that the first feature is in indirect communication with or indirectly coupled to the second feature. In addition, the present disclosure may repeat reference numerals and/or letters in the various examples. This repetition is for the purpose of simplicity and clarity and does not in itself dictate a relationship between the various embodiments and/or configurations discussed.
[0028] Although various embodiments disclosed herein are described for encoding and/or decoding data for a wireless communication (e.g., wireless local area network (WLAN) conforming to any IEEE 802.11 standard including IEEE 802.11bn), principles disclosed herein are applicable to other types of communication (e.g., wired communication) or any process that performs encoding for error correction codes (e.g., low-density parity check (LDPC) codes, forward error correction (FEC) codes).
I. LDPC-Based Encoding/Decoding Systems
[0029] Generally, a parity check matrix for a code represents equations that determine whether errors have occurred during transmission. More formally, for all valid codewords (i.e., bits produced by the encoder with no errors), the following equation can be true:
[0030] In Equation 1, H is the parity check matrix, c is a codeword vector, and 0 is a vector of all zeroes. The parity check matrix, H, is one way of describing a code.
[0031] A generator matrix for a code, G, satisfies the following equation:
[0032] In Equation 2, s is a vector of information bits, G is a generator matrix and c is the codeword that corresponds to s. In some implementations, a system (e.g., a communication system 108 including a decoder 160 in
[0033] The parity check and generator matrices for a code are related per the above matrix equations. Generally, if a parity check matrix is low density, the corresponding generator matrix will be high density, and vice versa. LDPC codes are accordingly characterized by low density parity check matrices and high density generator matrices. The density of a matrix relates to the number of operations that must be performed to implement one of the above equations. Although it was recognized by 1995 that LDPC codes could be used to transmit data with very few errors, i.e., with error rates as good or better than turbo codes, one disadvantage of LDPC codes is that their generator matrices were high density and that made encoding computationally intensive, rending the codes impractical for many applications.
[0034] In some implementations, a parity check matrix may have a quasi-cyclic structure, for example, a parity check matrix for QC-LDPC code (n=3888, k=2916, R=3/4). Given a lifting size z, the parity check matrix may have a plurality of sub-matrices such that each submatrix is cyclically shifted version of an identity matrix of size (zz), where z=162, for example. In some implementations, the lifting can be performed in a hierarchical way, where in lifting by 162/W followed by lifting W, where W is a whole number, to realize an overall lifting of 162. A parity check matrix can be represented in two equivalent forms: (1) parity check matrix H and (2) a block matrix or an exponent matrix P=E(H).
[0035] In some implementations, a parity check matrix H may be a binary matrix whose size is mn (each of m and n is an integer). Elements of the parity check matrix are binary values. Given a block length n and a code rate R, an LDPC code (or QC-LDPC code) LDPC (n, R) satisfies the following equations:
[0036] In some implementations, a block matrix or an exponent matrix (QC-LDPC exponent matrix) may be obtained. Given a lifting size z, the exponent matrix P=E(H) may have a size of m/zn/z. If n=24z (e.g., n=3888, z=162), then the size of P=E(H) is 24(1R)24 (=n(1R)/zn/z). Elements of the exponent matrix may be integer values which correspond to cyclic shift values of identity matrix of size zz. A parity check matrix H may be a sparse binary matrix that can be derived from an exponent matrix P=E(H). The generator matrix G may have a size nk in binary form (e.g., elements of the generator matrix G are binary values). The exponent matrix P=E(H) may have a structure including a plurality of sub-matrices (e.g., A, B, C, D, E, T).
[0037] In some implementations, a binary QC-LDPC code LDPC (n, R) may be characterized by the null space of an n(1R)n parity check matrix H. The parity check matrix H may be a binary sparse matrix which includes a set of circulant matrices of size zz. The parity-check matrix H of a QC-LDPC code can be represented equivalently by an exponent matrix P=E(H). This representation can help to illustrate the graphical structure of the underlying code as a base graph along with coefficient of shifting.
[0038] In some implementations, a parity check matrix H may be generated from an exponent matrix P=E(H). The exponent matrix P=E(H) may include (as elements) shift values d in the range 0<=d<z along with d=1. For example, if z=7, the shift values d may include 1, 0, 1, 2, 3, 4, 5, 6. The shift value d=0 may correspond (or map) to an identity matrix of size zz, denoted by I(z). The shift value d=1 may correspond (or map) to a null matrix (all elements zero) of size zz, denoted by 0*I(z). Any other integer value d in [1,z1] may correspond (or map) to a matrix cyclically right shifted from I(z). The parity check matrix H can be obtained from the exponent matrix P=E(H) by expanding the exponent matrix P such that each element of the exponent matrix P (as a shift value d) is replaced by a matrix corresponding to the shift value.
[0039] In some implementations, the exponent matrix P=E(H) may include a plurality of elements P1,1, P1,2, P1,3, . . . , P1,; P2,1, P2,2, P2,3, . . . , P2,; . . . , P1,1, P1,2, P1,3, . . . , P{acute over (m)},, which correspond to ({acute over (m)}) values where {acute over (m)} and satisfy the following equations:
[0040] The exponent matrix (or permutation matrix) P=E(H) may be expressed as following:
[0041] The corresponding parity check matrix H may be obtained by replacing each element of the matrix (as a shift value d) by a matrix C(d) corresponding to the shift value as follows:
[0042] For example, a matrix C(1) may be expressed as follows:
[0043] In some implementations, an encoder can produce codewords using a generator matrix (e.g., using Equation 2). In some implementations, an encoder can use the parity check matrix (rather than the generator matrix) to produce codewords from vectors of information bits. After a parity check matrix H is obtained, the parity check matrix H may have sub-matrices A, B, C, D, T, E. An upper area O of the sub-matrix T may correspond to an area in which the matrix contains all zeroes, and the other areas may represent locations that can contain ones.
[0044] In some implementations, the codeword c can be obtained by the following expression:
[0045] where s is the vector of information bits to be encoded, p.sub.1 is a vector of the first g parity bits and p.sub.2 is a vector of the remaining m-g parity bits.
[0046] The vectors p1 and p2 can be obtained by the following equations:
[0047] Although various embodiments disclosed herein are described for encoding data for a wireless communication (e.g., wireless local area network (WLAN) conforming to any IEEE 802.11 standard), principles disclosed herein are applicable to other types of communication (e.g., wired communication) or any process that performs encoding for LDPC codes.
[0048] Referring to
[0049] The baseband circuitry 110 of the communication system 105 is a circuitry that generates the baseband data 115 for transmission. The baseband data 115 includes information data (e.g., signal(s)) at a baseband frequency for transmission. In one approach, the baseband circuitry 110 includes an encoder 130 that encodes the data and generates or outputs parity bits. In one aspect, the baseband circuitry 110 (or encoder 130) obtains a generator matrix or a parity check matrix or uses a previously produced generator matrix or a previously produced parity check matrix and encodes the information data by applying the information data to the generator matrix or the parity check matrix to obtain a codeword. In some implementations, the baseband circuitry 110 stores one or more generator matrices or one or more parity check matrices that conform to any IEEE 802.11 standard for WLAN communication. The baseband circuitry 110 retrieves the stored generator matrix or the stored parity check matrix in response to detecting information data to be transmitted, or in response to receiving an instruction to encode the information data. In one approach, the baseband circuitry 110 generates the parity bits according to a portion of the generator matrix or using the parity check matrix and appends the parity bits to the information bits to form a codeword. The baseband circuitry 110 generates the baseband data 115 including the codeword for the communication system 108 and provides the baseband data 115 to the transmitter circuitry 120.
[0050] The transmitter circuitry 120, referred to generally as transmitter(s), of the communication system 105 includes or corresponds to a circuitry that receives the baseband data 115 from the baseband circuitry 110 and transmits a wireless signal 125 according to the baseband data 115. In one configuration, the transmitter circuitry 120 is coupled between the baseband circuitry 110 and an antenna 122. In this configuration, the transmitter circuitry 120 up-converts the baseband data 115 from the baseband circuitry 110 onto a carrier signal to generate the wireless signal 125 at a radio frequency (RF) frequency (e.g., 10 MHz to 60 GHz), and transmits the wireless signal 125 through the antenna 122. In some implementations, the antenna 122 is a plurality of multiple-input and multiple-out (MIMO) antennas including transmission antennas 122-1, 122-2, . . . , 122-N.sub.T (e.g., the number of transmission antennas N.sub.T is an integer greater than 1).
[0051] The receiver circuitry 140 of the communication system 108 is a circuitry that receives the wireless signal 125 from the communication system 105 and obtains baseband data 145 from the received wireless signal 125. In one configuration, the receiver circuitry 140 is coupled between the baseband circuitry 150 and an antenna 142. In this configuration, the receiver circuitry 140 receives the wireless signal 125 though the antenna 142, and down-converts the wireless signal 125 at an RF frequency according to a carrier signal to obtain the baseband data 145 from the wireless signal 125. The receiver circuitry 140 then provides the baseband data 145 to the baseband circuitry 150. In some implementations, the antenna 142 is a plurality of multiple-input and multiple-out (MIMO) antennas including receiving antennas 142-1, 142-2, . . . , 142-N.sub.R (e.g., the number of receiving antennas N.sub.T N.sub.R is an integer greater than 1).
[0052] The baseband circuitry 150 of the communication system 108 includes or corresponds to a circuitry that receives the baseband data 145 from the receiver circuitry 140 and obtains information data from the received baseband data 145. In one embodiment, the baseband circuitry 150 includes a decoder 160 that extracts information and parity bits from the baseband data 145. The decoder 160 decodes the baseband data 145 to obtain the information data generated by the baseband circuitry 110 of the communication system 105.
[0053] In some implementations, each of the baseband circuitry 110 (including the encoder 130), the transmitter circuitry 120, the receiver circuitry 140, and the baseband circuitry 150 (including the decoder 160) may be as one or more processors, application specific integrated circuit (ASIC), field programmable gate array (FPGA), or any combination of them.
[0054]
[0055] In more detail, the processor(s) 2010 may be any logic circuitry that processes instructions, e.g., instructions fetched from the memory 2060 or cache 2020. In many implementations, the processor(s) 2010 are microprocessor units or special purpose processors. The computing device 2050 may be based on any processor, or set of processors, capable of operating as described herein. The processor(s) 2010 may be single core or multi-core processor(s). The processor(s) 2010 may be multiple distinct processors.
[0056] The memory 2060 may be any device suitable for storing computer readable data. The memory 2060 may be a device with fixed storage or a device for reading removable storage media. Examples include all forms of volatile memory (e.g., RAM), non-volatile memory, media and memory devices, semiconductor memory devices (e.g., EPROM, EEPROM, SDRAM, and flash memory devices), magnetic disks, magneto optical disks, and optical discs (e.g., CD ROM, DVD-ROM, or Blu-Ray discs). A computing system 2000 may have any number of memory devices 2060.
[0057] The cache memory 2020 is generally a form of computer memory placed in close proximity to the processor(s) 2010 for fast read times. In some implementations, the cache memory 2020 is part of, or on the same chip as, the processor(s) 2010. In some implementations, there are multiple levels of cache 2020, e.g., L2 and L3 cache layers.
[0058] The network interface controller 2030 manages data exchanges via the network interface (sometimes referred to as network interface ports). The network interface controller 2030 handles the physical and data link layers of the OSI model for network communication. In some implementations, some of the network interface controller's tasks are handled by one or more of the processor(s) 2010. In some implementations, the network interface controller 2030 is part of a processor 2010. In some implementations, the computing system 2000 has multiple network interfaces controlled by a single controller 2030. In some implementations, the computing system 2000 has multiple network interface controllers 2030. In some implementations, each network interface is a connection point for a physical network link (e.g., a cat-5 Ethernet link). In some implementations, the network interface controller 2030 supports wireless network connections and an interface port is a wireless (e.g., radio) receiver or transmitter (e.g., for any of the IEEE 802.11 protocols, near field communication NFC, Bluetooth, ANT, or any other wireless protocol). In some implementations, the network interface controller 2030 implements one or more network protocols such as Ethernet. Generally, a computing device 2050 exchanges data with other computing devices via physical or wireless links through a network interface. The network interface may link directly to another device or to another device via an intermediary device, e.g., a network device such as a hub, a bridge, a switch, or a router, connecting the computing device 2000 to a data network such as the Internet.
[0059] The computing system 2000 may include, or provide interfaces for, one or more input or output (I/O) devices. Input devices include, without limitation, keyboards, microphones, touch screens, foot pedals, sensors, MIDI devices, and pointing devices such as a mouse or trackball. Output devices include, without limitation, video displays, speakers, refreshable Braille terminal, lights, MIDI devices, and 2-D or 3-D printers.
[0060] Other components may include an I/O interface, external serial device ports, and any additional co-processors. For example, a computing system 2000 may include an interface (e.g., a universal serial bus (USB) interface) for connecting input devices, output devices, or additional memory devices (e.g., portable flash drive or external media drive). In some implementations, a computing device 2000 includes an additional device such as a co-processor, e.g., a math co-processor can assist the processor 2010 with high precision or complex calculations.
[0061] The components 2090 may be configured to connect with external media, a display 2070, an input device 2080 or any other components in the computing system 2000, or combinations thereof. The display 2070 may be a liquid crystal display (LCD), an organic light emitting diode (OLED) display, a flat panel display, a solid state display, a cathode ray tube (CRT) display, a projector, a printer or other now known or later developed display device for outputting determined information. The display 2070 may act as an interface for the user to see the functioning of the processor(s) 2010, or specifically as an interface with the software stored in the memory 2060.
[0062] The input device 2080 may be configured to allow a user to interact with any of the components of the computing system 2000. The input device 2080 may be a plurality pad, a keyboard, a cursor control device, such as a mouse, or a joystick. Also, the input device 2080 may be a remote control, touchscreen display (which may be a combination of the display 2070 and the input device 2080), or any other device operative to interact with the computing system 2000, such as any device operative to act as an interface between a user and the computing system 2000.
[0063]
[0064]
[0065]
[0066]
II. Unequal Channels in a Multi-Antenna Communication System
[0067] In one aspect, a multiple-input and multiple-output (MIMO) system (e.g., communication system 105, 108) can be transformed into parallel channels with different or unequal SNR levels. In some implementations, a MIMO system can use singular value decomposition (SVD) beamforming to decompose a channel matrix into three matrices, find different singular values which represent communication paths (or channels) with different signal qualities/interferences, select one of the communication paths (or channels) and transmit and/or receive signals using the selected channel. For example, a 22 MIMO system (e.g., a communication system having two antennas at the transmitter and two antennas at the receiver) can be transformed to parallel channels where one is a strong link (with a higher SNR or equivalently a lower noise level) and the other weak link (with a lower SNR or equivalently a higher noise level).
[0068] In some implementations, as a result of SVD beamforming, a MIMO system can obtain a MIMO channel condition number (or condition number) which is a ratio of a largest singular value to a lowest singular value.
[0069]
[0070] In performing the power allocation 710, the MIMO system can allocate power to a plurality of streams (e.g., a stream vector
where s.sub.1 and s.sub.2 are streams) using a diagonal matrix
In some implementations, the MIMO system can use various power allocation strategies. For example, the MIMO system can allocate equal power as follows:
[0071] where N.sub.T is a number of transmission antennas. In some implementations, the MIMO system can use the strategy of waterfilling (optimum strategy) where the power is allocated such that power is individually filled much like a water tank with unequal depth, subject to a given total power constraint.
[0072] In performing the precoding 720, the MIMO system can calculate the unitary matrix V. Using the precoding 720 at the transmitter, the MIMO system can be transformed into parallel channels with different SNR levels. In performing the SVD 730, the MIMO system can decompose the channel matrix H to the matrices U, V and . In performing the singular value detection 740, the MIMO system can detect or find the singular values of the matrix H. The precoding 720, the SVD 730 and the detection 740 can be performed using the following equations:
[0073] For example, for a 22 MIMO system, the matrix H can have a dimension of (22), the vector x can have a dimension of (21), and the vector y can have a dimension of (21). In this case, examples of the stream vector s, the diagonal matrix and the diagonal matrix are shown as follows:
[0074] For a 42 MIMO system, the matrix H can have a dimension of (24), the vector x can have a dimension of (41), and the vector y can have a dimension of (21). In this case, examples of the stream vector s, the diagonal matrix and the diagonal matrix are shown as follows:
[0075]
[0076]
[0077]
[0078]
[0079]
[0080]
[0081] Referring to
[0082] In some implementations, the system 1100 may divide or split 1109 the encoded data (e.g., a single data stream) into N.sub.ss spatial streams (e.g., N.sub.ss is an integer greater than 1). Here, a data stream refers to transmission of a sequence of data segments, transmission of a series of packets, transmission of a sequence of digitally encoded signals to convey information, or any continuous flow of data generated by various sources. The stream parser 1110 may randomly permutate or reorder the N.sub.ss spatial streams in order to spread the encoded bits over the N.sub.ss spatial streams. In this manner, the LDPC-coded modulation system combined with a MIMO system can achieve a MIMO diversity (e.g., spatial diversity, spatial multiplexing, or interference alignment) to effectively improve reliability and reduce the impact of interference or fading channels. Each of the one or more QAMs 1120-1, . . . , 1120-N.sub.ss may determine a number of distinct symbols (or different modulation order) M and perform M-QAM (e.g., M=2, 4, 8, 16, 64, 256, . . . ) on the respective spatial stream to generate a respective modulated signal. The one or more tone permutations 1122-1, . . . , 1122-N.sub.ss may permutate or rearrange tones or subcarriers of the modulated signal in a multi-carrier system, such as Orthogonal Frequency Division Multiplexing (OFDM) to improve the robustness of the signal against interference and fading.
[0083] In some implementations, the spatial mapping 1130 may map the N.sub.ss spatial streams to N.sub.T signals (or streams) corresponding to N.sub.T number of transmission antennas. The one or more inverse Fourier transforms (e.g., IDFTs or IFFTs) 1140-1, . . . , 1140-N.sub.T may convert the respective N.sub.T signals from the frequency domain to the time domain in the OFDM system. The one or more cyclic prefixes 1142-1, . . . , 1142-N.sub.T may add a cyclic prefix of the last part of an OFDM symbol and append the part to the beginning of the same symbol, for respective N.sub.T signals. The one or more windowings 1150-1, . . . , 1150-N.sub.T may apply a window function (e.g., rectangular window, Hamming window, Blackman window, raised cosine window, Kaiser window) to the respective N.sub.T signals to reduce out-of-band emissions and improve spectral efficiency, for example. The one or more AFEs 1152-1, . . . , 1152-N.sub.T may perform various functions (e.g., signal amplification, frequency conversion, filtering, analog-to-digital conversion) on the respective N.sub.T signals.
[0084] The system 1100 can perform unequal modulations (e.g., different QAMs on different spatial streams in different channels) but with fixed LDPC encoding (e.g., LDPC encoding using a single code rate for all spatial streams in different channels). In other words, a single LDPC/FEC coded stream can be split at the stream parser 1110 and the multiple split spatial streams can be mapped to different QAMs (e.g., M-QAM with different number of distinct symbols M). In this manner, each MIMO spatial stream can have a modulation order different from each other (e.g., 256-QAM on one stream and 64-QAM on the other stream). This scheme can generalize to an arbitrary number of spatial streams N.sub.ss=2, 3, 4, etc.
III. Multiple Code Rates in a Multi-Antenna Communication System
[0085] In one aspect, in the presence of unequal conditions in different channels (e.g., a large SNR gap between channels as shown in
[0086] In one aspect, LDPC codes can have certain code rates that can be used as target code rates for multiple designs/implementations in communication standards (e.g., IEEE 802.11bn UHR chips). An LDPC encoder may take a block of k bits of information bits (e.g., k=1458) and produce n coded bits with the code rate R=k/n (e.g., R=3/4, n=1944). The LDPC codes refer to systematic LDPC codes, quasi-cyclic (QC) LDPC codes or any error correction code using a parity check matrix which is defined as a set of equations that are satisfied by any valid code word. The code rate R of an LDPC code refers to a ratio of the number of information bits (denoted by k) to the code block size (denoted by n). An LDPC decoder may operate on (noisy version of) n received bits and (ideally) recover the k information bits. However, a conventional LDPC code may have a fixed code rate R for a fixed size of information bits k, and LDPC codes with different code rates may not be easily constructed (or generated, configured, designed, implemented).
[0087] To solve this problem, systems and methods according to some embodiments of the present disclosure can perform unequal coding (e.g., different code rates for different streams/channels) as well as unequal modulation (e.g., different QAM schemes for different streams/channels). In some implementations, a MIMO communication system can perform precoding or beamforming (e.g., SVD beamforming) to detect or identify unequal channels (e.g., channels with different SNR values or different EVM values or different signal qualities or different interferences), and perform unequal LDPC coding (e.g., with different code rates) on different streams corresponding to the detected or identified unequal channels. For example, a stream transmitted using a stronger channel (referred to as stronger stream) can potentially carry more information bits and transport data more reliably over to the receiver, than a stream transmitted using a weaker channel (referred to as weaker stream). A higher order QAM (e.g., 4096-QAM) can pack more information bits than a lower order QAM (e.g., 16-QAM) because the number of information bits that can be packed in M-QAM scales as log.sub.2(M). Similarly, higher coding rates can reflect a larger number of information bits. For example, an encoding and modulation system can assign a higher code rate to a stronger stream and a lower code rate to a weaker stream. In some implementations, an encoding and modulation system can combine an order of a modulation scheme (e.g., QAM) and a code rate (e.g., a code rate of an LDPC code) to pack a broader range of discrete information bits. In some implementations, the encoding and modulation system can determine a modulation and coding scheme (MCS) and select a pair modulation/QAM size (M) and code rate R, corresponding to the determined MCS.
[0088] In some implementations, an encoding and modulation system with a MIMO configuration may include an encoding system and a modulation system. The encoding and modulation system can be implemented in hardware (e.g., circuitry or processor), firmware, software, or a combination thereof. The encoding system may include N.sub.s number of scramblers (e.g., N.sub.s is a number of data streams and is an integer greater than 1), N.sub.s number of pre-FEC pads, N.sub.s number of LDPC encoders, and/or N.sub.s number of post-FEC pads. The modulation system may include a stream parser, N.sub.ss number of modulations (e.g., QAM; N.sub.ss is a number of spatial streams and is an integer greater than 1), N.sub.ss number of tone permutations, a spatial mapping (or spatial mapper), N.sub.T number of inverse Fourier transforms (e.g., IDFT or IFFT; N.sub.T is a number of transmission antennas and is an integer greater than 1), N.sub.T number of cyclic prefixes, N.sub.T number of windowings, and/or N.sub.T number of AFEs.
[0089] In some implementations, the encoding and modulation system can divide or split input data stream into N.sub.s number of data streams. The division or split can be performed by a medium access control (MAC) layer or by a physical (PHY) layer. The N.sub.s number of scramblers can randomize respective N.sub.s number of data streams before encoding. The N.sub.s number of pre-FEC pads can add or pad one or bits to the respective N.sub.s number of data streams (or data output from the respective N.sub.s number of scramblers) to generate padded data to be provided to the respective N.sub.s number of LDPC encoders. The N.sub.s number of LDPC encoders can encode the respective input data (or the respective padded data output from the N.sub.s number of pre-FEC pads) using respective LDPC codes (which may have different code rates from each other). The N.sub.s number of post-FEC pads can add or pad one or bits to data output from the respective N.sub.s number of LDPC encoders to generate respective encoded data.
[0090] In some implementations, the encoding and modulation system can divide or split the encoded data as N.sub.s number of data streams into N.sub.ss spatial streams (e.g., N.sub.ss is an integer greater than 1). In some implementations, the number data streams (N.sub.s) may be the same as the number of spatial streams (N.sub.ss). The stream parser can randomly permutate or reorder the N.sub.ss spatial streams in order to spread the encoded bits over the N.sub.ss spatial streams. Each of the N.sub.ss number of QAMs can determine a number of distinct symbols (or different modulation order) M and perform M-QAM (e.g., M=2, 4, 8, 16, 64, 256, . . . ) on the respective spatial stream to generate a respective modulated signal. In some implementations, each QAM (or the encoding and modulation system) can determine M based on an SNR gap or an EVM gap (see
[0091] In some implementations, a system can perform unequal modulation and coding across spatial streams without having to use separate FEC block codes per different spatial streams. In some implementations, the system can perform unequal coding across spatial streams using multiple code rates spawned or generated by suitable bit processing based on a single mother code (e.g., a single LDPC code with a single base/mother code rate). In some implementations, a plurality of FEC encoders (and/or decoders) can be multiplexed serially or in parallel. For example, a plurality of input streams can be serially encoded using a common, single FEC encoder (e.g., LDPC encoder) that can provide multiple code rates based on a single mother code rate. Alternatively, a plurality of input streams can be encoded in parallel using a plurality of FEC encoders (e.g., LDPC encoders) corresponding to the plurality of input streams.
[0092] In some implementations, a system can determine which bits or a range of bits (e.g., information bits) are loaded, based on an SNR gap or difference between conditioned channels (e.g., a stronger channel and a weaker channel) using appropriate MCS or coding parameters (e.g., a code rate R, a length of information bits k, a code block size or a code block length n). In some implementations, the system can perform selection of MCS or coding parameters (e.g., a code rate R, a length or number of information bits k, a code block size or a code block length n) to optimally load the number of information bits to reap the benefit of the SNR gap/difference, such that a maximum overall throughput can be achieved. For example, a 22 MIMO system having a first SNR gap (between a stronger channel and a weaker channel) that is greater than a second SNR gap can select a number of information bits (for the stronger channel) greater than a number of information bits selected by a 22 MIMO system having the second SNR gap. Similarly, a 22 MIMO system having a first SNR gap (between a stronger channel and a weaker channel) that is greater than a second SNR gap can select a code rate (for the stronger channel) higher than a code rate selected by a 22 MIMO system having the second SNR gap. In this manner, a system can perform unequal modulation and coding (UE-MCS) by performing different MCS schemes (e.g., multiple LDPC encoding with different code rates, multiple QAM with different values of M) across MIMO spatial streams.
[0093] For example, in an uncoded system, an SNR gap of 12 dB can occur when there is a 4-bit difference in the number of uncoded bits between two streams. In some implementations, a 1-bit difference between two streams can roughly translate to a 3 dB SNR gap. One scenario could involve using 4096-QAM (12 bits) on stream 1 and 256-QAM (8 bits) on stream 2, resulting in a 12 dB SNR gap (3 dB per bit and 4-bit difference across streams). This relationship can be extended to coded systems, where an additional 3 dB of SNR is needed for every 1-bit increase in information bits. Here, the information rate equals the uncoded rate multiplied by the code rate. For instance, in a 22 MIMO system, if the SNR gap between a stronger and a weaker channel is 3*x dB larger than in another 22 MIMO system, the code rate and the modulation size for the stronger channel can be chosen such that the number of information bits selected by the first stream is x bits greater than that selected by the second stream.
[0094] In some implementations, a system may determine a code rate R.sub.i as an MCS parameter for the i.sup.th stream (e.g., data stream or spatial stream) and determine, based on (1) a code rate R, (2) a code block length n, and (3) a size of information bits k of a mother/base LDPC code, a size of information bits {acute over (k)}.sub..Math. for the i.sup.th stream corresponding to the code rate R.sub.i. In some implementations, the system may determine the value of {acute over (k)}.sub..Math. as follows:
[0095] In some implementations, the system may determine a code rate R.sub.i as an MCS parameter for the i.sup.th stream (e.g., data stream or spatial stream) and determine, based on (1) a code rate R and (2) a code block length n of a mother/base LDPC code, a code block length .sub..Math. (or code block size or codeword size) for the i.sup.th stream corresponding to the code rate R.sub.i. In some implementations, the system may determine the value of .sub..Math. as follows:
[0096] In some implementations, the system may determine a parameter of (k{acute over (k)}.sub..Math.) indicating a frozen block length (or size/length of frozen bits) or a size of one or more bits added to the {acute over (k)}.sub..Math. information bits for the code rate R.sub.i. In some implementations, the system may determine the parameter (k{acute over (k)}) as follows:
[0097] In some implementations, the system may calculate/compute/obtain possible combinations of parameters (e.g., {acute over (k)}.sub..Math., .sub..Math.) using Equation 26 to Equation 28 (such that {acute over (k)}.sub..Math., .sub..Math. should be integer values), store the resulting parameter combinations in memory (e.g., in the form of look-up table (LUT)), and determine parameters by selecting a parameter combination from the LUT. Table 1 shows an example LUT including possible parameter combinations.
TABLE-US-00001 TABLE 1 Possible Parameter Combinations for Multi-Rate LDPC Codes k (mother n (mother R (mother {acute over (k)}.sub.l .sub.l R.sub.i code) code) code) 1296 1944 2/3 1296 1944 2/3 972 1458 2/3 1458 1944 3/4 648 972 2/3 1629 1944 5/6
[0098] Using Table 1, the system can first determine a code rate R.sub.i and then determine/select/choose, based on the code rate R.sub.i, one or more parameters {acute over (k)}.sub..Math., .sub..Math..
[0099] In some implementations, a system can perform unequal modulation and coding (UE-MCS) using a multi-rate LDPC code that can provide a plurality of code rates (e.g., code rates R.sub.i) to encode different streams using a single mother code (or a single base code). In some implementations, the single mother code may be a single LDPC code with a base code rate (e.g., base code rate or mother code rate R=k/n). A base code rate of an FEC code (e.g., LDPC code) refers to a fixed code rate or a unique code rate that is achieved by using the FEC code. In some implementations, the system can determine different code rates R.sub.i per stream. In some implementations, the system can determine different orders (or different numbers of distinct symbols) of QAM modulations per stream.
[0100] In some implementations, the system can realize, implement, or provide different code rates per stream by performing appropriate pre-processing. In some implementations, for m spatial streams (or data streams; m is an integer greater than 1), the pre-processing can include selection of code rates R.sub.1, R.sub.2, . . . , R.sub.m based on conditions of m channels corresponding to the m spatial streams (e.g., signal qualities, interferences, SNR gaps between channels, EVM gaps between channels) such that a higher code rate can be selected for (or assigned to) a stronger channel. In some implementations, for m spatial streams, the pre-processing can include selection of block coding parameters {acute over (k)}.sub..Math., {acute over (k)}.sub.2, . . . , {acute over (k)}.sub.m corresponding to the code rates R.sub.1, R.sub.2, . . . , R.sub.m using Equation 26, for example. In some implementations, for m spatial streams, the pre-processing can include selection of block coding parameters .sub.1, .sub.2, . . . , .sub.m corresponding to the code rates R.sub.1, R.sub.2, . . . , R.sub.m using Equation 27, for example. For example, when m=2 (e.g., 42 MIMO or 22 MIMO), the system can determine {acute over (k)}.sub..Math., {acute over (k)}.sub.2 for rates R.sub.1, R.sub.2, and/or determine .sub.1, .sub.2 for rates R.sub.1, R.sub.2.
[0101] In some implementations, a plurality of input streams can be serially encoded using a common, a single mother (or base) LDPC code that can provide, based on a single mother code rate, multiple code rates corresponding to the plurality of input streams. Alternatively, a plurality of input streams can be encoded in parallel using a common, a single mother (or base) LDPC code that can provide, based on a single mother code rate, multiple code rates corresponding to the plurality of input streams.
[0102] In some implementations, a system can split or divide data (e.g., a single data stream) into a plurality of different types of data (e.g., type-1, type-2, . . . , type-m; m is an integer greater than 1). In some implementations, different types of data may indicate different traffic types (e.g., video, text, audio). In some implementations, the system can split or divide data into the plurality of different types of data at a MAC layer or a MAC level. In some implementations, the plurality of different types of data may have different degrees or levels of quality of service (QoS). In some implementations, the plurality of different types of data may have different (or unequal) levels of priority (e.g., different levels of protection of data). In some implementations, the plurality of different types of data may correspond to a plurality of spatial streams (e.g., N.sub.ss number of spatial streams; N.sub.ss is an integer greater than 1).
[0103] In some implementations, the system can determine a size of information bits {acute over (k)}.sub..Math. for type-i data (e.g., i is an integer greater than or equal to 1) and perform padding on the type-i data to increase the size of the type-i data to be equal to {acute over (k)}.sub..Math. or a nearest size of information bits. In some implementations, the system can perform padding by (1) determining a size of padded data, (2) generating random data with the determined size of padded data, and/or (3) adding the generated data (as padded data) to the type-i data. In some implementations, the system can perform padding by (1) determining a size of padded data and (2) generating data having same bit values (e.g., zero) with the determined size of padded data, and/or (3) adding the generated data (as padded data) to the type-i data.
[0104] For example, for two types of split data (e.g., type-1 data and type-2 data), the system can determine a size or length of the type-1 data (e.g., a payload length of the type-1 data) and a size or length of the type-2 data (e.g., a payload length of the type-2 data). The system can (1) determine a size of information bits {acute over (k)}.sub.1 for the type-1 data, (2) divide the type-1 data into a data portion with a size of multiples of the size of information bits {acute over (k)}.sub.1 and a remaining portion .sub.1 with a size less than the size of information bits {acute over (k)}.sub.1, and/or (3) add or append padded data (with a size of ({acute over (k)}.sub.1.sub.1)) to the remaining portion .sub.1 to increase the size of the remaining portion to the size of information bits {acute over (k)}.sub.1. The system can (1) determine a size of information bits {acute over (k)}.sub.2 for the type-2 data, (2) divide the type-2 data into a data portion with a size of multiples of the size of information bits {acute over (k)}.sub.2 and a remaining portion .sub.2 with a size less than the size of information bits {acute over (k)}.sub.2, and/or (3) add or append padded data (with a size of ({acute over (k)}.sub.2.sub.2)) to the remaining portion .sub.2 to increase the size of the remaining portion to the size of information bits {acute over (k)}.sub.2.
[0105] In some implementations, a system can split or divide data into a plurality of different data streams at a PHY layer or a PHY level (PHY split). In some implementations, in response to data arriving (or being received) at the PHY layer as a single stream, the system can split or divide the single stream into a plurality of data streams at the PHY layer or the PHY level. In some implementations, for m (split) data streams, the system can determine sizes of information bits {acute over (k)}.sub..Math., {acute over (k)}.sub.2, . . . , {acute over (k)}.sub.m and split or divide the single stream into a plurality of data streams according to the determined sizes of information bits {acute over (k)}.sub.1, {acute over (k)}.sub.2, . . . , {acute over (k)}.sub.m. In some implementations, the system can perform PHY split by limiting pre-FEC padding to one of the (split) data streams (depending on the payload length of the single stream before the PHY split).
[0106] In one example of PHY split, for a single data stream, the system can determine a size or length of the single data stream (e.g., a payload length of the single data stream) and a number of split data streams (e.g., 2) at the PHY layer. The system can (1) determine a size of information bits {acute over (k)}.sub.1 for the data stream 1 and a size of information bits {acute over (k)}.sub.2 for the data stream 2, (2) split or divide the single data stream into a plurality of first data portions each with a size equal to {acute over (k)}.sub..Math. and a plurality of second data portions each with a size equal to {acute over (k)}.sub.2 such that the number of the first data portions is equal to the number of the second data portions, (3) determine a remaining portion .sub.1 at the end of the single data stream whose size is less than {acute over (k)}.sub..Math., and/or (4) add or append padded data (with a size of ({acute over (k)}.sub.1.sub.1)) to the remaining portion .sub.1 to increase the size of the remaining portion to the size of information bits {acute over (k)}.sub.1.
[0107] In another example of PHY split, for a single data stream, the system can determine a size or length of the single data stream (e.g., a payload length of the single data stream) and a number of split data streams (e.g., 2). The system can (1) determine a size of information bits {acute over (k)}.sub.1 for the data stream 1 and a size of information bits {acute over (k)}.sub.2 for the data stream 2, (2) split or divide the single data stream into a plurality of first data portions each with a size equal to {acute over (k)}.sub..Math. and a plurality of second data portions each with a size equal to {acute over (k)}.sub.2 such that the number of the first data portions is equal to the number of the second data portions, (3) determine a remaining portion at the end of the single data stream whose size is greater than {acute over (k)}.sub..Math., (4) divide the remaining portion into a first remaining portion .sub.1 with a size equal to {acute over (k)}.sub..Math. and a second remaining portion .sub.2 with a size less than {acute over (k)}.sub.2 and/or (5) add or append padded data (with a size of ({acute over (k)}.sub.2.sub.2)) to the second remaining portion .sub.2 to increase the size of the second remaining portion to the size of information bits {acute over (k)}.sub.2.
[0108] In some implementations, a system with a MIMO configuration can encode a plurality of types of data (or plurality of data streams) with a fixed code block length (e.g., n) using a plurality of code rates generated by a single LDPC encoder (or a single LDPC code). For example, a system with a 22 MIMO configuration or a 42 MIMO configuration can split or divide input data into type-1 data and type-2 data at the MAC layer. The system can determine code rates R.sub.1 and R.sub.2 for the type-1 data and the type-2 data based on conditions of channels (e.g., SNR gap/difference between the channels). The system can determine or pre-compute, based on the code rates R.sub.1 and R.sub.2, coding parameters to encode the type-1 data and the type-2 data (e.g., {acute over (k)}.sub.1, {acute over (k)}.sub.2, .sub.1, .sub.2) using Equation 26 and/or Equation 27. The system can (1) add or append first padded data (e.g., using a pre-FEC pad) at an end of the type-1 data to increase the size of the type-1 data to {acute over (k)}.sub..Math. and (2) add or append second padded data (e.g., using a pre-FEC pad) at an end of the type-2 data to increase the size of the type-2 data to {acute over (k)}.sub.2. In order to encode the type-1 data using a single LDPC code with a base rate R (e.g., R=k/n), the system can determine a size =(k{acute over (k)}.sub..Math.) using Equation 28 and add a plurality of first frozen blocks each with the determined size (k{acute over (k)}.sub..Math.) to the type-1 data (e.g., using a pre-FEC pad). In order to encode the type-2 data using the same single LDPC code, the system can determine a size .sub.2=(k{acute over (k)}.sub.2) using Equation 28 and add a plurality of second frozen blocks each with the determined size (k{acute over (k)}.sub.2) to the type-2 data (e.g., using a pre-FEC pad).
[0109] In some implementations, the system can perform LDPC encoding on the type-1 data using the single LDPC code to generate a first codeword with size n. The system can also perform LDPC encoding on the type-2 data using the single LDPC code to generate a second codeword with size n. In some implementations, the system can execute or run a (single) LDPC encoder on the type-1 data and the type-2 data in a time multiplexed manner. In some implementations, the system can execute or run two LDPC encoders (with the same mother code) on the type-1 data and the type-2 data in parallel. In some implementations, the system can perform shortening by (1) removing or discarding the plurality of first frozen blocks from the first codeword to generate first encoded data (with the code rate R.sub.1) corresponding to the type-1 data, and/or (2) removing or discarding the plurality of second frozen blocks from the second codeword to generate second encoded data (with the code rate R.sub.2) corresponding to the type-2 data. In this manner, for example, code rates R.sub.1=3/4, R.sub.2=2/3 can be derived from R=5/6. In some implementations, upon discarding the first and second frozen blocks, the system can provide or send the first encoded data and the second encoded data to QAM (e.g., QAM with different values of M).
[0110] In some implementations, a system with a MIMO configuration can encode a plurality of types of data (or plurality of data streams) with a plurality of code block lengths (e.g., n.sub.1, n.sub.2, . . . ) using a plurality of native code rates provided by a plurality of LDPC encoders (or a plurality of LDPC codes). For example, a system with a 22 MIMO configuration or a 42 MIMO configuration can split or divide input data into data stream 1 and data stream 2 at the MAC layer or the PHY layer. The system can determine native code rates R.sub.1 (=k.sub.1/n.sub.1) and R.sub.2 (=k.sub.2/n.sub.2) for the data stream 1 and the data stream 2, respectively, based on conditions of channels (e.g., SNR gap/difference between the channels). The system can determine coding parameters to encode the data stream 1 and the data stream 2 (e.g., {acute over (k)}.sub.1, {acute over (k)}.sub.2) based on conditions of channels. The system can (1) divide the data stream 1 into a plurality of information blocks each with a size {acute over (k)}.sub.1, (2) divide the data stream 2 into a plurality of information blocks each with a size {acute over (k)}.sub.2, (3) add a plurality of first padded data or frozen blocks (e.g., using a pre-FEC pad) each with a size ({acute over (k)}.sub.1{acute over (k)}.sub.1) to increase the size of each information block to k.sub.1, and/or (4) add a plurality of second padded data or frozen blocks (e.g., using a pre-FEC pad) each with a size (k.sub.2{acute over (k)}.sub.2) to increase the size of each information block to k.sub.2.
[0111] In some implementations, the system can perform LDPC encoding on the data stream 1 using an LDPC code with a native code rate R.sub.1 (=k.sub.1/n.sub.1) to generate a first codeword with size n.sub.1. The system can also perform LDPC encoding on the data stream 2 using an LDPC code with a native code rate R.sub.2 (=k.sub.2/n.sub.2) to generate a second codeword with size n.sub.2. In some implementations, the system can execute or run two LDPC encoders (with code rates R.sub.1 and R.sub.2 respectively) on the data stream 1 and the data stream 2 in a time multiplexed manner. In some implementations, the system can execute or run two LDPC encoders (with code rates R.sub.1 and R.sub.2 respectively) on the data stream 1 and the data stream 2 in parallel. In some implementations, the system can perform shortening by (1) removing or discarding the plurality of first frozen blocks from the first codeword to generate first encoded data (with the code rate R.sub.1) corresponding to the data stream 1, and/or (2) removing or discarding the plurality of second frozen blocks from the second codeword to generate second encoded data (with the code rate R.sub.2) corresponding to the data stream 2. In some implementations, upon discarding the first and second frozen blocks, the system can provide or send the first encoded data and the second encoded data to QAM (e.g., QAM with different values of M).
[0112] In some implementations, a system with a MIMO configuration can encode a plurality of types of data (or plurality of data streams) with a plurality of code block lengths (e.g., n.sub.1, n.sub.2, . . . ) using a plurality of native code rates provided by a plurality of LDPC encoders (or a plurality of LDPC codes). For example, a system with a 22 MIMO configuration or a 42 MIMO configuration can split or divide input data into data stream 1 and data stream 2 at the MAC layer or the PHY layer. The system can determine native code rates R.sub.1 (=k.sub.1/n.sub.1) and R.sub.2 (=k.sub.2/n.sub.2) for the data stream 1 and the data stream 2, respectively, based on conditions of channels (e.g., SNR gap/difference between the channels). The system can (1) divide the data stream 1 into a plurality of information blocks each with a size k.sub.1, and (2) divide the data stream 2 into a plurality of information blocks each with a size k.sub.2. In some implementations, the system can perform LDPC encoding on the data stream 1 using an LDPC code with a native code rate R.sub.1 (=k.sub.1/n.sub.1) to generate a first codeword with size n.sub.1 (as first encoded data). The system can also perform LDPC encoding on the data stream 2 using an LDPC code with a native code rate R.sub.2 (=k.sub.2/n.sub.2) to generate a second codeword with size n.sub.2 (as second encoded data). In some implementations, the system can execute or run two LDPC encoders (with code rates R.sub.1 and R.sub.2 respectively) on the data stream 1 and the data stream 2 in a time multiplexed manner. In some implementations, the system can execute or run two LDPC encoders (with code rates R.sub.1 and R.sub.2 respectively) on the data stream 1 and the data stream 2 in parallel. In some implementations, upon completion of the encoding of the data stream 1 and the data stream 2, the system can provide or send the first encoded data and the second encoded data to QAM (e.g., QAM with different values of M).
[0113] For example, a system can have a 22 MIMO configuration and determine to use a 1024-QAM and a code rate R.sub.1=5/6 for a data stream 1, and a 256-QAM and a code rate R.sub.2=2/3 for a data stream 2. In a first embodiment, the system can (1) perform LDPC coding with a native code rate R=5/6 (e.g., n=1944, k=1620) on the data stream 1 to generate first encoded data, (2) perform LDPC coding with a native code rate R=2/3 (e.g., n=1944, k=1296) on the data stream 2 to generate second encoded data, and/or (3) map the first encoded data and the second encoded data to the 1024-QAM and the 256-QAM, respectively.
[0114] In a second embodiment, the system can (1) determine coding parameters {acute over (k)}.sub.1 (=1620) and {acute over (k)}.sub.2 (=648) to encode the data stream 1 and the data stream 2, respectively (e.g., based on conditions of channels), (2) split or divide the data stream 1 into a plurality of first blocks each with a size {acute over (k)}.sub.1=k=1620, (3) split or divide the data stream 2 into a plurality of second blocks each with a size {acute over (k)}.sub.2=648, (4) add or append a frozen block with a size =k{acute over (k)}.sub.2=1620-648=972 bits, to each of the second blocks, (5) perform LDPC encoding with a native code rate R=k/n=1620/1944=5/6 on the data stream 1 and the (padded) data stream 2 to generate a first codeword and a second codeword, respectively, (6) discard the frozen blocks (each with 972 bits) from the systematic positions (e.g., portions except parity bits) to generate first encoded data and second encoded data, and/or (7) multiplex the first encoded data and the second encoded data to perform stream-wise QAM modulations (with different values of M).
[0115] In a third embodiment, the system can (1) perform LDPC coding with a native code rate R=5/6 on the data stream 1 to generate first encoded data and LDPC coding with a native code rate R=2/3 on the data stream 2 to generate second encoded data, in a time multiplexed manner, and/or (2) map the first encoded data and the second encoded data to the 1024-QAM and the 256-QAM, respectively.
[0116] Embodiments in the present disclosure have at least the following advantages and benefits. First, embodiments in the present disclosure can provide useful techniques for constructing/generating/configuring/designing/implementing multi-rate LDPC codes to perform unequal coding for different data streams transmitted using different channels. In this manner, in the presence of unequal conditions in different channels (e.g., a large SNR gap between channels as shown in
[0117] Second, embodiments in the present disclosure can provide useful techniques for mapping different modulation schemes (e.g., QAM with different values of M) to data streams corresponding to different channels having unequal conditions (e.g., a large SNR gap between channels as shown in
[0118] Referring to
[0119]
[0120] In some implementations, the encoding and modulation system 1200 can divide or split input data stream (not shown) into N.sub.s number of data streams. The division or split can be performed by a MAC layer or by a PHY layer. The N.sub.s number of scramblers 1202-1, . . . , 1202-N.sub.s can randomize respective N.sub.s number of data streams before encoding. The N.sub.s number of pre-FEC pads 1204-1, . . . , 1204-N.sub.s can add or pad one or bits to the respective N.sub.s number of data streams (or data output from the respective N.sub.s number of scramblers) to generate padded data to be provided to the respective N.sub.s number of LDPC encoders 1206-1, . . . , 1206-N.sub.s. The N.sub.s number of LDPC encoders 1208-1, . . . , 1208-N.sub.s can encode the respective input data (or the respective padded data output from the N.sub.s number of pre-FEC pads 1204-1, . . . , 1204-N.sub.s) using respective LDPC codes (which may have different code rates from each other). The N.sub.s number of post-FEC pads 1208-1, . . . , 1208-N.sub.s can add or pad one or bits to data output from the respective N.sub.s number of LDPC encoders 1206-1, . . . , 1206-N.sub.s to generate respective encoded data.
[0121] In some implementations, the encoding and modulation system 1200 can divide or split 1209 the encoded data as N.sub.s number of data streams into N.sub.ss spatial streams (e.g., N.sub.ss is an integer greater than 1). The number data streams (N.sub.s) may be the same as the number of spatial streams (N.sub.ss). The stream parser can randomly permutate or reorder the N.sub.ss spatial streams in order to spread the encoded bits over the N.sub.ss spatial streams. Each of the N.sub.ss number of QAMs 1220-1, . . . , 1220-N.sub.ss can determine a number of distinct symbols (or different modulation order) M and perform M-QAM (e.g., M=2, 4, 8, 16, 64, 256, . . . ) on the respective spatial stream to a modulated signal. In some implementations, each QAM (or the encoding and modulation system) can determine M based on an SNR gap or an EVM gap (see
[0122]
[0123]
[0124]
[0125]
[0126] In some implementations, a system can split or divide data into a plurality of different data streams (e.g., data stream 1, data stream 2 in
[0127]
[0128]
[0129]
[0130] Referring to
[0131]
[0132] In process step 1720, the system can perform LDPC encoding on the data stream 1 using an LDPC code with a native code rate R.sub.1 (=k.sub.1/n.sub.1) to generate a first codeword 1721 with size n.sub.1. The system can also perform LDPC encoding on the data stream 2 using an LDPC code with a native code rate R.sub.2 (=k.sub.2/n.sub.2) to generate a second codeword 1722 with size n.sub.2. The system can execute or run two LDPC encoders (with code rates R.sub.1 and R.sub.2 respectively) on the data stream 1 and the data stream 2 in a time multiplexed manner. In some implementations, the system can execute or run two LDPC encoders (with code rates R.sub.1 and R.sub.2 respectively) on the data stream 1 and the data stream 2 in parallel. In process step 1730, the system can perform shortening by (1) removing or discarding the plurality of first frozen blocks (e.g., each first frozen block with size (k.sub.1{acute over (k)}.sub.1)) the from the first codeword to generate first encoded data 1731 (with the code rate R.sub.1) corresponding to the data stream 1, and/or (2) removing or discarding the plurality of second frozen blocks (e.g., each second frozen block with the size (k.sub.2{acute over (k)}.sub.2)) from the second codeword to generate second encoded data 1732 (with the code rate R.sub.2) corresponding to the data stream 2. Upon discarding the first and second frozen blocks, the system can provide or send the first encoded data 1731 and the second encoded data 1732 to QAM (e.g., QAM with different values of M).
[0133]
[0134]
[0135]
[0136] In performing the simulations in
[0137] In some implementations, an apparatus may include a plurality of transmitters (e.g., antennas 121-1, . . . , 121-N.sub.T of communication system 105) and one or more processors. The one or more processors may identify a plurality of wireless channels corresponding to the plurality of transmitters for transmitting respective data streams. A wireless channel refers to a frequency range within which wireless devices can communicate, one or more frequency bands used by wireless networks, or one or more specific frequencies in the electromagnetic spectrum, or any pathway or frequency range through which wireless signals travel to facilitate communication between devices. The one or more processors may determine, based on the difference in signal quality between the plurality of wireless channels (e.g., SNR gap or EVM gap in
[0138] In some implementations, the difference in signal quality between the plurality of wireless channels may be a difference in signal-to-noise ratio (SNR) between the plurality of wireless channels (e.g., SNR gap or EVM gap in
[0139] In some implementations, the one or more processors may be configured to receive a data stream. The one or more processors may be configured to determine, by a MAC layer, (1) different traffic types of the data stream (e.g., type-1 data, type-2 data in
[0140]
[0141] At step 2102, the one or more processors may identify a plurality of wireless channels corresponding to a plurality of transmitters for transmitting respective data streams.
[0142] In some implementations, the one or more processors may receive a data stream (e.g., a single data stream). A medium access control (MAC) layer may determine (1) different traffic types of the data stream (e.g., video, text, audio, etc.), (2) different levels of priority of the data stream or (3) different levels of QoS of the data stream. Based at least on the different traffic types, the different levels of priority or the different levels of QoS, the MAC layer may split the data stream into the respective data streams (e.g., type-1 data 1611, type-2 data 1612).
[0143] In some implementations, respective sizes of information bits for encoding for the plurality of wireless channels may be selected based at least on the respective target code rates and the base code rate. For example, respective sizes of information bits (e.g., {acute over (k)}.sub..Math., {acute over (k)}.sub.2 in
[0144] At step 2104, the one or more processors may determine, based at least on a difference in signal quality between the plurality of wireless channels (e.g., SNR gap or EVM gap in
[0145] For flat channels, the information rate of a channel with QAM size M and code rate R is log.sub.2(M)*R (unit is bits/second/Hz). On every 1 bit change in information rate may approximately need to budget 3 dB of SNR. Therefore, given an SNR gap S and QAM sizes M1 and M2 (of a stronger channel 1 and a weaker channel 2, respectively), a target code rate R.sub.1 (of the channel 1) and a target code rate R.sub.2 (of the channel 2) can be found using the following equation:
[0146] where Info_rate.sub.1 and Info_rate.sub.2 are the information rate of the channel 1 and the information rate of the channel 2, respectively. In other words, finding R.sub.1 and R.sub.2 given an SNR gap can be a two-dimensional search using Equation 29.
[0147] At step 2106, the one or more processors may encode, by an LDPC encoder using the LDPC code with the base code rate, the respective data streams to generate respective encoded data streams at the respective target code rates. In some implementations, in encoding the respective data streams, a base size of information bits corresponding to the base code rate (e.g., k=1296, R=2/3 in Table 1) may be determined. From each respective data stream, a second set of information bits (e.g., information bits with size ({acute over (k)}.sub.1+) in data block 1631) may be generated to include a first set of information bits (e.g., information bits with size {acute over (k)}.sub.1 in data block 1621) corresponding to the selected respective size of information bits and one or more bits (e.g., =(k{acute over (k)}.sub..Math.))) to increase a size of the second set of information to correspond to the base size of information bits (e.g., k in data block 1631). The LDPC encoder may encode, using the base code rate, the second set of information bits (e.g., information bits with size ({acute over (k)}.sub.1+) in data block 1631) to generate parity data (e.g., (nk) in data block 1641). The LDPC encoder may generate the respective encoded data stream by concatenating the second set of information bits (e.g., information bits with size ({acute over (k)}.sub.1+) in data block 1641) and the parity data (e.g., (nk) in data block 1641).
[0148] In some implementations, in encoding the respective data streams, the LDPC encoder may encode the respective data streams serially or in parallel. In some implementations, the respective encoded data streams may be multiplexed to perform a stream-wise modulation. For example, referring to
[0149] At step 2108, the plurality of transmitters (e.g., transmission antennas 122-1, 122-2, . . . , 122-N.sub.T) may transmit the respective encoded data streams (e.g., first encoded data 1651, second encoded data 1652) via respective wireless channels.
[0150] References to or may be construed as inclusive so that any terms described using or may indicate any of a single, more than one, and all of the described terms. References to at least one of a conjunctive list of terms may be construed as an inclusive OR to indicate any of a single, more than one, and all of the described terms. For example, a reference to at least one of A and B can include only A, only B, as well as both A and B. Such references used in conjunction with comprising or other open terminology can include additional items.
[0151] It should be noted that certain passages of this disclosure can reference terms such as first and second in connection with subsets of transmit spatial streams, sounding frames, response, and devices, for purposes of identifying or differentiating one from another or from others. These terms are not intended to merely relate entities (e.g., a first device and a second device) temporally or according to a sequence, although in some cases, these entities can include such a relationship. Nor do these terms limit the number of possible entities (e.g., STAs, APs, beamformers and/or beamformees) that can operate within a system or environment. It should be understood that the systems described above can provide multiple ones of any or each of those components and these components can be provided on either a standalone machine or, In some implementations, on multiple machines in a distributed system. Further still, bit field positions can be changed and multibit words can be used. In addition, the systems and methods described above can be provided as one or more computer-readable programs or executable instructions embodied on or in one or more articles of manufacture, e.g., a floppy disk, a hard disk, a CD-ROM, a flash memory card, a PROM, a RAM, a ROM, or a magnetic tape. The programs can be implemented in any programming language, such as LISP, PERL, C, C++, C#, or in any byte code language such as JAVA. The software programs or executable instructions can be stored on or in one or more articles of manufacture as object code.
[0152] While the foregoing written description of the methods and systems enables one of ordinary skill to make and use embodiments thereof, those of ordinary skill will understand and appreciate the existence of variations, combinations, and equivalents of the specific embodiment, method, and examples herein. The present methods and systems should therefore not be limited by the above described embodiments, methods, and examples, but by all embodiments and methods within the scope and spirit of the disclosure.