Lattice-based coding with information hiding

Lattice-based coding with information hiding techniques address inefficiencies in video encoding by using Dn lattices and coset indices to compress and decode video data vectors, reducing data volume and computational needs.

WO2025151404A1PCT designated stage expired Publication Date: 2025-07-17GOOGLE LLC
View PDF 0 Cites 0 Cited by

Patent Information

Application Number
PCT/US2025/010546
Authority / Receiving Office
WO · WO
Patent Type
Applications
Current Assignee / Owner
Priority Date
2024-01-09
Filing Date
2025-01-07
Publication Date
2025-07-17

AI Technical Summary

Technical Problem

Existing video encoding techniques are inefficient in reducing data volume and require significant computing resources for processing, transmission, and storage of digital video streams.

Method used

Utilizing lattice-based coding with information hiding techniques, specifically employing Dn lattices and coset indices, to encode and decode video data vectors, allowing for efficient data representation and compression.

Benefits of technology

Reduces data volume and computational requirements by optimizing data encoding and decoding processes, enhancing efficiency in video stream processing and storage.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure US2025010546_17072025_PF_FP_ABST
    Figure US2025010546_17072025_PF_FP_ABST
Patent Text Reader

Abstract

Encoding a data vector includes quantizing the data vector on a union of Dn lattices to obtain a quantized data vector on a Dn lattice and a coset index associated with the quantized data vector; encoding, in a compressed bitstream, the quantized data vector; and encoding, in the compressed bitstream, the coset index. Decoding the data vector includes decoding, from a compressed bitstream, a quantized data vector, wherein the quantized data vector is quantized on a Dn lattice; decoding, from the compressed bitstream, a coset index; and adding a coset offset vector corresponding to the coset index to the quantized data vector to obtain a reconstruction of the data vector.
Need to check novelty before this filing date? Find Prior Art

Description

Atty. Doc. No. GOGL-2238-A-WO PATENT LATTICE-BASED CODING WITH INFORMATION HIDING BACKGROUND

[0001] Digital video streams may represent video using a sequence of frames or still images. Digital video can be used for various applications including, for example, video conferencing, high-definition video entertainment, video advertisements, or sharing of user- generated videos. A digital video stream can contain a large amount of data and consume a significant amount of computing or communication resources of a computing device for processing, transmission, or storage of the video data. Various approaches have been proposed to reduce the amount of data in video streams, including encoding or decoding techniques. SUMMARY

[0002] A first aspect is a method for encoding a data vector. The method includes quantizing the data vector on a union of Dn lattices to obtain a quantized data vector on a Dn lattice and a coset index associated with the quantized data vector; encoding, in a compressed bitstream, the quantized data vector; and encoding, in the compressed bitstream, the coset index.

[0003] A second aspect is a method for decoding a data vector. The method includes decoding, a quantized data vector, where the quantized data vector is quantized on a Dn lattice; decoding a coset index; and adding a coset offset vector corresponding to the coset index to the quantized data vector to obtain a reconstruction of the data vector.

[0004] A third aspect is a method that includes quantizing a set of eight transform coefficients using an E8 lattice to obtain a quantized vector on a D8 lattice and a binary coset index; encoding, in a compressed bitstream, a subset of the quantized vector, where the subset consists of all but a first coefficient a0 of the quantized vector; modifying the first coefficient a0 to produce a modified coefficient a*0, where the a modified coefficient a*0 is calculated as ⌊a0 / 2⌋×2+c; and encoding the modified coefficient in the compressed bitstream.

[0005] A fourth aspect is a method for decoding an original vector. The method includes decoding a vector of values {a0∗,a1, …, a7} derived from an E8 lattice quantization; calculating an original coefficient a0 as 2×⌊a0∗ / 2⌋+(a1+a2+…+a7) mod 2; obtaining a binary coset index c as (a0∗mod 2); and reconstructing the original vector by adding a coset offsetvector z(c) to the vector of values {a0, a1, …, a7}.

[0006] A fifth aspect is a method that includes quantizing a set of eight coefficients {x0 ,x1,…,x7} on an E8 lattice to obtain a vector {a0,a1,…,a7} on a D8 lattice and a binary coset index c; encoding, in a compressed bitstream, a subset {a1,a2,…, a7} of the vector; and encoding, in the compressed bitstream, a modified coefficient a0∗ instead of a0, where a0∗ is calculated as (⌊a0 / 2⌋×2+c) if ⌊a0 / 2⌋≥0 and as (⌊a0 / 2⌋×2+1−c) if ⌊a0 / 2⌋<0.

[0007] A sixth aspect is a method that includes decoding a vector of values {a0∗, a1 ,…,a7} derived from an E8lattice quantization; calculating an original coefficient a0 as 2×⌊a0∗ / 2⌋+(a1+a2+…+a7) mod 2; obtaining a binary coset index c as (a0∗ mod 2) if ⌊a0 / 2⌋≥0 or as (1−a0∗ mod 2) if ⌊a0 / 2⌋<0; and reconstructing an output vector by adding a coset offset vector z(c) based on the binary coset index c to {a0, a1,…, a7}.

[0008] A seventh aspect is a method that includes quantizing a set of n coefficients of a vector x={x0, x1,…, xn−1} into a vector a={a0, a1,…, an−1}; obtaining parities p={a0 mod 2, a1 mod 2,…, an−1mod 2} as members of a binary (n, k) systematic error correction / detection code; encoding, in a compressed bitstream, k coefficients {an−k,…,an−1}; and encoding, in the compressed bitstream, n−k coefficients {a0∗, a1∗,…, an−k−1∗} with reduced precision as ai∗ =⌊ai / 2⌋ for i=0,1,…,n−k−1.

[0009] An eighth aspect is a method that includes receiving an encoded vector {a0∗,a1∗ ,…,an−k−1∗,an−k,…,an−1}; decoding k coefficients {an−k,…,an−1} directly from the encoded vector; deriving k parity bits for k coefficients as {pn−k,…,pn−1}={an−kmod 2,…, an−1mod 2}; encoding the k parity bits into n channel bits using a binary (n, k) systematic error correction code to obtain {p0, p1,…,pn−1}; generating an expanded set {a0, a1,…, an−k−1} using ai=2⋅ai∗ +pi for i=0,1,…,n−k−1; and reconstructing an output vector y={a0, a1,…, an−1}.

[0010] These and other aspects of the present disclosure are disclosed in the following detailed description of the embodiments, the appended claims and the accompanying figures. BRIEF DESCRIPTION OF THE DRAWINGS

[0011] The description herein makes reference to the accompanying drawings described below, wherein like reference numerals refer to like parts throughout the several views.

[0012] FIG. 1 is a schematic of a video encoding and decoding system.

[0013] FIG. 2 is a block diagram of an example of a computing device that can implement a transmitting station or a receiving station.

[0014] FIG. 3 is a diagram of a typical video stream to be encoded and subsequentlydecoded.

[0015] FIG. 4 is a block diagram of an encoder according to implementations of this disclosure.

[0016] FIG. 5 is a block diagram of a decoder according to implementations of this disclosure.

[0017] FIG. 6 illustrates a table of known lattices.

[0018] FIG. 7 is a flowchart of a technique for encoding a vector using a union of Dnlattice cosets.

[0019] FIG. 8 is a flowchart of a technique for decoding a vector using a union of Dn lattice cosets.

[0020] FIGS. 9A and 9B describe quantizing a vector X on a union lattice Λ.

[0021] FIG. 10A is a flowchart of a technique for encoding a vector of values with multi- bit parity hiding.

[0022] FIG. 10B is a flowchart of a technique for decoding a vector of values with multi- bit parity hiding.

[0023] FIG. 11 is a block diagram that illustrates the technique described with respect to FIG. 10A.

[0024] FIG. 12 is a block diagram that illustrates the technique described with respect to FIG. 10B. DETAILED DESCRIPTION

[0025] As mentioned above, compression schemes related to coding video streams may include breaking images into blocks and generating a digital video output bitstream using one or more techniques to limit the information included in the output. A decoder can receive the encoded bitstream and decode it to reconstruct the original image blocks using the limited information. Encoding a video stream, or a portion thereof, such as a frame or a block, can include using temporal or spatial similarities in the video stream to improve coding efficiency. For example, a current block of a video stream may be encoded based on identifying a difference (residual) between the previously coded pixel values and those in the current block. In this way, only the residual and parameters used to generate the residual need be added to the encoded bitstream. The residual may be encoded using a lossy quantization step.

[0026] As further described below, a residual block in the pixel domain can be transformed into the frequency domain to produce a transform block of coefficients. Thesetransform coefficients are then quantized to create a quantized transform block. The quantized coefficients can be entropy encoded and added to an encoded bitstream. A decoder can receive the encoded bitstream, entropy decode the quantized transform coefficients to reconstruct the original block.

[0027] A quantized transform block is a two-dimensional structure that is linearized into a one dimensional vector, denoted q herein, based on a scan order. The quantized transform block may have a size of P×Q, wherein P*Q=N. Thus, the vector q has a size of N×1 (i.e., q(N×1)). At the decoder, a corresponding scan order is used to read the vector q of coefficients from the encoded bitstream and covert it back into the two-dimensional quantized transform block.

[0028] In an encoded video bitstream, many of the bits are used for one of the two purposes: either content prediction (e.g., inter mode / motion vector coding, intra prediction mode coding, etc.) or residual coding (e.g., coding of the quantized transform coefficients). Encoders may use techniques to decrease the number of bits spent on coefficient coding. One such technique may be referred to as information hiding or using parity to infer some aspect (e.g., a value or a sign) related to at least one of the quantized transform coefficients.

[0029] To illustrate, a codec (i.e., an encoder and a decoder) may impose an evenness constraint on the sum of quantized transform coefficients within a block. Symbolically, theevenness constraint can be stated as:^^ = ^^^^ ^^^^^^^ . This constraint results in arate advantage when encoding the vector q. Equation (1) illustrates the operations of thisconstraint. Equation (1) states that if the sum of coefficients from the second to the last (^^ to^^^^) is even, then the first coefficient (^^) must be even. Conversely, if the sum of ^^ to^^^^ is odd, then ^^ must be odd. It is noted that while the first coefficient, ^^, is used forillustrative purposes, the description herein can be applied to any of the coefficients ^^, where^ = 0, ... , ^ − 1.

