RU2743784C1 - Способ кодирования данных на основе LDPC кода - Google Patents
Способ кодирования данных на основе LDPC кода Download PDFInfo
- Publication number
- RU2743784C1 RU2743784C1 RU2020137362A RU2020137362A RU2743784C1 RU 2743784 C1 RU2743784 C1 RU 2743784C1 RU 2020137362 A RU2020137362 A RU 2020137362A RU 2020137362 A RU2020137362 A RU 2020137362A RU 2743784 C1 RU2743784 C1 RU 2743784C1
- Authority
- RU
- Russia
- Prior art keywords
- matrix
- data
- check
- parity
- ldpc
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/116—Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/1174—Parity-check or generator matrices built from sub-matrices representing known block codes such as, e.g. Hamming codes, e.g. generalized LDPC codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/65—Purpose and implementation aspects
- H03M13/6502—Reduction of hardware complexity or efficient processing
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/65—Purpose and implementation aspects
- H03M13/6561—Parallelized implementations
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Probability & Statistics with Applications (AREA)
- Mathematical Physics (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Error Detection And Correction (AREA)
Abstract
Изобретение относится к области кодирования информации с использованием кодов с низкой плотностью проверок на четность (LDPC) и предназначено для обеспечения работы немеханических запоминающих устройств на основе микросхем памяти. Технический результат - упрощение алгоритма вычисления кодового слова, обеспечивающего использование малого количества аппаратной логики. Способ кодирования данных на основе LDPC кода, в котором для генерирования кодового слова, состоящего из исходных данных и проверочных данных, используется проверочная матрица, которая содержит первую часть матрицы, относящуюся к исходным данным, и вторую часть матрицы, относящуюся к проверочным данным, при этом на главной диагонали второй части матрицы в нижней части располагаются циркулянты со сдвигом, равным нулю, а значения ячеек под главной диагональю второй части матрицы в этой же нижней части равны нулю.
Description
Изобретение относится к устройствам кодирования информации с использованием кодов с низкой плотностью проверок на четность (LDPC) и предназначено для обеспечения работы немеханических запоминающих устройств на основе микросхем памяти (SSD, USB Flash Drive, Flash Card и т.д.), применяется в аппаратуре контроллера немеханических запоминающих устройств на основе микросхем памяти.
В контроллерах твердотельных дисков LDPC коды стали применятся относительно недавно, заменив доминирующие много лет в этой области БЧХ (Боуза-Чоудхури-Хоквингема) коды. Одной из основных причин замены кодов на LDPC стал массовый переход производителей твердотельных дисков от моделей флеш-памяти, где в одной ячейке памяти хранится один бит, к более экономичным видам памяти, где плотность информации значительно выше (два, три и более бит). С ростом числа исправляемых ошибок сложность LDPC декодеров растет линейно, что делает их более эффективными по площади и энергоэффективности, чем БЧХ декодеры. Дополнительным фактором в пользу выбора LDPC является высокая корректирующая способность: стандартный LDPC декодер (в отличие от БЧХ декодера), наряду с жёсткими решениями (‘0’ или ‘1’), получаемыми при чтении с носителя памяти, может использовать мягкие решения, представляющие собой вероятностные оценки (Log-Likelihood Ratio, LLR) для каждого бита хранимой информации, и получаемые путем чтения ячейки памяти с несколькими порогами чтения.
Недостатком применения LDPC кодов является большая аппаратная сложность для кодирования данных.
Техническим результатом заявленного изобретения является упрощение алгоритма вычисления кодового слова, обеспечивающего использование малого количества аппаратной логики.
Результат обеспечивается тем, что предлагается способ кодирования данных на основе LDPC кода, в котором для генерирования кодового слова используется проверочная матрица, которая содержит первую часть матрицы, относящуюся к исходным данным, и вторую часть матрицы, относящуюся к проверочным данным, при этом на главной диагонали второй части матрицы в нижней части располагаются циркулянты со сдвигом, равным нулю, а значения ячеек под главной диагональю второй части матрицы в этой же в нижней части равны нулю.
Применение такой проверочной матрицы позволит упростить процедуру кодирования.
Далее будет описано подробное осуществление изобретения.
Заявленный способ подразумевает использование LDPC кодера.
LDPC кодер кодирует поступающие данные блоками, также называемыми “кодовые слова”. Процесс кодирования заключается в добавлении к исходным данным некоторого количества дополнительных данных – проверочных данных, которые впоследствии используются декодером для проверки исправления ошибок. Таким образом, кодовое слово состоит из исходных данных — i и проверочных данных — p.
Конкретный LDPC код может быть задан несколькими способами, один из них — это проверочная матрица Н. Проверочная матрица двумерная, её длина равна длине кодового слова, если умножить эту матрицу на кодовое слово без ошибок, то получится нулевой вектор. Если же в кодовом слове есть ошибки, то получится ненулевой вектор s, называемый синдромом.
Исходя из того, что вектор синдромов должен быть равен нулю для кодового слова без ошибок, задача LDPC кодера состоит в построении проверочной части p на основе информационной части i и проверочной матрицы H.
Запишем условие равенства синдрома нулю в виде формулы:
H
*
(i, p) = s = 0
Разложим данное выражение в виде суммы:
H
2
*
i + H
1
*
p = 0
где H 1 - часть проверочной матрицы, относящаяся к проверочным данным р, т.е. та часть матрицы Н, которая умножается на проверочные данные кодового слова для вычисления вектора матрицы;
а H 2 – часть проверочной матрицы, относящаяся к исходным данным i, т.е. та часть матрицы Н, которая умножается на исходные данные кодового слова для вычисления вектора матрицы.
Перенесём одно слагаемое в правую часть и домножим обе части на H 1 -1 , получим:
P = -H
1
-1
*
H
2 *
i
Таким образом, вычисление проверочной части кодового слова сводится к двум умножениям вектора на матрицу.
Матрица H 2 является низкоплотной, аппаратная реализация такого умножения достаточно проста, имеет низкую сложность и высокую скорость. Кроме того, обычно матрица H строится из ячеек (например, 128х128 или 512х512), каждая из которых либо содержит все нули, либо является единичной матрицей сдвинутой вправо на определённое количество позиций. Например, ячейка размера 4х4 сдвинутая на 1, будет выглядеть так:
Такие ячейки называют циркулянтами, а матрицы, состоящие из таких ячеек — квазициклическими. Умножение вектора на такую ячейку сводится к циклическому сдвигу всех элементов и имеет простую аппаратную реализацию.
Матрица H 1 -1 , в свою очередь, является плотной матрицей, и умножение такой матрицы на вектор будет либо иметь большую аппаратную сложность, либо занимать длительное время. Для устранения этого недостатка матрица H 1 строится таким образом, что в нижней части под главной диагональю расположены нули, а на диагонали расположены циркулянты со сдвигом, равным нулю.
Тогда для нижней строки (под строкой здесь будем понимать часть матрицы высотой равной размеру циркулянта) можно записать следующее условие равенства синдрома нулю:
где I — циркулянт с нулевым сдвигом, то есть единичная матрица, p n — блок проверочных бит с длиной, равной размеру циркулянта.
Таким образом, можно получить последний блок проверочных бит длины размера циркулянта без сложных вычислений: p n = – (H 2 * i) n . Далее p n умножается на C n и прибавляется к (H 2 * i), тогда аналогично можно вычислить предпоследний блок проверочных бит:
p
n
–1
= – (H
2
* i + C
n
* p
n
)
n
–1
и так далее до:
p
k
= – (H
2
* i + C
k+1..n
* p
k+1..n
)
k
Оставшаяся часть проверочных бит вычисляется умножением на обратную матрицу D –1 , которая существенно меньше по размеру, чем H 1 –1 :
p
1
..k–1
= – D
–1
* (H
2
* I + C
k..n
* p
k..n
)
1..k–1
Пример реализация способа
LDPC кодер содержит два основных модуля, которые реализуют упрощенный алгоритм вычисления проверочных бит.
Первый модуль вычисляет вектор синдромов, умножая проверочную матрицу H на входные данные i, а затем на проверочные данные p n ..p k по мере их вычисления. Результат помещается в блок памяти Memory.
Второй модуль умножает вектор синдромов из блока памяти Memory на обратную матрицу H –1 .
Для повышения эффективности обработки входных данных первый модуль представлен в двух экземплярах. Так второй экземпляр первого модуля может начать обработку следующего кодового слова, не дожидаясь завершения обработки p n ..p k первым экземпляром первого модуля. Затем эти экземпляры меняются ролями. Для реализации данного функционала память, хранящая ячейки проверочной матрицы, разделена на 2 части – memH2 и memCT.
Второй модуль имеет параметр rwidth позволяющий умножать параллельно по несколько строк матрицы, что дает возможность увеличить скорость работы за счёт увеличения аппаратной сложности. Оптимальным вариантом является подбор этого параметра таким образом, чтобы время работы второго модуля было чуть меньше времени обработки первым модуле информационной части кодового слова, тогда все модули будут работать параллельно с минимальным простоем.
В режиме чтения информационных данных первый модуль осуществляет умножение части LDPC-матрицы H 2 на вектор входных данных i. Результатом умножения является вектор синдромов s, записанный в промежуточную память Memory.
Алгоритм работы модуля в данном режиме следующий:
a) на вход модуля поступает очередной блок входных данных размером с ячейку матрицы;
b) считывается конфигурация очередной ячейки матрицы H 2 из памяти, извлекается информация о номере строки ячейки, сдвиге циркулянта и о том, является ли ячейка последней в столбце;
c) считывается текущее значение синдрома из промежуточной памяти Memory с адресом, равным номеру строки ячейки;
d) считанное значение синдрома суммируется с блоком входных данных, домноженным на сдвинутый циркулянт и записывается обратно в память Memory по тому же адресу;
e) если ячейка не последняя в столбце, то происходит переход к пункту b);
f) если блоки входных данных не кончились, то происходит переход к пункту a);
g) когда блоки входных данных кончились, модуль переходит в режим поочередного вычисления проверочных ячеек.
В режиме вычисления проверочных ячеек первый модуль осуществляет умножение части LDPC-матрицы C k .. n на блоки проверочных бит p n ..p k по мере их вычисления. Алгоритм работы отличается от режима работы при чтении исходных данных только тем, что первый модуль выдает текущее значение одной из ячеек синдрома по запросу LDPC-кодера, которое затем направляется на вход первого модуля, т.к. оно и является очередным вычисленным блоком проверочных бит.
Второй модуль осуществляет умножение вектора синдромов, посчитанного первым, на плотную матрицу Н -1 и работает по следующему алгоритму:
a) считывается очередной блок синдромов размера cell_size из промежуточной памяти Memory;
b) считывается часть столбца матрицы Н -1 из памяти, хранящая ячейки проверочной матрицы;
c) производится умножение считанной части столбца на rwidth бит блока синдромов, результат добавляется к соответствующей ячейке промежуточной памяти Memory;
d) если биты синдромов не закончились, то происходит переход к пункту b);
e) если столбцы не закончились, происходит переход к пункту a);
f) когда все столбцы обработаны, результаты из промежуточной памяти Memory подаются на выход;
Памяти, хранящие ячейки проверочной матрицы, имеют внешний интерфейс для загрузки ячеек проверочной матрицы, что позволяет при необходимости менять матрицу во время работы LDPC-кодера.
Claims (1)
- Способ кодирования данных на основе LDPC кода, в котором для генерирования кодового слова, состоящего из исходных данных и проверочных данных, используется проверочная матрица, отличающийся тем, что проверочная матрица содержит первую часть матрицы, относящуюся к исходным данным, и вторую часть матрицы, относящуюся к проверочным данным, при этом на главной диагонали второй части матрицы в нижней части располагаются циркулянты со сдвигом, равным нулю, а значения ячеек под главной диагональю второй части матрицы в этой же нижней части равны нулю.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
RU2020137362A RU2743784C1 (ru) | 2020-11-13 | 2020-11-13 | Способ кодирования данных на основе LDPC кода |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
RU2020137362A RU2743784C1 (ru) | 2020-11-13 | 2020-11-13 | Способ кодирования данных на основе LDPC кода |
Publications (1)
Publication Number | Publication Date |
---|---|
RU2743784C1 true RU2743784C1 (ru) | 2021-02-26 |
Family
ID=74672688
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
RU2020137362A RU2743784C1 (ru) | 2020-11-13 | 2020-11-13 | Способ кодирования данных на основе LDPC кода |
Country Status (1)
Country | Link |
---|---|
RU (1) | RU2743784C1 (ru) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
RU2308803C2 (ru) * | 2003-10-14 | 2007-10-20 | Самсунг Электроникс Ко., Лтд. | Способ кодирования кода разреженного контроля четности |
RU2354045C2 (ru) * | 2004-05-12 | 2009-04-27 | Поустек Акадэми Индастри Фаундейшн | Устройство и способ для кодирования и декодирования блочных кодов с низкой плотностью контроля по четности с переменной скоростью кодирования |
RU2369008C2 (ru) * | 2004-08-16 | 2009-09-27 | Самсунг Электроникс Ко., Лтд. | Устройство и способ кодирования-декодирования блочного кода проверки на четность с низкой плотностью с переменной длиной блока |
US20100229066A1 (en) * | 2006-01-10 | 2010-09-09 | Mitsubishi Electric Corporation | Check matrix generating method |
US8065598B1 (en) * | 2007-02-08 | 2011-11-22 | Marvell International Ltd. | Low latency programmable encoder with outer systematic code and low-density parity-check code |
RU2527207C2 (ru) * | 2010-04-27 | 2014-08-27 | Нек Корпорейшн | Устройство кодирования, способ конфигурирования кода с исправлением ошибок и программа для них |
RU2537806C2 (ru) * | 2009-11-02 | 2015-01-10 | Самсунг Электроникс Ко., Лтд. | Устройство и способ для генерирования матрицы проверки четности в системе связи с использованием линейных блочных кодов и устройство передачи/приема и способ для использования этого |
RU2730444C1 (ru) * | 2017-06-25 | 2020-08-21 | ЭлДжи ЭЛЕКТРОНИКС ИНК. | Способ для выполнения кодирования на основе матрицы контроля по четности ldpc-кода в системе беспроводной связи и терминал с его использованием |
-
2020
- 2020-11-13 RU RU2020137362A patent/RU2743784C1/ru active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
RU2308803C2 (ru) * | 2003-10-14 | 2007-10-20 | Самсунг Электроникс Ко., Лтд. | Способ кодирования кода разреженного контроля четности |
RU2354045C2 (ru) * | 2004-05-12 | 2009-04-27 | Поустек Акадэми Индастри Фаундейшн | Устройство и способ для кодирования и декодирования блочных кодов с низкой плотностью контроля по четности с переменной скоростью кодирования |
RU2369008C2 (ru) * | 2004-08-16 | 2009-09-27 | Самсунг Электроникс Ко., Лтд. | Устройство и способ кодирования-декодирования блочного кода проверки на четность с низкой плотностью с переменной длиной блока |
US20100229066A1 (en) * | 2006-01-10 | 2010-09-09 | Mitsubishi Electric Corporation | Check matrix generating method |
US8065598B1 (en) * | 2007-02-08 | 2011-11-22 | Marvell International Ltd. | Low latency programmable encoder with outer systematic code and low-density parity-check code |
RU2537806C2 (ru) * | 2009-11-02 | 2015-01-10 | Самсунг Электроникс Ко., Лтд. | Устройство и способ для генерирования матрицы проверки четности в системе связи с использованием линейных блочных кодов и устройство передачи/приема и способ для использования этого |
RU2527207C2 (ru) * | 2010-04-27 | 2014-08-27 | Нек Корпорейшн | Устройство кодирования, способ конфигурирования кода с исправлением ошибок и программа для них |
RU2730444C1 (ru) * | 2017-06-25 | 2020-08-21 | ЭлДжи ЭЛЕКТРОНИКС ИНК. | Способ для выполнения кодирования на основе матрицы контроля по четности ldpc-кода в системе беспроводной связи и терминал с его использованием |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101428891B1 (ko) | 아날로그 메모리 셀들에서의 최적화된 임계치 검색 | |
KR101264061B1 (ko) | 플래시 메모리를 위한 오류 정정 메커니즘 | |
US10191804B2 (en) | Updating reliability data | |
US9996420B2 (en) | Error-correction encoding and decoding | |
US9141467B2 (en) | Semiconductor memory system including Reed-Solomon low density parity check decoder and read method thereof | |
US8990661B1 (en) | Layer specific attenuation factor LDPC decoder | |
US9768807B2 (en) | On-the-fly syndrome and syndrome weight computation architecture for LDPC decoding | |
US8984365B1 (en) | System and method for reduced memory storage in LDPC decoding | |
US10110249B2 (en) | Column-layered message-passing LDPC decoder | |
US8839069B2 (en) | Encoding and decoding techniques using low-density parity check codes | |
JP2021047690A (ja) | メモリシステム | |
US8966339B1 (en) | Decoder supporting multiple code rates and code lengths for data storage systems | |
US20140149820A1 (en) | Efficient ldpc codes | |
US8935598B1 (en) | System and method for adaptive check node approximation in LDPC decoding | |
US10795761B2 (en) | Memory system and method of controlling non-volatile memory | |
US10090860B2 (en) | Memory system using integrated parallel interleaved concatenation | |
KR102058499B1 (ko) | 리드-솔로몬 저밀도 패리티 검사 디코더를 포함하는 반도체 메모리 시스템 및 그것의 읽기 방법 | |
WO2019246527A1 (en) | Method and apparatus for improved data recovery in data storage systems | |
US8484547B2 (en) | System and method for reducing memory in a multi-channel parallel encoder system | |
CN110113058B (zh) | 编译码方法、装置、设备及计算机可读存储介质 | |
RU2743784C1 (ru) | Способ кодирования данных на основе LDPC кода | |
US11689216B1 (en) | Low gate-count generalized concatenated code (GCC) by online calculation of syndromes instead of buffer | |
RU2747050C1 (ru) | Способ декодирования данных на основе LDPC кода | |
KR101126359B1 (ko) | 비씨에이치 디코더, 이를 포함하는 메모리 시스템 및 비씨에이치 디코딩 방법 | |
Li et al. | A Novel LDPC Construction Scheme for NAND Flash Memory |