LOCO Codes: Lexicographically-Ordered Constrained Codes
Ahmed Hareedy, Robert Calderbank

TL;DR
LOCO codes are a new family of capacity-achieving, lexicographically-ordered constrained codes for bipolar signaling, offering simple encoding/decoding, ease of balancing, and improved rate performance in magnetic and optical recording systems.
Contribution
This paper introduces LOCO codes, a novel class of fixed-length, binary constrained codes with practical encoding/decoding and minimized rate loss, applicable to magnetic and Flash storage systems.
Findings
LOCO codes achieve up to 10% higher rate than existing codes.
LOCO codes enable about 20% channel density gain in magnetic recording.
LOCO codes simplify encoding and decoding processes.
Abstract
Line codes make it possible to mitigate interference, to prevent short pulses, and to generate streams of bipolar signals with no direct-current (DC) power content through balancing. They find application in magnetic recording (MR) devices, in Flash devices, in optical recording devices, and in some computer standards. This paper introduces a new family of fixed-length, binary constrained codes, named lexicographically-ordered constrained codes (LOCO codes), for bipolar non-return-to-zero signaling. LOCO codes are capacity-achieving, the lexicographic indexing enables simple, practical encoding and decoding, and this simplicity is demonstrated through analysis of circuit complexity. LOCO codes are easy to balance, and their inherent symmetry minimizes the rate loss with respect to unbalanced codes having the same constraints. Furthermore, LOCO codes that forbid certain patterns can be…
| Codeword index | Codewords of the code | ||||||
| Group 1 | |||||||
| Group 4 | |||||||
| Group 3 | |||||||
| Group 2 | |||||||
| Code cardinality | |||||||
| RMB(s) at instance | Bridging pattern | LMB(s) at instance |
| Message | Codeword | |
| Values of and | Adder size | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits |
| Selected codeword | |
| or such that is | |
| or such that is |
| Message | |||||
| Values of and | Adder size | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits | |
| , | bits |
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
LOCO Codes: Lexicographically-Ordered Constrained Codes
Ahmed Hareedy, , and Robert Calderbank A. Hareedy and R. Calderbank are with the Department of Electrical and Computer Engineering, Duke University, Durham, NC 27705 USA (e-mail: [email protected]; [email protected]). This research was supported in part by NSF under grant CCF 1717602. Part of the paper was presented at IEEE Information Theory Workshop (ITW), 2019 [2].
Abstract
Line codes make it possible to mitigate interference, to prevent short pulses, and to generate streams of bipolar signals with no direct-current (DC) power content through balancing. They find application in magnetic recording (MR) devices, in Flash devices, in optical recording devices, and in some computer standards. This paper introduces a new family of fixed-length, binary constrained codes, named lexicographically-ordered constrained codes (LOCO codes), for bipolar non-return-to-zero signaling. LOCO codes are capacity-achieving, the lexicographic indexing enables simple, practical encoding and decoding, and this simplicity is demonstrated through analysis of circuit complexity. LOCO codes are easy to balance, and their inherent symmetry minimizes the rate loss with respect to unbalanced codes having the same constraints. Furthermore, LOCO codes that forbid certain patterns can be used to alleviate inter-symbol interference in MR systems and inter-cell interference in Flash systems. Numerical results demonstrate a gain of up to 10% in rate achieved by LOCO codes with respect to other practical constrained codes, including run-length-limited codes, designed for the same purpose. Simulation results suggest that it is possible to achieve a channel density gain of about 20% in MR systems by using a LOCO code to encode only the parity bits, limiting the rate loss, of a low-density parity-check code before writing.
Index Terms:
Constrained codes, lexicographic ordering, balanced codes, data storage, magnetic recording.
I Introduction
From data storage to data transmission, line codes are employed in many systems to achieve a variety of goals. An important early example, introduced in [3], is the family of run-length-limited (RLL) codes used to mitigate inter-symbol interference (ISI) in magnetic recording (MR) systems by appropriately separating transitions. RLL codes are associated with bipolar non-return-to-zero inverted (NRZI) signaling, where a [math] is represented by no transition and a is represented by a transition, with the transitions being from to , , and vice versa. RLL codes are characterized by a pair of parameters, , where (resp., ) is the minimum (resp., maximum) number of [math]’s between adjacent ’s. The parameter separates transitions, and the parameter supports self-clocking by ensuring frequent transitions. A variable-length fixed-rate RLL code appeared in the IBM 3370, 3375, and 3380 disk drives [4], and the issue of error propagation for RLL codes was studied in [5].
For simplicity, we abbreviate a run of consecutive [math]’s (resp., ’s) to (resp., ). A -constrained code is a code that forbids the patterns in from appearing in any codeword. -constrained codes are associated with bipolar non-return-to-zero (NRZ) signaling, where a [math] is represented by level and a is represented by level . The parameter separates transitions, which mitigates ISI, serving the same purpose as the parameter in RLL codes. For example, transitions separated by one bit duration can be prevented by a -constrained code with NRZ signaling, or a RLL code with NRZI signaling. We focus in this paper on -constrained codes.
Constrained codes were used to extend the life of MR systems employing peak detection, and they continue to be used in modern MR systems [6, 7] to improve the performance of sequence detection on partial response (PR) channels such as extended PR4 (EPR4 and E2PR4) channels [8, 9]. PR channels with equalization targets that follow the channel impulse response [10] require forbidden patterns to be symmetric. Moreover, constrained codes improve the performance on low resolution media by preventing short pulses, which might be missed when reading [11]. As for a -constrained code or for an RLL code increases, the minimum width of a pulse in the stream to be written increases.
The requirement that the power spectrum of a line code vanishes at frequency zero, i.e., the code is direct-current-free (DC-free), is important in optical recording [12] and in digital communication over transmission lines. This requirement is typically accomplished by balancing signal signs in the stream of transmitted (written) codewords. The author in [13] developed a particularly elegant method of achieving balance, which requires the addition of more than bits, where is the code length, and this method was later tailored to RLL codes [14]. The null at DC can be widened by constraining the higher order statistics of line codewords (see [15] and [16] for a frequency domain approach).
Constrained codes also find application in Flash memories. Consider a single-level cell (SLC) Flash memory system (the SLC nomenclature is inaccurate; it is rather a single-bit cell with two levels). Given three adjacent cells, the pattern translates to programming the outer two cells but not the inner cell. This pattern can result in inter-cell interference (ICI) caused by an unintentional increase of the charge level in the inner cell. The pattern is typically less detrimental, but it can cause problems when erasure is not applied to the entire block and the outer cells are initially programmed. See [17] for a study of balanced constrained codes that alleviate ICI in Flash systems by eliminating the pattern , where is the number of levels in the cell and also the Galois field (GF) order111We directly map the elements of the GF to the consecutive integers indexing distinct threshold voltage levels in order to follow the reference. In Flash systems, NRZ signaling is typically adopted.. Another related work is [18].
Furthermore, line codes find application in computer standards for data transmission, such as universal serial bus (USB) and peripheral component interconnect express (PCIe). Line codes for these applications are simpler than -constrained and RLL codes, since streams of codewords are only required to be balanced and to support self-clocking. Examples include the b/b code [19], the b/b code [20], and the b/b code [21]. We note that constrained codes preserving parity are studied in [22], and that constrained codes for deoxyribonucleic acid (DNA) storage are studied in [23]. We refer the reader to [9] for a comprehensive survey of constrained codes available until 1998.
The idea of lexicographic indexing can be traced back to [3] and to [24]. The latter independently introduced the idea in the context of source coding. The RLL codes and balanced RLL codes constructed in [25] and [26], respectively, are based on [24], and the rates achieved improve upon those of earlier RLL codes. However, these gains are only realized at relatively large code lengths, and therefore at a significant cost in terms of complexity, storage overhead, and error performance. Moreover, the technique in [24] does not readily generalize to -constrained codes. While techniques based on lookup tables, e.g., [27], offer a better rate-length trade-off, they incur significant encoding and decoding complexity.
In this paper, we return to the presentation of lexicographic indexing in [3], and develop the idea in the context of a new family of -constrained codes. We call the new codes lexicographically-ordered -constrained codes, or simply LOCO codes. Our three most significant contributions are:
We develop a simple rule for encoding and decoding LOCO codes based on lexicographic indexing. This rule reduces the encoding-decoding of LOCO codes to low-complexity mapping-demapping between the index of a codeword and the codeword itself. We demonstrate that LOCO codes are capacity-achieving codes, and that at moderate lengths, they provide a rate gain of up to compared with practical RLL and other -constrained codes that are used to achieve the same goals. 2. 2.
We demonstrate a density gain of about in modern MR systems by using a LOCO code to protect only the parity bits of a low-density parity-check (LDPC) code via alleviating ISI. The density gain of LDPC-LOCO coding compared with same-rate LDPC coding is about . It is of course possible to protect all the bits of the LDPC code, but our method limits the rate loss. Our demonstration uses a modified version of the PR system described in [10], and a spatially-coupled (SC) LDPC code constructed as in [28]. 3. 3.
We prove that the inherent symmetry of LOCO codes makes balancing easy. Each message in a balanced LOCO code is represented by two codewords that are the complements of each other. Moreover, we show that the rate loss in balancing LOCO codes is minimal, and that this loss tends to zero in the limit, so that balanced LOCO codes achieve the same asymptotic rates as their unbalanced counterparts.
We also describe how to modify LOCO codes to achieve self-clocking with NRZ signaling.
The rest of the paper is organized as follows. In Section II, LOCO codes are formally defined and analyzed. The mapping-demapping between the index of a codeword and the codeword itself is introduced in Section III. Next, the rates of LOCO codes in addition to the practical encoding and decoding algorithms are presented in Section IV. LOCO codes are applied to MR systems in Section V. Balanced LOCO codes and their rates are discussed in Section VI. Finally, the paper is concluded in Section VII.
II Analysis of LOCO Codes
We start with the formal definition of the proposed fixed-length LOCO codes. In the next two sections, we will propose simple, practical encoding and decoding schemes for these codes.
Definition 1**.**
A LOCO code , with parameters and , is defined by the following properties:
Each codeword is binary and of length . 2. 2.
Codewords in are ordered lexicographically. 3. 3.
Each codeword does not contain any pattern in the set , where:
[TABLE]
therefore, . 4. 4.
Codewords in are all the codewords satisfying the previous three conditions.
Lexicographic ordering of codewords means that the codewords are ordered in an ascending manner following the rule for any bit, and the bit significance reduces from left to right. In particular, starting from the left, we say if and only if for the first bit position the two codewords differ at, has [math] while has .
Since -constrained codes are used with NRZ signaling, the constrained set of patterns can also be written as:
[TABLE]
where the notation (resp., ) is defined the same way as (resp., ). Throughout the paper, NRZ (resp., NRZI) signaling is adopted for LOCO (resp., RLL) codes.
Remark 1**.**
In the case of Flash systems, the level is replaced by the erasure level , .
Observe the connection between the forbidden patterns, i.e., the patterns in , and the physics of different data storage systems. As increases, ISI (resp., ICI) is more alleviated in MR (resp., Flash) systems, and the minimum width of a pulse increases. However, increasing reduces the rate of the LOCO code.
Table I presents the LOCO codes , . These LOCO codes have and .
For , we partition the codewords in into four distinct groups as follows:
Group 1: Codewords in this group start with from the left, i.e., at the left-most bits (LMBs).
Group 2: Codewords in this group start with from the left, i.e., at the LMBs.
Group 3: Codewords in this group start with from the left, i.e., at the LMBs.
Group 4: Codewords in this group start with from the left, i.e., at the LMBs222In Groups 3 and 4 and with , there exists only a single codeword, which has fewer bits than these LMBs, in each group. The following analysis also applies for such codewords..
The four groups are shown in Table I for the code .
We will see that this partitioning into groups enables enumeration in addition to low complexity encoding and decoding of LOCO codewords.
Remark 2**.**
In order to satisfy Condition 3 in Definition 1 for a stream of codewords of a LOCO code , a bridging pattern needs to be added between any two consecutively transmitted (written) codewords in this stream. Bridging patterns will be discussed later in this paper.
First, we determine the cardinality of .
Theorem 1**.**
Let be the cardinality (size) of the LOCO code , i.e., . Define:
[TABLE]
Then, the following recursive formula gives :
[TABLE]
Proof:
Observe first that symmetry of forbidden patterns implies that in , the number of codewords starting with [math] from the left, i.e., at the LMB, equals the number of codewords starting with from the left. Thus, to prove our recursive formula (3), we calculate the cardinalities of Group 1 and Group 4 in , , then add these cardinalities and multiply the result by .
Group 1: Each codeword in Group 1 in corresponds to a codeword in that starts with [math] from the left and shares the remaining right-most bits (RMBs) with the codeword in . This correspondence is bijective. Thus, the cardinality of Group 1 is:
[TABLE]
Group 4: Each codeword in Group 4 in corresponds to a codeword in that starts with from the left and shares the remaining RMBs with the codeword in . This correspondence is bijective. Thus, the cardinality of Group 4 is:
[TABLE]
[TABLE]
which completes the proof. ∎
In a similar way, it can be shown that the cardinality of Group 2 is:
[TABLE]
and the cardinality of Group 3 is:
[TABLE]
The value of Theorem 1 is the insight it provides into the structure of . Not only does Theorem 1 perform enumeration via simple recursion, it also significantly contributes to the low-complexity encoding and decoding schemes, which are based on the lexicographic ordering. Note that is always even.
For , the cardinalities form a Fibonacci sequence as (3) becomes:
[TABLE]
The cardinalities for are given in the last row of Table I.
Example 1**.**
Consider the LOCO codes , , illustrated in Table I. From (2), and . From (3), which is (8) for , the cardinalities of , , are:
[TABLE]
The cardinality of , for example, can also be obtained from the cardinalities of its groups that are:
[TABLE]
We now use the group structure of LOCO codes to define a lexicographic indexing of codewords.
Define as the index of a codeword in , which we also abbreviate to when the context is clear. In particular, is the index of the codeword in when all the codewords of are ordered lexicographically. Since the four groups can be defined for a LOCO code of any length, we define them for . Let be a codeword in . For Groups 1 and 2 in , let be the corresponding codeword to according to the proof of Theorem 1, i.e., the RMBs in are .
We define the shift in codeword indices for Groups 1 and 2 in as follows:
[TABLE]
where is the group index. Observe that this shift is fixed for all the codewords in the same group in .
The following lemma gives the values of the shift for Groups 1 and 2.
Lemma 1**.**
The shift in codeword indices defined in (9) for Groups 1 and 2 in a LOCO code is given by:
[TABLE]
Proof:
We prove (10) by deriving for each of the two groups of codewords in as follows.
Group 1: Since corresponding codewords in and in have the same index for that group, we get:
[TABLE]
Group 2: Group 2 in comes right after Groups 1, 4, and 3 (see Table I). On the other hand, the codewords in that correspond to the codewords in Group 2 in come right after all the codewords that start with [math] from the left. Consequently, and using (4), (5), and (7):
[TABLE]
Noting that (11) and (II) combined are (10) completes the proof. ∎
Example 2**.**
From (10), the values of , , for the LOCO code given in the last column of Table I are:
[TABLE]
Note that here , i.e., , and .
III Practical Encoding and Decoding
of LOCO Codes
In this section, we describe how lexicographic indexing supports simple, practical encoding and decoding of LOCO codes. The following theorem is fundamental to the encoding and decoding algorithms presented in Section IV.
In the following, we define a codeword as , where , for all . We also define an integer variable for each such that:
[TABLE]
The same notation applies for . Note that codeword indexing is trivial for the case of .
Theorem 2**.**
Consider a LOCO code with . The index of a codeword is derived from itself according to the following equation:
[TABLE]
Here, we use the abbreviated notation for simplicity.
Proof:
We prove Theorem 2 by induction as follows.
Base: The base case here is the case of . Let the four available codewords in be , , , and , with the subscript of being its index. The four codewords are shown in Table I. The bits of codeword are , , and is defined for each as in (13). We need to prove that (14) yields , .
[TABLE]
Note that , for all , follows directly from (2). Note also that , for all .
Assumption: We assume that (14) holds for the case of , i.e., for all the LOCO codes of length . In particular,
[TABLE]
Note that with bits and variables , , is a codeword in the LOCO code .
To be proved: We prove that (14) holds for the case of , i.e., for the LOCO code of length . In particular,
[TABLE]
We prove (III) for the four groups of codewords in , making use of the inductive assumption and Lemma 1.
Group 1: From (11), we know that for Group 1:
[TABLE]
Note that here starts with [math] from the left. Consequently, and using the assumption in (16):
[TABLE]
Since and share the RMBs, and since starts with from the left, i.e., , (18) can be written as:
[TABLE]
Group 2: From (II), we know that for Group 2:
[TABLE]
Note that here starts with from the left. Consequently, and using the assumption in (16):
[TABLE]
Observe that using (3), we have:
[TABLE]
Substituting (III) in (III) gives:
[TABLE]
Since and share the RMBs, and since starts with from the left, i.e., , (III) can be written as:
[TABLE]
Group 3: Observe that the codewords in Group 3 in are the first codewords in Group 1 in after replacing the [math] at the LMB with for each (with the same order). Therefore, to get the index for a codeword in Group 3, we need to add to the index of the corresponding codeword in Group 1. Thus, and using (III), for Group 3:
[TABLE]
Since starts with from the left, i.e., , (III) can be written as:
[TABLE]
Group 4: Observe that the codewords in Group 4 in are the last codewords in Group 2 in after replacing the at the LMB with [math] for each (with the same order). Therefore, to get the index for a codeword in Group 4, we need to subtract from the index of the corresponding codeword in Group 2. Thus, and using (III), for Group 4:
[TABLE]
Since starts with [math] from the left, i.e., , (III) can be written as:
[TABLE]
As a result of the above analysis for the four groups, (III) is proved, i.e., the induction is proved. Therefore, Theorem 2 is proved for any LOCO code , for all and for all . ∎
Observe that from Theorem 2, two LOCO codewords that differ only in the bit , , satisfy the following:
[TABLE]
For simplicity, consider the case of . In order that these two LOCO codewords exist, if , is guaranteed to be , and if , is guaranteed to be . Consequently, the interpretation of (III) is that this difference in indices equals exactly the number of LOCO codewords of length that start with (resp., [math]) from the left if (resp., ). In both cases, this number is .
The value of Theorem 2 is that it provides the mathematical foundation for the practical encoding and decoding algorithms of our LOCO codes via lexicographic indexing. In particular, this theorem introduces a simple one-to-one mapping from to , which is actually the encoding, and a simple one-to-one demapping from to , which is actually the decoding. The value of this theorem is exemplified in the practical algorithms in the following section. In summary, Theorem 2 provides the encoding-decoding rule for LOCO codes.
Example 3**.**
We illustrate Theorem 2 by applying (14) to two codewords in given in Table I. The first codeword is the one with the index , which is . This codeword has ; thus,
[TABLE]
The second codeword is the one with the index , which is . This codeword has ; thus,
[TABLE]
Example 3 shows how the index, which implies the original message, can be recovered from the LOCO codeword.
Remark 3**.**
Lexicographically-ordered RLL (LO-RLL) codes can be constructed as shown in [3]. Define the binary difference vector of a codeword in a LOCO code , , as , with over GF(), for all . Observe that any codeword of length in has its difference vector of length satisfying the , , RLL constraint. Thus, all the codewords of a LO-RLL code with and length can also be derived from the LOCO code by computing the difference vectors for all the codewords in starting with [math] from the left (the remaining difference vectors will be repeated because of symmetry)333Even though codewords here are not ordered lexicographically, we still call this code a LO-RLL code since all the codewords satisfying the constraint are included and the generating codewords are ordered lexicographically.. Consequently, the cardinality of a LO-RLL code with and length is given by:
[TABLE]
From [3], the cardinality of a LO-RLL code of length is given by:
[TABLE]
[TABLE]
Comparing (30) and (31) to (2) and (3) results in (29). For example, for , , , , , , , …. On the other hand, for , , , , , , …, which demonstrates (29). This observation leads to a simple way of constructing and indexing RLL codes.
IV Rate Discussion and Algorithms
We first discuss bridging patterns. Consider the following scenario. The codeword at transmission (writing) instance is ending with from the right, while the codeword at instance is starting with from the left. The stream containing the two codewords will then have the pattern , which is a forbidden pattern for any LOCO code. This is the motivation behind adding bridging patterns. In particular, bridging patterns prevent forbidden patterns from appearing across two consecutive codewords. If the patterns in are prevented (Condition 3 in Definition 1 is satisfied), any two consecutive transitions will be separated by at least successive bit durations. For -constrained codes, since they are associated with NRZ signaling, transitions are either from [math] to , i.e, to , or from to [math], i.e., to .
Define the symbol as the no transmission (no writing) symbol. For example, in magnetic recording, represents the state when the magnetic grain is unmagnetized. As done before, we also define the notation to represent a run of consecutive symbols. We propose two methods for adding bridging patterns that prevent forbidden patterns from appearing in streams of LOCO codewords. The first method is simply to add the bridging pattern between each two consecutive LOCO codewords. The second method is to make a run-time decision on the bridging pattern of length based on the RMBs in the codeword at instance and the LMBs in the codeword at instance .
In the first method, adding a run of consecutive symbols, i.e., not transmitting (not writing) for successive bit durations, guarantees that no pattern in appears across consecutive LOCO codewords in . This method is quite simple, and does not require any knowledge of the codewords being transmitted (written). However, it is not optimal in the sense that it does not provide the maximum achievable protection, e.g., from ISI in MR systems, for the bits at the two ends of the codeword. For example, in the scenario at the start of this section, it is best to use for bridging if .
While the second method provides better protection for the bits at the two ends of the codeword, it introduces additional complexity and latency. However, it is still feasible for small values of . For example, Table II provides the bridging patterns of the second method for LOCO codes with .
Whether the first or the second method is used for bridging, the number of added bits/symbols for each codeword is . Moreover, bridging patterns are ignored at the decoding.
Remark 4**.**
In the case of Flash systems, transitions are either from [math] to , i.e, to , or from to [math], i.e., to . Moreover, the no writing symbol represents the state when the cell is programmed to a charge level about the mid-point between and .
Remark 5**.**
For LOCO codes with parameter , the optimal bridging, in terms of bits protection, is different from the second bridging method. In particular, if the RMB of the codeword at instance is [math] (resp., ), (resp., ) is added for bridging after that [math] (resp., ). Moreover, if the LMB of the codeword at instance is [math] (resp., ), (resp., ) is added for bridging before that [math] (resp., ). Thus, for this optimal bridging, bridging bits are needed, which also keeps the code length fixed. However, such bridging is not efficient in terms of the added redundancy, in addition to its higher complexity compared with the first bridging method. Furthermore, our simulations demonstrate that the other two bridging methods described above are already guaranteeing a more than satisfactory performance.
One of the important requirements not only in constrained codes, but also in all types of line codes is self-clocking [4, 9]. In particular, the receiver should be capable of retrieving the clock of the transmitter from the signal itself. This requires avoiding long runs of [math]’s (’s) and long runs of ’s (’s). To achieve this goal, we construct the following code.
Definition 2**.**
A self-clocked LOCO (C-LOCO) code is the code resulting from removing the all [math]’s and the all ’s codewords from the LOCO code . In particular,
[TABLE]
where . The cardinality of is given by:
[TABLE]
Now, there exists at least one transition in each codeword in . Define as the maximum number of successive bit durations between two consecutive transitions in a stream of C-LOCO codewords that belong to , with each two consecutive codewords separated by a bridging pattern. For the sake of abbreviation, we here use the format “codeword at bridging pattern codeword at ”. The scenarios under which is achieved, using the first bridging method, are:
[TABLE]
The scenarios under which is achieved, using the second bridging method, are:
[TABLE]
Observe that a transition is only from [math] to or from to [math]. Consequently, regardless of the chosen method, we get:
[TABLE]
We are now ready to discuss the rate of C-LOCO codes. A C-LOCO code , with bridging bits/symbols associated to each codeword, has rate:
[TABLE]
where is obtained from the recursive relation (3). The numerator, which is , is the length of the messages encodes.
Observe that a C-LOCO code consists of all codewords of length , with the exception of the two codewords and , that do not contain any of the forbidden patterns in . Moreover, the number of added bits/symbols for bridging is function of only, and thus does not grow with . Consequently, it follows that C-LOCO codes are capacity-achieving constrained codes.
Example 4**.**
Consider again the LOCO code in Table I. From (34), the C-LOCO code derived from has:
[TABLE]
The length of the messages encodes is:
[TABLE]
The C-LOCO code is shown in Table III for all messages. From (IV), the rate of is:
[TABLE]
Note that the rate of is relatively low because of the small code length, , and because of the relatively high number of unused codewords. Table IV shows the rates of C-LOCO codes for different values of and for . The rates in Table IV for C-LOCO codes with are significantly higher than .
Table IV demonstrates that C-LOCO codes have rates up to (resp., ) for the case of (resp., ) with moderate code lengths. From the literature, the capacity of a -constrained code with (resp., ) is (resp., ) [8, 9]. The table shows that the rate of the C-LOCO code (resp., ) is within only (resp., ) from the capacity. In fact, these rates even increase with an informed increase in the value of until they reach the capacity. For example, the rate of is , which is only from the capacity. Additionally, the rate of is , which is only from the capacity.
For the sake of comparison with other line codes having similar performance, we focus on constrained codes generated via finite-state machines (FSMs) and decoded via sliding window decoders [4, 8, 9, 29] because of their practicality. The FSM-based constrained codes we compare with include both RLL and -constrained codes.
We briefly discuss RLL codes. An RLL code with parameter constrains each codeword to have at least [math]’s between each two consecutive ’s. RLL codes are used with NRZI signaling. Thus, an RLL code with parameter has any two consecutive transitions separated by at least successive bit durations444The maximum number of successive bit durations between two consecutive transitions for a RLL code with NRZI signaling is . This maximum number is for a C-LOCO code with NRZ signaling.. Therefore, and from the definition of a LOCO code, an RLL code with parameter has similar performance to a LOCO code with parameter .
Consider FSM-based RLL codes with and FSM-based -constrained codes. There are three main advantages of LOCO codes over FSM-based constrained codes used for the same purpose, which are:
LOCO codes achieve higher rates. 2. 2.
LOCO codes are immune against error propagation from a codeword into another. 3. 3.
Balancing LOCO codes is not only simple, but also incurs a very limited rate loss.
The second and third advantages will be discussed later in this paper. As for the rate advantage, a practical FSM-based RLL code with typically has a rate of , which is the same rate a practical FSM-based -constrained code has [4, 8]. This rate is lower than the rates of all C-LOCO codes with in Table IV except the code with . Moreover, a practical FSM-based RLL code with typically has a rate of , which is the same rate a practical FSM-based -constrained code has [4, 9]. This rate is lower than the rates of all C-LOCO codes with in Table IV except the code with . The rate gain of moderate-length C-LOCO codes over practical FSM-based constrained codes, where , is up to . In particular, achieves a rate of at a moderate complexity, which is about higher than the typical rate of a practical FSM-based constrained code, where , that is (see also [4] and [9]).
The observation that constrained codes based on lexicographic indexing offer significant rate gains compared with FSM-based constrained codes was presented in [25] and [26]. However, the techniques proposed in both papers require the code length to be significantly large () in order to achieve such gains, which is not needed for LOCO codes. This observation will be demonstrated even more upon introducing balanced LOCO codes.
We introduce now the encoding and decoding algorithms of our C-LOCO codes, which are based on Theorem 2. Algorithm 1 is the encoding algorithm, and Algorithm 2 is the decoding algorithm.
Consider the C-LOCO code . It is possible that there exists a binary vector of length , , which is not a C-LOCO codeword, and a C-LOCO codeword of length , , such that:
[TABLE]
where is defined for each the same way is defined for each in (13). To prevent encoding a vector like , which is not a C-LOCO codeword, we need to prevent forbidden patterns from appearing while encoding via Algorithm 1.
The steps from 18 to 31 in Algorithm 1 are to make sure forbidden patterns of the form , , in do not appear in any codeword. As for forbidden patterns of the form , , they will never appear if forbidden patterns of the form , , are guaranteed to be eliminated. The justification goes as follows. Suppose we are encoding , , and . Since patterns of the form , , do not appear in any codeword, it suffices to show that , , cannot appear either. In other words, we want to show that if the variable residual is not enough to encode , it is not enough to encode , which implies that it is not enough to encode , . This property for residual is satisfied if:
[TABLE]
Let . From (3), we get:
[TABLE]
From (IV), we conclude that (37) is true, and it is an equality, which means the residual property is satisfied. Note also that the conclusion is correct for , which completes the justification.
Example 5**.**
We illustrate Algorithm 1 by showing how to encode a message using the C-LOCO code given in Table III. Here, , , , , , , and . Moreover, . Consider the message . From Step 6, , which is the initial value of the variable residual. Since , from Step 11, is encoded as . At Step 12, residual becomes . Then, the algorithm enters the for loop from Step 14 to Step 39. The remaining bits of the codeword are encoded as follows:
- •
At , . Consequently, is encoded as [math] at Step 16.
- •
At , . Consequently, is encoded as [math] at Step 16.
- •
At , . Here, . From Steps 20 and 25, and , respectively. Since , the condition in Step 26 is satisfied, leading to , which means that if is encoded as , a forbidden pattern of the form will be created on , , and . Consequently, is encoded as [math] at Step 36 to prevent this scenario.
- •
At , . Here, . From Steps 20 and 25, and , respectively. Since , the condition in Step 26 is not satisfied, leading to . Consequently, is encoded as at Step 33, and residual becomes .
- •
At , . Here, . Consequently, is encoded as at Step 33.
As a result, the codeword generated is , which is codeword indexed by in Table III.
Example 3 in Section III already showed how the decoding algorithm works.
As demonstrated by Algorithm 1 and Algorithm 2 in addition to Theorem 2, the encoding procedure of C-LOCO codes is mainly comparisons and subtractions, while the decoding procedure of C-LOCO codes is mainly additions. The size of the adders used to perform these tasks, referred to in Tables IV and VII as “Adder size”, is the maximum value can take that corresponds to a message, and it is given by:
[TABLE]
which is the message length. Table IV links the rate of a C-LOCO code with its encoding and decoding complexity through the size of the adders to be used. For example, for a C-LOCO code with , if a rate of is satisfactory, small adders of size just bits are all what is needed. However, in case the rate needs to be about , adders of size bits should be used. Moreover, for a C-LOCO code with , if a rate of is satisfactory, small adders of size just bits are all what is needed. However, in case the rate needs to be about , adders of size bits should be used. Note that the cardinalities , , should be stored in the memory offline. Note also that the multiplication by is just a right shift by one unit in binary, and it can be done only once at the beginning of the encoding-decoding.
From Table IV, the C-LOCO code has rate and adder size bits. The same rate is achieved in [27] for an RLL code with at code (resp., message) length (resp., ) bits. However, the technique in [27] is based on lookup tables; thus, the complexity of the encoding and decoding is governed by lookup tables of size bits. Note that in the case of , the size of these lookup tables governing the complexity can reach bits. This complexity is significantly higher than what we offer.
LOCO codes are also reconfigurable. In particular, if the size of the adders is appropriate, the same set of adders used to encode-decode a specific LOCO code can be reconfigured to encode-decode another LOCO code just by changing their inputs (the cardinalities) through multiplexers.
Remark 6**.**
Observe that (29) in Remark 3 shows that the capacity of a -constrained code is the same as the capacity of a RLL code with since:
[TABLE]
In other words, LO-RLL codes achieve similar rates to the rates of LOCO codes asymptotically. This fact can also be reached from the finite-state transition diagrams of the constraints [8, 9]. However, (29) also shows that LOCO codes are more efficient compared with LO-RLL codes in the finite-length regime. The reason is that from (29) and (3), the difference between the cardinalities of a LOCO code and a LO-RLL code with and length is:
[TABLE]
Thus, if the same number of bits is used for bridging, the LOCO code can achieve higher rates at the same code length or lower complexities at the same rate555Another way to understand why this is the case is that for and at the same length, the RLL constraint results in forbidding more prospective codewords compared with the constraint.. This is also true when the two codes are self-clocked. For example, for and using bit/symbol for bridging in both codes, a self-clocked LOCO code of length and adder size of bits is enough to achieve a rate of (see Table IV), while to achieve the same rate using a self-clocked LO-RLL code, the length has to be increased to and the adder size to bits, which means roughly double the complexity of the LOCO encoding-decoding.
We end this section by discussing two more aspects in the proposed LOCO codes: error propagation in addition to parallel encoding and decoding. The fixed length of LOCO codes makes them immune against error propagation from a codeword into the following ones. In particular, multiple errors occurring in one codeword do not affect the decoding of the following codewords. However, for large code lengths, few bit errors in a LOCO codeword can affect many bits in the message, which is the reason why we recommend LOCO codes with moderate lengths. On the contrary, FSM-based constrained codes with sliding window decoders suffer from error propagation among different codewords that is exacerbated with long codeword lengths (and also with long streams of codewords) [5]. Furthermore, because of their fixed length, LOCO codes enable parallel encoding and decoding of different codewords if the complexity constraints of the system allow that. This advantage can be of significant value in data storage systems, where codewords are already written upon receiving (reading) them. On the other hand, FSM-based constrained codes with sliding window decoders do not enable efficient parallel encoding and decoding. The properties stated here for LOCO codes also apply to the balanced LOCO codes discussed in Section VI.
V Density Gains in MR Systems
Our MR system model is shown in Fig. 1, and it consists of the following modules.
LDPC encoder: This is a binary spatially-coupled (SC) LDPC encoder, which takes bits of input data and generates an SC codeword of length bits. The adopted SC codes will be described shortly.
LOCO encoder: It takes the SC codeword as input, and using Algorithm 1, it encodes only parity bits via a C-LOCO code to significantly increase their reliability by mitigating ISI for them as previously illustrated. The parameters of the C-LOCO code will be described shortly, but it has a much smaller length compared with . Thus, there is a stream of C-LOCO codewords, with each consecutive two of them separated by a bridging pattern . The output of the LOCO encoder is of length .
NRZ signal generator: It generates an NRZ stream of symbols, each of which is in , except for the bridging symbols. Symbol for bridging corresponds to no transmission (no writing).
Interleaver: A pseudo-random interleaver is applied only on the bits that are not encoded via the C-LOCO code.
PR channel: We use the PR channel described in [10]. The MR channel effects are inter-symbol interference (intrinsic memory), jitter, and electronic noise. The channel density [10, 30], which is the ratio of the read-head pulse duration at half the amplitudes to the bit duration, is swept to generate the plots. The signal-to-noise ratio (SNR) is dB. A continuous-time filter (CTF) followed by a digital finite-impulse-response (DFIR) filter are applied to achieve the PR equalization target . Observe that this PR target, which is recommended by the industry, behaves in a way similar to the channel impulse response [10, 30]. This observation is an important reason why we are here adopting the set of symmetric forbidden patterns, which is closed under taking pattern complements.
BCJR detector: A Bahl Cocke Jelinek Raviv (BCJR) detector [31], which is based on pattern-dependent noise prediction (PDNP) [32], is then applied to the received stream to calculate likelihood ratios (LRs). There is a feedback loop incorporating the detector and the decoders.
Deinterleaver: It rearranges the LRs of the bits that were not encoded via the C-LOCO code, i.e., the ones that were originally interleaved.
LOCO decoder: Initially, this decoder makes a hard decision on the bits that were encoded via the C-LOCO code using their LRs. If the constraint is violated for the received word or the received word is in , the LOCO decoder tries to fix that by flipping the bit with the closest LR to (the smallest LR in magnitude). In other words, the LOCO decoder performs some sort of error correction here. Next, it decodes the original parity bits using Algorithm 2. Finally, the LOCO decoder sends LRs to the LDPC decoder; LRs left as they are, and highly reliable LRs.
LDPC decoder: This is a fast Fourier transform based -ary sum-product algorithm (FFT-QSPA) LDPC decoder [33], with , the GF order, being set to here. The number of global (detector-decoders) iterations is , and the number of local (LDPC decoder only) iterations is . Unless a codeword is reached, the LDPC decoder performs its prescribed number of local iterations for each global iteration. At the end of each global iteration, except the last one, the LDPC decoder, sends its updated LRs in the feedback loop.
LR expander: The BCJR detector operates on symbols. Thus, an LR expander is used to expand the LR vector from to via the information it receives from the LOCO and the LDPC decoders.
Interleaver: The interleaver in the feedback branch of the detector-decoders loop is a pseudo-random interleaver, which is applied only on the LRs of the bits that were not encoded via the C-LOCO code.
At the last global iteration, looping stops, and the LDPC decoder generates the data read ( bits). More details about some of these modules can be found in [10].
Remark 7**.**
If the C-LOCO message length, , does not divide , we pad with few, say , zeros.
One of the two reasons why we do not apply the C-LOCO code on the entire LDPC codeword here is to limit the rate loss resulting from integrating the C-LOCO code in the MR system, which is a critical requirement in all data storage systems. The other reason will be introduced upon discussing the simulation plots. Lemma 2 gives the overall rate of the LDPC-LOCO coding scheme applied in our system.
Lemma 2**.**
Consider the following LDPC-LOCO coding scheme. A C-LOCO code of rate is used to encode only the parity bits of an LDPC code of rate . The overall rate of this scheme is:
[TABLE]
Proof:
The length of the LDPC codeword can be written as:
[TABLE]
Only those bits are going to be encoded via the C-LOCO code. Consequently,
[TABLE]
As a result, the overall rate is:
[TABLE]
Note that is very small compared with . ∎
Lemma 2 demonstrates that the rate loss due to integrating a C-LOCO code in the MR system the way we do it is limited. In fact, from the expression in (42), as approaches , approaches . The reason is that when approaches , becomes , where . Thus, also approaches like . Numerical examples are: for and , , while for and , , which is only lower than .
There are two binary SC codes used in our simulations. The two codes are constructed according to [28], which provides a method to design high performance SC codes particularly for MR systems. This method is based on the optimal overlap, circulant power optimizer (OO-CPO) approach. SC Code 1 has column weight , maximum row weight , circulant size , memory , and coupling length . Thus, SC Code 1 has block length bits and rate . SC Code 2 has column weight , maximum row weight , circulant size , memory , and coupling length . Thus, SC Code 2 has block length bits and rate . The differences in length and rate between the two SC codes will be illustrated shortly. Only SC Code 1 will be combined with a C-LOCO code.
The C-LOCO code we use in the simulations is the code . This code has and . Thus, from (34), has . Moreover, has , which means the message length is . Thus, from (IV), the rate of is since one symbol is used for bridging.
We generate three plots, as shown in Fig. 2, for the following three simulation setups:
SC Code 1 (original SC code) is used for error correction, and no C-LOCO code is applied. 2. 2.
SC Code 2 (lower rate SC code) is used for error correction, and no C-LOCO code is applied. 3. 3.
SC Code 1 is combined with the C-LOCO code such that only the parity bits of SC Code 1 are encoded via .
The energy per input data bit in all three setups is the same.
For Setup 3, we have the following parameters: (see [28]), , , , and . From (44), the overall length after applying the C-LOCO code in Setup 3 is:
[TABLE]
Furthermore, from (42), the overall rate is . Thus, the overall length and rate in Setup 3 are similar to the length and rate of SC Code 2 in Setup 2.
The frame error rate (FER) versus density plots for the three setups are shown in Fig. 2. The figure demonstrates the gains of Setup 3, in which a C-LOCO code is applied in the MR system, over the other two setups. In particular, the density gain of Setup 3 over Setup 1 (resp., Setup 2) is about (resp., ) at FER . The density gain achieved in Setup 3 over Setup 2 implies that exploiting the additional redundancy by applying a C-LOCO code is significantly more helpful compared with exploiting this redundancy by adding more parity bits. An intriguing observation from Fig. 2 is that the error floor slope in Setup 3 is sharper than the error floor slope in the other two setups.
While applying the C-LOCO code to the entire LDPC codeword provides higher density gains, the overall rate loss becomes very high since the rate in this case becomes . For example, if is applied to the entire codeword of SC Code 1, the overall rate becomes , which is a lot lower than in Setup 3, which is . Additionally, the density gains achieved diminish gradually with more bits being encoded via the C-LOCO code. In summary, the proposed idea in Setup 3 offers a better rate-density gain trade-off.
Setup 3 is motivated by a particular understanding of graph-based codes. Even though only a group of bits in the LDPC codeword, which are the bits encoded via the LOCO code, have highly reliable LRs while decoding, the information in these highly reliable LRs will be spread to all bits during the message passing procedure. Therefore, the LDPC decoder experiences a version of the channel with a higher effective SNR, which results in the decoder, aided by the detector and the LOCO decoder, kicking-off its operation at higher densities.
The contribution in Section V is the idea that investing the additional redundancy in protecting the parity bits only of an LDPC code from ISI is significantly more effective than investing this redundancy in adding more parity bits. Observe that if we apply the same setup but replace the LOCO code with an RLL code having and the same rate, the performance gains would be comparable. However, there will be an additional complexity associated with using an RLL code that has the same rate as the LOCO code, which is discussed in Sections IV and VI in the paper.
Remark 8**.**
In this paper, we use the word “moderate” to describe lengths of LOCO codes. The context of this usage may not be generalized to include LDPC codes since what is moderate for LOCO codes is very small for LDPC codes.
VI Balanced LOCO Codes
A critical additional requirement in line codes, which appears in applications like optical recording, Flash memories, in addition to USB and PCIe standards, is balancing [13, 17, 26]. Examples of balanced line codes are the b/b [19] and the b/b [20] codes (the latter is not strictly DC-free). Balanced line codes have zero average power at frequency zero, i.e., no DC power component, when the signal levels are and . This is achieved by constraining the running disparity of any stream of codewords from the line code. The work in [15] relates the running disparity to the width of the power spectral null. The running disparity is measured before each new codeword in the stream, and equals the sum of disparities of all the previous codewords and their bridging patterns. The disparity of a codeword , , is defined as the difference between the number of and ( and in Flash) symbols in the transmitted (written) codeword after the signaling scheme is applied. When NRZ signaling is applied, this disparity is directly the difference between the number of ’s and [math]’s in the codeword.
A standard way of balancing line codes is to encode each message to one of two codewords having the same magnitude but opposite signs for their disparities. Then, depending on the sign of the running disparity, one of these two codewords is picked for the incoming message. Codewords having zero disparity can be used to uniquely encode messages. For example, the b/b code adopts this way of balancing. This simple code is constructed to achieve balancing and self-clocking only, which is why it has a high rate. More advanced line codes, e.g., -constrained or RLL codes, have more requirements, e.g., improving the performance in data storage systems, making their rates less compared with the above simple line code. Thus, balancing these constrained codes via the approach mentioned in this paragraph incurs a penalty. This penalty is either rate loss (rate reduction) for the same complexity or additional complexity for the same rate.
In this section, we demonstrate another advantage of LOCO codes, which is that they can be balanced with the minimum penalty. We start with the following lemma.
Lemma 3**.**
Define codeword as a LOCO codeword in that starts with [math] from the left. Define codeword as the LOCO codeword indexed by in , where is the index of . The two codewords and are the complements of each other.
Proof:
We first define (resp., ) for each bit in (resp., in ) as in (13).
Since starts with [math] from the left, using (14) gives:
[TABLE]
From the definition of , it has to start with from the left. Thus, using (14) gives:
[TABLE]
Furthermore, we also have:
[TABLE]
Consequently, using (46) and (47), we get:
[TABLE]
which means:
[TABLE]
The last equality in (VI) follows from that is the index of the LOCO codeword .
For a given codeword starting with [math] from the left in , the codeword starting with from the left in , and having the RMBs being the complements of the RMBs in , makes (VI) satisfied. Because the mapping from to is one-to-one, such a codeword has to be the only codeword with that property. Since and are already complements, and are then the complements of each other. ∎
Note that since we adopt NRZ signaling,
[TABLE]
Thus, and based on Lemma 3, we now define the proposed balanced LOCO (B-LOCO) codes.
Definition 3**.**
A balanced LOCO (B-LOCO) code , with , is a LOCO code in which, each pair of codewords and , having indices and in , respectively, are used to encode a single message. The selected codeword is either or depending on the sign of the running disparity as shown in Table V. Consequently, the cardinality of is:
[TABLE]
However, only a maximum of codewords in correspond to distinct messages666That is why the minimum length we adopt for a B-LOCO code, and later a self-clocked B-LOCO code, is the length at which the cardinality ..
Remark 9**.**
If the second bridging method is adopted and or/and , it is also possible to select the codeword that enhances self-clocking taking into account the previous codeword.
Example 6**.**
The B-LOCO code is shown in Table VI with the codeword disparities. Observe that (51) is always satisfied, i.e., . The cardinality of is:
[TABLE]
However, only a maximum of codewords in correspond to distinct messages.
The running disparity in the case of B-LOCO codes satisfies (see also Example 6). In particular, if is even, and if is odd. Moreover, because of the way codewords are chosen, as shown in Table V, this running disparity is around [math] most of the time for long streams of codewords.
The following theorem is the key theorem for encoding and decoding B-LOCO codes.
Theorem 3**.**
Consider a B-LOCO code with . The index of a codeword is derived from itself according to the following two equations:
If the LMB :
[TABLE]
If the LMB :
[TABLE]
Here, we use the abbreviated notation for simplicity.
Proof:
For the case of , it is clear that:
[TABLE]
where is the index of in . Thus, using (14):
[TABLE]
For the case of , must equal that of the corresponding codeword in that starts with [math] from the left. From Lemma 3, in that has , which is in , and its corresponding codeword in that starts with [math] from the left, which is in , are the complements of each other. Consequently, we conclude:
[TABLE]
which completes the proof. ∎
Example 7**.**
We illustrate Theorem 3 via an example. Consider given in Table VI. We check the two codewords indexed by , which are and . From (53), the codeword starting with [math] from the left has:
[TABLE]
From (54), the codeword starting with from the left has:
[TABLE]
Bridging in B-LOCO codes is performed the same way as described in Section IV for LOCO codes. Define the disparity change resulting from adding a symbol after a B-LOCO codeword to be [math], which makes sense as is the no transmission (no writing) symbol. Observe that whether the first method or the second method is used for bridging, the above analysis does not change. This statement is clear for the first method. As for the second method, note that the complement rule in Lemma 3 applies also for bridging patterns (see Table II), which justifies the statement. We use the first bridging method in this section since, in addition to its simplicity, it results in no disparity change, and thus no increase in the maximum magnitude of the running disparity.
Definition 4**.**
A self-clocked B-LOCO (CB-LOCO) code is the code resulting from removing the all [math]’s and the all ’s codewords from the B-LOCO code . In particular,
[TABLE]
where . The cardinality of is given by:
[TABLE]
However, only a maximum of codewords in correspond to distinct messages.
Define as the maximum number of successive bit durations between two consecutive transitions in a stream of CB-LOCO codewords that belong to , with each two consecutive codewords separated by . Recall that a transition is only from [math] to or from to [math]. Consequently, we get:
[TABLE]
Remark 10**.**
A stream of B-LOCO codewords that belong to , each having and using the first bridging method, is encoded as follows:
[TABLE]
If the system can make use of the (resp., ) followed by the (resp., ) changes for self-clocking, the two codewords and can be kept in the code. Here, we assume that the system cannot use these changes for self-clocking, and that is why our definition for a transition is exclusively from [math] to or from to [math].
Note that the maximum magnitude of the running disparity in the case of CB-LOCO codes is , not , because of the removal of the two codewords and . Thus, CB-LOCO codes are better than B-LOCO codes in that regard.
Remark 11**.**
If the second bridging method is used instead, the two codewords and can be kept in the code, and becomes . We do not adopt this method here since it increases , increases the maximum magnitude of the running disparity to , in addition to its complexity.
We are now ready to discuss the rate of CB-LOCO codes. A CB-LOCO code , with bridging bits/symbols associated to each codeword, has rate:
[TABLE]
where is obtained from the recursive relation (3). The numerator, which is , is the length of the messages encodes.
Comparing the rate of the CB-LOCO code to the C-LOCO code via subtracting (VI) from (IV) gives:
[TABLE]
Consequently,
[TABLE]
Under the balancing approach of having two codewords to encode each message, the maximum number of codewords corresponding to distinct messages drops to at most half the cardinality of the unbalanced code. Thus, a balanced code achieves the minimum rate loss if the code has a rate loss of only with respect to its unbalanced code; since this means the balanced code contains all the codewords of the unbalanced code. In other words, for each codeword in the unbalanced code, there exists another codeword to be paired with, such that the two codewords have their disparities with the same magnitude but opposite signs. Consequently, no codewords are skipped from the unbalanced code in order to achieve balancing. We refer to this rate loss as the one-bit minimum penalty because it can be viewed as a reduction of one bit from the message length. From the above discussion and (62), our CB-LOCO codes achieve the minimum rate loss, i.e., they achieve the one-bit minimum penalty.
Observe that asymptotically, i.e., as , the rate loss resulting from balancing LOCO codes tends to zero from (62). Thus, CB-LOCO codes asymptotically achieve the same rates as C-LOCO codes. Moreover, the penalty of (rate loss due to) balancing LOCO codes has the highest possible vanishing rate with . As shown in Table VII, the rate of the moderate-length CB-LOCO code (resp., ) is within only (resp., ) from the capacity of an unbalanced -constrained code having (resp., ). As far as we know, balancing other constrained codes in the literature always incurs a notable rate loss, even asymptotically, with respect to the unbalanced codes [13, 26, 17], which is not the case for LOCO codes. For example, the balancing penalty in [13] is an added redundancy of more than (see also [14]), which is a costly penalty. Moreover, in order to reduce the rate loss due to balancing, the authors of [26] are adopting large code lengths, which is not needed for LOCO codes. In the finite-length regime, we achieve a higher rate at the same code length or the same rate at a smaller code length in comparison with [26].
Example 8**.**
Consider again the B-LOCO code in Table VI. From (60), the CB-LOCO code derived from has:
[TABLE]
The length of the messages encodes is:
[TABLE]
The CB-LOCO code is also shown in Table VI for all messages. From (VI), the rate of is:
[TABLE]
For bigger values of , the rate of a CB-LOCO code exceeds (resp., ) for (resp., ) as shown in Table VII and discussed before Example 8. These rates cannot be achieved for practical balanced FSM-based RLL codes having . Moreover, even to approach these rates, the encoding-decoding complexity of the balanced FSM-based RLL code will be significantly larger than that of the CB-LOCO code. CB-LOCO codes also offer a better rate-complexity trade-off compared with balanced FSM-based -constrained codes. Recall that the rate of a practical FSM-based unbalanced constrained code is typically (resp., ) for (resp., ) [4, 8].
Algorithms 1 and 2 can be modified to encode and decode CB-LOCO codes. The major changes are:
For both algorithms, the message length (adder size) is changed to . 2. 2.
For Algorithm 1, the message here is encoded to initially. After Step 40, is calculated. Then, a check is made on the disparities and . If and have the same sign, the codeword complement of is transmitted (written), i.e., , and . Otherwise, is transmitted (written), and . The updated running disparity is then calculated for the next codeword using . Only is needed because we use the first bridging method. 3. 3.
Let be the number of ’s in codeword in . For Algorithm 1, can be easily computed from:
[TABLE] 4. 4.
For Algorithm 2, Steps 5, 6, and 7 are removed. Moreover, if , the condition under which is increased by remains “if ” from (53) in Theorem 3. However, if , the condition under which is increased by becomes “if ” from (54) in Theorem 3.
Table VII also links the rate of a CB-LOCO code with its encoding and decoding complexity through the size of the adders to be used.
Remark 12**.**
Observe that LO-RLL codes constructed as shown in [3] or via the ideas in Remark 3 do not have the balancing advantage of LOCO codes, which is the complement rule in Lemma 3. In other words, given a LO-RLL codeword, there does not necessarily exist another LO-RLL codeword such that their disparities have the same magnitude but opposite signs after NRZI signaling. Therefore, balancing these codes is associated with a higher penalty compared with balancing LOCO codes as a result of the many unused codewords. This is another advantage of LOCO codes over LO-RLL codes in addition to the rate-complexity trade-off advantage illustrated in Remark 3 and Remark 6.
VII Conclusion
We introduced LOCO codes, a new family of constrained codes, where the combination of recursive structure and lexicographic indexing of codewords enables simple mapping-demapping between the index and the codeword itself. We showed that this mapping-demapping enables low complexity encoding and decoding algorithms. We also showed that LOCO codes are capacity-achieving, and that at moderate lengths, they provide a rate gain of up to compared with other practical constrained codes that are used to achieve the same goals. Inherent symmetry of LOCO codes makes balancing easy. We demonstrated that the rate loss associated with balancing LOCO codes is minimal, and that this loss tends to zero in the limit, so that balanced LOCO codes achieve the same asymptotic rates as their unbalanced counterparts. Moreover, we demonstrated a density gain of about in modern MR systems by using a LOCO code to protect only the parity bits of an LDPC code via mitigating ISI. We suggest that LOCO codes provide a simple and effective practical method for improving the performance of a wide variety of data storage and computer systems. Ongoing work includes asymmetric and non-binary LOCO codes.
Acknowledgment
The authors would like to thank the associate editor Prof. Anxiao Jiang for handling the paper and for the constructive feedback. The authors would also like to thank the anonymous reviewers for their valuable and helpful comments (this extends to the ITW reviewers as well).
The reference list from the paper itself. Each links out to its DOI / PubMed record.
- 1[1]
- 2[2] A. Hareedy and R. Calderbank, “A new family of constrained codes with applications in data storage,” in Proc. IEEE Inf. Theory Workshop (ITW) , Visby, Sweden, Aug. 2019.
- 3[3] D. T. Tang and R. L. Bahl, “Block codes for a class of constrained noiseless channels,” Inf. and Control , vol. 17, no. 5, pp. 436–461, 1970.
- 4[4] P. Siegel, “Recording codes for digital magnetic storage,” IEEE Trans. Magn. , vol. 21, no. 5, pp. 1344–1349, Sep. 1985.
- 5[5] D. G. Howe and H. M. Hilden, “Shift error propagation in 2, 7 modulation code,” IEEE J. Sel. Areas Commun. , vol. 10, no. 1, pp. 223–232, Jan. 1992.
- 6[6] B. Vasic and E. Kurtas, Coding and Signal Processing for Magnetic Recording Systems. CRC Press, 2005.
- 7[7] G. Colavolpe and G. Germi, “On the application of factor graphs and the sum-product algorithm to ISI channels,” IEEE Trans. Commun. , vol. 53, no. 5, pp. 818–825, May 2005.
- 8[8] R. Karabed and P. H. Siegel, “Coding for higher-order partial-response channels,” in Proc. SPIE Int. Symp. Voice, Video, and Data Commun. , M. R. Raghuveer, S. A. Dianat, S. W. Mc Laughlin, and M. Hassner, Eds., Philadelphia, PA, Oct. 1995, vol. 2605, pp. 115–126.