[0030] The constraint enables encoding only half of the potential values for ^^, effectively compressing its range and reducing the number of bits required for its representation. The decoder can in turn deduce the value of ^^based on the sum of the other coefficients (^^to ^^^^). Instead of encoding ^^, ^^#given by equation (2) can be encoded instead. Equation (2) implements what may be referred to as “range compression” whereby the range of possible values that a data element can assume is reduced, thereby enabling moreefficient coding by using fewer bits to represent the data.

[0031] Encoding ^^∗in place of ^^can be expected to save, on average, approximately one bit during the encoding of the vector q. This is because each of the quantized transform coefficients ^^is typically assumed to be Laplacian or Gaussian for which a range compression of two will result in an average rate reduction by one bit. So that the constraint is always satisfied, in the case that the coefficients ^^to ^^^^sum to an odd number, the encoder will adjust (e.g., by +1 or -1) at least one of these coefficients so that the sum becomes even. As such, the one-bit reduction may be offset by an increase in distortion for vectors of quantized transform coefficients that sum to an odd value.

[0032] Generally, sign or parity hiding can be thought of, essentially, as techniques for high-resolution vector quantization: a set of samples (e.g., transform coefficients) is quantized on a codebook (e.g., a multi-dimensional codebook) constrained in a certain fashion. The constraints can be determined by the structure of the codebook itself. By doing so, it is possible to either save bits, reduce distortion, or both, as compared to any other form scalar quantization.

[0033] The information hiding technique described above operates on quantized transform coefficient and is usable for hiding one bit of information in one coefficient. Extensions to such technique are described herein.

[0034] Lattices can be used in data compression, such as for data quantization (e.g., the process of mapping a large set of input values to a smaller set). Lattices are arrangements of points in multidimensional space that are evenly spaced in a regular pattern, which is usable in representing signals or data points within that space effectively. The effectiveness of particular lattices can be measured based on the mean squared error (MSE) associated with the lattices. FIG. 6 illustrates examples of lattices and their corresponding MSEs.

