Аннотация: Контроль по четности, CRC, алгоритм Хэмминга. Введение в коды Рида-Соломона: принципы, архитектура и реализация. Метод коррекции ошибок FEC (Forward Error Correction).
Каналы передачи данных ненадежны (шумы, наводки и т.д.), да и само оборудование обработки информации работает со сбоями. По этой причине важную роль приобретают механизмы детектирования ошибок. Ведь если ошибка обнаружена, можно осуществить повторную передачу данных и решить проблему. Если исходный код по своей длине равен полученному коду, обнаружить ошибку передачи не предоставляется возможным. Можно, конечно, передать код дважды и сравнить, но это уже двойная избыточность.
Простейшим способом обнаружения ошибок является контроль по четности. Обычно контролируется передача блока данных ( М бит). Этому блоку ставится в соответствие кодовое слово длиной N бит, причем N>M. Избыточность кода характеризуется величиной 1-M/N. Вероятность обнаружения ошибки определяется отношением M/N (чем меньше это отношение, тем выше вероятность обнаружения ошибки, но и выше избыточность).
При передаче информации она кодируется таким образом, чтобы с одной стороны характеризовать ее минимальным числом символов, а с другой – минимизировать вероятность ошибки при декодировании получателем. Для выбора типа кодирования важную роль играет так называемое расстояние Хэмминга.
Пусть А и Б — две двоичные кодовые последовательности равной длины. Расстояние Хэмминга между двумя этими кодовыми последовательностями равно числу символов, которыми они отличаются. Например, расстояние Хэмминга между кодами 00111 и 10101 равно 2.
Можно показать, что для детектирования ошибок в n битах схема кодирования требует применения кодовых слов с расстоянием Хэмминга не менее N + 1. Можно также показать, что для исправления ошибок в N битах необходима схема кодирования с расстоянием Хэмминга между кодами не менее 2N + 1. Таким образом, конструируя код, мы пытаемся обеспечить расстояние Хэмминга между возможными кодовыми последовательностями большее, чем оно может возникнуть из-за ошибок.
Широко распространены коды с одиночным битом четности. В этих кодах к каждым М бит добавляется 1 бит, значение которого определяется четностью (или нечетностью) суммы этих М бит. Так, например, для двухбитовых кодов 00, 01, 10, 11 кодами с контролем четности будут 000, 011, 101 и 110. Если в процессе передачи один бит будет передан неверно, четность кода из М+1 бита изменится.
Предположим, что частота ошибок ( BER – Bit Error Rate) равна р = 10-4. В этом случае вероятность передачи 8 бит с ошибкой составит 1 – (1 – p)8 = 7,9 х 10-4. Добавление бита четности позволяет детектировать любую ошибку в одном из переданных битах. Здесь вероятность ошибки в одном из 9 битов равна 9p(1 – p)8. Вероятность же реализации необнаруженной ошибки составит 1 – (1 – p)9 – 9p(1 – p)8 = 3,6 x 10-7. Таким образом, добавление бита четности уменьшает вероятность необнаруженной ошибки почти в 1000 раз. Использование одного бита четности типично для асинхронного метода передачи. В синхронных каналах чаще используется вычисление и передача битов четности как
для строк, так и для столбцов передаваемого массива данных. Такая схема позволяет не только регистрировать, но и исправлять ошибки в одном из битов переданного блока.
Контроль по четности достаточно эффективен для выявления одиночных и множественных ошибок в условиях, когда они являются независимыми. При возникновении ошибок в кластерах бит метод контроля четности неэффективен, и тогда предпочтительнее метод вычисления циклических сумм ( CRC — Cyclic Redundancy Check). В этом методе передаваемый кадр делится на специально подобранный образующий полином. Дополнение остатка от деления и является контрольной суммой.
В Ethernet вычисление CRC производится аппаратно. На
рис.
4.1 показан пример реализации аппаратного расчета CRC для образующего полинома R(x) = 1 + x2 + x3 + x5 + x7. В этой схеме входной код приходит слева.
Рис.
4.1.
Схема реализации расчета CRC
Эффективность CRC для обнаружения ошибок на многие порядки выше простого контроля четности. В настоящее время стандартизовано несколько типов образующих полиномов. Для оценочных целей можно считать, что вероятность невыявления ошибки в случае использования CRC, если ошибка на самом деле имеет место, равна (1/2)r, где r — степень образующего полинома.
CRC -12 | x12 + x11 + x3 + x2 + x1 + 1 |
CRC -16 | x16 + x15 + x2 + 1 |
CRC -CCITT | x16 + x12 + x5 + 1 |
4.1. Алгоритмы коррекции ошибок
Исправлять ошибки труднее, чем их детектировать или предотвращать. Процедура коррекции ошибок предполагает два совмещеных процесса: обнаружение ошибки и определение места (идентификации сообщения и позиции в сообщении). После решения этих двух задач исправление тривиально — надо инвертировать значение ошибочного бита. В наземных каналах связи, где вероятность ошибки невелика, обычно используется метод детектирования ошибок и повторной пересылки фрагмента, содержащего дефект. Для спутниковых каналов с типичными для них большими задержками системы коррекции ошибок становятся привлекательными. Здесь используют коды Хэмминга или коды свертки.
Код Хэмминга представляет собой блочный код, который позволяет выявить и исправить ошибочно переданный бит в пределах переданного блока. Обычно код Хэмминга характеризуется двумя целыми числами, например, (11,7), используемыми при передаче 7-битных ASCII-кодов. Такая запись говорит, что при передаче 7-битного кода используется 4 контрольных бита (7 + 4 = 11). При этом предполагается, что имела место ошибка в одном бите и что ошибка в двух или более битах существенно менее вероятна. С учетом этого исправление ошибки осуществляется с определенной вероятностью. Например, пусть возможны следующие правильные коды (все они, кроме первого и последнего, отстоят друг от друга на расстояние Хэмминга 4):
00000000
11110000
00001111
11111111
При получении кода 00000111 нетрудно предположить, что правильное значение полученного кода равно 00001111. Другие коды отстоят от полученного на большее расстояние Хэмминга.
Рассмотрим пример передачи кода буквы s = 0x073 = 1110011 с использованием кода Хэмминга (11,7). Таблица 4.2.
Позиция бита | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|
Значение бита | 1 | 1 | 1 | * | 0 | 0 | 1 | * | 1 | * | * |
Символами * помечены четыре позиции, где должны размещаться контрольные биты. Эти позиции определяются целой степенью 2 (1, 2, 4, 8 и т.д.). Контрольная сумма формируется путем выполнения операции XoR (исключающее ИЛИ) над кодами позиций ненулевых битов. В данном случае это 11, 10, 9, 5 и 3. Вычислим контрольную сумму:
11= | 1011 |
10= | 1010 |
09= | 1001 |
05= | 0101 |
03= | 0011 |
1110 |
Таким образом, приемник получит код
Позиция бита | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|
Значение бита | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |
Просуммируем снова коды позиций ненулевых битов и получим нуль;
11= | 1011 |
10= | 1010 |
09= | 1001 |
08= | 1000 |
05= | 0101 |
04= | 0100 |
03= | 0011 |
02= | 0010 |
0000 |
Ну а теперь рассмотрим два случая ошибок в одном из битов посылки, например в бите 7 (1 вместо 0) и в бите 5 (0 вместо 1). Просуммируем коды позиций ненулевых битов еще раз:
|
|
В обоих случаях контрольная сумма равна позиции бита, переданного с ошибкой. Теперь для исправления ошибки достаточно инвертировать бит, номер которого указан в контрольной сумме. Понятно, что если ошибка произойдет при передаче более чем одного бита, код Хэмминга при данной избыточности окажется бесполезен.
В общем случае код имеет N = M + C бит и предполагается, что не более чем один бит в коде может иметь ошибку. Тогда возможно N+1 состояние кода (правильное состояние и n ошибочных). Пусть М = 4, а N = 7, тогда слово-сообщение будет иметь вид: M4, M3, M2, C3, M1, C2, C1. Теперь попытаемся вычислить значения С1, С2, С3. Для этого используются уравнения, где все операции представляют собой сложение по модулю 2:
С1 = М1 + М2 + М4 С2 = М1 + М3 + М4 С3 = М2 + М3 + М4
Для определения того, доставлено ли сообщение без ошибок, вычисляем следующие выражения (сложение по модулю 2):
С11 = С1 + М4 + М2 + М1 С12 = С2 + М4 + М3 + М1 С13 = С3 + М4 + М3 + М2
Результат вычисления интерпретируется следующим образом:
C11 | C12 | C13 | Значение |
---|---|---|---|
1 | 2 | 4 | Позиция бит |
0 | 0 | 0 | Ошибок нет |
0 | 0 | 1 | Бит С3 неверен |
0 | 1 | 0 | Бит С2 неверен |
0 | 1 | 1 | Бит M3 неверен |
1 | 0 | 0 | Бит С1 неверен |
1 | 0 | 1 | Бит M2 неверен |
1 | 1 | 0 | Бит M1 неверен |
1 | 1 | 1 | Бит M4 неверен |
Описанная схема легко переносится на любое число n и М.
Число возможных кодовых комбинаций М помехоустойчивого кода делится на n классов, где N — число разрешенных кодов. Разделение на классы осуществляется так, чтобы в каждый класс вошел один разрешенный код и ближайшие к нему (по расстоянию Хэмминга ) запрещенные коды. В процессе приема данных определяется, к какому классу принадлежит пришедший код. Если код принят с ошибкой, он заменяется ближайшим разрешенным кодом. При этом предполагается, что кратность ошибки не более qm.
В теории кодирования существуют следующие оценки максимального числа N n -разрядных кодов с расстоянием D.
d=1 | n=2n |
d=2 | n=2n-1 |
d=3 | N 2n/(1 + n) |
d = 2q + 1 | (для кода Хэмминга это неравенство превращается в равенство) |
В случае кода Хэмминга первые k разрядов используются в качестве информационных, причем
K = n – log(n + 1), откуда следует (логарифм по основанию 2), что k может принимать значения 0, 1, 4, 11, 26, 57 и т.д., это и определяет соответствующие коды Хэмминга (3,1); (7,4); (15,11); (31,26); (63,57) и т.д.
Обобщением кодов Хэмминга являются циклические коды BCH (Bose-Chadhuri-hocquenghem). Эти коды имеют широкий выбор длин и возможностей исправления ошибок.
Одной из старейших схем коррекции ошибок является двух-и трехмерная позиционная схема (
рис.
4.2). Для каждого байта вычисляется бит четности (бит <Ч>, направление Х). Для каждого столбца также вычисляется бит четности (направление Y. Производится вычисление битов четности для комбинаций битов с координатами (X,Y) (направление Z, слои с 1 до N ). Если при транспортировке будет искажен один бит, он может быть найден и исправлен по неверным битам четности X и Y. Если же произошло две ошибки в одной из плоскостей, битов четности данной плоскости недостаточно. Здесь поможет плоскость битов четности N+1.
Таким образом, на 512 передаваемых байтов данных пересылается около 200 бит четности.
Рис.
4.2.
Позиционная схема коррекции ошибок
In information theory and coding theory with applications in computer science and telecommunication, error detection and correction (EDAC) or error control are techniques that enable reliable delivery of digital data over unreliable communication channels. Many communication channels are subject to channel noise, and thus errors may be introduced during transmission from the source to a receiver. Error detection techniques allow detecting such errors, while error correction enables reconstruction of the original data in many cases.
Definitions[edit]
Error detection is the detection of errors caused by noise or other impairments during transmission from the transmitter to the receiver.
Error correction is the detection of errors and reconstruction of the original, error-free data.
History[edit]
In classical antiquity, copyists of the Hebrew Bible were paid for their work according to the number of stichs (lines of verse). As the prose books of the Bible were hardly ever written in stichs, the copyists, in order to estimate the amount of work, had to count the letters.[1] This also helped ensure accuracy in the transmission of the text with the production of subsequent copies.[2][3] Between the 7th and 10th centuries CE a group of Jewish scribes formalized and expanded this to create the Numerical Masorah to ensure accurate reproduction of the sacred text. It included counts of the number of words in a line, section, book and groups of books, noting the middle stich of a book, word use statistics, and commentary.[1] Standards became such that a deviation in even a single letter in a Torah scroll was considered unacceptable.[4] The effectiveness of their error correction method was verified by the accuracy of copying through the centuries demonstrated by discovery of the Dead Sea Scrolls in 1947–1956, dating from c. 150 BCE-75 CE.[5]
The modern development of error correction codes is credited to Richard Hamming in 1947.[6] A description of Hamming’s code appeared in Claude Shannon’s A Mathematical Theory of Communication[7] and was quickly generalized by Marcel J. E. Golay.[8]
Principles[edit]
All error-detection and correction schemes add some redundancy (i.e., some extra data) to a message, which receivers can use to check consistency of the delivered message and to recover data that has been determined to be corrupted. Error detection and correction schemes can be either systematic or non-systematic. In a systematic scheme, the transmitter sends the original (error-free) data and attaches a fixed number of check bits (or parity data), which are derived from the data bits by some encoding algorithm. If error detection is required, a receiver can simply apply the same algorithm to the received data bits and compare its output with the received check bits; if the values do not match, an error has occurred at some point during the transmission. If error correction is required, a receiver can apply the decoding algorithm to the received data bits and the received check bits to recover the original error-free data. In a system that uses a non-systematic code, the original message is transformed into an encoded message carrying the same information and that has at least as many bits as the original message.
Good error control performance requires the scheme to be selected based on the characteristics of the communication channel. Common channel models include memoryless models where errors occur randomly and with a certain probability, and dynamic models where errors occur primarily in bursts. Consequently, error-detecting and correcting codes can be generally distinguished between random-error-detecting/correcting and burst-error-detecting/correcting. Some codes can also be suitable for a mixture of random errors and burst errors.
If the channel characteristics cannot be determined, or are highly variable, an error-detection scheme may be combined with a system for retransmissions of erroneous data. This is known as automatic repeat request (ARQ), and is most notably used in the Internet. An alternate approach for error control is hybrid automatic repeat request (HARQ), which is a combination of ARQ and error-correction coding.
Types of error correction[edit]
There are three major types of error correction:[9]
Automatic repeat request[edit]
Automatic repeat request (ARQ) is an error control method for data transmission that makes use of error-detection codes, acknowledgment and/or negative acknowledgment messages, and timeouts to achieve reliable data transmission. An acknowledgment is a message sent by the receiver to indicate that it has correctly received a data frame.
Usually, when the transmitter does not receive the acknowledgment before the timeout occurs (i.e., within a reasonable amount of time after sending the data frame), it retransmits the frame until it is either correctly received or the error persists beyond a predetermined number of retransmissions.
Three types of ARQ protocols are Stop-and-wait ARQ, Go-Back-N ARQ, and Selective Repeat ARQ.
ARQ is appropriate if the communication channel has varying or unknown capacity, such as is the case on the Internet. However, ARQ requires the availability of a back channel, results in possibly increased latency due to retransmissions, and requires the maintenance of buffers and timers for retransmissions, which in the case of network congestion can put a strain on the server and overall network capacity.[10]
For example, ARQ is used on shortwave radio data links in the form of ARQ-E, or combined with multiplexing as ARQ-M.
Forward error correction[edit]
Forward error correction (FEC) is a process of adding redundant data such as an error-correcting code (ECC) to a message so that it can be recovered by a receiver even when a number of errors (up to the capability of the code being used) are introduced, either during the process of transmission or on storage. Since the receiver does not have to ask the sender for retransmission of the data, a backchannel is not required in forward error correction. Error-correcting codes are used in lower-layer communication such as cellular network, high-speed fiber-optic communication and Wi-Fi,[11][12] as well as for reliable storage in media such as flash memory, hard disk and RAM.[13]
Error-correcting codes are usually distinguished between convolutional codes and block codes:
- Convolutional codes are processed on a bit-by-bit basis. They are particularly suitable for implementation in hardware, and the Viterbi decoder allows optimal decoding.
- Block codes are processed on a block-by-block basis. Early examples of block codes are repetition codes, Hamming codes and multidimensional parity-check codes. They were followed by a number of efficient codes, Reed–Solomon codes being the most notable due to their current widespread use. Turbo codes and low-density parity-check codes (LDPC) are relatively new constructions that can provide almost optimal efficiency.
Shannon’s theorem is an important theorem in forward error correction, and describes the maximum information rate at which reliable communication is possible over a channel that has a certain error probability or signal-to-noise ratio (SNR). This strict upper limit is expressed in terms of the channel capacity. More specifically, the theorem says that there exist codes such that with increasing encoding length the probability of error on a discrete memoryless channel can be made arbitrarily small, provided that the code rate is smaller than the channel capacity. The code rate is defined as the fraction k/n of k source symbols and n encoded symbols.
The actual maximum code rate allowed depends on the error-correcting code used, and may be lower. This is because Shannon’s proof was only of existential nature, and did not show how to construct codes that are both optimal and have efficient encoding and decoding algorithms.
Hybrid schemes[edit]
Hybrid ARQ is a combination of ARQ and forward error correction. There are two basic approaches:[10]
- Messages are always transmitted with FEC parity data (and error-detection redundancy). A receiver decodes a message using the parity information and requests retransmission using ARQ only if the parity data was not sufficient for successful decoding (identified through a failed integrity check).
- Messages are transmitted without parity data (only with error-detection information). If a receiver detects an error, it requests FEC information from the transmitter using ARQ and uses it to reconstruct the original message.
The latter approach is particularly attractive on an erasure channel when using a rateless erasure code.
Types of error detection[edit]
Error detection is most commonly realized using a suitable hash function (or specifically, a checksum, cyclic redundancy check or other algorithm). A hash function adds a fixed-length tag to a message, which enables receivers to verify the delivered message by recomputing the tag and comparing it with the one provided.
There exists a vast variety of different hash function designs. However, some are of particularly widespread use because of either their simplicity or their suitability for detecting certain kinds of errors (e.g., the cyclic redundancy check’s performance in detecting burst errors).
Minimum distance coding[edit]
A random-error-correcting code based on minimum distance coding can provide a strict guarantee on the number of detectable errors, but it may not protect against a preimage attack.
Repetition codes[edit]
A repetition code is a coding scheme that repeats the bits across a channel to achieve error-free communication. Given a stream of data to be transmitted, the data are divided into blocks of bits. Each block is transmitted some predetermined number of times. For example, to send the bit pattern 1011, the four-bit block can be repeated three times, thus producing 1011 1011 1011. If this twelve-bit pattern was received as 1010 1011 1011 – where the first block is unlike the other two – an error has occurred.
A repetition code is very inefficient and can be susceptible to problems if the error occurs in exactly the same place for each group (e.g., 1010 1010 1010 in the previous example would be detected as correct). The advantage of repetition codes is that they are extremely simple, and are in fact used in some transmissions of numbers stations.[14][15]
Parity bit[edit]
A parity bit is a bit that is added to a group of source bits to ensure that the number of set bits (i.e., bits with value 1) in the outcome is even or odd. It is a very simple scheme that can be used to detect single or any other odd number (i.e., three, five, etc.) of errors in the output. An even number of flipped bits will make the parity bit appear correct even though the data is erroneous.
Parity bits added to each word sent are called transverse redundancy checks, while those added at the end of a stream of words are called longitudinal redundancy checks. For example, if each of a series of m-bit words has a parity bit added, showing whether there were an odd or even number of ones in that word, any word with a single error in it will be detected. It will not be known where in the word the error is, however. If, in addition, after each stream of n words a parity sum is sent, each bit of which shows whether there were an odd or even number of ones at that bit-position sent in the most recent group, the exact position of the error can be determined and the error corrected. This method is only guaranteed to be effective, however, if there are no more than 1 error in every group of n words. With more error correction bits, more errors can be detected and in some cases corrected.
There are also other bit-grouping techniques.
Checksum[edit]
A checksum of a message is a modular arithmetic sum of message code words of a fixed word length (e.g., byte values). The sum may be negated by means of a ones’-complement operation prior to transmission to detect unintentional all-zero messages.
Checksum schemes include parity bits, check digits, and longitudinal redundancy checks. Some checksum schemes, such as the Damm algorithm, the Luhn algorithm, and the Verhoeff algorithm, are specifically designed to detect errors commonly introduced by humans in writing down or remembering identification numbers.
Cyclic redundancy check[edit]
A cyclic redundancy check (CRC) is a non-secure hash function designed to detect accidental changes to digital data in computer networks. It is not suitable for detecting maliciously introduced errors. It is characterized by specification of a generator polynomial, which is used as the divisor in a polynomial long division over a finite field, taking the input data as the dividend. The remainder becomes the result.
A CRC has properties that make it well suited for detecting burst errors. CRCs are particularly easy to implement in hardware and are therefore commonly used in computer networks and storage devices such as hard disk drives.
The parity bit can be seen as a special-case 1-bit CRC.
Cryptographic hash function[edit]
The output of a cryptographic hash function, also known as a message digest, can provide strong assurances about data integrity, whether changes of the data are accidental (e.g., due to transmission errors) or maliciously introduced. Any modification to the data will likely be detected through a mismatching hash value. Furthermore, given some hash value, it is typically infeasible to find some input data (other than the one given) that will yield the same hash value. If an attacker can change not only the message but also the hash value, then a keyed hash or message authentication code (MAC) can be used for additional security. Without knowing the key, it is not possible for the attacker to easily or conveniently calculate the correct keyed hash value for a modified message.
Error correction code[edit]
Any error-correcting code can be used for error detection. A code with minimum Hamming distance, d, can detect up to d − 1 errors in a code word. Using minimum-distance-based error-correcting codes for error detection can be suitable if a strict limit on the minimum number of errors to be detected is desired.
Codes with minimum Hamming distance d = 2 are degenerate cases of error-correcting codes and can be used to detect single errors. The parity bit is an example of a single-error-detecting code.
Applications[edit]
Applications that require low latency (such as telephone conversations) cannot use automatic repeat request (ARQ); they must use forward error correction (FEC). By the time an ARQ system discovers an error and re-transmits it, the re-sent data will arrive too late to be usable.
Applications where the transmitter immediately forgets the information as soon as it is sent (such as most television cameras) cannot use ARQ; they must use FEC because when an error occurs, the original data is no longer available.
Applications that use ARQ must have a return channel; applications having no return channel cannot use ARQ.
Applications that require extremely low error rates (such as digital money transfers) must use ARQ due to the possibility of uncorrectable errors with FEC.
Reliability and inspection engineering also make use of the theory of error-correcting codes.[16]
Internet[edit]
In a typical TCP/IP stack, error control is performed at multiple levels:
- Each Ethernet frame uses CRC-32 error detection. Frames with detected errors are discarded by the receiver hardware.
- The IPv4 header contains a checksum protecting the contents of the header. Packets with incorrect checksums are dropped within the network or at the receiver.
- The checksum was omitted from the IPv6 header in order to minimize processing costs in network routing and because current link layer technology is assumed to provide sufficient error detection (see also RFC 3819).
- UDP has an optional checksum covering the payload and addressing information in the UDP and IP headers. Packets with incorrect checksums are discarded by the network stack. The checksum is optional under IPv4, and required under IPv6. When omitted, it is assumed the data-link layer provides the desired level of error protection.
- TCP provides a checksum for protecting the payload and addressing information in the TCP and IP headers. Packets with incorrect checksums are discarded by the network stack and eventually get retransmitted using ARQ, either explicitly (such as through three-way handshake) or implicitly due to a timeout.
Deep-space telecommunications[edit]
The development of error-correction codes was tightly coupled with the history of deep-space missions due to the extreme dilution of signal power over interplanetary distances, and the limited power availability aboard space probes. Whereas early missions sent their data uncoded, starting in 1968, digital error correction was implemented in the form of (sub-optimally decoded) convolutional codes and Reed–Muller codes.[17] The Reed–Muller code was well suited to the noise the spacecraft was subject to (approximately matching a bell curve), and was implemented for the Mariner spacecraft and used on missions between 1969 and 1977.
The Voyager 1 and Voyager 2 missions, which started in 1977, were designed to deliver color imaging and scientific information from Jupiter and Saturn.[18] This resulted in increased coding requirements, and thus, the spacecraft were supported by (optimally Viterbi-decoded) convolutional codes that could be concatenated with an outer Golay (24,12,8) code. The Voyager 2 craft additionally supported an implementation of a Reed–Solomon code. The concatenated Reed–Solomon–Viterbi (RSV) code allowed for very powerful error correction, and enabled the spacecraft’s extended journey to Uranus and Neptune. After ECC system upgrades in 1989, both crafts used V2 RSV coding.
The Consultative Committee for Space Data Systems currently recommends usage of error correction codes with performance similar to the Voyager 2 RSV code as a minimum. Concatenated codes are increasingly falling out of favor with space missions, and are replaced by more powerful codes such as Turbo codes or LDPC codes.
The different kinds of deep space and orbital missions that are conducted suggest that trying to find a one-size-fits-all error correction system will be an ongoing problem. For missions close to Earth, the nature of the noise in the communication channel is different from that which a spacecraft on an interplanetary mission experiences. Additionally, as a spacecraft increases its distance from Earth, the problem of correcting for noise becomes more difficult.
Satellite broadcasting[edit]
The demand for satellite transponder bandwidth continues to grow, fueled by the desire to deliver television (including new channels and high-definition television) and IP data. Transponder availability and bandwidth constraints have limited this growth. Transponder capacity is determined by the selected modulation scheme and the proportion of capacity consumed by FEC.
Data storage[edit]
Error detection and correction codes are often used to improve the reliability of data storage media.[19] A parity track capable of detecting single-bit errors was present on the first magnetic tape data storage in 1951. The optimal rectangular code used in group coded recording tapes not only detects but also corrects single-bit errors. Some file formats, particularly archive formats, include a checksum (most often CRC32) to detect corruption and truncation and can employ redundancy or parity files to recover portions of corrupted data. Reed-Solomon codes are used in compact discs to correct errors caused by scratches.
Modern hard drives use Reed–Solomon codes to detect and correct minor errors in sector reads, and to recover corrupted data from failing sectors and store that data in the spare sectors.[20] RAID systems use a variety of error correction techniques to recover data when a hard drive completely fails. Filesystems such as ZFS or Btrfs, as well as some RAID implementations, support data scrubbing and resilvering, which allows bad blocks to be detected and (hopefully) recovered before they are used.[21] The recovered data may be re-written to exactly the same physical location, to spare blocks elsewhere on the same piece of hardware, or the data may be rewritten onto replacement hardware.
Error-correcting memory[edit]
Dynamic random-access memory (DRAM) may provide stronger protection against soft errors by relying on error-correcting codes. Such error-correcting memory, known as ECC or EDAC-protected memory, is particularly desirable for mission-critical applications, such as scientific computing, financial, medical, etc. as well as extraterrestrial applications due to the increased radiation in space.
Error-correcting memory controllers traditionally use Hamming codes, although some use triple modular redundancy. Interleaving allows distributing the effect of a single cosmic ray potentially upsetting multiple physically neighboring bits across multiple words by associating neighboring bits to different words. As long as a single-event upset (SEU) does not exceed the error threshold (e.g., a single error) in any particular word between accesses, it can be corrected (e.g., by a single-bit error-correcting code), and the illusion of an error-free memory system may be maintained.[22]
In addition to hardware providing features required for ECC memory to operate, operating systems usually contain related reporting facilities that are used to provide notifications when soft errors are transparently recovered. One example is the Linux kernel’s EDAC subsystem (previously known as Bluesmoke), which collects the data from error-checking-enabled components inside a computer system; besides collecting and reporting back the events related to ECC memory, it also supports other checksumming errors, including those detected on the PCI bus.[23][24][25] A few systems[specify] also support memory scrubbing to catch and correct errors early before they become unrecoverable.
See also[edit]
- Berger code
- Burst error-correcting code
- ECC memory, a type of computer data storage
- Link adaptation
- List of algorithms § Error detection and correction
- List of hash functions
References[edit]
- ^ a b «Masorah». Jewish Encyclopedia.
- ^ Pratico, Gary D.; Pelt, Miles V. Van (2009). Basics of Biblical Hebrew Grammar: Second Edition. Zondervan. ISBN 978-0-310-55882-8.
- ^ Mounce, William D. (2007). Greek for the Rest of Us: Using Greek Tools Without Mastering Biblical Languages. Zondervan. p. 289. ISBN 978-0-310-28289-1.
- ^ Mishneh Torah, Tefillin, Mezuzah, and Sefer Torah, 1:2. Example English translation: Eliyahu Touger. The Rambam’s Mishneh Torah. Moznaim Publishing Corporation.
- ^ Brian M. Fagan (5 December 1996). «Dead Sea Scrolls». The Oxford Companion to Archaeology. Oxford University Press. ISBN 0195076184.
- ^ Thompson, Thomas M. (1983), From Error-Correcting Codes through Sphere Packings to Simple Groups, The Carus Mathematical Monographs (#21), The Mathematical Association of America, p. vii, ISBN 0-88385-023-0
- ^ Shannon, C.E. (1948), «A Mathematical Theory of Communication», Bell System Technical Journal, 27 (3): 379–423, doi:10.1002/j.1538-7305.1948.tb01338.x, hdl:10338.dmlcz/101429, PMID 9230594
- ^ Golay, Marcel J. E. (1949), «Notes on Digital Coding», Proc.I.R.E. (I.E.E.E.), 37: 657
- ^ Gupta, Vikas; Verma, Chanderkant (November 2012). «Error Detection and Correction: An Introduction». International Journal of Advanced Research in Computer Science and Software Engineering. 2 (11). S2CID 17499858.
- ^ a b A. J. McAuley, Reliable Broadband Communication Using a Burst Erasure Correcting Code, ACM SIGCOMM, 1990.
- ^ Shah, Pradeep M.; Vyavahare, Prakash D.; Jain, Anjana (September 2015). «Modern error correcting codes for 4G and beyond: Turbo codes and LDPC codes». 2015 Radio and Antenna Days of the Indian Ocean (RADIO). pp. 1–2. doi:10.1109/RADIO.2015.7323369. ISBN 978-9-9903-7339-4. S2CID 28885076. Retrieved 22 May 2022.
- ^ «IEEE SA — IEEE 802.11ac-2013». IEEE Standards Association.
- ^ «Transition to Advanced Format 4K Sector Hard Drives | Seagate US». Seagate.com. Retrieved 22 May 2022.
- ^ Frank van Gerwen. «Numbers (and other mysterious) stations». Archived from the original on 12 July 2017. Retrieved 12 March 2012.
- ^ Gary Cutlack (25 August 2010). «Mysterious Russian ‘Numbers Station’ Changes Broadcast After 20 Years». Gizmodo. Archived from the original on 5 July 2017. Retrieved 12 March 2012.
- ^ Ben-Gal I.; Herer Y.; Raz T. (2003). «Self-correcting inspection procedure under inspection errors» (PDF). IIE Transactions. IIE Transactions on Quality and Reliability, 34(6), pp. 529-540. Archived from the original (PDF) on 2013-10-13. Retrieved 2014-01-10.
- ^ K. Andrews et al., The Development of Turbo and LDPC Codes for Deep-Space Applications, Proceedings of the IEEE, Vol. 95, No. 11, Nov. 2007.
- ^ Huffman, William Cary; Pless, Vera S. (2003). Fundamentals of Error-Correcting Codes. Cambridge University Press. ISBN 978-0-521-78280-7.
- ^ Kurtas, Erozan M.; Vasic, Bane (2018-10-03). Advanced Error Control Techniques for Data Storage Systems. CRC Press. ISBN 978-1-4200-3649-7.[permanent dead link]
- ^ Scott A. Moulton. «My Hard Drive Died». Archived from the original on 2008-02-02.
- ^ Qiao, Zhi; Fu, Song; Chen, Hsing-Bung; Settlemyer, Bradley (2019). «Building Reliable High-Performance Storage Systems: An Empirical and Analytical Study». 2019 IEEE International Conference on Cluster Computing (CLUSTER). pp. 1–10. doi:10.1109/CLUSTER.2019.8891006. ISBN 978-1-7281-4734-5. S2CID 207951690.
- ^ «Using StrongArm SA-1110 in the On-Board Computer of Nanosatellite». Tsinghua Space Center, Tsinghua University, Beijing. Archived from the original on 2011-10-02. Retrieved 2009-02-16.
- ^ Jeff Layton. «Error Detection and Correction». Linux Magazine. Retrieved 2014-08-12.
- ^ «EDAC Project». bluesmoke.sourceforge.net. Retrieved 2014-08-12.
- ^ «Documentation/edac.txt». Linux kernel documentation. kernel.org. 2014-06-16. Archived from the original on 2009-09-05. Retrieved 2014-08-12.
Further reading[edit]
- Shu Lin; Daniel J. Costello, Jr. (1983). Error Control Coding: Fundamentals and Applications. Prentice Hall. ISBN 0-13-283796-X.
- SoftECC: A System for Software Memory Integrity Checking
- A Tunable, Software-based DRAM Error Detection and Correction Library for HPC
- Detection and Correction of Silent Data Corruption for Large-Scale High-Performance Computing
External links[edit]
- The on-line textbook: Information Theory, Inference, and Learning Algorithms, by David J.C. MacKay, contains chapters on elementary error-correcting codes; on the theoretical limits of error-correction; and on the latest state-of-the-art error-correcting codes, including low-density parity-check codes, turbo codes, and fountain codes.
- ECC Page — implementations of popular ECC encoding and decoding routines
Канальный уровень
должен обнаруживать ошибки передачи
данных, связанные с искажением бит в
принятом кадре данных или с потерей
кадра, и по возможности их корректировать.
Большая часть протоколов
канального уровня выполняет только
первую задачу — обнаружение ошибок,
считая, что корректировать ошибки, то
есть повторно передавать данные,
содержавшие искаженную информацию,
должны протоколы верхних уровней. Так
работают такие популярные протоколы
локальных сетей, как Ethernet, Token Ring, FDDI и
другие. Однако существуют протоколы
канального уровня, например LLC2 или
LAP-B, которые самостоятельно решают
задачу восстановления искаженных или
потерянных кадров.
Очевидно, что протоколы
должны работать наиболее эффективно в
типичных условиях работы сети. Поэтому
для сетей, в которых искажения и потери
кадров являются очень редкими событиями,
разрабатываются протоколы типа Ethernet,
в которых не предусматриваются процедуры
устранения ошибок. Действительно,
наличие процедур восстановления данных
потребовало бы от конечных узлов
дополнительных вычислительных затрат,
которые в условиях надежной работы сети
являлись бы избыточными.
Напротив, если в сети
искажения и потери случаются часто, то
желательно уже на канальном уровне
использовать протокол с коррекцией
ошибок, а не оставлять эту работу
протоколам верхних уровней. Протоколы
верхних уровней, например транспортного
или прикладного, работая с большими
тайм-аутами, восстановят потерянные
данные с большой задержкой. В глобальных
сетях первых поколений, например сетях
Х.25, которые работали через ненадежные
каналы связи, протоколы канального
уровня всегда выполняли процедуры
восстановления потерянных и искаженных
кадров.
Поэтому нельзя считать,
что один протокол лучше другого потому,
что он восстанавливает ошибочные кадры,
а другой протокол — нет. Каждый протокол
должен работать в тех условиях, для
которых он разработан.
Методы обнаружения ошибок
Все методы обнаружения
ошибок основаны на передаче в составе
кадра данных служебной избыточной
информации, по которой можно судить с
некоторой степенью вероятности о
достоверности принятых данных. Эту
служебную информацию принято называть
контрольной суммойили
(последовательностью контроля кадра
— Frame Check Sequence, FCS). Контрольная сумма
вычисляется как функция от основной
информации, причем необязательно только
путем суммирования. Принимающая сторона
повторно вычисляет контрольную сумму
кадра по известному алгоритму и в случае
ее совпадения с контрольной суммой,
вычисленной передающей стороной, делает
вывод о том, что данные были переданы
через сеть корректно.
Существует несколько
распространенных алгоритмов вычисления
контрольной суммы, отличающихся
вычислительной сложностью и способностью
обнаруживать ошибки в данных.
Контроль по паритетупредставляет собой наиболее простой
метод контроля данных. В то же время это
наименее мощный алгоритм контроля, так
как с его помощью можно обнаружить
только одиночные ошибки в проверяемых
данных. Метод заключается в суммировании
по модулю 2 всех бит контролируемой
информации. Например, для данных 100101011
результатом контрольного суммирования
будет значение 1. Результат суммирования
также представляет собой один бит
данных, который пересылается вместе с
контролируемой информацией. При искажении
при пересылке любого одного бита исходных
данных (или контрольного разряда)
результат суммирования будет отличаться
от принятого контрольного разряда, что
говорит об ошибке. Однако двойная ошибка,
например 110101010, будет неверно принята
за корректные данные. Поэтому контроль
по паритету применяется к небольшим
порциям данных, как правило, к каждому
байту, что дает коэффициент избыточности
для этого метода 1/8. Метод редко применяется
в вычислительных сетях из-за его большой
избыточности и невысоких диагностических
способностей.
Вертикальный и
горизонтальный контроль по паритетупредставляет собой модификацию описанного
выше метода. Его отличие состоит в том,
что исходные данные рассматриваются в
виде матрицы, строки которой составляют
байты данных. Контрольный разряд
подсчитывается отдельно для каждой
строки и для каждого столбца матрицы.
Этот метод обнаруживает большую часть
двойных ошибок, однако обладает еще
большей избыточностью. На практике
сейчас также почти не применяется.
Циклический избыточный
контроль (Cyclic Redundancy Check, CRC)является
в настоящее время наиболее популярным
методом контроля в вычислительных сетях
(и не только в сетях, например, этот метод
широко применяется при записи данных
на диски и дискеты). Метод основан на
рассмотрении исходных данных в виде
одного многоразрядного двоичного числа.
Например, кадр стандарта Ethernet, состоящий
из 1024 байт, будет рассматриваться как
одно число, состоящее из 8192 бит. В качестве
контрольной информации рассматривается
остаток от деления этого числа на
известный делитель R. Обычно в качестве
делителя выбирается семнадцати- или
тридцати трехразрядное число, чтобы
остаток от деления имел длину 16 разрядов
(2 байт) или 32 разряда (4 байт). При получении
кадра данных снова вычисляется остаток
от деления на тот же делитель R, но при
этом к данным кадра добавляется и
содержащаяся в нем контрольная сумма.
Если остаток от деления на R равен нулю1(1Существуетнесколько модифицированная
процедура вычисления остатка, приводящая
к получению в случае отсутствия ошибок
известного ненулевого остатка, что
является более надежным показателем
корректности.), то делается вывод об
отсутствии ошибок в полученном кадре,
в противном случае кадр считается
искаженным.
Этот метод обладает
более высокой вычислительной сложностью,
но его диагностические возможности
гораздо выше, чем у методов контроля по
паритету. Метод CRC обнаруживает все
одиночные ошибки, двойные ошибки и
ошибки в нечетном числе бит. Метод
обладает также невысокой степенью
избыточности. Например, для кадра
Ethernet размером в 1024 байт контрольная
информация длиной в 4 байт составляет
только 0,4 %.
6.5.1. Весовой коэффициент двоичных векторов и расстояние между ними
6.5.2. Минимальное расстояние для линейного кода
6.5.3. Обнаружение и исправление ошибок
6.5.3.1. Распределение весовых коэффициентов кодовых слов
6.5.3.2.Одновременное обнаружение и исправление ошибок
6.5.4. Визуализация пространства 6-кортежей
6.5.5. Коррекция со стиранием ошибок
6.5.1. Весовой коэффициент двоичных векторов и расстояние между ними
Конечно же, понятно, что правильно декодировать можно не все ошибочные комбинации. Возможности кода для исправления ошибок в первую очередь определяются его структурой. Весовой коэффициент Хэмминга (Hamming weight) w(U) кодового слова U определяется как число ненулевых элементов в U. Для двоичного вектора это эквивалентно числу единиц в векторе. Например, если U=100101101, то w(U) = 5. Расстояние Хэмминга (Hamming distance) между двумя кодовыми словами U и V, обозначаемое как d(U, V), определяется как количество элементов, которыми они отличаются.
U=100101101
V=011110100
d(U,V)=6
Согласно свойствам сложения по модулю 2, можно отметить, что сумма двух двоичных векторов является другим двоичным вектором, двоичные единицы которого расположены на тех позициях, которыми эти векторы отличаются.
U + V=111011001
Таким образом, можно видеть, что расстояние Хэмминга между двумя векторами равно весовому коэффициенту Хэмминга их суммы, т.е. d(U, V) = w(U + V). Также видно, что весовой коэффициент Хэмминга кодового слова равен его расстоянию Хэмминга до нулевого вектора.
6.5.2. Минимальное расстояние для линейного кода
Рассмотрим множество расстояний между всеми парами кодовых слой в пространстве Vn. Наименьший элемент этого множества называется минимальным расстоянием кода и обозначается dmin. Как вы думаете, почему нас интересует именно минимальное расстояние, а не максимальное? Минимальное расстояние подобно наиболее слабому звену в цепи, оно дает нам меру минимальных возможностей кода и, следовательно, характеризует его мощность.
Как обсуждалось ранее, сумма двух произвольных кодовых слов дает другой элемент пространства кодовых слов. Это свойство линейных кодов формулируется просто: если U и V — кодовые слова, то и W = U + V тоже должно быть кодовым словом. Следовательно, расстояние между двумя кодовыми словами равно весовому коэффициенту третьего кодового слова, т.е. d(U, V) = w(U + V) = w(W). Таким образом, минимальное расстояние линейного кода можно определить, не прибегая к изучению расстояний между всеми комбинациями пар кодовых слов. Нам нужно лишь определить вес каждого кодового слова (за исключением нулевого вектора) в подпространстве; минимальный вес соответствует минимальному расстоянию dmin. Иными словами, dmin соответствует наименьшему из множества расстояний между нулевым кодовым словом и всеми остальными кодовыми словами.
6.5.3. Обнаружение и исправление ошибок
Задача декодера после приема вектора r заключается в оценке переданного кодового слова Ui. Оптимальная стратегия декодирования может быть выражена в терминах алгоритма максимального правдоподобия (см. приложение Б); считается, что передано было слово Ui, если
(6.41)
Поскольку для двоичного симметричного канала (binary symmetric channel — BSC) правдоподобие Ui относительно r обратно пропорционально расстоянию между r и U, можно сказать, что передано было слово Ui, если
(6.42)
Другими словами, декодер определяет расстояние между r и всеми возможными переданными кодовыми словами Uj, после чего выбирает наиболее правдоподобное Uj, для которого
(6.43)
где М = 2k — это размер множества кодовых слов. Если минимум не один, выбор между минимальными расстояниями является произвольным. Наше обсуждение метрики расстояний будет продолжено в главе 7.
На рис. 6.13 расстояние между двумя кодовыми словами U и V показано как расстояние Хэмминга. Каждая черная точка обозначает искаженное кодовое слово. На рис. 6.13, а проиллюстрирован прием вектора r1 находящегося на расстоянии 1 от кодового слова U и на расстоянии 4 от кодового слова V. Декодер с коррекцией ошибок, следуя стратегии максимального правдоподобия, выберет при принятом векторе r1 кодовое слово U. Если r1 получился в результате появления одного ошибочного бита в переданном векторе кода U, декодер успешно исправит ошибку. Но если же это произошло в результате 4-битовой ошибки в векторе кода V, декодирование будет ошибочным. Точно так же, как показано на рис. 6.13, б, двойная ошибка при передаче U может привести к тому, что в качестве переданного вектора будет ошибочно определен вектор r2, находящийся на расстоянии 2 от вектора U и на расстоянии 3 от вектора кода V. На рис. 6.13 показана ситуация, когда в качестве переданного вектора ошибочно определен вектор r3, который находится на расстоянии 3 от вектора кода U и на расстоянии 2 от вектора V. Из рис. 6.13 видно, что если задача состоит только в обнаружении ошибок, а не в их исправлении, то можно определить искаженный вектор — изображенный черной точкой и представляющий одно-, двух-, трех- и четырехбитовую ошибку. В то же время пять ошибок при передаче могут привести к приему кодового слова V, когда в действительности было передано кодовое слово U; такую ошибку невозможно будет обнаружить.
Из рис. 6.13 можно видеть, что способность кода к обнаружению и исправлению ошибок связана с минимальным расстоянием между кодовыми словами. Линия решения на рисунке служит той же цели, что и в процессе демодуляции, — для разграничения областей решения.
а)
б)
в)
Рис. 6.13. Возможности определения и исправления ошибок: а) принятый вектор r1; б) принятый вектор r2; в) принятый вектор r3
В примере, приведенном на рис. 6.13, критерий принятия решения может быть следующим: выбрать U, если r попадает в область 1, и выбрать V, если r попадает в область 2. Выше показывалось, что такой код (при dmin = 5) может исправить две ошибки. Вообще, способность кода к исправлению ошибок t определяется, как максимальное число гарантированно исправимых ошибок на кодовое слово, и записывается следующим образом [4].
(6.44)
Здесь означает наибольшее целое, не превышающее х. Часто код, который исправляет все искаженные символы, содержащие ошибку в t или меньшем числе бит, также может исправлять символы, содержащие t +1 ошибочных бит. Это можно увидеть на рис. 6.11. В этом случае dmin = 3, поэтому из уравнения (6.44) можно видеть, что исправимы все ошибочные комбинации из t = 1 бит. Также исправима одна ошибочная комбинация, содержащая / +1 (т.е. 2) ошибочных бит. Вообще, линейный код (n, k), способный исправлять все символы, содержащие t ошибочных бит, может исправить всего 2n—k ошибочных комбинаций. Если блочный код с возможностью исправления символов, имеющих ошибки в t бит, применяется для исправления ошибок в двоичном симметричном канале с вероятностью перехода р, то вероятность ошибки сообщения Рм(вероятность того, что декодер совершит неправильное декодирование и п-битовый блок содержит ошибку) можно оценить сверху, используя уравнение (6.18).
(6.45)
Оценка переходит в равенство, если декодер исправляет все ошибочные комбинации, содержащие до t ошибочных бит включительно, но не комбинации с числом ошибочных бит, большим t. Такие декодеры называются декодерами с ограниченным расстоянием. Вероятность ошибки в декодированном бите РB зависит от конкретного кода и декодера. Приближенно ее можно выразить следующим образом [5].
(6.46)
В блочном коде, прежде чем исправлять ошибки, необходимо их обнаружить. (Или же код может использоваться только для определения наличия ошибок.) Из рис. 6.13 видно, что любой полученный вектор, который изображается черной точкой (искаженное кодовое слово), можно определить как ошибку. Следовательно, возможность определения наличия ошибки дается следующим выражением.
(6.47)
Блочный код с минимальным расстоянием dmin гарантирует обнаружение всех ошибочных комбинаций, содержащих dmin — 1 или меньшее число ошибочных бит. Такой код также способен обнаружить и большую ошибочную комбинацию, содержащую dmin или более ошибок. Фактически код (n, k) может обнаружить 2n – 2k ошибочных комбинаций длины п. Объясняется это следующим образом. Всего в пространстве 2n n-кортежей существует 2n -1 возможных ненулевых ошибочных комбинаций. Даже правильное кодовое слово — это потенциальная ошибочная комбинация. Поэтому всего существует 2k -1 ошибочных комбинаций, которые идентичны 2k -1 ненулевым кодовым словам. При появлении любая из этих 2k — 1 ошибочных комбинаций изменяет передаваемое кодовое слово Uj на другое кодовое слово Uj. Таким образом, принимается кодовое слово Uj и его синдром равен нулю. Декодер принимает Uj за переданное кодовое слово, и поэтому декодирование дает неверный результат. Следовательно, существует 2k -1 необнаружимых ошибочных комбинаций. Если ошибочная комбинация не совпадает с одним из 2k кодовых слов, проверка вектора r с помощью синдромов дает ненулевой синдром и ошибка успешно обнаруживается. Отсюда следует, что существует ровно 2n-2k выявляемых ошибочных комбинаций. При больших n, когда 2k<<2n, необнаружимой будет только незначительная часть ошибочных комбинаций.
6.5.3.1. Распределение весовых коэффициентов кодовых слов
Пусть Aj — количество кодовых слов с весовым коэффициентом j в линейном коде (п, k). Числа A0,A1,…,An называются распределением весовых коэффициентов этого кода. Если код применяется только для обнаружения ошибок в двоичном симметричном канале, то вероятность того, что декодер не сможет определить ошибку, можно рассчитать, исходя из распределения весовых коэффициентов кода [5].
(6.48)
где р — вероятность перехода в двоичном симметричном канале. Если минимальное расстояние кода равно dmin значения от А1 до , равны нулю.
Пример 6.5. Вероятность необнаруженной ошибки в коде
Пусть код (6,3), введенный в разделе 6.4.3, используется только для обнаружения наличия ошибок. Рассчитайте вероятность необнаруженной ошибки, если применяется двоичный симметричный канал, а вероятность перехода равна 10-2.
Решение
Распределение весовых коэффициентов этого кода выглядит следующим образом: A0=1, А1= А2 = 0, A3 = 4, A5 = 0, A6 = 0. Следовательно, используя уравнение (6.48), можно записать следующее.
Для р = 10-2 вероятность необнаруженной ошибки будет равна 3,9 х 10-6.
6.5.3.2. Одновременное обнаружение и исправление ошибок
Возможностями исправления ошибок с максимальным гарантированным (t), где t определяется уравнением (6.44), можно пожертвовать в пользу определения класса ошибок. Код можно использовать для одновременного исправления α и обнаружения β ошибок, причем , а минимальное расстояние кода дается следующим выражением [4].
(6.49)
При появлении t или меньшего числа ошибок код способен обнаруживать и исправлять их. Если ошибок больше t, но меньше е+1, где е определяется уравнением (6.47), код может определять наличие ошибок, но исправить может только некоторые из них. Например, используя код с dmin = 7. можно выполнить обнаружение и исправление со следующими значениями α и β.
Заметим, что исправление ошибки подразумевает ее предварительное обнаружение. В приведенном выше примере (с тремя ошибками) все ошибки можно обнаружить и исправить. Если имеется пять ошибок, их можно обнаружить, но исправить можно только одну из них.
6.5.4. Визуализация пространства 6-кортежей
На рис. 6.14 визуально представлено восемь кодовых слов, фигурирующих в примере из раздела 6.4.3. Кодовые слова образованы посредством линейных комбинаций из трех независимых 6-кортежей, приведенных в уравнении (6.26); сами кодовые слова образуют трехмерное подпространство. На рисунке показано, что такое подпространство полностью занято восемью кодовыми словами (большие черные круги); координаты подпространства умышленно выбраны неортогональными. На рис. 6.14 предпринята попытка изобразить все пространство, содержащее шестьдесят четыре 6-кортежей, хотя точно нарисовать или составить такую модель невозможно. Каждое кодовое слово окружают сферические слои или оболочки. Радиус внутренних непересекающихся слоев — это расстояние Хэмминга, равное 1; радиус внешнего слоя — это расстояние Хэмминга, равное 2. Большие расстояния в этом примере не рассматриваются. Для каждого кодового слова два показанных слоя заняты искаженными кодовыми словами. На каждой внутренней сфере существует шесть таких точек (всего 48 точек), представляющих шесть возможных однобитовых ошибок в векторах, соответствующих каждому кодовому слову. Эти кодовые слова с однобитовыми возмущениями могут быть соотнесены только с одним кодовым словом; следовательно, такие ошибки могут быть исправлены. Как видно из нормальной матрицы, приведенной на рис. 6.11, существует также одна двухбитовая ошибочная комбинация, которая также поддается исправлению. Всего существует разных двухбитовых ошибочных комбинаций, которыми может быть искажено любое кодовое слово, но исправить можно только одну из них (в нашем примере это ошибочная комбинация 010001). Остальные четырнадцать двухбитовых ошибочных комбинаций описываются векторами, которые нельзя однозначно сопоставить с каким-либо одним кодовым словом; эти не поддающиеся исправлению ошибочные комбинации дают векторы, которые эквивалентны искаженным векторам двух или большего числа кодовых слов. На рисунке все (56) исправимые кодовые слова с одно- и двухбитовыми искажениями показаны маленькими черными кругами. Искаженные кодовые слова, не поддающиеся исправлению, представлены маленькими прозрачными кругами.
Рис, 6.14. Пример восьми кодовых слов в пространстве 6-кортежей
При представлении свойств класса кодов, известных как совершенные коды (perfect code), рис. 6.14 весьма полезен. Код, исправляющий ошибки в t битах, называется совершенным, если нормальная матрица содержит все ошибочные комбинации из t или меньшего числа ошибок и не содержит иных образующих элементов классов смежности (отсутствует возможность исправления остаточных ошибок). В контексте рис. 6.14 совершенный код с коррекцией ошибок в t битах — это такой код, который (при использовании обнаружения по принципу максимального правдоподобия) может исправить все искаженные кодовые слова, находящиеся на расстоянии Хэмминга t (или ближе) от исходного кодового слова, и не способен исправить ни одну из ошибок, находящихся на расстоянии, превышающем t.
Кроме того, рис. 6.14 способствует пониманию основной цели поиска хороших кодов. Предпочтительным является пространство, максимально заполненное кодовыми словами (эффективное использование введенной избыточности), а также желательно, чтобы кодовые слова были по возможности максимально удалены друг от друга. Очевидно, что эти цели противоречивы.
6.5.5. Коррекция со стиранием ошибок
Приемник можно сконструировать так, чтобы он объявлял символ стертым, если последний принят неоднозначно либо обнаружено наличие помех или кратковременных сбоев. Размер входного алфавита такого канала равен Q, а выходного —Q + 1; лишний выходной символ называется меткой стирания (erasure flag), или просто стиранием (erasure). Если демодулятор допускает символьную ошибку, то для ее исправления необходимы два параметра, определяющие ее расположение и правильное значение символа. В случае двоичных символов эти требования упрощаются — нам необходимо только расположение ошибки. В то же время, если демодулятор объявляет символ стертым (при этом правильное значение символа неизвестно), расположение этого символа известно, поэтому декодирование стертого кодового слова может оказаться проще исправления ошибки. Код защиты от ошибок можно использовать для исправления стертых символов или одновременного исправления ошибок и стертых символов. Если минимальное расстояние кода равно dmin, любая комбинация из ρ или меньшего числа стертых символов может быть исправлена при следующем условии [6].
(6.50)
Предположим, что ошибки появляются вне позиций стирания. Преимущество исправления посредством стираний качественно можно выразить так: если минимальное расстояние кода равно dmin, согласно уравнению (6.50), можно восстановить dmin-1 стирание. Поскольку число ошибок, которые можно исправить без стирания информации, не превышает (dmin-1)/2, то преимущество исправления ошибок посредством стираний очевидно. Далее, любую комбинацию из α ошибок и γ стираний можно исправить одновременно, если, как показано в работе [6],
(6.51)
Одновременное исправление ошибок и стираний можно осуществить следующим образом. Сначала позиции из у стираний замещаются нулями, и получаемое кодовое слово декодируется обычным образом. Затем позиции из у стираний замещаются единицами, и декодирование повторяется для этого варианта кодового слова. После обработки обоих кодовых слов (одно с подставленными нулями, другое — с подставленными единицами) выбирается то из них, которое соответствует наименьшему числу ошибок, исправленных вне позиций стирания. Если удовлетворяется неравенство (6.51), то описанный метод всегда дает верное декодирование.
Пример 6.6. Коррекция со стиранием ошибок
Рассмотрим набор кодовых слов, представленный в разделе 6.4.3.
000000 110100 011010 101110 101001 011101 110011 000111
Пусть передано кодовое слово 110011, в котором два крайних слева разряда приемник объявил стертыми. Проверьте, что поврежденную последовательность хx0011 можно исправить.
Решение
Поскольку , код может исправить
= 2 стирания. В этом легко убедиться из рис. 6.11 или приведенного выше перечня кодовых слов, сравнивая 4 крайних правых разряда xx00l1 с каждым из допустимых кодовых слов. Действительно переданное кодовое слово — это ближайшее (с точки зрения расстояния Хэмминга) к искаженной последовательности.
Содержание
- 1 Способы борьбы с ошибками
- 2 Корректирующие коды в модулярной арифметике
- 3 Обнаружение и коррекция ошибок с помощью R-кодов
- 4 Литература
Способы борьбы с ошибками
Одним из основных параметров при проектировании сложных вычислительных устройств была и остается надежность их функционирования [1], [2], [3], [4], [5]. Ведь, с одной стороны, постоянный рост требований к скоростным характеристикам вычислительных устройств приводит к необходимости организации параллельных вычислений, а с другой стороны, при этом увеличивается частота возникновения отказов, и возрастает время простоя процессоров, вызванное трудностью отыскания и ликвидации неисправности. Очевидно, что независимо от того, какие характеристики проявляет вычислительное устройство, единственная ошибка в любом из его блоков может отключить или повредить всю систему и в некоторых случаях привести к катастрофическим неисправностям. Проблема высокой надежности не только передачи информации, но и ее обработки особенно актуальна в современных системах, работающих в реальном времени, где ошибки работы оборудования должны быть обнаружены и исправлены немедленно. Стоит отметить и то, что переход на новейшие субмикронные технологии только усугубляет данную проблему, так как сложность изготовления ИС многократно возрастает, а вместе с ней возрастает и вероятность возникновения отказов. Такие отказы могут быть обнаружены заблаговременно и влиять на процент выхода годных, так и на этапе их непосредственной эксплуатации, что крайне нежелательно для целого ряда систем, таких, например, как медицинская техника, навигационное оборудование и другая аппаратура, неисправности в работе которой могут обходиться очень дорого. Таким образом, высокая надежность в этом случае должна достигаться не столько совершенствованием самих технических средств передачи информации, сколько за счет применения таких способов ее кодирования, которые были бы устойчивы по отношению к возможным случайным искажениям и позволяли бы при необходимости осуществлять коррекцию данных. В связи с этим наиболее перспективным путем решения рассматриваемой проблемы является придание вычислительным устройствам свойства устойчивости к отказам и сбоям в процессе функционирования. Принято считать вычислительную систему отказоустойчивой (fault-tolerant system), если при возникновении отказа она сохраняет свои функциональные возможности в полном (fail-save) или уменьшенном (fail-soft) объеме. При этом отказоустойчивость обеспечивается сочетанием избыточности системы и наличием механизма обнаружения ошибок, а также процедур для автоматического восстановления ее правильного функционирования. Fail-save устойчивость к отказам характеризует способность вычислительной системы обеспечивать корректную работу, несмотря на возникновение отказа, но с понижением качества, то есть находясь в состоянии постепенного снижения эффективности. Именно в таком контексте будет рассматриваться далее понятие отказоустойчивости.
При общем взгляде на проблему повышения надежности устройств можно выделить три наиболее распространенных способа обеспечения отказоустойчивости (рис.1) Кроме того, в зависимости от причины возникновения ошибок методы борьбы с ошибками в цифровых устройствах при обработке информации разделяют на методы, ориентированные на борьбу с отказами и/или сбоями элементов. Эти методы требуют различного уровня вводимой избыточности, причем борьба со сбоями по сравнению с отказами элементов требует более сложных схем коррекции ошибок.
Рис.1. Основные способы обеспечения отказоустойчивости цифровых схем.
Самым простым и распространенным методом борьбы как с отказами, так и сбоями элементов является аппаратное резервирование цифровых устройств и систем [1],[2],[3],[4],[6]. Существует много различных методов резервирования. Рассмотрим, например, два наиболее известных метода: нагруженное («горячее») и ненагруженное («холодное») резервирование. В последнем случае используется резервный комплект оборудования, который подключается, когда рабочий комплект начинает выдавать ошибочную информацию. Рабочий комплект в этот момент, естественно, отключается. При «горячем» резервировании одновременно функционируют все комплекты оборудования, выходы которых объединяются через мажоритарный элемент. Как видно, для любого из методов резервирования характерна очень высокая избыточность. Так, например, в большинстве случаев обнаружение правильности результатов достигается двойным просчетом, а выбор правильного результата по совпадающим данным тройным просчетом. Такая высокая избыточность объясняется тем, что при резервировании практически полностью игнорируется специфика самого устройства и корректируются ошибки с любой вероятностью возникновения. Однако во многих вычислительных устройствах для обеспечения надежной работы достаточно исправить лишь часть наиболее вероятных ошибок.
Другим способом обеспечения отказоустойчивости является применение специальных позиционных кодов, широко используемых в каналах связи [7],[8],[9],[4]. Такие коды призваны обнаруживать и исправлять случайные ошибки, возникающие в процессе хранения или передачи информации. Для каждого специального кода, от которого требуется, чтобы он обладал способностью к обнаружению и коррекции ошибки, характерно наличие двух групп цифр — информационной и контрольной. Обозначим через и
соответственно информационную и контрольную части кода
. Контрольная часть
является функцией информационной части:
. Основной особенностью известных специальных позиционных кодов является неравноправность информационной и контрольной частей кода относительно арифметических операций. Пусть
,
,
,
информационные и соответственно контрольные части кодов чисел
и
, и пусть над
и
должна быть совершена некоторая арифметическая операция
. Обе части кода были бы равноправны, если бы операция
совершалась над полным кодом, т.е. вычислялась бы величина
, причем
. Тогда, вычислив
и сопоставив его с
— фактической контрольной частью кода
, можно проконтролировать правильность выполнения операции
. Между тем в известных позиционных кодах операция
производится не над полным кодом чисел
и
, а над
и
, т.е. получается
, а
вычисляется как
, после чего составляется полный код
, для которого
. Здесь
и
в арифметической операции не участвуют, что не дает никакой возможности по контрольным частям операндов составить контрольную часть результата, т.е. исключается возможность контроля правильности выполнения арифметических операций. Именно это свойство неарифметичности специальных позиционных кодов препятствует их применению в вычислительных системах, поскольку веденные контрольные разряды не позволяют контролировать результат арифметической операции, в то время как такой контроль для вычислительной системы не менее важен, чем контроль передачи информации [1], [7]. Поэтому в случаях, когда информация подвергается определенным преобразованиям, необходимо применять специальные коды, инвариантные к этим преобразованиям.
Наконец, третий способ обеспечения отказоустойчивости предполагает применение так называемых арифметических кодов — корректирующих кодов, сохраняющих свои свойства при выполнении некоторых арифметических операций [9], [4]. Известны два основных класса арифметических кодов, исправляющих ошибки. К первому классу относятся такие коды, которые не изменяют формы представления исходных чисел. Эти коды, называемые обычно AN-кодами, могут достаточно эффективно использоваться для коррекции ошибок в вычислительных устройствах последовательного типа. В этом случае декодирующая схема получается достаточно — простой. Однако при переходе к устройствам параллельного типа декодирующая аппаратура сильно усложняется даже для кодов, исправляющих только одиночные ошибки. В то же время наличие общих цепей у схем, относящихся к различным разрядам, ставит под сомнение независимость ошибок в этих схемах. Поэтому AN-коды используются в вычислительных машинах в основном для обнаружения ошибок.
Значительно более широкими корректирующими возможностями обладают арифметические коды второго класса — непозиционные коды в модулярной арифметике [1], [4], [10], [11], [12], [13], [14], [15], [16], [5], [17], [18]. Ранее были перечислены основные преимущества модулярного подхода, из которых можно заключить, что модулярная арифметика обладает уникальными свойствами относительно обнаружения и коррекции ошибок. Во-первых, в ней отсутствует значимость порядка цифр в записи числа, а, во-вторых, и коды и проверяемые числа представляются в виде остатков, что позволяет считать такие коды полностью арифметическими. Исходя из этих свойств, можно сделать вывод о том, что применение модулярной арифметики позволяет эффективно решать проблему построения отказоустойчивых систем и служит мощным инструментом для автоматического обнаружения и коррекции ошибок.
Корректирующие коды в модулярной арифметике
Рассмотрим теорию, основные понятия и свойства корректирующих кодов в модулярной арифметике в объеме, достаточном для анализа вопросов аппаратной реализации отказоустойчивых вычислительных систем на их основе. Пусть имеется система остаточных классов (СОК) с набором модулей и некоторый вектор
, компонентами которого являются натуральные числа, удовлетворяющие условию:
, где
. Число различных векторов такого типа, отличающихся хотя бы одной компонентой, будет равно произведению
. Как известно, любое положительное число
, находящееся в диапазоне
однозначно представляется в системе остаточных -классов с общим основанием
, где НОК — наименьшее общее кратное, при условии
. Тогда каждому числу
из диапазона
можно поставить в соответствие некоторый вектор
из диапазона
. При этом подмножество
различных векторов
называют корректирующим кодом, обозначим его через
, а сами эти вектора кодовыми словами или кодовыми векторами. В случае
представление чисел в такой системе является безызбыточным. Однако, в общем случае это не так, а значит любую СОК можно характеризовать величиной
, называемой степенью избыточности представления чисел в этой системе. Именно наличие определенной избыточности представления чисел в СОК позволяет обнаруживать и корректировать ошибки, возникающие как в процессе ранения, так и обработки информации.
В зависимости от соотношения между величинами ,
и
можно классифицировать корректирующие коды, как показано на рис.2 [4].
Рис.2. Классификация корректирующих кодов в модулярной арифметике.
При этом R-коды соответствуют системам со взаимно простыми основаниями, а коды второго и третьего классов соответствуют системам с основаниями, не являющимися взаимно простыми. В данной работе рассматриваются наиболее распространенные и эффективные R-коды в классической системе остаточных классов со взаимно попарно простыми модулями , для которой
.
Прежде чем приступить непосредственно к изучению корректирующих способностей кодов в модулярной арифметике, введем понятие ошибки. Под одиночной Ошибкой будем понимать любое искажение цифры, соответствующей какому-либо одному модулю в модулярном представлении числа. Аналогично можно дать определение ошибкам более высокой кратности, так, например, двойная ошибка соответствует искажению двух цифр, соответствующих каким-либо двум модулям, и т.д. При этом вес вектора ошибки равен ее кратности.
Поскольку избыточность системы остаточных классов является первостепенным фактором при оценке эффективности любого корректирующего кода, то необходимо становить связь между ее величиной и свойствами кода по обнаружению и коррекции ошибок. Чаще всего для этого используют понятие минимального расстояния кода, т.е. наименьшего расстояния между любыми двумя кодовыми словами [4], [13], [14], [16], [17]. В общем случае, расстоянием между любыми двумя векторами
и
или
назовем число компонент, в которых эти векторы отличаются друг от друга. В свою очередь, минимальное расстояние кода
определяется следующим образом:
(1)
Очевидно, что величина расстояния между различными векторами изменяется от 1 до p, при этом двум соседним числам и
, отличающимся на единицу, соответствуют векторы
и
, расстояние между которыми равно
для любой СОК. Кроме того, каждому вектору
можно присвоить определенный вес
, равный числу ненулевых компонент этого вектора. Связь расстояния между двумя векторами и их весами можно легко установить с помощью выражения:
(2)
Теперь, воспользовавшись понятием минимального расстояния кода можно определить его корректирующие возможности. Очевидно, что построение любой отказоустойчивой системы подразумевает под собой реализацию двух основных задач:
1) обнаружение ошибки, т.е. проверка, является ли полученный результат вычислений кодовым словом;
2) исправление (коррекция) ошибки, т.е. преобразование искаженного результата в правильное кодовое слово.
Самым простым по своей сути, но сложным, с точки зрения реализации, способом обнаружения ошибки является сравнение результата с каждым возможным кодовым словом. Если он не является правильным, но принадлежит кодовому пространству , то произошла необнаруживаемая ошибка. Если же результат не принадлежит кодовому пространству
, то наличие ошибки обнаружено. Это значит следует определить такой параметр корректирующего кода как способность обнаружения ошибки
— наибольшая кратность ошибки, которая может произойти при условии, что результат вычислений не будет принадлежать кодовому пространству
. Иными словами это максимальный вес ошибки, при котором результат не попадает в кодовое пространство
. Связь между способностью обнаружения ошибки и минимальным расстоянием кода устанавливается следующим соотношением:
(3)
Таким образом, корректирующий код в СОК может обнаружить все совокупности из или меньшего числа ошибок лишь в том случае, если минимальное расстояние кода больше
.
По аналогии с обнаружением ошибки, самым простым по сути, но сложным, с точки зрения реализации, способом ее исправления также является сравнение результата вычислений с каждым кодовым словом. После этого выполняется преобразование искаженного результата в кодовое слово, для которого расстояние между ним и результатом минимально. Таким образом, возникает необходимость введения еще одного важного параметра корректирующего кода, а именно способность исправления ошибки — максимальная кратность (вес) ошибки, при которой будет иметь место правильное декодирование результата в кодовое слово. Связь между способностью исправления ошибки и минимальным расстоянием кода устанавливается следующим соотношением:
(4)
Другими словами, корректирующий код в СОК может исправить (скорректировать) все совокупности из или меньшего числа ошибок лишь в том случае, если минимальное расстояние кода больше удвоенного числа ошибок. Из выражений (2) и (3) следует, что корректирующий код в избыточной СОК способен исправлять любые
ошибок и одновременно обнаруживать любые
ошибок в том случае, если его минимальное расстояние больше либо равно
. Таким образом, определив минимальное расстояние кода, можно получить представление о его корректирующих способностях. Стоит заметить, однако, что минимальное расстояние дает довольно грубую оценку возможностей кода, не раскрывая полностью его структуру, и позволяет определить лишь гарантируемый минимум числа обнаруживаемых или корректируемых ошибок.
Переходя к рассмотрению непосредственно R-кодов, применяемых для построения отказоустойчивых систем, отметим, что для них , а степень избыточности R зависит от соотношения
. Такие коды могут иметь любое минимальное расстояние в зависимости от величины
, определяемое из условия:
(5)
где . Данная запись означает, что корректирующий R-код имеет минимальное расстояние
в том и только в том случае, если степень избыточности
не меньше произведения любых
оснований заданной СОК. На самом деле R-код с минимальным расстоянием
может обнаруживать и корректировать некоторое число ошибок более высокой кратности, чем та, которая определяется выражениями (3) и (4). Например, если в СОК имеются такие основания, число которых
, что их произведение меньше R, то любые ошибки по этим модулям можно обнаружить. В общем случае довольно сложно оценить долю ошибок произвольной кратности
, которые можно обнаружить или исправить при помощи кода с минимальным расстоянием, меньшим
. Сложность заключается в том, что даже при достаточно грубых оценках необходимо знать не только величину
, но и величину каждого из модулей системы. Поэтому наиболее реальным способом получения информации о возможностях каждого конкретного кода является статистическое моделирование.
Проанализировав условие (5), можно заключить, что минимальное расстояние R-кода напрямую зависит от степени избыточности системы остаточных классов, которая, каким образом, определяет корректирующие способности этого кода согласно выражениям (3) и (4). Очевидно, что чем больше избыточность СОК, тем более широкими возможностями обладает соответствующий ей R-код. Повышение степени избыточности достигается путем введения в СОК дополнительных модулей, называемых также контрольными. Основные модули системы
, произведение которых равно
, в данном контексте называют информационными. Помимо этого целесообразно ввести также следующие обозначения:
(6)
(7)
(8)
Будем называть величину , рабочим диапазоном, а
полным диапазоном системы.
Если сравнивать полученный таким образом R-код с рассмотренными выше специальными позиционными кодами, то он также состоит из двух частей — информационной (1:p) и контрольной (p+1:r):
(9)
Ключевое отличие заключается в том, что обе части такого кода равноправно участвуют во всех операциях внутри независимых вычислительных каналов, соответствующих каждому из модулей системы. Отсюда следует, что любой из информационных разрядов числа в модулярном виде можно заменить контрольным при восстановлении результата вычислений в двоичную систему счисления. Фактически именно эта особенность кодов в модулярной арифметике тем или иным образом используется для коррекции ошибок.
Между вводимыми в СОК контрольными модулями и минимальным расстоянием кода существует определенная связь, а именно, минимальное расстояние кода равно , если и только если произведение контрольных модулей удовлетворяет соотношению:
, где
. (10)
Из выражения (10) следует, что в общем случае выбор контрольных модулей неоднозначен для заданного набора модулей и минимального расстояния кода . В связи с этим возникает вопрос о поиске оптимального набора контрольных |модулей для избыточной СОК. Под оптимальным в этом случае понимается такой набор контрольных модулей, при котором значение М* будет минимально для данного минимального расстояния кода
. Очевидно, что наименьшее значение М* при минимальном расстоянии кода
определяется из (10) как
(11)
Полученное выражение означает, что оптимальным набором дополнительных или контрольных модулей при минимальном расстоянии кода являются
наибольших значений в полном наборе модулей. Отсюда следует важное свойство: если каждый контрольный модуль больше любого информационного, то минимальное расстояние кода на единицу больше числа контрольных модулей, т.е.
(12)
при условии
(13)
Таким образом, согласно (12), увеличивая или уменьшая число контрольных модулей, можно изменять минимальное расстояние кода. Изменения минимального расстояния можно добиться и путем уменьшения числа информационных модулей, т.е. фактически переходя к вычислениям с меньшей точностью. Это означает, что между корректирующими способностями R-кодов и точностью вычислений существует обратно пропорциональная зависимость. Поэтому возникает возможность в рамках одной и той же системы остаточных классов варьировать, в зависимости от требований, выполнение вычислений либо с высокой точностью, но небольшой надежностью, либо с меньшей точностью, но зато с более высокой надежностью и быстродействием.
Обнаружение и коррекция ошибок с помощью R-кодов
Рассмотрим механизм обнаружения и коррекции ошибок с помощью R-кодов. Первый шаг в любой процедуре коррекции и единственный в процедуре обнаружения ошибки это проверка, является ли полученный в результате вычислений вектор кодовым словом. Поскольку все числа, с которыми оперирует устройство должны лежать в диапазоне , то его называют диапазоном правильных чисел, а принадлежащие ему числа правильными. В то же время числа из диапазона
являются неправильными, а сам он называется диапазоном неправильных чисел. Очевидно, что если в результате какой-либо операции или при передаче числа оказалось, что получено число
, то при проведении операции была допущена ошибка. Таким образом, обнаружение одиночной ошибки основано на том факте, что любое искажение цифры по одному из оснований превращает все число в неправильное. Поэтому для обнаружения одиночной ошибки в числе
его нужно сравнить с рабочим диапазоном
. При этом, если
, значит произошла ошибка по крайней мере в одном из каналов. Если
, то либо ошибки нет, либо она носит более сложный характер.
Описанное выше свойство корректирующих кодов применяется при обнаружении и коррекции ошибок на основе метода проекций [1], [4], [10], [11], [12], [15], [17]. Проекцией числа по основанию
, называется число
, полученное из
вычеркиванием соответствующего остатка
. По своей сути алгоритм определения ошибочной цифры и ответствующего ей модуля на основе проекций довольно прост. Необходимо вычислить проекции числа
по каждому из модулей системы, а затем сравнить их с величиной
. Если какая-либо из проекций
окажется меньше значения
, т.е. будет правильным числом, то ошибка произошла в соответствующем модуле
. Иными словами, если полученное в результате вычислений число
является правильным, то все его проекции должны быть неправильными числами. Таким образом, метод проекций позволяет установить в цифре по какому из модулей системы произошла ошибка, т.е. обеспечивает ее локализацию. Однако, как и сам алгоритм определения ошибочной цифры, так и последующая ее коррекция на основе метода проекций представляются малоэффективными и затратными с точки зрения практической реализации. А именно, вычисление каждой из проекций требует выполнения операции восстановления числа из модулярного представления в двоичное и последующих вычислений над числами большой разрядности, что вносит значительный вклад как в аппаратные затраты, так и в задержку работы устройства. Кроме того, такой метод подразумевает исправление лишь ошибочного остатка, а не всего числа, приводя к необходимости восстанавливать число с уже правильными значениями всех остатков. В связи с этим возникает необходимость искать другие методы реализации механизма обнаружения и коррекции ошибок в СОК.
Одной из альтернатив методу проекций для обнаружения и коррекции ошибок в СОК является синдромное декодирование с вычислением так называемых синдромов ошибки по контрольным основаниям системы [19], [13], [14], [20], [16], [17]. В основе этого метода чаще всего лежит так называемая операция расширения системы оснований (base extension, ВЕХ). Это немодульная операция, позволяющая по известным остаткам числа, соответствующим некоторым модулям СОК, определить значения остатков этого же числа для других оснований. Обычно для реализации операции расширения системы оснований используют систему счисления со смешанными основаниями (ССО), переход к которой носит итеративный характер и может привести к ухудшению быстродействия всего устройства.
Суть метода синдромного декодирования заключается в следующем. Пусть в результате вычислений в СОК получено некоторое число . Для определения правильности числа
необходимо по известным остаткам
определить значения его остатков по контрольным основаниям
. Затем следует сравнить значения
с
— остатками по тем же модулям, но образованными уже в ходе вычислений над входными данными, аналогичных тем, в результате которых было получено само число
. Сравнение остатков по контрольным основаниям можно осуществить их вычитанием:
, где
. (14)
Числа называются синдромами ошибки, т.е. позволяют определить [правильность результата вычислений в СОК. В предположении, что в полученном числе
оказались искаженными не больше чем
остатков, для кода, имеющего минимальное расстояние
, можно сформулировать следующие свойства синдромов ошибки:
1) Если все значения синдромов равны нулю: , то ошибки не возникло и вектор
является кодовым словом;
2) Если значений синдромов
не равны нулю, то ошибки произошли в соответствующих остатках по контрольным модулям, при этом вектор
является кодовым словом;
3) Если больше чем значений синдромов не равны нулю, то произошла по меньшей мере одиночная ошибка в векторе
.
Для демонстрации данного механизма обнаружения и исправления ошибок с применением корректирующих кодов в модулярной арифметике, рассмотрим случай построения отказоустойчивой системы с исправлением одиночных ошибок. Такая система обеспечивает минимальные возможности по коррекции ошибок и наиболее часто обсуждается в литературе. Согласно формуле (4) такой код должен иметь минимальное расстояние . В соответствии с (12) данное значение минимального расстояния кода достигается введением в СОК двух контрольных модулей
и
. Обычно значения синдромов ошибки
и
используют как для обнаружения, так и для коррекции обнаруженных ошибок. Это становится возможным благодаря тому, что каждой паре значений
соответствует единственное значение вектора ошибки, а значит и корректирующего слова для ее исправления. Таким образом, коррекция ошибки при использовании данного метода осуществляется сложением числа, содержащего ошибку, и корректирующего слова, вычисленного по значениям синдромов
и
. Стоит также отметить, что при коррекции в данном случае складываются обычные двоичные числа, а поэтому нет необходимости в каких-либо дополнительных преобразованиях.
Одним из наиболее эффективных и распространенных в литературе вариантов и отказоустойчивых систем с указанными выше свойствами является представленная на рис.3 архитектура [19], [20].
Рис.3. Вариант общей архитектуры отказоустойчивой системы с обнаружением и коррекцией одиночных ошибок в СОК.
Для достижения требуемого уровня надежности устройства необходимо введение определенной избыточности путем включения в систему оснований контрольных модулей. Учитывая условие (13), становится вполне очевидным, что в результате повышения избыточности системы таким образом, при соблюдении условия взаимной простоты ее оснований, разрядность контрольных модулей неизбежно растет, а следовательно растут и разрядности операндов в соответствующих вычислительных каналах. Это обстоятельство может привести к значительному ухудшению быстродействия всего устройства, что, безусловно, является неприемлемой платой для большинства современных вычислительных систем. Поэтому возникает необходимость разработки эффективных методов аппаратной реализации основных вычислительных блоков отказоустойчивых систем, позволяющих избежать снижения быстродействия при их проектировании с одной стороны, а с другой — минимизировать аппаратную избыточность (Рис.4)[26].
Рис.4. Особенности применения R-кодов при реализации систем повышенной надежности на основе аппарата модулярной арифметики.
Хотя значительная часть известных методов и алгоритмов функционирования основных вычислительных узлов в модулярной арифметике либо ориентированы на устаревшую элементную базу, либо рассмотрены лишь с теоретической точки зрения, а их эффективная аппаратная реализация и реальные оценки ее сложности представлены недостаточно для применения на практике при проектировании вычислительных систем. Часто методы, описанные в основном в зарубежной литературе, носят незаконченный характер и не дают полного представления о внутренней структуре того иного блока, что необходимо для действительно эффективной с практической точки зрения реализации. В то же время современное развитие различных методов, приемов и средств проектирования позволяет по-новому взглянуть даже на существующие и известные принципы построения как отдельных вычислительных узлов, так и систем в целом, в том числе и систем повышенной надежности [21], [22], [23], [24], [25], [26].
Литература
1. Акушский И. Я., Юдицкий Д. И. Машинная арифметика в остаточных классах. — М.: Советское радио, 1968. — 440с.
2. Коёкин А. И. Структурные методы обеспечения надежности информационных систем// Диссертация на соискание ученой степени доктора технических наук. — Москва, 1974. — 303с.
3. Конопелько В. К., Борискевич А. А. Контроль ошибок в цифровых устройствах// Учеб. пособие по курсам «Теория кодирования» и «Цифровые и микропроцессорные устройства». — Мн.: БГУИР, 2003. — 18с.
4. Торгашев В. А. Система остаточных классов и надежность ЦВМ. — М.: Советское радио, 1973. — 120с.
5. Watson R. W., Hastings C. W. Self-Checked Computation Using Residue Arithmetic// Proceedings of the IEEE, vol. 54, no. 12, December 1966. — P.1920-1931.
6. Угрюмов Е. П. Цифровая схемотехника. — СПб.: БХВ-Петербург, 2002. — 528с.
7. Блейхут Р. Теория и практика кодов, контролирующих ошибки: Пер. с англ. М.: Мир, 1986.-576с.
8. Кларк Дж., мл., Кейн Дж. Кодирование с исправлением ошибок в системах цифровой связи: Пер. с англ. М.: Радио и связь, 1987. — 391с.
9. Питерсон У., Уэлдон Э. Коды, исправляющие ошибки: Пер. с англ. М.: Мир, 1976. -590с.
10. Barsi F., Maestrini P. Error Correcting Properties of Redundant Residue Number Systems// IEEE Transactions on Computers, vol. C-21, no. 3, March 1973. P. 307-315.
11. Barsi F., Maestrini P. Error Detection and Correction by Product Codes in Residue Number Systems// IEEE Transactions on Computers, vol. C-23, no. 9, September 1974. -P. 915-924.
12. Jenkins W.K., Altman E.J. Self-Checking Properties of Residue Number Error Checkers Based on Mixed Radix Conversion// IEEE Transactions on Circuits and Systems, vol. 35, no. 2, February 1988. P. 159-167.
13. Krishna H., Lin K.-Y., Sun J.-D. A Coding Theory Approach to Error Control in Redundant Residue Number Systems — Part I: Theory and Single Error Correction// IEEE Transactions on Circuits and Systems-II: Analog and Digital Signal Processing, vol. 39, no. 1, January 1992.-P. 8-17.
14. Krishna H., Sun J.-D. On Theory and Fast Algorithms for Error Correction in Residue Number System Product Codes// IEEE Transactions on Computers, vol. 42, no. 7, July 1993.-P. 840-853.
15. Orton G.A., Peppard L.E., Tavares S. E. New Fault Tolerant Techniques for Residue Number Systems// IEEE Transactions on Computers, vol. 41, no. 11, November 1992. -P.1453-1464.
16. Sun J.-D., Krishna H. A Coding Theory Approach to Error Control in Redundant Residue Number Systems — Part I: Multiple Error Detection and Correction// IEEE Transactions on Circuits and Systems-II: Analog and Digital Signal Processing, vol. 39, no. 1, January 1992.-P. 18-34.
17. Yang L.-L., Hanzo L. Coding Theory and Performance Of Redundant Residue Number System Codes// submitted to IEEE Transactions on Information Theory, 1999. 40 p.
18. Yang L.-L., Hanzo L. Redundant Residue Number System Based Error Correction Codes// IEEE Vehicular Technology Conference, 2001. IEEE VTC 54th, vol. 3, 7-11 October 2001.-P. 1472-1476.
19. Cosentino R.J. Fault Tolerance in a Systolic Residue Arithmetic Processor Array// IEEE Transactions on Computers, vol. 37, no. 7, July 1988. P. 886-890.
20. Radhakrishnan D., Preethy A.P. A novel 36-bit single fault tolerant multiplier using 5-bit moduli// IEEE TENCON 98, vol. 1, pp. 128-130, New Delhi, India, Dec. 1998.
21. Исследование методов пректирования и разработка прграмных средств синтеза быстродействующих арифметических устройств// Отчет о НИР по программе ОИТВС РАН » Оптимизация вычислительных архитектур под конкретные классы задач, информационная безопасность сетевых технологий» (шифр «Вега-О-Ст-2006»). #ГР 01.200606060, инв.#0220.0701842. М.: ИППМ РАН, 2006.
22. Калашников В.С. Основные принципы построения отказоустойчивых систем с применением аппарата модулярной арифметики. Микроэлектроника и информатика-2006. 13-я Всероссийская межвузовская научно-техническая конференция студентов и аспирантов: Тезисы докладов, М.:МИЭТ, 2006. — С. 237.
23. Корнилов А.И., Семенов М.Ю., Ласточкин О.В., Калашников В.С. Методология проектирования специализированных вычислителей на основе автоматизированной генерации технологически независимых IP-блоков.// Проблемы разработки перспективных микроэлектронных схем -2005. Сборник научных трудов/ под общ. ред. А. Л. Стемпковского. М.: ИППМ РАН, 2005. — 537с., С.487-492.
24. Корнилов А.И., Семенов М.Ю., Ласточкин О.В., Калашников В.С. Реализация специализированных быстродействующих вычислителей на основе нетрадиционных алгоритмов с применением IP-генераторов. 5 Международная научно-техническая конференция «Электроника и информатика». — 2005.
25. Стемпковский А.Л., Корнилов А.И., Семенов М.Ю., Ласточкин О.В., Калашников В.С. Построение систем повышенной надежности на основе аппарата модулярной арифметики с применением современных методов и средств проектирования// Проблемы разработки перспективных микроэлектронных схем -2006. Сборник научных трудов/ под общ. ред. А. Л. Стемпковского. М.: ИППМ РАН, 2006. — 452с., С.253-258.
26. Калашников В.С. Исследование и разработка методов проектирования быстродействующих вычислительных узлов для реализации отказоустойчивых систем на основе модулярной арифметики// Диссертация на соискание ученой степени доктора технических наук. — Москва, 2007. — 180 с.