[0035] Described herein are coding techniques using lattices. More specifically, coding schemes that use optimal lattices in 8 dimensions (e.g., the E8lattice) and 16 dimensions (e.g., the Λ16 or Lambda 16 lattice) are described. Lattices provide a structured way to represent continuous information in a discrete manner with minimal error. More generally, parity hiding using a union of Dnlattice cosets (such as lattices of dimensions 4, 8, 16, or any2d dimension, where " > 1) are described. Additionally, techniques for multi-bit parity hidingusing error correction codes (ECCs) are described.

[0036] Further details of techniques for lattice-based coding with information hiding are described herein with initial reference to a system in which they can be implemented. FIG. 1 is a schematic of a video encoding and decoding system 100. A transmitting station 102 can be, for example, a computer having an internal configuration of hardware such as that described in FIG. 2. However, other implementations of the transmitting station 102 are possible. For example, the processing of the transmitting station 102 can be distributed among multiple devices.

[0037] A network 104 can connect the transmitting station 102 and a receiving station 106 for encoding and decoding of the video stream. Specifically, the video stream can be encoded in the transmitting station 102, and the encoded video stream can be decoded in the receiving station 106. The network 104 can be, for example, the Internet. The network 104 can also be a local area network (LAN), wide area network (WAN), virtual private network (VPN), cellular telephone network, or any other means of transferring the video stream from the transmitting station 102 to, in this example, the receiving station 106.

[0038] The receiving station 106, in one example, can be a computer having an internal configuration of hardware such as that described in FIG. 2. However, other suitable implementations of the receiving station 106 are possible. For example, the processing of the receiving station 106 can be distributed among multiple devices.

[0039] Other implementations of the video encoding and decoding system 100 are possible. For example, an implementation can omit the network 104. In another implementation, a video stream can be encoded and then stored for transmission at a later time to the receiving station 106 or any other device having memory. In one implementation, the receiving station 106 receives (e.g., via the network 104, a computer bus, and / or some communication pathway) the encoded video stream and stores the video stream for later decoding. In an example implementation, a real-time transport protocol (RTP) is used for transmission of the encoded video over the network 104. In another implementation, a transport protocol other than RTP may be used (e.g., a Hypertext Transfer Protocol-based (HTTP-based) video streaming protocol).

[0040] When used in a video conferencing system, for example, the transmitting station 102 and / or the receiving station 106 may include the ability to both encode and decode a video stream as described below. For example, the receiving station 106 could be a video conference participant who receives an encoded video bitstream from a video conference server (e.g., the transmitting station 102) to decode and view and further encodes and transmits his or her own video bitstream to the video conference server for decoding andviewing by other participants.

[0041] FIG. 2 is a block diagram of an example of a computing device 200 that can implement a transmitting station or a receiving station. For example, the computing device 200 can implement one or both of the transmitting station 102 and the receiving station 106 of FIG. 1. The computing device 200 can be in the form of a computing system including multiple computing devices, or in the form of one computing device, for example, a mobile phone, a tablet computer, a laptop computer, a notebook computer, a desktop computer, and the like.

[0042] A processor 202 in the computing device 200 can be a conventional central processing unit. Alternatively, the processor 202 can be another type of device, or multiple devices, capable of manipulating or processing information now existing or hereafter developed. For example, although the disclosed implementations can be practiced with one processor as shown (e.g., the processor 202), advantages in speed and efficiency can be achieved by using more than one processor.

[0043] A memory 204 in computing device 200 can be a read only memory (ROM) device or a random access memory (RAM) device in an implementation. However, other suitable types of storage device can be used as the memory 204. The memory 204 can include code and data 206 that is accessed by the processor 202 using a bus 212. The memory 204 can further include an operating system 208 and application programs 210, the application programs 210 including at least one program that permits the processor 202 to perform the techniques described herein. For example, the application programs 210 can include applications 1 through N, which further include a video coding application that performs the techniques described herein. The computing device 200 can also include a secondary storage 214, which can, for example, be a memory card used with a mobile computing device. Because the video communication sessions may contain a significant amount of information, they can be stored in whole or in part in the secondary storage 214 and loaded into the memory 204 as needed for processing.

[0044] The computing device 200 can also include one or more output devices, such as a display 218. The display 218 may be, in one example, a touch sensitive display that combines a display with a touch sensitive element that is operable to sense touch inputs. The display 218 can be coupled to the processor 202 via the bus 212. Other output devices that permit a user to program or otherwise use the computing device 200 can be provided in addition to or as an alternative to the display 218. When the output device is or includes a display, the display can be implemented in various ways, including by a liquid crystal display (LCD), acathode-ray tube (CRT) display, or a light emitting diode (LED) display, such as an organic LED (OLED) display.

[0045] The computing device 200 can also include or be in communication with an image-sensing device 220, for example, a camera, or any other image-sensing device 220 now existing or hereafter developed that can sense an image such as the image of a user operating the computing device 200. The image-sensing device 220 can be positioned such that it is directed toward the user operating the computing device 200. In an example, the position and optical axis of the image-sensing device 220 can be configured such that the field of vision includes an area that is directly adjacent to the display 218 and from which the display 218 is visible.

[0046] The computing device 200 can also include or be in communication with a sound- sensing device 222, for example, a microphone, or any other sound-sensing device now existing or hereafter developed that can sense sounds near the computing device 200. The sound-sensing device 222 can be positioned such that it is directed toward the user operating the computing device 200 and can be configured to receive sounds, for example, speech or other utterances, made by the user while the user operates the computing device 200.

[0047] Although FIG. 2 depicts the processor 202 and the memory 204 of the computing device 200 as being integrated into one unit, other configurations can be utilized. The operations of the processor 202 can be distributed across multiple machines (wherein individual machines can have one or more processors) that can be coupled directly or across a local area or other network. The memory 204 can be distributed across multiple machines such as a network-based memory or memory in multiple machines performing the operations of the computing device 200. Although depicted here as one bus, the bus 212 of the computing device 200 can be composed of multiple buses. Further, the secondary storage 214 can be directly coupled to the other components of the computing device 200 or can be accessed via a network and can comprise an integrated unit such as a memory card or multiple units such as multiple memory cards. The computing device 200 can thus be implemented in a wide variety of configurations.

[0048] FIG. 3 is a diagram of an example of a video stream 300 to be encoded and subsequently decoded. The video stream 300 includes a video sequence 302. At the next level, the video sequence 302 includes a number of adjacent frames 304. While three frames are depicted as the adjacent frames 304, the video sequence 302 can include any number of adjacent frames 304. The adjacent frames 304 can then be further subdivided into individual frames, for example, a frame 306. At the next level, the frame 306 can be divided into a seriesof planes or segments 308. The segments 308 can be subsets of frames that permit parallel processing, for example. The segments 308 can also be subsets of frames that can separate the video data into separate colors. For example, a frame 306 of color video data can include a luminance plane and two chrominance planes. The segments 308 may be sampled at different resolutions.

[0049] Whether or not the frame 306 is divided into segments 308, the frame 306 may be further subdivided into blocks 310, which can contain data corresponding to, for example, 16x16 pixels in the frame 306. The blocks 310 can also be arranged to include data from one or more segments 308 of pixel data. The blocks 310 can also be of any other suitable size such as 4x4 pixels, 8x8 pixels, 16x8 pixels, 8x16 pixels, 16x16 pixels, or larger. Unless otherwise noted, the terms block and macroblock are used interchangeably herein.

[0050] FIG. 4 is a block diagram of an encoder 400 according to implementations of this disclosure. The encoder 400 can be implemented, as described above, in the transmitting station 102, such as by providing a computer software program stored in memory, for example, the memory 204. The computer software program can include machine instructions that, when executed by a processor such as the processor 202, cause the transmitting station 102 to encode video data in the manner described in FIG. 4. The encoder 400 can also be implemented as specialized hardware included in, for example, the transmitting station 102. In one particularly desirable implementation, the encoder 400 is a hardware encoder.

[0051] The encoder 400 has the following stages to perform the various functions in a forward path (shown by the solid connection lines) to produce an encoded or compressed bitstream 420 using the video stream 300 as input: an intra / inter prediction stage 402, a transform stage 404, a quantization stage 406, and an entropy encoding stage 408. The encoder 400 may also include a reconstruction path (shown by the dotted connection lines) to reconstruct a frame for encoding of future blocks. In FIG. 4, the encoder 400 has the following stages to perform the various functions in the reconstruction path: a dequantization stage 410, an inverse transform stage 412, a reconstruction stage 414, and a loop filtering stage 416. Other structural variations of the encoder 400 can be used to encode the video stream 300.

[0052] When the video stream 300 is presented for encoding, respective adjacent frames 304, such as the frame 306, can be processed in units of blocks. At the intra / inter prediction stage 402, respective blocks can be encoded using intra-frame prediction (also called intra- prediction) or inter-frame prediction (also called inter-prediction). In any case, a prediction block can be formed. In the case of intra-prediction, a prediction block may be formed fromsamples in the current frame that have been previously encoded and reconstructed. In the case of inter-prediction, a prediction block may be formed from samples in one or more previously constructed reference frames.

[0053] Next, the prediction block can be subtracted from the current block at the intra / inter prediction stage 402 to produce a residual block (also called a residual). The transform stage 404 transforms the residual into transform coefficients in, for example, the frequency domain using block-based transforms. The quantization stage 406 converts the transform coefficients into discrete quantum values, which are referred to as quantized transform coefficients, using a quantizer value or a quantization level. For example, the transform coefficients may be divided by the quantizer value and truncated.

[0054] The quantized transform coefficients are then entropy encoded by the entropy encoding stage 408. The entropy-encoded coefficients, together with other information used to decode the block (which may include, for example, syntax elements such as used to indicate the type of prediction used, transform type, motion vectors, a quantizer value, or the like), are then output to the compressed bitstream 420. The compressed bitstream 420 can be formatted using various techniques, such as variable length coding (VLC) or arithmetic coding. The compressed bitstream 420 can also be referred to as an encoded video stream or encoded video bitstream, and the terms will be used interchangeably herein.

[0055] The reconstruction path (shown by the dotted connection lines) can be used to ensure that the encoder 400 and a decoder 500 (described below with respect to FIG. 5) use the same reference frames to decode the compressed bitstream 420. The reconstruction path performs functions that are similar to functions that take place during the decoding process (described below with respect to FIG. 5), including dequantizing the quantized transform coefficients at the dequantization stage 410 and inverse transforming the dequantized transform coefficients at the inverse transform stage 412 to produce a derivative residual block (also called a derivative residual). At the reconstruction stage 414, the prediction block that was predicted at the intra / inter prediction stage 402 can be added to the derivative residual to create a reconstructed block. The loop filtering stage 416 can be applied to the reconstructed block to reduce distortion such as blocking artifacts.

[0056] Other variations of the encoder 400 can be used to encode the compressed bitstream 420. In some implementations, a non-transform based encoder can quantize the residual signal directly without the transform stage 404 for certain blocks or frames. In some implementations, an encoder can have the quantization stage 406 and the dequantization stage 410 combined in a common stage.

[0057] FIG. 5 is a block diagram of a decoder 500 according to implementations of this disclosure. The decoder 500 can be implemented in the receiving station 106, for example, by providing a computer software program stored in the memory 204. The computer software program can include machine instructions that, when executed by a processor such as the processor 202, cause the receiving station 106 to decode video data in the manner described in FIG. 5. The decoder 500 can also be implemented in hardware included in, for example, the transmitting station 102 or the receiving station 106.

[0058] The decoder 500, similar to the reconstruction path of the encoder 400 discussed above, includes in one example the following stages to perform various functions to produce an output video stream 516 from the compressed bitstream 420: an entropy decoding stage 502, a dequantization stage 504, an inverse transform stage 506, an intra / inter prediction stage 508, a reconstruction stage 510, a loop filtering stage 512, and a deblocking filtering stage 514. Other structural variations of the decoder 500 can be used to decode the compressed bitstream 420.

[0059] When the compressed bitstream 420 is presented for decoding, the data elements within the compressed bitstream 420 can be decoded by the entropy decoding stage 502 to produce a set of quantized transform coefficients. The dequantization stage 504 dequantizes the quantized transform coefficients (e.g., by multiplying the quantized transform coefficients by the quantizer value), and the inverse transform stage 506 inverse transforms the dequantized transform coefficients to produce a derivative residual that can be identical to that created by the inverse transform stage 412 in the encoder 400. Using header information decoded from the compressed bitstream 420, the decoder 500 can use the intra / inter prediction stage 508 to create the same prediction block as was created in the encoder 400 (e.g., at the intra / inter prediction stage 402).

[0060] At the reconstruction stage 510, the prediction block can be added to the derivative residual to create a reconstructed block. The loop filtering stage 512 can be applied to the reconstructed block to reduce blocking artifacts. Other filtering can be applied to the reconstructed block. In this example, the deblocking filtering stage 514 is applied to the reconstructed block to reduce blocking distortion, and the result is output as the output video stream 516. The output video stream 516 can also be referred to as a decoded video stream, and the terms will be used interchangeably herein. Other variations of the decoder 500 can be used to decode the compressed bitstream 420. In some implementations, the decoder 500 can produce the output video stream 516 without the deblocking filtering stage 514.

[0061] FIG. 6 illustrates a table 600 of known lattices. Many lattices are known and FIG.6 illustrates only a subset thereof. The table 600 illustrates examples of lattices in different dimensions N=1, 4, 6, 8, and 16. Each row of the table 600 corresponds to a known lattice. A column 602 indicates a lattice dimension, column 604 indicates a name of the lattice or quantizer, and a column 606 indicates an MSE associated with the lattice.

[0062] Lattices provide structured arrangements of points in multi-dimensional space that enable efficient data quantization. The effectiveness of a lattice for quantization can be measured by its mean squared error (MSE), which represents the average distortion introduced when mapping data points to lattice points. Lower MSE values indicate better quantization performance. The table in FIG. 6 shows that certain lattices, particularly in dimensions that are powers of 2 (e.g., E8 and Λ16), achieve notably lower MSE compared to simple cubic lattices.

[0063] The MSE, in the context of lattices and quantization, refers to the average of the squares of the differences between original data points and the quantized points represented by the lattice points. The MSE is a measure of the power of the error between the data and its quantized representation. Lower MSE means better representation of the original data and, consequently, higher fidelity upon decompression.

[0064] As such, when using a cubic lattice (such as the Z lattice of row 608), an MSE of 0.083333 is realized, which is a factor 1 by 12 that is common in scalar quantizers. On the other hand, when a point is quantized using the 4-dimensional D4 lattice (e.g., the lattice of row 610), a lower MSE (e.g., 0.076603) can be realized. The D4lattice is from a family of lattices called Dnlattices, where n is the dimension of the lattice.

[0065] Other lattices of interest herein include the E8 lattice and the Λ16 (i.e., Lambda 16) lattice, exemplified respectively in rows 612 and 614. The E8 lattice is particularly notable for its optimality within eight-dimensional space, as evidenced by its lower mean squared error (MSE) of 0.071682, which is superior to that of other lattices (e.g., the D8 and A8 lattices) within the 8-dimensional space. Similarly, the Λ16 lattice within a 16-dimensional space, exhibits an even more reduced MSE of 0.068229. As further described herein, the Dnlattices will be built upon with a focus on the E8 and Λ16 lattices. That is, coding schemes that use optimal lattices in 8 dimensions and 16 dimensions are described.

[0066] The Dnlattice represents an efficient and simple encoding method for integer coordinates in n-dimensional spaces, with a focus on ensuring that the sum of these coordinates is even. A simple algorithm employed for encoding, in a distortion-only sense, can be as follows. Given a vector v of value, two functions f(v) and g(v) are applied to the vector v: f(v) = round(v) and g(v) = round1(v). The function round1(v) mirrors round(v), butdiffers by flipping the element with the largest rounding error. The selection between f(v) and g(v) is then based on which function yields an even sum.

[0067] To illustrate, consider a set of coefficients v in n-dimensions before quantization, represented as floating point numbers. Quantization involves rounding each element in the vector v to the nearest integer, forming the vector f(v). Concurrently, a second vector g(v) is generated, where the element in v with the greatest deviation from its integer representation is identified and flipped. This produces two vectors, f(v) and g(v), differing by only one element. The final step in the encoding process involves selecting either f(v) and g(v), based on which vector's elements sum to an even number. This technique ensures that the output aligns with the Dnlattice criteria, effectively halving the potential transmission points and ensuring each transmitted point's coefficients sum to an even number.

[0068] To give a concrete example, assume the vector of transform coefficients is v=(3.2, 1.5, −0.3, 4.7). Thus, f(v)= round(3.2, 1.5, −0.3, 4.7)=(3, 2, 0, 5); and g(v)=round1(3.2, 1.5, −0.3, 4.7)=(3, 1, 0, 5). The sum of f(v) is 10 (i.e., 3+2+0+5), which is even; and the sum of g(v) is 9 (i.e., 3+1+0+5), which is odd. Since the sum of f(v) is even, f(v) is then chosen as the final encoded vector of the vector v.

[0069] The E8lattice represents an efficient lattice in 8-dimensional space. The E8latticecan be constructed as the union of two cosets of D lattices, specifically D ∪{D +(^ ^8 8 8', ',…,^')}. This construction is optimal in 8-dimensional space, achieving an MSE of 0.071682. Thefirst coset is the standard D8lattice of integer points with even sum while the second coset shifts these points by half (i.e., 1 / 2) values. The union of these cosets results in a lattice structure that provides more efficient quantization, as evidenced by its lower MSE compared to simpler lattices. The concept of a "coset" in this context refers to a subset of a lattice that is formed by shifting all points of the original lattice by a fixed vector, known as the coset offset. In the case of the E8 lattice, one of the cosets is the standard D8 lattice, and the other is a shifted version of D8, where each point is offset by (^',^',…,^').

[0070] An encoding algorithm for points in the E8 lattice builds upon the encoding algorithm described above with respect to the D8 lattice. To encode a vector v into the E8 lattice, the following steps are taken: 1) Encode the vector v into the D8lattice as described above; 2) Create a shifted vector v-z,and encode this shifted vector into the D8lattice, as described above; and 3) Compare the two encoded vectors to choose the one that offers better performance, such as in terms of distortion. That is, a point is encoded onthe D8 lattice and a binary coset index may also be encoded. To decode the vector v, the lattice point is decoded and then coset offset z (i.e., either 0 or (^',^',…,^')) is then added to the decoded lattice point.

[0071] To give a concrete example, assume the vector of transform coefficients is v=(1.2, 3.4, 2.6, 4.1, 5.7, 6.3, 7.8, 8.5) in 8-dimensional space. Encoding the vector v proceeds as follows:

[0072] Encoding into D8 (f(v) and g(v)): f(v) = (1, 3, 3, 4, 6, 6, 8, 9), which has a sum of 40 (i.e., even); and g(v) = (2, 3, 3, 4, 6, 6, 8, 9), which has a sum of 41 (i.e., odd). Thus, f(v) is selected in this step.

[0073] Creating and Encoding (v – z) into D8: (v – z) = (0.7, 2.9, 2.1, 3.6, 5.2, 5.8, 7.3, 8.0). f(v-z) = (1, 3, 2, 4, 5, 6, 7, 8), which has a sum of 36 (e.g., even). The vector g(v-z) is derived by first identifying the element in v with the largest rounding error and then flipping it. The largest rounding error is at the 4thelement (e.g., 3.6), which is rounded to 4. Flipping this element (increasing it by 1 as the original value was closer to the lower integer), results in g(v-z) = (1, 3, 2, 4, 5, 6, 7, 9). The next step is to compare the distortion of the encoded vectors from the D8lattice for both v and (v-z) and choosing the encoding (either from v and (v-z)) that has the lower distortion. The chosen encoding is transmitted (e.g., in a compressed bitstream) along with the binary coset index indicating whether the original D8lattice or the shifted D8lattice was used.

[0074] The Λ16 lattice represents an efficient structure in 16-dimensional space. The Λ16 lattice is formed by the union of 32 cosets of the D16 lattice. The uniqueness of the Λ16 lattice lies in its coset offsets, which are derived from a 16-dimensional Hadamard matrix. In this process, the -1s in the Hadamard matrix are replaced with 0s to obtain binary vectors, and then the complements of these binary vectors are taken. Each resulting vector is subsequently divided by 2 to determine the coset offset vectors. Each resulting vector is subsequently divided by 2 to determine the coset offset vectors. This construction achieves an MSE of 0.068229, making it the most efficient known lattice in 16 dimensions for quantization purposes.

[0075] An algorithm for encoding in the distortion-only sense in the Λ16lattice involves the following steps. For a given vector v, compute respective (v-zi) vectors for all 32 coset offset vectors zi for i=0, . . ., 31. This process yields 32 different points in the D16 lattice, each corresponding to a different coset. Among the 32 encoded points, the one that offers the best fit or the lowest distortion is selected. The selected point on the D16lattice and the 32-arycoset index are transmitted, such as in a compressed bitstream, to a decoder. At the decoder, the received D16 lattice point and the coset offset index are decoded from the compressed bitstream. The coset zi corresponding coset offset index receive in the bitstream is added to the lattice point to reconstruct the original vector v.

[0076] FIG. 7 is a flowchart of a technique 700 for encoding a data vector X using a union of Dn lattice cosets. The technique 700 can be implemented, for example, as a software program that may be executed by computing devices such as transmitting station 102 or receiving station 106. The software program can include machine-readable instructions that may be stored in a memory such as the memory 204 or the secondary storage 214, and that, when executed by a processor, such as CPU 202, may cause the computing device to perform the technique 700. The technique 700 may be implemented in whole or in part in the transform stage 404 of the encoder 400 of FIG. 4. The technique 700 can be implemented using specialized hardware or firmware. Multiple processors, memories, or both, may be used. The technique 700 can be used to implement parity hiding with union of Dnlattice cosets. The vector X can be a vector of transform coefficients. The vector X can be an n- dimensional vector. Thus, X={x0, x1, . . ., xn-1}.

[0077] At 702, the data vector X is quantized on a union of Dn lattices to obtain a quantized data vector A on a Dn lattice and a coset index associated with the quantized data vector. The data vector X may be a set of transform coefficients from a transform block. The quantization process can aim to minimize MSE through range compression. Quantizing the data vector X results in a closest vector A={a0, a1, . . ., an-1} to X on the Dnlattice and a coset index, c. That is, as part of the quantization process, the vector X can be decomposed into one vector A on the Dn lattice and a coset index c. This quantization process targets lattices such as D4, D8, D16, the E8 lattice (formed from D8 lattice cosets), or the Λ16 lattice (formed from D16 lattice cosets). Quantization the vector X on the union lattice Λ is further described with respect to FIGS. 9A-9B. The quantization algorithm may involve an exhaustive search approach. The technique 700 may obtain a corresponding coset offset vector, encode the data vector minus the offset onto the union of Dn lattices, obtain a reconstruction, and select the coset index that provides the best approximation of the original data vector.

[0078] When dealing with the E8 lattice, which uses a binary coset index, the encoding can embed the coset index directly into the first value of the quantized vector. This is accomplished by calculating a modified first value a0* = ⌊a0 / 2⌋×2 + c, where a0 is the first value of the quantized data vector and c is the binary coset index. For more complex lattices like the Λ16, which requires a 5-bit coset index, the embedding process becomes moresophisticated. The technique 700 embeds the first bit b0 into the first value by calculating a0* = ⌊a0 / 2⌋×2 + b0. The remaining four bits (b1 through b4) are embedded into the subsequent four values by calculating ai* = 2×ai + bi for i=1 to 4, effectively expanding the range of these coefficients to incorporate the additional coset index bits.

[0079] At 704, the quantized data vector A is encoded in a compressed bitstream, such as the bitstream 420 of FIG. 4. The quantized data vector A, which belongs to the Dnlattice, can be encoded using any parity hiding algorithm, such one of those described herein. For example, encoding the quantized data vector A can include encoding {a1, …, an-1} as is andreducing the range for a0 to +∗ ∗^ =in the case of parity hiding. As such, the values {+^ ,a1, …, an-1} are encoded in the compressed bitstream.

[0080] At 706, the coset index c is encoded into the compressed bitstream. In some examples, the coset index c can be encoded in the compressed bitstream as its own, separate, symbol. In other examples, and as further described herein, the coset index c can be encoded into at least some of the elements of the quantized data vector A. In the case of the E8lattice, there are 2 possible coset offsets. Thus, c is a binary value and can be either 0 or 1, which can be embedded into +^∗, such as described above with respect to ^^∗. In the case of Λ16 lattice, there can be 32 different coset indexes, which require 5 bits for encoding. As such, 1 bit can be embedded into +^∗; and the remaining 4 bits can be embedded 1 bit each into a1, a2, a3, and a4. That is, bits saved by the quantization may be used to expand the range of certain coefficients to embed the coset index.

[0081] For blocks (e.g., transform blocks) larger than the dimension of the lattice, the technique 700 includes partitioning the block into sub-blocks of the appropriate size, obtaining a respective data vector from each sub-block. This allows for flexible application across different block sizes. An additional aspect of the encoding may involve verifying the parities of the quantized data vector A. The technique 700 can obtain parities from the quantized vector values and verify that these parities are members of a binary systematic error correction code, which can then be used in variable-length coding.

[0082] Embedding a bit into +^∗would not cause an increase the range of a0since +^∗already has a reduced range. Thus, adding a bit to +^∗causes the range of +^∗to have the same range as a0. On the other hand, embedding a bit into each of a1, a2, a3, and a4causes their ranges to increase. However, this perceived increase in bits is acceptable. The primary advantage lies in the inherent properties of the lattice structure used for encoding. Specifically, with the Λ16lattice, the ability to use a larger quantization step size allows for amore efficient representation of the vector X. Although it may appear that more bits are required for each coefficient, this is offset by the reduced values of coefficients necessary to signal due to the expansion enabled by the Λ16 lattice. As an increase in the rate of encoding does not inherently lead to poorer performance, expanding the ranges of a1, a2, a3, and a4amounts to a trade-off between the rate of encoding and the resulting distortion. By adjusting the quantization step size appropriately (such as illustrated with respect to equation (4) below), the trade-offs can be effectively balanced, ensuring that the overall encoding efficiency is maintained or even enhanced.

[0083] FIG. 8 is a flowchart of a technique 800 for decoding a vector using a union of Dn lattice cosets. The technique 800 can be implemented, for example, as a software program that may be executed by computing devices such as transmitting station 102 or receiving station 106. The software program can include machine-readable instructions that may be stored in a memory such as the memory 204 or the secondary storage 214, and that, when executed by a processor, such as CPU 202, may cause the computing device to perform the technique 800. The technique 800 may be implemented in whole or in part in the inverse transform stage 506 of the decoder 500 of FIG. 5. The technique 800 can be implemented using specialized hardware or firmware. Multiple processors, memories, or both, may be used.

[0084] At 802, the vector A, described with respect to FIG. 7, is decoded from a compressed bitstream, which can be the compressed bitstream 420 of FIG. 5. The vector A is that includes. Decoding the vector A means decoding the elements a0through an-1. As mentioned, the vector A={a0, a1, . . ., an-1} is a Dn lattice vector. This decoding process targets specific lattices including D4, D8, D16, E8, and Λ16 lattices recovering the quantized data vector and its associated coset index.

[0085] At 804, the coset index c is decoded. In some implementations, the coset index is decoded separately from the quantized data vector. For the E8 lattice, the coset index is a binary value extracted from the first coefficient a0* using the modulo 2 operation. When decoding the first coefficient, the technique 800 calculates a0 = 2×⌊a0* / 2⌋ + (a1 + a2 + ... + an-1) mod 2, which reconstructs the original first coefficient.

[0086] For more complex lattices like Λ16, which requires a 5-bit coset index C, the decoding process becomes more nuanced. The technique 800 extracts the first bit from the first coefficient and the remaining four bits from the subsequent four coefficients. The reconstruction involves calculating the original coefficients by extracting the embedded bits and restoring the full precision.

[0087] At 806, a reconstruction Y of the original vector X is obtained. The coset offset vector z(C), corresponding to the decoded coset index C, is added to the vector A to produce the reconstruction Y. That is, Y = A + z(C).

[0088] For transform blocks larger than the lattice dimension, the technique includes a sophisticated partitioning mechanism. The transform block is divided into sub-blocks, with a respective data vector obtained from each sub-block, allowing for flexible application across different block sizes. In some implementations, parity bits are derived from the quantized data vector, encoded using a binary systematic error correction code, and used to reconstruct coefficients with reduced precision.

[0089] FIGS. 9A-9B describe quantizing a vector X 904 on a union lattice Λ. A block 902 of FIG. 9A, which may be implemented by the entropy encoding stage 408 of FIG. 4, encodes the vector X 904 on the lattice Λ that is a union of cosets of a Dn lattice, which is a lattice in n-dimensional space.

[0090] The vector X 904 can be a vector of transform coefficients received from the transform stage 404 of FIG. 4. In another example, the vector X 904 can be a vector of quantized transform coefficients that is received from the quantization stage 406 of FIG. 4. As such, the block 902 may perform further quantization on the vector X 904. The vector X 904 has n elements. In an example, the block 902 may receive a transform block that is of size P×Q, where P*Q ≥ n. The block 904 may partition the transform block into sub-blocks, each of size n, and obtain a respective vector X from each sub-block. That is, each sub-block, which is 2-dimensional, may be linearized into a one-dimensional vector based on a scan order. In another example, the block 902 may obtain a one-dimensional vector V from the transform block according to a scan order. The vector V can then be partitioned into sub- vectors, each of size n. Each of the sub-vectors can be the vector X 904.

[0091] As mentioned, the vector X 904 includes n elements (which can be transform coefficients or quantized transform coefficients). Thus, X={x0, . . ., xn-1}. The block 902 outputs a vector A 906, where A={a0, . . ., an-1} and a coset offset index 908 (denoted c), where c ∈ {0, 1, …, MAX-1}, where MAX is the number of cosets.

[0092] FIG. 9B is a flowchart of technique 920 of operations of the block 902 of FIG. 9A. The technique 920 iterates, such as sequentially, over all the possible cosets of the set {0, 1, …, MAX-1}. That is, the technique 920 may set an iteration variable c′ to each value of the set {0, 1, …, MAX-1}. As such, at 922, the technique 920 determines whether there are more elements of the set {0, 1, …, MAX-1} that have not been visited (e.g., iterated over). If yes, the technique 920 proceeds to 924; otherwise, the technique 920 proceeds to 930. At 924, thenext coset offset z(c′) is obtained (e.g., retrieved, calculated, selected, etc.). At 926, the vector A′ = (X-Z(c′)) is encoded on the Dn lattice. At 928, a reconstruction Y of the vector X is obtained as Y= A′+ Z(c′). From 928, the technique 920 proceeds back to 922 to iterate over the next coset index in the set, if any.

[0093] At 930, the coset index that provides the best match (e.g., approximation) of Y to X is selected as coset offset index 908. The best match may be determined using one of equations (3) or (4). Equation (3) can be used where the best match is based only on a distortion metric; and equation (4) can be used where the best match is based on a rate- distortion metric, where λ is a Lagrange multiplier and R(A, C) calculates the rate (e.g., number of bits) required to encode the vector A and the coset index C. {A, C} = argmin(|Y-X|2) (3) {A, C} = argmin(|Y-X|2+ λ R(A, C)) (4)

[0094] Tables I and II present respective pseudocodes for encoding and decoding techniques. These techniques are applied to a vector X of data elements, such as transform coefficients, and involve parity hiding techniques within the framework of the E8 lattice, which represents the union of two Dn lattice cosets. TABLE I

[0095] At row 1, the vector X, which includes values x0through x7, is quantized on the E8lattice as described above. Thus, the quantizing step yields the vector A, which includes values a0 through a7, and a coset index c, which is either 0 or 1. At row 2, the values a1 through a7 are encoded, such as in the compressed bitstream 420 of FIG. 4. The values a1through a7 are encoded as is (i.e., without any changes). At row 3,2 + ^ isencoded instead of a0. As compared to the description above with respect to ^∗ ^^^, where 2 324is encoded, in this case, +∗^ is obtained by multiplyingby 2 and adding the coset indexc. As such, whatever bit was saved in the case ^^∗, that bit is no longer saved and is rather used to embed the coset index c. To summarize, the binary coset index c is embedded into the quantized vector A by altering the first element a0 of the vector A to include the coset index c,therewith embedding additional information without significantly altering the range of a0.

[0096] At row 1, elements a1 through a7 are decoded, such as from the compressed bitstream 420 of FIG. 5. These elements can be decoded as is without any modification or additional processing. While not specifically shown in Table II, +^∗is also decoded from the compressed bitstream. At row 2, the received +^∗is halved, rounded down, and then doubled, therewith restoring the part of a0that was altered during the encoding, as shown in Table I. Additionally, the sum of the decoded values from a1through a7is calculated, and its parity (even or odd nature, represented by the modulus of 2 operation) is added to obtain a0. Thus, at row 2, the original value a0is reconstructed, taking into account the adjustments made during the encoding process.

[0097] At row 3, the binary coset index c is decoded by calculating the remainder when the modified value +^∗is divided by 2. This remainder is either 0 or 1, representing the binary value of coset index c that was embedded in +^∗during the encoding process. At row 4, a reconstruction Y of the original vector X is obtained (e.g., calculated) by adding the coset offset vector Z(c) to the vector A, which consists of the decoded values of a0(reconstructed at row 2) and a1through a7(decoded at row 1).

[0098] Tables III and IV present variations on the pseudocodes of Tables I and II, respectively. The pseudocodes of Tables III and IV can be used for parity hiding with union of Dnlattice cosets on the E8lattice when the coset index c=0 is much more likely than the coset index c=1, which may be the case in the typical transform block coding case. That the coset index c=1 is less likely can mean that the magnitudes of the coefficients are less likely to be increasing. Tables III and IV are distinguished from the Tables I and II in that, for negative values, the coset offset is turned the opposite way. TABLE III

[0099] To illustrate, using the pseudocode of Table I, a value of +^ = −1 would become(e.g., would be encoded as) -2, which has the adverse effect of increasing the range of the value. However, with the pseudocode of Table III, a value of -1 remains -1 with a higher probability of becoming -2. That is, in Table III, either c or (1-c) is added, as shown in row 3, depending on whether +^is positive or negative. TABLE IV

[0100] Tables V and VI present respective pseudocodes for the encoding and decoding techniques. These techniaues are applied to a vector X of 16 data elements, such as transform coefficients or quantized transform coefficients, and involve parity hiding techniques within the framework of the Λ16lattice, which represents the union of 32 Dnlattice cosets. TABLE V

[0101] In the pseudocode of Table V, each of the bits (b0, b1, b2, b3, b4) representing thecoset index c is embedded into an encoded value of the quantized vector A. In row 3, the first binary bit of c (i.e., b0) is embedded into +^∗(i.e., the encoded version of a0). In row 4, the remaining binary bits (i.e., b1, b2, b3, and b4) of c are embedded into each respective ai. As such, whereas the range of +^∗is not increased as compared to that of a0, the ranges of +^∗, for i=1 to 4, are increased as compared to the ranges of corresponding ai’s. TABLE VI

[0102] In row 2 of Table VI, the embedding process for a1 through a4 is reversed. In row 3, the original a0 is reconstructed (e.g., obtained, calculated, etc.) using the modified +^∗and the parity of the sum of a1 through a15. While not explicitly shown, the pseudocode of Table IV includes a step of decoding the +^∗value from the compressed bitstream, which was encoded at row 3 of Table V. At row 4, the embedded coset index bits are extracted from the modified values (e.g., quantized coefficients). At row 5, the vector Y, which is a reconstruction of the original vector X, is obtained, where Z(c) is the coset offset corresponding to the coset index c.

[0103] Alternatively, in some implementations, instead of embedding the bits of c into the encoded values, c can be encoded as a separate symbol. In such an implementation, {a1,a , …, a15} can be encoded as is, and +^ =can be encoded at reduced

[0104] As mentioned above, a transform block of size that is greater than or equal to 4×4 may be received. In an example, the transform block may be partitioned into 4×4 sub-blocks and a respective vector X may be obtained for each sub-block. In another example, each non- overlapping 16 transform coefficients, in a scan order, may correspond to the vector X. In another example, the scan order may be the backwards reverse zig zag scan and anytime that a non-zero coefficient is encountered (during encoding or decoding), then the coefficient can be coded based on the previous 15 coefficients. In an example, at an encoder, a first pass over the transform block may be performed to identify the non-zero coefficients. In a second pass,parity hiding, as described herein, can be used on every group of 16 coefficients.

[0105] FIGS. 10A and 10B are flowcharts of a technique 1000 for encoding and a technique 1050 for decoding a vector of values with multi-bit parity hiding. Whereas the technique described above with respect to equations (1) and (2) enables the hiding of one bit of information in one coefficient, the techniques described with respect to FIGS. 10A and 10B can be used to hide (n-k) bits (e.g., 2 bits or 5 bits) of information in n values (e.g., 30 coefficients) utilizing the principles of systematic ECCs with good properties.

[0106] ECCs provide a systematic way to add redundancy to data for error detection and correction. In the context of lattice-based coding, ECCs play a dual role: 1) they provide a mathematical framework for constructing efficient lattices; and 2) they enable robust multi- bit parity hiding schemes. A systematic (n, k) ECC takes k information bits and produces n coded bits where the original k information bits appear unchanged in the output and additional n-k parity bits are generated according to the code structure.

[0107] Error correction / detection codes have a close connection to lattices since lattices can be constructed using error correction codes. Consider, for example, a 7-4 Hamming code, which takes 4 bits of information and outputs 7 bits (4 information bits + 3 parity bits). An important aspect of Hamming codes is that not all of 27bit combinations are valid in this scheme; only certain code points are allowed. Using error correction or detection codes, it is possible to construct lattices that result in more spherical Voronoi regions usable in compression.

[0108] As is known, in a standard Voronoi diagram, for a given set of points in a plane, the plane is divided into regions. Each region (also referred to as a Voronoi cell) corresponds to one of the points and contains all the locations that are closer to that point than to any other. When this concept is extended to a sphere, the points are considered to be on the surface of a sphere. The Voronoi cells in this case are regions on the sphere's surface, each containing the points on the sphere that are closest to one of the given points than to any others. In the context of data compression and encoding, spherical Voronoi regions can be useful for optimizing the way data is partitioned and represented. When lattices are used in data compression, the goal often involves minimizing the average distance between data points and the nearest lattice point. This minimization can be achieved more effectively by using Voronoi cells shaped to fit the data distribution, which in some cases, can resemble portions of a sphere (spherical Voronoi regions).

[0109] The technique 1000 can be used to hide (N-K) bits into N values (e.g., coefficients) using a lattice that is derived from ECCs. First, it is observed that an integervalue v can be broken up into , . (i.e., a largest integer not greater than half of v) and a binary parity (^ =!" 2). As such, any value v, can be broken up into a reduced range value and a parity value. The technique 1000 is schematically illustrated in FIG. 11.

[0110] At 1002, the technique 1000 receives a vector X={x0, x1, …., xn-1} that includes n values (e.g., coefficients) and quantizes the vector X into a vector A={a0, a1, …., an-1}. The quantization is subject to the parity constraint that p={p0, p1, . . ., pn-1}={a0 mod 2, a1 mod 2, …, an-1 mod 2} are members of a binary (n, k) systematic error correction / detection code. That is, the quantization is such that the binary parity vector p, in n-dimensional space, is a member of a (n-k) systematic error correction code. Said another way, the quantization is such that the bits of the binary parity vector p belong to the set of allowed code points in the (n-k) systematic error correction code. Any known techniques for soft decoding of error correction codes can be used to obtain the vector A from X subject to the parity constraint. Soft decoding essentially entails snapping a given real number, which is the soft value, to the closest ECC value.

[0111] At 1004, the last k values, {an-k, …, an-1}, of the vector A are encoded as is (e.g., without any further modification) in a compressed bitstream, such as the compressed bitstream 420 of FIG. 4. At 1006, the first n values {a0, …, an-k-1}are encoded with reducedprecision. That is, the values {+∗^ , . . ., +∗H^I^^ } are encoded wherefor i=0, …,n-k-1. As such, parity hiding is used for (e.g., applied to) each of the first n-k values of the vector A.

[0112] The technique 1050 of FIG. 10B can be used to obtain a reconstruction Y of the vector X encoded using the technique 1000. The technique 1050 is schematically illustrated in FIG. 12. At 1052, the values {+^∗, . . ., +H∗^I^^, an-k, …, an-1} are decoded from a compressed bitstream, such as the compressed bitstream 420 of FIG. 5. At 1054, the parity bits {pn-k, . . ., pn-1} of the last k coefficients are derived from the last k decoded values as {an- k mod 2, …, an-1 mod 2}.

[0113] At 1056, the k parity bits {pn-k, . . ., pn-1} are used as information bits and are encoded into n channel bits using an underlying (n, k) systematic ECC encoder. The systematic ECC encoder receives k bits as input and outputs n bits, where n>k and where the k input bits are unchanged in the n output bits. That is, the systematic ECC encoder adds n-k parity bits. Stated another way, the systematic ECC encoder receives the bits {pn-k, . . ., pn-1} and outputs the bits {p0, ..., pn-k-1, pn-k, . . ., pn-1}.

[0114] At 1058, the first n-k elements {a0, …, an-k-1} of the vector A are now generatedusing +^ = 2+∗^ + J^, for i=0, . . . , n-k-1. It is noted that the values {an-k, …, an-1} werealready obtained at 1052. At 1060, the reconstruction Y of X is set to {a0, a1, …., an-1}.

[0115] FIG. 11 is a block diagram 1100 that illustrates the technique 1000 described with respect to FIG. 10A. The technique 1000 can be implemented by a block 1102, which encodes a vector X 1104 (e.g., a data vector) on a lattice Λ derived from an (n, k) systematic ECC, as described with respect to FIG. 10A.

[0116] The block 1102 receives the vector X 1104, which includes n elements. The vector X 1104 can be a vector of transform coefficients or quantized transform coefficients. The block 1102 quantizes the vector X 1104 into a vector A 1106, subject to the parity constraint described above. The vector A 1106 includes elements 1108 (i.e., A={a0, …, an-1}). The block 1102 encodes, into a compressed bitstream, a first subset 1110 of the elements (i.e.,{an-k, …, an-1}) as is, without further modification. With respect to a second subset 1112 (i.e., {a0, …, an-k-1}), the block 1102 encodes reduced-range values (i.e.,as described above. Thus, the block 1102 encodes elements 1114 (i.e., {+^∗, . . ., +H∗^I^^, an-k, …, an-1}) into the compressed bitstream.

[0117] FIG. 12 is a block diagram 1200 that illustrates the technique 1050 described with respect to FIG. 10B. A set of values 1202 (i.e.,{+^∗, . . ., +H∗^I^^, an-k, …, an-1}) is decoded from a compressed bitstream, such as the compressed bitstream 420 of FIG. 5. The values of a first subset 1204 of the set of values 1202 are each processed through a modulo operator, such as an operators 1206A-1206B, to obtain a parity vector 1208 (i.e., {pn-k, . . ., pn-1}).

[0118] The parity vector 1208 is input to an ECC encoder 1210, which outputs an expanded parity vector 1212 a subset of which (e.g., a parity vector 1208′) is the same as the parity vector 1208 and an expansion parity vector 1214 (i.e., {pn-k, . . ., pn-1}). For error correction purposes, the parity vector 1208 may also be referred to as “k information bits,” the expanded parity vector 1212 may be referred to as “n channel bits,” the parity vector 1208′ may be referred to “k systematic bits,” and the expansion parity vector 1214 may be referred to as “n-k parity bits.”

[0119] A second subset 1216 (i.e., {+^∗, . . ., +H∗^I^^}) of the set of values 1202 along with the expansion parity vector 1214 (i.e., {pn-k, . . ., pn-1}) are input to a combiner 1218, which outputs a reconstruction 1220 (i.e., {a0, …, an-k-1}) of values corresponding to the secondsubset 1216. The combiner 1218 obtains a reconstructed value ai as + ∗^ = 2+^ + J^. Thecombiner 1218 reconstructs (n-k) values constituting the first n-k values of the reconstruction.

[0120] For simplicity of explanation, the techniques 700, 800, 920, 1000, and 1050 of FIGS. 7, 8, 9B, 10A, and 10B, respectively, are each depicted and described as respective series of steps or operations. However, the steps or operations in accordance with this disclosure can occur in various orders and / or concurrently. Additionally, other steps or operations not presented and described herein may be used. Furthermore, not all illustrated steps or operations may be required to implement a technique in accordance with the disclosed subject matter.

[0121] Some implementations are described below as numbered examples (Example 1, 2, 3, etc.). These examples are provided as examples only and do not limit the other implementations disclosed herein.

[0122] Example 1 is a method, comprising: quantizing the data vector on a union of Dn lattices to obtain a quantized data vector on a Dn lattice and a coset index associated with the quantized data vector; encoding, in a compressed bitstream, the quantized data vector; and encoding, in the compressed bitstream, the coset index.

[0123] In Example 2, the subject matter of Example 1 includes, the union of the Dn lattices comprising at least one of: a D4 lattice, a D8 lattice, a D16 lattice, an E8 lattice formed from D8 lattice cosets, or a Λ16 lattice formed from D16 lattice cosets.

[0124] In Example 3, the subject matter of any of Examples 1 and 2 includes the data vector comprising transform coefficients.

[0125] In Example 4, the subject matter of any of Examples 1 to 3, encoding the coset index comprises one of: encoding the coset index separately from the quantized data vector in the compressed bitstream; or embedding the coset index into one or more values of the quantized data vector.

[0126] In Example 5, the subject matter of any of Examples 1 to 4 includes quantizing the data vector comprising using a lattice-based quantizer selected to minimize mean squared error (MSE); and applying a range compression with the lattice-based quantizer to reduce a range of values for one or more values of the data vector.

[0127] In Example 6, the subject matter of any of Examples 1 to 3 and 5 includes that the coset index being a binary value, and encoding the coset index comprising embedding the binary value into a first value of the quantized data vector.

[0128] In Example 7, the subject matter of Example 6 is such that embedding the binary value comprises calculating a modified value a0* = ⌊a0 / 2⌋×2 + c, where a0 is the first value of the quantized data vector and c is the coset index; and encoding the modified value a0* in the compressed bitstream.

[0129] In Example 8, the subject matter of any of Examples 1 to 3 and 5 includes, the union of Dn lattices being a Λ16 lattice, the coset index comprising 5 bits, and encoding the coset index comprising embedding a first bit of the coset index into a first value of the quantized data vector; and embedding remaining four bits respectively into second through fifth values of the quantized data vector.

[0130] In Example 9, the subject matter of Example 8 includes, embedding the first bit comprising calculating a0* = ⌊a0 / 2⌋×2 + b0, where a0 is the first value and b0 is the first bit; and embedding the remaining four bits comprising, for i=1 to 4, calculating ai* = 2×ai + bi, where ai are the second through fifth values and bi are the remaining four bits.

[0131] In Example 10, the subject matter of any of Examples 1 to 9 is such that the data vector comprises transform coefficients of a transform block of size P×Q, where P×Q ≥ n, and where n is a dimension of the Dn lattice, the subject matter includes: partitioning the transform block into sub-blocks in response to determining that a size of the transform block is larger than a dimension of the Dn lattice; and obtaining a respective data vector from each sub-block.

[0132] In Example 11, the subject matter of any of Examples 1 to 10 includes: obtaining parities p = {a0 mod 2, a1 mod 2, ..., an-1 mod 2} from values a0 through an-1 of the quantized data vector; verifying that the parities p are members of a binary (n, k) systematic error correction code; and encoding the quantized data vector using a variable-length coding scheme.

[0133] In Example 12, the subject matter of any of Examples 1 to 11 is such that quantizing the data vector includes: using a multi-dimensional codebook for quantizing the data vector; for each coset index c' of a set of coset indexes: obtaining a coset offset vector z(c') corresponding to each coset index c'; encoding (x - z(c')) onto the union of the Dn lattices to obtain a candidate vector a', wherein x is the data vector; and obtaining a reconstruction y = a' + z(c'); and selecting the coset index c that provides the best approximation y of the data vector.

[0134] Example 13 is a method, comprising: decoding, from a compressed bitstream, a quantized data vector, wherein the quantized data vector is quantized on a Dn lattice; decoding, from the compressed bitstream, a coset index; and adding a coset offset vector corresponding to the coset index to the quantized data vector to obtain a reconstruction of the data vector.

[0135] In Example 14, the subject matter of Example 13 includes that the Dn lattice is selected from the group consisting of a D4 lattice, a D8 lattice, a D16 lattice, an E8 lattice,and a Λ16 lattice.

[0136] In Example 15, the subject matter of any of Examples 13-14 is such that the coset index is embedded within the quantized data vector.

[0137] In Example 16, the subject matter of any of Examples 13-14 is such that the coset index is decoded separately from the quantized data vector.

[0138] In Example 17, the subject matter of Example 13 is such that the Dn lattice is part of an E8 lattice, wherein the coset index is a binary value, and decoding the coset index comprises: extracting the binary value from a first coefficient a0* of the quantized data vector using c = a0* mod 2, where c is the coset index.

[0139] In Example 18, the subject matter of Example 17 includes, calculating an original first coefficient a0 = 2×⌊a0* / 2⌋ + (a1 + a2 + ... + an-1) mod 2, where ai are coefficients of the quantized data vector.

[0140] In Example 19, the subject matter of any of Examples 13 and 17-18 is such that decoding the coset index comprises extracting the coset index from at least one coefficient of the quantized data vector.

[0141] In Example 20, the subject matter of any of Examples 13 and 17-18 includes: decoding the coset index from a separate symbol in the compressed bitstream.

[0142] In Example 21, where the coset index comprises 5 bits, the subject matter of any of Examples 13 and 17-18 is such decoding the coset index comprises: extracting a first bit from a first coefficient of the quantized data vector; and extracting the remaining four bits respectively from second through fifth coefficients of the quantized data vector.

[0143] In Example 22, the subject matter of Example 21 is such that extracting the first bit comprises obtaining b0 = (a0* mod 2), wherein a0* is the first coefficient; extracting the remaining four bits comprises, for i=1 to 4, obtaining bi = ai* mod 2 from the second through fifth coefficients ai*; and reconstructing original coefficients comprises: calculating a0 = 2×⌊a0* / 2⌋ + (a1 + a2 + ... + an-1) mod 2 and for i=1 to 4, calculating ai = ⌊ai* / 2⌋.

[0144] In Example 23, the subject matter of any of Examples 13 and 17-18 includes, deriving k parity bits from k coefficients of the quantized data vector; encoding the k parity bits into n channel bits using a binary (n,k) systematic error correction code; and using the n channel bits to reconstruct n-k coefficients of the data vector.

[0145] In Example 24, the subject matter of Example 23 is such that deriving the k parity bits comprises calculating pi = ai mod 2 for i=(n-k) to (n-1); and reconstructing the n-k coefficients comprises calculating ai = 2×ai* + pi for i=0 to (n-k-1), where ai* are received coefficients with reduced precision.

[0146] In Example 25, where the data vector comprises transform coefficients from a transform block, the subject matter of any of Examples 13 to 24 includes partitioning the transform block into sub-blocks in response to determining that a size of the transform block is larger than a dimension of the Dn lattice; and obtaining a respective data vector from each sub-block.

[0147] Example 26 is a method that includes quantizing a set of eight transform coefficients using an E8 lattice to obtain a quantized vector on a D8 lattice and a binary coset index; encoding, in a compressed bitstream, a subset of the quantized vector, wherein the subset consists of all but a first coefficient a0 of the quantized vector; modifying the first coefficient a0 to produce a modified coefficient a*0, wherein the modified coefficient a*0 is calculated as ⌊a0 / 2⌋×2+c; and encoding the modified coefficient in the compressed bitstream.

[0148] Example 27 is a method comprising: decoding a vector of values {a0∗,a1,…,a7} derived from an E8 lattice quantization; calculating an original coefficient a0 as 2×⌊a0∗ / 2⌋+(a1+a2+…+a7) mod 2; obtaining a binary coset index c as (a0∗mod 2); and reconstructing the original vector by adding a coset offset vector z(c) to the vector of values {a0, a1,…, a7}.

[0149] Example 28 is a method comprising: quantizing a set of eight coefficients {x0, x1,…, x7} on an E8 lattice to obtain a quantized data vector {a0,a1,…,a7} on a D8 lattice and a binary coset index c; encoding, in a compressed bitstream, a subset {a1,a2, … ,a7} of the quantized data vector; and encoding, in the compressed bitstream, a modified coefficient a0∗instead of a0, wherein a0∗ is calculated as (⌊a0 / 2⌋×2+c) if ⌊a0 / 2⌋≥0 and as (⌊a0 / 2⌋×2+1−c) if⌊a0 / 2⌋<0.

[0150] Example 29 is a method comprising: decoding a vector of values {a0∗, a1,…,a7} derived from an E8 lattice quantization; calculating an original coefficient a0 as 2×⌊a0∗ / 2⌋+(a1+a2+…+a7) mod 2; obtaining a binary coset index c as (a0∗ mod 2) if ⌊a0 / 2⌋≥0 or as (1−a0∗ mod 2) if ⌊a0 / 2⌋<0; and reconstructing an output vector by adding a coset offset vector z(c) based on the binary coset index c to {a0, a1,…, a7}.

[0151] Example 30 is a method comprising quantizing a set of n coefficients of a vector x={x0, x1,…, xn−1} into a vector a={a0, a1,…, an−1}; obtaining parities p={a0 mod 2, a1 mod 2,…, an−1 mod2} as members of a binary (n, k) systematic error correction / detection code; encoding, in a compressed bitstream, k coefficients {an−k,…,an−1}; and encoding, in the compressed bitstream, n−k coefficients {a0∗, a1∗,…, an−k−1∗} with reduced precision as ai∗=⌊ai / 2⌋ for i=0,1,…,n−k−1.

[0152] Example 31 is a method comprising: receiving an encoded vector {a0∗,a1∗, …, an−k−1∗,an−k,…,an−1}; decoding k coefficients {an−k, …, an−1} directly from the encoded vector; deriving k parity bits for the k coefficients as {pn−k,…,pn−1}={an−k mod 2,…, an−1 mod 2}; encoding the k parity bits into n channel bits using a binary (n, k) systematic error correction code to obtain {p0, p1,…,pn−1}; generating an expanded set {a0, a1,…, an−k−1} using ai=2⋅ai∗+pi for i=0,1, …, n−k−1; and reconstructing an output vector y={a0, a1,…, an−1}.

[0153] Example 32 is a device that includes a processor that is configured to perform the method of any one of Examples 1 to 31.

[0154] Example 33 is a device that includes a processor and a memory where the processor is configured to execute instructions stored in the memory to perform the method of any one of Examples 1 to 31.

[0155] Example 34 is a non-transitory computer-readable storage medium, comprising executable instructions that, when executed by a processor, facilitate performance of operations, comprising operations that perform the method of any one of Examples 1 to 31.

[0156] Example 35 is a non-transitory computer-readable storage medium having stored hereon an encoded bitstream, wherein the encoded bitstream is generated by an encoder performing the method of any one of Examples 1-12, 26, 28, and 30.

[0157] Example 36 is a non-transitory computer-readable storage medium having stored thereon an encoded bitstream, wherein the encoded bitstream is configured for decoding by the method of any one of Examples 13-25, 27, 29, and 31.

[0158] The aspects of encoding and decoding described above illustrate some examples of encoding and decoding techniques. However, it is to be understood that encoding and decoding, as those terms are used in the claims, could mean compression, decompression, transformation, or any other processing or change of data.

[0159] The word “example” is used herein to mean serving as an example, instance, or illustration. Any aspect or design described herein as “example” is not necessarily to be construed as being preferred or advantageous over other aspects or designs. Rather, use of the word “example” is intended to present concepts in a concrete fashion. As used in this application, the term “or” is intended to mean an inclusive “or” rather than an exclusive “or.” That is, unless specified otherwise or clearly indicated otherwise by the context, the statement “X includes A or B” is intended to mean any of the natural inclusive permutations thereof. That is, if X includes A; X includes B; or X includes both A and B, then “X includes A or B”is satisfied under any of the foregoing instances. In addition, the articles “a” and “an” as used in this application and the appended claims should generally be construed to mean “one or more,” unless specified otherwise or clearly indicated by the context to be directed to a singular form. Moreover, use of the term “an implementation” or the term “one implementation” throughout this disclosure is not intended to mean the same embodiment or implementation unless described as such.

[0160] Implementations of the transmitting station 102 and / or the receiving station 106 (and the algorithms, methods, instructions, etc., stored thereon and / or executed thereby, including by the encoder 400 and the decoder 500) can be realized in hardware, software, or any combination thereof. The hardware can include, for example, computers, intellectual property (IP) cores, application-specific integrated circuits (ASICs), programmable logic arrays, optical processors, programmable logic controllers, microcode, microcontrollers, servers, microprocessors, digital signal processors, or any other suitable circuit. In the claims, the term “processor” should be understood as encompassing any of the foregoing hardware, either singly or in combination. The terms “signal” and “data” are used interchangeably. Further, portions of the transmitting station 102 and the receiving station 106 do not necessarily have to be implemented in the same manner.

[0161] Further, in one aspect, for example, the transmitting station 102 or the receiving station 106 can be implemented using a general purpose computer or general purpose processor with a computer program that, when executed, carries out any of the respective methods, algorithms, and / or instructions described herein. In addition, or alternatively, for example, a special purpose computer / processor can be utilized which can contain other hardware for carrying out any of the methods, algorithms, or instructions described herein.

[0162] The transmitting station 102 and the receiving station 106 can, for example, be implemented on computers in a video conferencing system. Alternatively, the transmitting station 102 can be implemented on a server, and the receiving station 106 can be implemented on a device separate from the server, such as a handheld communications device. In this instance, the transmitting station 102, using an encoder 400, can encode content into an encoded video signal and transmit the encoded video signal to the communications device. In turn, the communications device can then decode the encoded video signal using a decoder 500. Alternatively, the communications device can decode content stored locally on the communications device, for example, content that was not transmitted by the transmitting station 102. Other suitable transmitting and receiving implementation schemes are available. For example, the receiving station 106 can be agenerally stationary personal computer rather than a portable communications device, and / or a device including an encoder 400 may also include a decoder 500.

[0163] Further, all or a portion of implementations of the present disclosure can take the form of a computer program product accessible from, for example, a computer-usable or computer-readable medium. A computer-usable or computer-readable medium can be any device that can, for example, tangibly contain, store, communicate, or transport the program for use by or in connection with any processor. The medium can be, for example, an electronic, magnetic, optical, electromagnetic, or semiconductor device. Other suitable mediums are also available.

[0164] The above-described embodiments, implementations, and aspects have been described in order to facilitate easy understanding of this disclosure and do not limit this disclosure. On the contrary, this disclosure is intended to cover various modifications and equivalent arrangements included within the scope of the appended claims, which scope is to be accorded the broadest interpretation as is permitted under the law so as to encompass all such modifications and equivalent arrangements.

Claims

What is claimed is:

1. A method for encoding a data vector, comprising: quantizing the data vector on a union of Dn lattices to obtain a quantized data vector on a Dn lattice and a coset index associated with the quantized data vector; encoding, in a compressed bitstream, the quantized data vector; and encoding, in the compressed bitstream, the coset index.

2. The method of claim 1, wherein the union of the Dn lattices comprises at least one of: a D4 lattice, a D8 lattice, a D16 lattice, an E8 lattice formed from D8 lattice cosets, or a Λ16 lattice formed from D16 lattice cosets.

3. The method of any one of claims 1 to 2, wherein the data vector comprises transform coefficients.

4. The method of claim 1, wherein encoding the coset index comprises one of: encoding the coset index separately from the quantized data vector in the compressed bitstream; or embedding the coset index into one or more values of the quantized data vector.

5. The method of any one of claims 1, 2, and 4, wherein quantizing the data vector comprises: using a lattice-based quantizer selected to minimize mean squared error (MSE); and applying a range compression with the lattice-based quantizer to reduce a range of values for one or more values of the data vector.

6. The method of any one of claims 1, 2, and 4, wherein the coset index is a binary value, and wherein encoding the coset index comprises: embedding the binary value into a first value of the quantized data vector.

7. The method of claim 6, wherein embedding the binary value comprises: calculating a modified value a0* = ⌊a0 / 2⌋×2 + c, where a0 is the first value of the quantized data vector and c is the coset index; and encoding the modified value a0* in the compressed bitstream.

8. The method of any one of claims 1, 2, and 4, wherein the union of Dn lattices is a Λ16 lattice, the coset index comprises 5 bits, and wherein encoding the coset index comprises: embedding a first bit of the coset index into a first value of the quantized data vector; and embedding remaining four bits respectively into second through fifth values of the quantized data vector.

9. The method of claim 8, wherein embedding the first bit comprises calculating a0* = ⌊a0 / 2⌋×2 + b0, where a0 is the first value and b0 is the first bit; and wherein embedding the remaining four bits comprises: for i=1 to 4, calculating ai* = 2×ai + bi, where ai are the second through fifth values and bi are the remaining four bits.

10. The method of any one of claims 1, 2, and 4, wherein the data vector comprises transform coefficients of a transform block of size P×Q, wherein P×Q ≥ n, and where n is a dimension of the Dn lattice, further comprising: partitioning the transform block into sub-blocks of size n and obtaining a respective data vector from each sub-block.

11. The method of any one of claims 1, 2, and 4, further comprising: obtaining parities p = {a0 mod 2, a1 mod 2, ..., an-1 mod 2} from values a0 trough an- 1 of the quantized data vector; verifying that the parities p are members of a binary (n, k) systematic error correction code; and encoding the quantized data vector using a variable-length coding scheme.

12. The method of any one of claims 1, 2, and 4, wherein quantizing the data vector comprises: using a multi-dimensional codebook for quantizing the data vector; for each coset index c' of a set of coset indexes: obtaining a coset offset vector z(c') corresponding to the each coset index c';encoding (x - z(c')) onto the union of the Dn lattices to obtain a candidate vector a', wherein x is the data vector; and obtaining a reconstruction y = a' + z(c'); and selecting the coset index c that provides a best approximation y of the data vector.

13. A method for decoding a data vector, comprising: decoding, from a compressed bitstream, a quantized data vector, wherein the quantized data vector is quantized on a Dn lattice; decoding, from the compressed bitstream, a coset index; and adding a coset offset vector corresponding to the coset index to the quantized data vector to obtain a reconstruction of the data vector.

14. The method of claim 13, wherein the Dn lattice is selected from the group consisting of a D4 lattice, a D8 lattice, a D16 lattice, an E8 lattice, and a Λ16 lattice.

15. The method of any one of claims 13 and 14, wherein the coset index is embedded within the quantized data vector.

16. The method of any one of claims 13 and 14, wherein the coset index is decoded separately from the quantized data vector.

17. The method of claim 13, wherein the Dn lattice is part of an E8 lattice, wherein the coset index is a binary value, and wherein decoding the coset index comprises: extracting the binary value from a first coefficient a0* of the quantized data vector using c = a0* mod 2, where c is the coset index.

18. The method of claim 17, further comprising: calculating an original first coefficient a0 = 2×⌊a0* / 2⌋ + (a1 + a2 + ... + an-1) mod 2, where ai are coefficients of the quantized data vector.

19. The method of any one of claims 13, 17, and 18, wherein decoding the coset index comprises extracting the coset index from at least one coefficient of the quantized data vector.

20. The method of any one of claims 13, 17, and 18, wherein decoding the coset index comprises decoding the coset index from a separate symbol in the compressed bitstream.

21. The method of any one of claims 13, 17, and 18, wherein the coset index comprises 5 bits, and wherein decoding the coset index comprises: extracting a first bit from a first coefficient of the quantized data vector; and extracting remaining four bits respectively from second through fifth coefficients of the quantized data vector.

22. The method of claim 21, wherein extracting the first bit comprises obtaining b0 = (a0* mod 2), wherein a0* is the first coefficient; and wherein extracting the remaining four bits comprises, for i=1 to 4, obtaining bi = ai* mod 2 from the second through fifth coefficients ai*; and wherein reconstructing original coefficients comprises: calculating a0 = 2×⌊a0* / 2⌋ + (a1 + a2 + ... + an-1) mod 2; and for i=1 to 4, calculating ai = ⌊ai* / 2⌋.

23. The method of any one of claims 13, 17, and 18, further comprising: deriving k parity bits from k coefficients of the quantized data vector; encoding the k parity bits into n channel bits using a binary (n,k) systematic error correction code; and using the n channel bits to reconstruct n-k coefficients of the data vector.

24. The method of claim 23, wherein: wherein deriving the k parity bits comprises calculating pi = ai mod 2 for i=(n-k) to (n-1); and wherein reconstructing the n-k coefficients comprises calculating ai = 2×ai* + pi for i=0 to (n-k-1), where ai* are received coefficients with reduced precision.

25. The method of any one of claims 13, 17, and 18, wherein the data vector comprises transform coefficients from a transform block, further comprising: partitioning the transform block into sub-blocks in response to determining that a sizeof the transform block is larger than a dimension of the Dn lattice; and obtaining a respective data vector from each sub-block.

26. A method, comprising: quantizing a set of eight transform coefficients using an E8 lattice to obtain a quantized vector on a D8 lattice and a binary coset index; encoding, in a compressed bitstream, a subset of the quantized vector, wherein the subset consists of all but a first coefficient a0 of the quantized vector; modifying the first coefficient a0 to produce a modified coefficient a*0, wherein the modified coefficient a*0 is calculated as ⌊a0 / 2⌋×2+c; and encoding the modified coefficient in the compressed bitstream.

27. A method for decoding an original vector, comprising: decoding a vector of values {a0∗,a1,…,a7} derived from an E8 lattice quantization; calculating an original coefficient a0 as 2×⌊a0∗ / 2⌋+(a1+a2+…+a7) mod 2; obtaining a binary coset index c as (a0∗mod 2); and reconstructing the original vector by adding a coset offset vector z(c) to the vector of values {a0, a1,…, a7}.

28. A method, comprising: quantizing a set of eight coefficients {x0, x1,…, x7} on an E8 lattice to obtain a quantized data vector {a0, a1, …, a7} on a D8 lattice and a binary coset index c; encoding, in a compressed bitstream, a subset {a1,a2, … ,a7} of the quantized data vector; and encoding, in the compressed bitstream, a modified coefficient a0∗ instead of a0, wherein a0∗ is calculated as (⌊a0 / 2⌋×2+c) if ⌊a0 / 2⌋≥0 and as (⌊a0 / 2⌋×2+1−c) if ⌊a0 / 2⌋<0.

29. A method, comprising: decoding a vector of values {a0∗, a1,…,a7} derived from an E8 lattice quantization; calculating an original coefficient a0 as 2×⌊a0∗ / 2⌋+(a1+a2+…+a7) mod 2; obtaining a binary coset index c as (a0∗ mod 2) if ⌊a0 / 2⌋≥0 or as (1−a0∗ mod 2) if⌊a0 / 2⌋<0; andreconstructing an output vector by adding a coset offset vector z(c) based on the binary coset index c to {a0, a1,…, a7}.

30. A method, comprising: quantizing a set of n coefficients of a vector x={x0, x1,…, xn−1} into a vector a={a0, a1 ,…, an−1}; obtaining parities p={a0mod 2, a1mod 2,…, an−1mod2} as members of a binary (n, k) systematic error correction / detection code; encoding, in a compressed bitstream, k coefficients {an−k,…,an−1}; and encoding, in the compressed bitstream, n−k coefficients {a0∗,an−k−1∗} with reduced precision as ai∗=⌊ai / 2⌋ for i=0,1,…,n−k−1.

31. A method, comprising: receiving an encoded vector {a0∗,a1∗, …, an−k−1∗,an−k,…,an−1}; decoding k coefficients {an−k, …, an−1} directly from the encoded vector; deriving k parity bits for the k coefficients as {pn−k,…,pn−1}={an−k mod 2,…, an−1 mod 2}; encoding the k parity bits into n channel bits using a binary (n, k) systematic error correction code to obtain {p0, p1,…,pn−1}; generating an expanded set {a0, a1,…, an−k−1} using ai=2⋅ai∗+pi for i=0,1, …, n−k−1; and reconstructing an output vector y={a0, a1,…, an−1}.

32. A device, comprising: a processor that is configured to perform the method of any one of claims 1 to 31.

33. A device, comprising: a memory; and a processor, the processor configured to execute instructions stored in the memory to perform the method of any one of claims 1 to 31.

34. A non-transitory computer-readable storage medium, comprising executable instructions that, when executed by a processor, facilitate performance of operations,comprising operations that perform the method of any one of claims 1 to 31.

35. A non-transitory computer-readable storage medium having stored thereon an encoded bitstream, wherein the encoded bitstream is generated by an encoder performing the method of any one of claims 1-12, 26, 28, and 30.

36. A non-transitory computer-readable storage medium having stored thereon an encoded bitstream, wherein the encoded bitstream is configured for decoding by the method of any one of claims 13-25, 27, 29, and 31.