KR102098247B1 - 메모리 시스템에서 데이터를 인코딩 및 디코딩하기 위한 방법 및 장치 - Google Patents

메모리 시스템에서 데이터를 인코딩 및 디코딩하기 위한 방법 및 장치 Download PDF

Info

Publication number
KR102098247B1
KR102098247B1 KR1020130143913A KR20130143913A KR102098247B1 KR 102098247 B1 KR102098247 B1 KR 102098247B1 KR 1020130143913 A KR1020130143913 A KR 1020130143913A KR 20130143913 A KR20130143913 A KR 20130143913A KR 102098247 B1 KR102098247 B1 KR 102098247B1
Authority
KR
South Korea
Prior art keywords
matrix
vector
encoding
data
entries
Prior art date
Application number
KR1020130143913A
Other languages
English (en)
Other versions
KR20150060019A (ko
Inventor
모세 트위토
아브너 도르
공준진
정정수
Original Assignee
삼성전자 주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자 주식회사 filed Critical 삼성전자 주식회사
Priority to KR1020130143913A priority Critical patent/KR102098247B1/ko
Priority to US14/542,828 priority patent/US9384087B2/en
Publication of KR20150060019A publication Critical patent/KR20150060019A/ko
Application granted granted Critical
Publication of KR102098247B1 publication Critical patent/KR102098247B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • G11B20/18Error detection or correction; Testing, e.g. of drop-outs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/033Theoretical methods to calculate these checking codes
    • H03M13/036Heuristic code construction methods, i.e. code construction or code search based on using trial-and-error
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/11Error 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/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1148Structural properties of the code parity-check or generator matrix
    • H03M13/1157Low-density generator matrices [LDGM]
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/11Error 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/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1148Structural properties of the code parity-check or generator matrix
    • H03M13/118Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/373Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 with erasure correction and erasure determination, e.g. for packet loss recovery or setting of erasures for the decoding of Reed-Solomon codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3746Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 with iterative decoding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/61Aspects and characteristics of methods and arrangements for error correction or error detection, not provided for otherwise
    • H03M13/611Specific encoding aspects, e.g. encoding by means of decoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/10Indexing scheme relating to G06F11/10
    • G06F2211/1002Indexing scheme relating to G06F11/1076
    • G06F2211/109Sector level checksum or ECC, i.e. sector or stripe level checksum or ECC in addition to the RAID parity calculation

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)
  • Signal Processing (AREA)
  • Error Detection And Correction (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

메모리 시스템에서 데이터를 인코딩 및 디코딩하기 위한 방법 및 장치가 개시된다. 본 발명의 예시적 실시예에 따른 인코딩 방법은 스턱 셀의 좌표 및 값에 대한 정보에 기초하여 저장하고자 하는 데이터와 스턱 셀에 따른 보조 데이터를 결합한 데이터를 인코딩 행렬과 곱하여 코드워드를 생성할 수 있다. 생성된 코드워드는 각 스턱 셀의 좌표에 대응하는 주소에서 스턱 셀의 값에 대응하는 데이터를 포함한다. 본 발명의 예시적 실시예에 따른 디코딩 방법은 인코딩에 사용된 인코딩 행렬의 역행렬을 코드워드와 곱하여 데이터를 생성할 수 있다.

Description

메모리 시스템에서 데이터를 인코딩 및 디코딩하기 위한 방법 및 장치{Method and apparatus for encoding and decoding data in memory system}
본 발명의 기술적 사상은 메모리 시스템에서 데이터를 인코딩 및 디코딩하기 위한 방법 및 장치에 관한 것으로서, 자세하게는 스턱 셀(stuck cell)을 포함하는 메모리 시스템에서 데이터를 인코딩 및 디코딩하기 위한 방법 및 장치에 관한 것이다.
메모리 시스템에서 사용되는 에러 정정 코드(error-correcting code; ECC)는 다양한 원인에 의해서 발생된 에러를 감지하고 정정하여 데이터를 복원하는데 사용될 수 있다. 이러한 에러들은 메모리 시스템이 포함하는 메모리에 의해 사전에 그 원인을 알 수 없는 랜덤 에러 및 사전에 그 원인을 알 수 있는 에러를 포함할 수 있다. 예컨대, 메모리의 구조적인 결함에 의해서, 메모리의 일부 저장 공간이 기능을 상실한 경우, 상기 저장 공간에 저장되는 데이터는 항상 에러를 발생시킬 수 있고, 테스트를 통해서 상기 저장 공간의 위치는 파악될 수 있다.
에러 정정 코드는 복원된 데이터의 무결성을 보장하는 것뿐만 아니라, 데이터를 복원하는데 소요되는 비용을 최소화하는 것이 중요할 수 있다. 즉, 특정 에러 정정 코드를 수행하는데 소요되는 메모리 시스템의 리소스가 큰 경우, 상기 에러 정정 코드는 메모리 시스템의 성능을 저하시킬 수 있다. 예컨대, 메모리 시스템에서 에러 정정 코드를 수행하는데 소요되는 시간이 긴 경우, 메모리 시스템의 데이터 기록 및 독출 속도가 저하될 수 있다.
본 발명의 기술적 사상은 메모리 시스템에서 데이터를 인코딩 및 디코딩하기 위한 방법 및 장치에 관한 것으로서, 스턱 셀의 좌표 및 값에 대한 정보에 기초하여 데이터를 인코딩 및 디코딩하기 위한 방법 및 장치를 제공한다.
본 발명의 기술적 사상의 일면에 따른 인코더는 메모리 셀에 저장할 데이터 중, t개의 스턱 셀을 포함하는 n개의 메모리 셀에 저장할 데이터에 대응하고, n-s개의 엔트리를 갖는 벡터 u를 생성하는 제1 벡터 생성부(0≤t≤s<n 단, n, s 및 t는 정수); n×n 인코딩 행렬 G를 생성하는 행렬 생성부; 상기 스턱 셀의 좌표를 포함하는 정보 α 및 상기 스턱셀의 값을 포함하는 정보 μ를 수신하고, 상기 데이터 α, 상기 데이터 μ, 상기 벡터 u 및 상기 인코딩 행렬 G를 연산하여 s개의 엔트리를 갖는 벡터 w를 생성하는 제2 벡터 생성부; 및 상기 벡터 w 및 u가 결합된 벡터 x를 상기 인코딩 행렬 G에 곱하여 n개의 엔트리를 갖는 벡터 v를 생성하는 제3 벡터 생성부;를 포함할 수 있고, 상기 벡터 v에 포함된, 상기 정보 α에 대응하는 인덱스의 엔트리들은 상기 정보 μ에 따른 스턱 셀의 값을 가질 수 있다.
본 발명의 예시적 실시예에 따라,
α={α(1), ..., α(t)}, 1≤α(1)<...<α(t) ≤n
μ={μ(1), ..., μ(t)}
u=[u1 ... un -s]T
w=[w1 ... ws]T
x=[w1 ... ws u1 ... un -s]T
v=[v1 ... vn]T, vα(j)=μ(j), 1≤j≤t
를 각각 만족할 수 있고, 상기 행렬 생성부는 G=[G1, G2]=[G11, 0s×(n-s); G21, I(n-s)×(n-s)] 를 만족하는 인코딩 행렬 G를 생성할 수 있고, 제1 인코딩 행렬 G1은 n×s 행렬일 수 있고, 제2 인코딩 행렬 G2는 n×(n-s) 행렬일 수 있고, G11은 s×s 가역 행렬일 수 있고, G21은 (n-s)×s 행렬일 수 있고, 0s×(n-s)는 제로 행렬일 수 있고, I(n-s)×(n-s)는 단위 행렬일 수 있고, 상기 제2 벡터 생성부는 t개의 1차 방정식인 [G1·w]α(j)= μ(j)-[G2·u]α(j) (1≤j≤t)를 만족하는 벡터 w를 생성할 수 있고, 상기 벡터 w가 존재하지 않는 경우, 상기 행렬 생성부로부터 다른 인코딩 행렬 G를 수신할 수 있고, 상기 제3 벡터 생성부는 y=[y1 ... yn]T = G1·w를 만족하는 벡터 y를 계산할 수 있고, v=[v1 ... vn]T = y+[0 ... 0 u1 ... un -s]T를 만족하는 벡터 v를 계산할 수 있다.
본 발명의 예시적 실시예에 따라, 상기 인코더는 상기 벡터 v의 생성에 사용된 인코딩 행렬 G의 레이블 및 s를 포함하는 헤더를 생성하는 헤더 생성부;를 더 포함할 수 있다.
본 발명의 예시적 실시예에 따라, 상기 행렬 생성부는 상기 s×s 가역 행렬 G11이 단위 행렬이고, 상기 (n-s)×s 행렬 G21의 엔트리는 1이 되는 확률이 1/2로서, 독립 항등 분포된(independent and identically distributed; i.i.d.) 0 또는 1의 값을 가지도록 상기 인코딩 행렬 G를 생성할 수 있다.
본 발명의 예시적 실시예에 따라,
1≤t≤s'<s≤n/2
e1=[1 0 ... 0]T
es=[0 ... 0 1]T,
ei=[01×(i-1) 1 01×(s-i)]T ( 0<i<s )
q=[0 s' qs' +1 ... qs]T
Ω={ei + ej + q: 1≤i≤s'/2 and (s'/2+1)≤j≤s'}, P는 균등확률로 확률 공간 (Ω, P)일 때, 상기 행렬 생성부는 상기 제1 인코딩 행렬 G1의 행을 상기 확률 공간 (Ω, P)로부터 독립 항등 분포되게 샘플된 벡터를 전치한 로우 벡터로 구성할 수 있다.
본 발명의 예시적 실시예에 따라, 상기 행렬 생성부는 상기 제1 인코딩 행렬 G1을 BEC(binary erasure channel)의 체크 행렬 H의 전치 행렬 HT로 구성할 수 있다.
본 발명의 기술적 사상의 다른 면에 따른 데이터 인코딩 방법은 t개의 스턱 셀(stuck cell)을 포함하는 n개의 메모리 셀에 저장할 데이터에 대응하고, n-s개의 엔트리를 갖는 벡터 u를 생성하는 단계(0≤t≤s<n 단, n, s 및 t는 정수); 상기 스턱 셀의 좌표를 포함하는 정보 α, 상기 스턱 셀의 값을 포함하는 정보 μ, 상기 벡터 u 및 n×n 인코딩 행렬 G에 기초하여 s개의 엔트리를 갖는 벡터 w를 생성하는 단계; 및 상기 벡터 w 및 u를 결합한 벡터 x를 상기 인코딩 행렬에 곱하여 n개의 엔트리를 갖는 벡터 v를 생성하는 단계;를 포함할 수 있고, 상기 벡터 v에 포함된, 상기 정보 α에 대응하는 인덱스의 엔트리들은 상기 정보 μ에 따른 스턱 셀의 값을 가질 수 있다.
본 발명의 예시적 실시예에 따라, 상기 인코딩 행렬 G는 n×s 제1 인코딩 행렬 G1 및 n×(n-s) 제2 인코딩 행렬 G2를 포함할 수 있고, 상기 벡터 w를 생성하는 단계는 t개의 1차 방정식(linear equation)들을 풀어 s개의 근(root)들을 상기 벡터 w의 엔트리로 구성할 수 있고, 상기 1차 방정식의 계수(coefficient)들은 상기 제1 인코딩 행렬 G1의, 상기 정보 α에 대응하는 행이 포함하는 엔트리들일 수 있고, 상기 1차 방정식의 상수항(constant term)은 상기 제2 인코딩 행렬 G2의, 상기 정보 α에 대응하는 행이 포함하는 엔트리들, 상기 벡터 u 및 상기 정보 μ에 따른 산술 연산에 의해 결정될 수 있다.
본 발명의 예시적 실시예에 따라, 상기 벡터 v를 생성하는 단계는 상기 제1 인코딩 행렬 G1과 상기 벡터 w의 곱 및 상기 제2 인코딩 행렬 G2와 상기 벡터 u의 곱을 더하여 상기 벡터 v를 생성할 수 있다.
본 발명의 예시적 실시예에 따라, 상기 벡터 w를 생성하는 단계는, 상기 s개의 근들이 존재하지 않는 경우 상기 인코딩 행렬 G를 다른 인코딩 행렬 G로 교체하는 단계를 더 포함할 수 있고, 상기 데이터 인코딩 방법은 상기 벡터 w의 생성에 사용된 인코딩 행렬 G의 레이블 및 s를 포함하는 헤더를 생성하는 단계를 더 포함할 수 있다.
본 발명의 예시적 실시예에 따라, 상기 데이터 인코딩 방법은 랜덤하게 또는 의사(pseudo)-랜덤하게 샘플된 적어도 하나 이상의 행렬을 조합하여 상기 인코딩 행렬 G를 생성하는 단계를 더 포함할 수 있다.
본 발명의 예시적 실시예에 따라, 상기 인코딩 행렬 G를 생성하는 단계는 s×s 가역행렬 G11 및 (n-s)×s 행렬 G21을 포함하도록 제1 인코딩 행렬 G1을 생성하는 단계; 및 제로행렬 0s×(n-s) 및 단위행렬 I(n-s)×(n-s)을 결합하여 제2 인코딩 행렬 G2를 생성하는 단계;를 포함할 수 있다.
본 발명의 예시적 실시예에 따라, 상기 제1 인코딩 행렬 G1을 생성하는 단계는 상기 s×s 가역행렬 G11을 s×s 단위행렬 Is ×s으로 구성하는 단계; 및 1이 되는 확률이 ㅍ로서, 독립 항등 분포된(independent and identically distributed; i.i.d.) 0 또는 1의 값을 가지는 엔트리들을 포함하도록 상기 (n-s)×s 행렬 G21을 구성하는 단계;를 포함할 수 있다.
본 발명의 예시적 실시예에 따라, 상기 제1 인코딩 행렬 G1을 생성하는 단계는 0 또는 1의 값을 가지는 s개의 엔트리를 포함할 수 있고, 인덱스가 1부터 s'/2까지인 엔트리 중 하나만 1일 수 있고, 인덱스가 (s'/2 + 1)부터 s'까지인 엔트리 중 하나만 1일 수 있으며, 인덱스가 (s' + 1)부터 s까지인 엔트리는 각각 1이 되는 확률이 ㅍ 인 로우 벡터를 생성하는 단계; 및 n개의 상기 로우 벡터들을 결합하여 제1 인코딩 행렬 G1을 생성하는 단계;를 포함할 수 있고, s'은 짝수일 수 있고, s이하 t이상일 수 있다.
본 발명의 예시적 실시예에 따라, 상기 제1 인코딩 행렬 G1을 생성하는 단계는 상기 제1 인코딩 행렬 G1을 BEC(binary erasure channel) 코드의 체크 행렬 H의 전치 행렬 HT로 구성할 수 있다.
본 발명에 의하면, 스턱 셀의 값을 포함하는 코드워드를 생성하여 스턱 셀에 의한 에러를 정정할 수 있으며, 낮은 계산 복잡도로서 이러한 에러 정정을 수행할 수 있다.
도 1은 본 발명의 예시적 실시예에 따른 메모리 시스템을 나타내는 도면이다.
도 2는 본 발명의 예시적 실시예에 따른 스턱 셀 정보 저장부의 구현예를 나타내는 도면이다.
도 3은 본 발명의 예시적 실시예에 따른 인코더의 구조를 개략적으로 나타내는 블록도이다.
도 4는 본 발명의 예시적 실시예에 따른 인코더의 동작을 수식으로 나타내는 도면이다.
도 5는 본 발명의 예시적 실시예에 따른 w 생성부의 동작을 설명하기 위한 도면이다.
도 6은 본 발명의 예시적 실시예에 따라, v 생성부 및 디코더의 동작을 설명하기 위한 도면이다.
도 7은 본 발명의 예시적 실시예에 따른 인코딩 행렬 G를 나타내는 도면이다.
도 8a 내지 8c는 본 발명의 예시적 실시예들에 따른 인코딩 행렬 G를 나타내는 도면이다.
도 9는 본 발명의 예시적 실시예에 따른 인코딩 방법을 나타내는 플로우차트이다.
도 10은 본 발명의 예시적 실시예에 따라, 벡터 w를 생성하는 방법을 나타내는 플로우차트이다.
도 11은 본 발명의 예시적 실시예에 따라, 벡터 v를 생성하는 방법을 나타내는 플로우차트이다.
도 12는 본 발명의 예시적 실시예에 따른 디코딩 방법을 나타내는 플로우 차트이다.
도 13은 본 발명의 예시적 실시예에 따른 인코더 및 디코더를 개략적으로 나타내는 블록도이다.
도 14는 본 발명의 예시적 실시예들에 따른 메모리 시스템을 포함하는 컴퓨팅 시스템을 나타내는 블록도이다.
도 15는 본 발명의 예시적 실시예에 따른 메모리 카드를 나타내는 블록도이다.
도 16은 본 발명의 예시적 실시예에 따른 메모리 시스템을 포함하는 네트워크 시스템에 대한 구현예를 나타내는 블록도이다.
이하, 첨부한 도면을 참조하여 본 발명의 실시 예에 대해 상세히 설명한다. 본 발명의 실시 예는 당 업계에서 평균적인 지식을 가진 자에게 본 발명을 보다 완전하게 설명하기 위하여 제공되는 것이다. 본 발명은 다양한 변경을 가할 수 있고 여러 가지 형태를 가질 수 있는 바, 특정 실시 예들을 도면에 예시하고 상세하게 설명하고자 한다. 그러나, 이는 본 발명을 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 각 도면을 설명하면서 유사한 참조부호를 유사한 구성요소에 대해 사용한다. 첨부된 도면에 있어서, 구조물들의 치수는 본 발명의 명확성을 기하기 위하여 실제보다 확대하거나 축소하여 도시한 것이다.
본 출원에서 사용한 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서 상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성 요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 갖는다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
본 출원에서 사용한 엔트리(entry)는 행렬 또는 벡터의 원소(element)를 말하며, 행렬 또는 벡터의 원소(element) 및 엔트리(entry)는 동일한 의미를 가진다. 또한, A∈FN ×N, B∈FN ×M , C∈FM ×N, D∈FM ×M일 때, 아래와 같이 표현할 수 있다.
U=
Figure 112013107293606-pat00001
=[A, B; C, D]
도 1은 본 발명의 예시적 실시예에 따른 메모리 시스템을 나타내는 도면이다. 도 1에 도시된 바와 같이, 메모리 시스템(900)은 프로토콜을 준수하면서 호스트(800)와 통신할 수 있다. 예컨대, 메모리 시스템(900)은 ATA(Advanced Technology Attachment) 인터페이스, SATA(Serial Advanced Technology Attachment) 인터페이스, PATA(Parallel Advanced Technology Attachment) 인터페이스, USB(Universal Serial Bus) 또는 SAS(Serial Attached Small Computer System) 인터페이스, SCSI(Small Computer System Interface), eMMC(embedded Multi Media Card) 인터페이스, UFS(Unix File System) 인터페이스 등의 프로토콜을 지원할 수 있다. 그러나 이는 예시일 뿐이며, 본 발명의 예시적 실시예들이 이에 제한되는 것은 아니다.
도 1에 도시된 바와 같이, 메모리 시스템(900)은 메모리 컨트롤러(1000) 및 메모리 장치(2000)를 포함할 수 있다. 메모리 컨트롤러(1000)는 메모리 장치(2000)를 제어할 수 있으며, 메모리 시스템(900) 외부의 호스트(800)로부터 요청을 수신하여 상기 요청에 따른 응답을 호스트(800)로 전송할 수 있다. 메모리 장치(2000)는 비휘발성 메모리 장치, 예컨대 플래시 메모리, PRAM(phase change RAM), FRAM(ferroelectric RAM), MRAM(magnetic RAM) 등을 포함할 수 있다.
도 1에 도시된 바와 같이, 메모리 장치(2000)는 셀 어레이(2100)를 포함할 수 있고, 셀 어레이(2100)는 어레이 형태로 배열된 복수개의 메모리 셀(2110)들을 포함할 수 있다. 예컨대, 플래시 메모리는 복수개의 블록을 포함할 수 있고, 블록은 복수개의 페이지를 포함할 수 있으며, 도 1에 도시된 셀 어레이(2100)는 플래시 메모리의 페이지 또는 블록일 수 있다.
메모리 셀(2110)은 메모리 장치(2000)가 저장하는 데이터의 최소 단위를 저장할 수 있는 것으로서, 저장되는 데이터에 따라 서로 다른 상태를 가질 수 있다. 메모리 장치(2000)는 메모리 셀(2110)의 상태를 변경시킴으로써 데이터를 기록할 수 있고, 메모리 셀(2110)의 상태에 따라 데이터를 출력할 수 있다. 메모리 셀(2110)의 상태에 대응하는 데이터를 메모리 셀(2110)의 값(value)이라고 부른다. 도 1에는 도시되지 않았지만, 메모리 장치(2000)는 셀 어레이(2100)를 제어하기 위한 주변 회로들을 포함할 수 있고, 메모리 컨트롤러(1000)는 상기 주변 회로들을 이용하여 셀 어레이(2100)에 데이터를 기록하거나 셀 어레이(2100)로부터 데이터를 독출할 수 있다.
하나의 메모리 셀(2110)은 2개 이상의 서로 다른 상태를 가질 수 있으며, 하나의 메모리 셀(2110)이 가질 수 있는 상태의 수에 따라 하나의 메모리 셀(2110)에 저장되는 데이터의 수가 결정될 수 있다. 예컨대, 플래시 메모리의 경우, 메모리 셀(2110)은 메모리 셀(2110)에 포함된 트랜지스터의 문턱전압 분포에 따라, 1 비트를 저장할 수 있는 SLC(single level cell), 2 비트 이상을 저장할 수 있는 MLC(multi level cell) 등으로 구성 될 수 있다. 이하에서, 메모리 셀(2110)은 0 또는 1의 값을 가질 수 있고, 이에 따라 1 비트를 저장할 수 있는 것으로 가정하되, 본 발명의 예시적 실시예들이 이에 제한되는 것은 아니다.
한편, 도 1에 도시된 바와 같이, 셀 어레이(2100)는 저장되는 데이터에 따라 상태가 변경될 수 있는 정상 셀(2111) 뿐만 아니라, 하나의 상태로 고정되어 저장되는 데이터에 의존하여 상태가 변경될 수 없는 스턱 셀(stuck cell)(2112)을 포함할 수 있다. 메모리 장치(2000)는 스턱 셀(2112)의 고정된 상태에 대응하는 데이터만을 스턱 셀(2112)에 기록하거나 스턱 셀(2112)로부터 독출할 수 있으므로, 스턱 셀(2112)은 데이터에 에러를 발생시킬 수 있다. 스턱 셀(2122)은 메모리 장치(2000)의 제조 공정, 외부로부터 가해진 비정상적인 전기적 신호 또는 메모리 셀(2110)의 수명 만료 등에 의해서 발생할 수 있다.
도 1에 도시된 바와 같이, 메모리 컨트롤러(1000)는 인코더(1100), 디코더(1200) 및 스턱 셀 정보 저장부(1300)를 포함할 수 있다. 인코더(1100)는 에러 정정 코드(error correction code; ECC)의 수행을 위해서 데이터의 인코딩을 수행할 수 있으며, 디코더(1200)는 인코딩된 데이터, 즉 코드워드(codeword)를 수신하여 코드워드의 디코딩을 수행할 수 있다. 본 발명의 예시적 실시예에 따라, 스턱 셀 정보 저장부(1300)는 메모리 장치(2000)의 셀 어레이(2100)에 포함된 스턱 셀(2112)의 정보를 저장할 수 있다. 예컨대, 스턱 셀 정보 저장부(1300)는 셀 어레이(2100)에 포함된 스턱 셀(2112)의 좌표(coordinate) 및 값(value)을 저장할 수 있다. 이에 대한 자세한 내용은 후술한다.
본 발명의 예시적 실시예에 따라, 인코더(1100)는 스턱 셀 정보 저장부(1300)로부터 스턱 셀의 정보를 수신할 수 있고, 수신된 스턱 셀의 정보를 이용하여 데이터의 인코딩을 수행함으로써 코드워드를 생성할 수 있다. 인코더(1100) 및 디코더(1200)는 인코딩에 사용된 인코딩 정보(예컨대, 인코딩 행렬 G)를 공유할 수 있다. 즉, 인코더(1100)는 헤더(header)에 인코딩 정보를 포함시킬 수 있고, 디코더(1200)는 헤더에 포함된 인코딩 정보를 이용하여 코드워드를 디코딩 할 수 있다.
인코더(1100) 및 디코더(1200)는 소프트웨어로서 메모리 컨트롤러(1000)에 포함된 프로세서(미도시)상에서 구현되거나, 하드웨어 로직으로 구현될 수 있고, 소프트웨어 및 하드웨어 로직이 결합된 구조로 구현될 수도 있다. 또한, 도 1에서는 메모리 컨트롤러(1000)는 독립적으로 분리된 인코더(1100) 및 디코더(1200)를 포함하는 것으로 도시되었으나, 인코더(1100) 및 디코더(1200)는 하나의 구성요소로서 구현될 수 있다.
도 2는 본 발명의 예시적 실시예에 따른 스턱 셀 정보 저장부의 구현예를 나타내는 도면이다. 셀 어레이(2100)는 어레이 형태로 배열된 복수개의 메모리 셀(2110)들을 포함할 수 있고, 스턱 셀 정보 저장부(1300)는 셀 어레이(2100)에 포함된 스턱 셀에 대한 정보를 저장할 수 있다. 예컨대, 도 2에 도시된 바와 같이, 셀 어레이(2100)는 8개의 메모리 셀(2110)들을 포함할 수 있고, 8개의 메모리 셀(2110)들 중 2개의 메모리 셀이 스턱 셀일 수 있다. 8개의 메모리 셀(2110)들은 각각 1 내지 8의 좌표를 가질 수 있고, 메모리 셀(2110)들의 좌표는 메모리 셀(2110)들의 주소일 수 있다.
도 2에 도시된 바와 같이, 8개의 메모리 셀(2110)들이 각각 v1 내지 v8의 값을 가질 때, 셀 어레이(2100)에 저장되는 데이터는 컬럼 벡터 v=[v1 ... v8]T로 표현될 수 있다. 다만, 도 2에 도시된 바와 같이, 좌표 값이 2 및 5인 메모리 셀은 스턱 셀로서, 각각 0 및 1의 값을 가지는 경우, 메모리 셀(2110)에 저장되는 컬럼 벡터 v의 v2 및 v5는 각각 0 및 1로 고정(stuck)될 수 있다. 따라서, 도 2에 도시된 셀 어레이(2100)에 저장되는 데이터는 v=[v1 0 v3 v4 1 v6 v7 v8]T로 나타낼 수 있다.
본 발명의 예시적 실시예에 따라, 스턱 셀 정보 저장부(1300)는 셀 어레이(2100)가 포함하는 스턱 셀의 좌표에 대한 정보 α 및 스턱 셀의 값에 대한 정보 μ를 저장할 수 있다. 예컨대, 도 2에 도시된 셀 어레이(2100)의 경우, 스턱 셀 정보 저장부(1300)는 스턱 셀의 좌표로서 α={2, 5}를 저장할 수 있고, 상기 좌표에 대응하는 스턱 셀의 값으로서 μ={0, 1}을 저장할 수 있다. 도 1의 인코더(1100)는 스턱 셀 정보 저장부(1300)로부터 α 및 μ를 수신할 수 있고, α및 μ에 기초하여 데이터를 인코딩하여 셀 어레이(2100)에 저장될 데이터에 대응하는 컬럼 벡터 v를 생성할 수 있다. 인코더(1100)가 생성하는 컬럼 벡터 v는 v2=0 및 v5=1을 포함할 수 있다.
도 1 및 도 2를 참조하면, 셀 어레이(2100)가 포함하는 메모리 셀(2110)의 수가 n개이고, n개의 메모리 셀(2110) 중 t개의 메모리 셀이 스턱 셀(2112)일 때(n>t≥0), 스턱 셀의 좌표에 대한 정보 α, 스턱 셀의 값에 대한 정보 μ 및 셀 어레이(2100)에 저장되는 데이터에 대응하는 컬럼 벡터 v는 아래 수식과 같이 나타낼 수 있다.
v = [v1 ... vn]T ∈ Fn (F=GF(2))
α = {α(1), ..., α(t)} (α(1)< ... < α(t))
μ = {μ(1), ..., μ(t)}
vα(j) = μ(j) (1≤j≤t)
도 3은 본 발명의 예시적 실시예에 따른 인코더의 구조를 개략적으로 나타내는 블록도이다. 본 발명의 예시적 실시예에 따라, 인코더(1100)는 제1 벡터 생성부, 제2 벡터 생성부, 제3 벡터 생성부, 행렬 생성부 및 헤더 생성부를 포함할 수 있다. 예컨대, 도 3은 제1 벡터 생성부가 u 생성부(1111)이고, 제2 벡터 생성부가 w 생성부(1112)이고, 제3 벡터 생성부가 v 생성부(1114)이고, 행렬 생성부가 G 생성부(1113)인 실시예를 나타낸다.
인코더(1100)는 입력 데이터(DATA_IN) 및 스턱 셀 정보(SC_INFO)를 수신하여, 코드워드(DATA_CW) 및 헤더(DATA_HD)를 생성하여 출력할 수 있다. 입력 데이터(DATA_IN)는 호스트(800)가 메모리 시스템(900)에 기록하도록 요청한 데이터, 즉 유저 데이터 및 메모리 장치(2000)를 관리하기 위하여 메모리 컨트롤러(1000)가 생성한 메타 데이터를 포함할 수 있다. 또한, 인코더(1100)가 스턱 셀 정보 저장부(1300)로부터 수신하는 스턱 셀 정보(SC_INFO)는 스턱 셀의 좌표에 대한 정보 α, 스턱 셀의 값에 대한 정보 μ를 포함할 수 있다.
인코더(1100)는 코드워드(DATA_CW)를 생성할 수 있고, 코드워드(DATA_CW)는 스턱 셀의 좌표에 대응하는 주소에 스턱 셀의 값을 포함할 수 있다. 또한, 인코더(1100)는 코드워드(DATA_CW)의 인코딩 정보를 포함하는 헤더(DATA_HD)를 생성할 수 있고, 헤더(DATA_HD)는 코드워드(DATA_CW)와 별도로 메모리 컨트롤러(1000) 또는 메모리 장치(2000)에 저장될 수 있다.
본 발명의 실시예에 따라, 도 3에 도시된 바와 같이 인코더(1100)는 u 생성부(1111), w 생성부(1112), G 생성부(1113), v 생성부(1114) 및 헤더 생성부(1115)를 포함할 수 있다. u 생성부(1111)는 입력 데이터(DATA_IN)를 수신할 수 있고, 컬럼 벡터 u=[u1 ... un -s]T를 생성할 수 있다(0≤t≤s<n). u 생성부(1111)는 입력 데이터(DATA_IN) 중 n개의 메모리 셀(2110)을 포함하는 셀 어레이(2100)에 저장할 데이터를 선택하여, 컬럼 백터 u를 생성할 수 있다. 셀 어레이(2100)는 t개의 스턱 셀을 포함하고 있기 때문에, u 생성부(1111)는 n개의 메모리 셀(2110) 모두에 데이터를 저장할 수 없다. 따라서, u 생성부(1111)는 n-s개의 엔트리를 포함하는 컬럼 벡터 u를 생성할 수 있다(s≥t). 예컨대, 도 2에 도시된 실시예에서, u 생성부(1111)는 입력 데이터(DATA_IN) 중에서 5개의 엔트리를 포함하는 컬럼 벡터 u=[u1 u2 u3 u4 u5]T에 대응하는 데이터를 선택하여 u를 출력할 수 있다(s=3).
G 생성부(1113)는 인코딩 행렬 G를 생성할 수 있다. 인코딩 행렬 G는 n개의 로우 및 n개의 컬럼으로 구성된 n×n 행렬로서, 컬럼 벡터 v를 생성하는데 사용될 수 있다. G 생성부(1113)는 w 생성부(1112)로부터 신호를 수신할 수 있고, 상기 신호에 따라 새로운 G를 생성하여 출력할 수 있다. G 생성부(1113)는 랜덤하게 또는 의사-랜덤하게 인코딩 행렬 G를 생성할 수 있다. 예컨대, G 생성부(1113)는 메모리에 저장된 행렬들 중 적어도 하나이상을 랜덤하게 또는 의사-랜덤하게 조합하여 인코딩 행렬 G를 생성할 수 있다. 인코딩 행렬 G에 대한 자세한 내용은 후술한다.
w 생성부(1112)는 스턱 셀 정보 저장부(1300)로부터 스턱 셀 정보(SC_INFO)를 수신하고, u 생성부(1111)로부터 컬럼 벡터 u를 수신하고, G 생성부(1113)로부터 인코딩 행렬 G를 수신할 수 있다. w 생성부(1112)가 생성하는 컬럼 벡터 w는 셀 어레이(2100)가 포함하는 스턱 셀에 따른 보조(auxiliary) 데이터로서, u 생성부(1111)가 생성시킨 컬럼 벡터 u에 부가되어 컬럼 벡터 v를 생성하는데 이용될 수 있다. w 생성부(1112)가 생성하는 컬럼 벡터 w는 w=[w1 ... ws]T로 나타낼 수 있다. w에 포함된 s개의 엔트리들(w1 ~ ws)은 w 생성부(1112)가 수신하는 u, α, μ 및 G에 의해서 결정될 수 있다. w 생성부(1112)는 주어진 u, α, μ 및 G로부터 s개의 엔트리들(w1 ~ ws)을 결정할 수 없는 경우, G 생성부(1113)로부터 새로운 인코딩 행렬 G를 수신할 수 있고, 상기 새로운 인코딩 행렬 G를 이용하여 s개의 엔트리들(w1 ~ ws)을 결정할 수 있다. 또한, w 생성부(1112)는 컬럼 벡터 w를 생성하는데 이용한 인코딩 행렬 G의 레이블을 생성하여 출력할 수 있다. 상기 레이블은 디코더(1200)가 인코더(1100)가 사용한 인코딩 행렬 G를 인식할 수 있도록 하게 한다.
v 생성부(1114)는 u 생성부(1111)로부터 컬럼 벡터 u를 수신하고, w 생성부(1112)로부터 컬럼 벡터 w를 수신할 수 있다. 또한, u 생성부(1111)는 w 생성부(1112)로부터 w 생성부(1112)가 컬럼 벡터 w를 생성할 때 이용한 인코딩 행렬 G를 수신할 수 있다. v 생성부(1114)는 컬럼 벡터 u, w 및 인코딩 행렬 G를 이용하여 코드워드(DATA_CW)를 생성할 수 있으며, 코드워드(DATA_CW)는 컬럼 벡터 v=[v1 ... vn]T로 나타낼 수 있다. 구체적으로, v 생성부(1114)는 컬럼 벡터 w 및 컬럼 벡터 u를 결합하여 컬럼 벡터 x를 생성할 수 있고, 인코딩 행렬 G와 컬럼 벡터 x를 곱하여 컬럼 벡터 v를 생성할 수 있다.
헤더 생성부(1115)는 w 생성부(1112)로부터 인코딩 행렬 G의 레이블 및 s를 수신할 수 있고, 헤더(DATA_HD)를 생성할 수 있다. 헤더 생성부(1115)가 생성한 헤더(DATA_HD)는 디코더(1200)가 코드워드(DATA_CW)의 디코딩을 수행하기 위하여 필요한 정보를 포함할 수 있고, 디코더(1200)는 헤더(DATA_HD)에 포함된 정보를 이용하여 코드워드(DATA_CW)의 디코딩을 수행할 수 있다. 예를 들면, 디코더(1200)는 헤더(DATA_HD)에 포함된 인코딩 행렬 G의 레이블에 따라 인코딩에 사용된 인코딩 행렬 G를 인식할 수 있고, 상기 인코딩 행렬 G의 역행렬을 코드워드(DATA_CW)에 곱하여 컬럼 벡터 x'를 생성할 수 있다. 또한, 디코더(1200)는 헤더에 포함된 s를 이용하여 컬럼 벡터 x'에 포함된 컬럼 벡터 u'를 추출할 수 있고, 컬럼 벡터 u'에 따라 데이터를 복원시킬 수 있다. 헤더 생성부(1115)가 생성한 헤더(DATA_HD)는 인코더(1100) 및 디코더(1200)가 접근 가능한 저장 공간에 코드워드(DATA_CW)와 별도로 저장될 수 있다. 예컨대, 헤더(DATA_HD)는 메모리 컨트롤러(1000)가 포함하는 저장 공간 또는 메모리 장치(2000)가 포함하는 셀 어레이 등에 저장될 수 있다.
도 4는 본 발명의 예시적 실시예에 따른 인코더의 동작을 수식으로 나타내는 도면이다. 도 1 내지 3을 참조하면, u 생성부(1111)는 n-s개의 엔트리를 갖는 컬럼 벡터 u를 생성할 수 있고, G 생성부(1113)는 n×n 인코딩 행렬 G를 생성할 수 있고, w 생성부(1112)는 s개의 엔트리를 갖는 컬럼 벡터 w를 생성할 수 있다. v 생성부(1114)는 n개의 엔트리를 갖는 컬럼 벡터 v를 생성할 수 있다. 도 4에 도시된 바와 같이, n개의 엔트리를 갖는 컬럼 벡터 x는 s개의 엔트리를 갖는 컬럼 벡터 w 및 n-s개의 엔트리를 갖는 컬럼 벡터 u가 결합되어 구성될 수 있다. 컬럼 벡터 v는 인코딩 행렬 G 및 컬럼 벡터 x의 곱에 의해 계산될 수 있다.
도 4에 도시된 바와 같이, n×n 인코딩 행렬 G는 n×s 제1 인코딩 행렬 G1 및 n×(n-s) 제2 인코딩 행렬 G2를 포함할 수 있다. 인코딩 행렬 G 및 컬럼 벡터 x의 곱에서, 제1 인코딩 행렬 G1은 컬럼 벡터 w에 대응할 수 있고, 제2 인코딩 행렬 G2는 컬럼 벡터 u에 대응할 수 있다. 따라서, 도 4에 도시된 바와 같이, 컬럼 벡터 v는 제1 인코딩 행렬 G1과 컬럼 벡터 w의 곱 및 제2 인코딩 행렬 G2와 컬럼 벡터 u의 곱을 더함으로써 계산될 수 있다. 컬럼 벡터 y는 제1 인코딩 행렬 G1 및 컬럼 벡터 w의 곱을 의미하며, y=[y1 ... yn]T로 나타낼 수 있다.
도 5는 본 발명의 예시적 실시예에 따른 w 생성부의 동작을 설명하기 위한 도면이다. 도 2에 도시된 실시예에서, 셀 어레이(2100)는 8개의 메모리 셀(2110)들을 포함할 수 있고, 메모리 셀(2110)들 중 좌표가 각각 2 및 5인 메모리 셀이 스턱 셀일 수 있고(α={2, 5}), 각각의 스턱 셀은 0 및 1의 값을 가질 수 있다(μ={0, 1}). 이에 따라, 셀 어레이(2100)에 저장될 데이터에 대응하는 컬럼 벡터 v는 v=[v1 0 v3 v4 1 v6 v7 v8]T로 나타낼 수 있다. 도 5에 도시된 바와 같이, 인코딩 행렬 G는 8×8 행렬이고(n=8), 컬럼 벡터 x는 3개의 엔트리를 갖는 컬럼 벡터 w 및 5개의 엔트리를 갖는 컬럼 벡터 u가 결합되어 구성될 수 있다(s=3). u 생성부(1111)는 입력 데이터(DATA_IN)로부터 5개의 엔트리를 갖는 컬럼 벡터 u=[1 1 1 0 1]T를 생성할 수 있다. 또한, 인코딩 행렬 G는 8×3 제1 인코딩 행렬 G1 및 8×5 제2 인코딩 행렬 G2이 결합되어 구성될 수 있고, 제1 인코딩 행렬 G1 및 제2 인코딩 행렬 G2는 값이 0 또는 1인 엔트리들을 포함할 수 있다.
본 발명의 예시적 실시예에 따라, 스턱 셀의 좌표에 대응하는 인코딩 행렬 G의 행에 포함된 엔트리들 및 컬럼 벡터 x의 엔트리들은 컬럼 벡터 w의 엔트리들(w1 ~ ws)을 변수로 하는 1차 방정식(linear equation)들이 유도될 수 있고, 스턱 셀의 개수가 t개 이므로, t개의 1차 방정식들이 유도될 수 있다. 예컨대, 도 5에 도시된 바와 같이, 도 2의 셀 어레이(2100)는 좌표가 각각 2 및 5인 스턱 셀을 포함하고 있으므로, 인코딩 행렬 G의 2번째 및 5번째 행이 포함하는 엔트리들 및 컬럼 벡터 x의 엔트리들에 의해서 2개의 1차 방정식이 유도될 수 있다. 구체적으로, 도 5에 도시된 바와 같이, 좌표가 2이고 값이 0인 스턱 셀 및 인코딩 행렬 G의 2번째 행에 의하여 w3=0가 유도될 수 있고, 좌표가 5이고 값이 1인 스턱 셀 및 인코딩 행렬 G의 5번째 행에 의하여 w2=0가 유도될 수 있다. 따라서, 컬럼 벡터 w는 [0 0 0]T 또는 [1 0 0]T 중 하나 일 수 있다.
본 발명의 예시적 실시예에 따라, w 생성부(1112)는 t개의 1차 방정식들을 만족하는 s개의 근(root)들을 구하고, 상기 근들을 컬럼 벡터 w의 엔트리로 구성하여 컬럼 벡터 w를 생성할 수 있다. 이에 따라, 컬럼 벡터 w는 u 생성부(1111)가 생성한 컬럼 벡터 u와 연관되어 스턱 셀에 대한 정보를 포함할 수 있다. 한편, w 생성부(1112)는 t개의 1차 방정식들을 만족하는 s개의 근들을 구할 수 없는 경우, 즉 t개의 1차 방정식들을 만족하는 s개의 근들이 존재하지 않는 경우, G 생성부(1113)로부터 새로운 인코딩 행렬 G를 수신할 수 있다.
도 6은 본 발명의 예시적 실시예에 따라, v 생성부 및 디코더의 동작을 설명하기 위한 도면이다. 본 발명의 예시적 실시예에 따라, 디코더(1200)는 셀 어레이(2100)에 저장된 데이터에 기초하여 컬럼 벡터 v'를 수신할 수 있다. 디코더(1200)는 헤더(DATA_HD)에 포함된 인코딩 행렬 G의 레이블에 따라 인코딩 행렬 G의 역행렬인 G-1을 결정할 수 있고, 역행렬 G-1과 수신한 컬럼 벡터 v'를 곱하여 컬럼 벡터 x'을 생성할 수 있다. 또한, 디코더(1200)는 헤더(DATA_HD)에 포함된 s에 기초하여 컬럼 벡터 x'으로부터 n-s개의 엔트리를 갖는 컬럼 벡터 μ'를 추출할 수 있다.
도 5 및 6을 참조하면, 도 5에 도시된 실시예에 따라 w 생성부(1112)가 컬럼 벡터 w=[1 0 0]T를 생성하는 경우, v 생성부(1114)는 도 6에 도시된 바와 같이, v=[1 0 1 0 1 1 0 1]T를 생성할 수 있다. 셀 어레이(2100)는 컬럼 벡터 v에 따른 데이터를 저장할 수 있다. 인코더(1100)가 생성시킨 컬럼 벡터 v에 따른 데이터가 메모리 셀(2100)에 저장되고, 디코더(1200)가 상기 데이터에 따른 컬럼 벡터 v'을 수신하는 과정에서 스턱 셀에 따른 에러를 제외한 다른 에러가 발생하지 않은 경우, v'=v를 만족할 수 있다. 도 6에 도시된 바와 같이, 디코더(1200)는 인코딩 행렬 G의 역행렬 G-1과 컬럼 벡터 v'을 곱하여 컬럼 벡터 x'을 생성할 수 있고, 컬럼 벡터 x'의 엔트리 중 하위 5개의 엔트리들을 추출하여 컬럼 벡터 u'을 생성할 수 있다.
본 발명의 예시적 실시예에 따른 인코더(1100) 및 디코더(1200)가 도 5 및 6을 참조하여 설명한 동작을 수행하는 경우, 임의의 인코딩 행렬 G에 대하여 인코딩 동작은 O(n2 + s·t2)의 복잡도(complexity)를 가질 수 있고, 디코딩 동작은 O(n2)의 복잡도를 가질 수 있다. 또한, 인코딩 행렬 G 및 인코딩 행렬 G의 역행렬 G-1은 각각 인코더(1100) 및 디코더(1200)가 접근 가능한 메모리에 저장될 수 있고, 레이블을 통해 인식될 수 있다. 본 발명의 예시적 실시예에 따라, 인코딩 행렬 G를 밀도가 희박한(sparse) 랜덤 행렬로 구성하는 경우, 상기 복잡도는 낮아질 수 있고, 인코딩 행렬 G 및 인코딩 행렬 G의 역행렬 G-1을 저장하는 메모리의 용량도 조절될 수 있다.
도 7은 본 발명의 예시적 실시예에 따른 인코딩 행렬 G를 나타내는 도면이다. 도 7에 도시된 바와 같이, 인코딩 행렬 G는 n×s 제1 인코딩 행렬 G1 및 n×(n-s) 제2 인코딩 행렬 G2로 구성될 수 있고, 제1 인코딩 행렬 G1은 s×s 행렬인 G11과 (n-s)×s 행렬인 G21으로 구성될 수 있다. 또한, 제2 인코딩 행렬 G2는 제로 행렬 0s×(n-s) 및 단위행렬 I(n-s)×(n-s)로 구성될 수 있다. 본 발명의 예시적 실시예에 따라 인코딩 행렬 G가 도 7에 도시된 봐와 같이 구성되는 경우, 인코딩 행렬 G의 역행렬 G-1은 인코딩 행렬 G와 비교할 때, 제2 인코딩 행렬 G2는 그대로 유지되고, 제1 인코딩 행렬 G1만 변경될 수 있다. 즉, 도 7에 도시된 바와 같이, 역행렬 G-1은 제2 인코딩 행렬 G2를 그대로 포함하고, 제1 인코딩 행렬 G1대신, 행렬 G11의 역행렬인 G11 -1 및 -G21·G11 -1가 결합된 n×s 행렬을 포함할 수 있다. 따라서, 인코딩 행렬 G를 저장하는 메모리는 n×n 행렬(G) 및 그 역행렬(G-1)을 저장하는 대신, (n-s)×s 행렬(G21), s×s 행렬(G11) 및 그 역행렬(G11 -1)을 저장할 수 있으므로 메모리의 용량은 낮아질 수 있다.
도 8a 내지 8c는 본 발명의 예시적 실시예들에 따른 인코딩 행렬 G를 나타내는 도면이다. 도 8a 내지 8c에 도시된 인코딩 행렬 G는, 도 7에 도시된 바와 같이, 제로 행렬 0s×(n-s) 및 단위행렬 I(n-s)×(n-s)로 구성된 제2 인코딩 행렬 G2를 포함할 수 있다.
도 8a는 본 발명의 예시적 실시예에 따라 단위 행렬 Is ×s 및 (n-s)×s 행렬 G21가 결합되어 구성된 제1 인코딩 행렬 G1을 포함하는 인코딩 행렬 G를 나타내는 도면이다(조합 #1). 도 7의 행렬 G11이 도 8a에 도시된 바와 같이 단위 행렬 Is ×s인 경우, 인코딩 행렬 G는 인코딩 행렬 G의 역행렬 G-1과 동일할 수 있다. 이에 따라, 인코더(1100) 및 디코더(1200)는 (n-s)×s 행렬 G21이 저장된 메모리를 공유함으로써 인코딩 행렬 G를 위한 메모리 공간을 절약할 수 있다.
도 3 및 8a를 참조하면, G 생성부(1113)는 (n-s)×s 행렬 G21를 랜덤하게 또는 의사-랜덤하게 생성할 수 있다. G 생성부(1113)가 생성시킨 (n-s)×s 행렬 G21에 따라, w 생성부(1112)는 t개의 1차 방정식들의 s개 근들을 구하여 컬럼 벡터 w를 생성할 수 있다. 다만, w 생성부(1112)가 t개의 1차 방정식들로부터 s개의 근들을 구할 수 없는 경우, w 생성부(1112)는 G 생성부(1113)가 랜덤하게 또는 의사-랜덤하게 생성시킨 새로운 (n-s)×s 행렬 G21를 수신하여 새로운 t개의 1차 방정식들을 도출할 수 있다. 예컨대, (n-s)×s 행렬 G21은 1이 되는 확률이 1/2로서, 독립 항등 분포된(independent and identically distributed; i.i.d.) 0 또는 1의 값을 가지는 엔트리들을 포함할 수 있다. 아래 보조 명제 1을 통해서, w 생성부(1112)가 t개의 1차 방정식들로부터 s개의 근들을 성공적으로 구하여, 컬럼 벡터 w를 생성할 수 있는 확률은 1-2t-s임을 알 수 있다.
보조 명제 1.
(ⅰ) 1≤t<s, 행렬 V가 1이 될 확률이 1/2로서 0 또는 1로부터 독립 항등 분포되게(i.i.d.) 샘플된 엔트리를 포함하는 t×s 랜덤 행렬일 때, 행렬 V의 행이 선형 종속(linearly dependent)일 확률은 2t-s에 의해 위로 유계된다(bounded from above).
(ⅱ) 1≤k<t<s에 대하여, 행렬 V가 t×s 행렬이고, (v1 ... vt)가 행렬 V의 행일 때, (v1 ... vk)가 선형 독립(linearly independent)이고, vi(t≥i>k)의 각 엔트리가 1이 되는 확률이 1/2로서 0 또는 1로부터 독립 항등 분포되게(i.i.d.) 샘플되었다고 가정하자. 그러면, 행렬 V의 행들이 선형 종속일 확률은 2t-s에 의해 위로 유계된다.
증명. - 보조 명제 1
(ⅰ) (v1 ... vt)를 행렬 V의 행이라고 할 때, V의 행이 선형 종속인 사건 U는 사건들 Uα (α⊆[t], α≠Ø, v = ∑i∈αvi = 0)의 비이산 합집합(non-disjoint union)이다. v의 각 엔트리는 1이 되는 확률이 1/2이고, 각 엔트리들은 서로 독립적이다. 따라서 Pr(v=0)=2-s이다. 2t-1 사건들 Uα가 있기 때문에(α⊆[t], α≠Ø), 그것들이 모두 일어날 확률은 (2t-1)·2-s < 2t-s에 의해 위로 유계된다.
(ⅱ) 이 경우, 행렬 V의 행이 선형 종속일 사건 U는, α⊆[t]이고 α가 [k]의 부분집합(subset)이 아닐 때, 사건들 Uα의 비이산 합집합(non-disjoint union)이다. vα(α⊆[t], α
Figure 112013107293606-pat00002
[k])의 각 엔트리는. 엔트리가 종속적일 때, 1/2의 1이 되는 확률을 가지고, 이는 Pr(vα=0)=2-s 을 내포한다. 2t-2k 사건들 Uα가 있기 때문에(α⊆[t], α
Figure 112013107293606-pat00003
[k]), 그것들이 모두 일어날 확률은 2t-s에 의해 위로 유계된다.
도 8b는 본 발명의 예시적 실시예에 따라 G 생성부(1113)가 생성하는 제1 인코딩 행렬 G1의 예를 나태나는 도면이다(조합 #2). 도 7을 참조하면, 본 발명의 예시적 실시예에 따라, G 생성부(1113)는 제로 행렬 0s×(n-s) 및 단위행렬 I(n-s)×(n-s)로 구성된 제2 인코딩 행렬 G2을 생성할 수 있다. 또한, G 생성부(1113)는 아래 수식을 만족하는 로우 벡터 r을 자신의 행으로서 포함하는 제1 인코딩 행렬 G1을 생성할 수 있다.
1≤t≤s'<s≤n/2 (s′: even)
d=s-s′
e1 = [1 0 ... 0]
es = [0 ... 0 1],
ei = [01×(i-1) 1 01×(s-i)] ( 0<i<s )
q = [0 s' qs' +1 ... qs]
r = ei + ej + q (1≤i≤s'/2 and (s'/2+1)≤j≤s')
즉, 본 발명의 예시적 실시예에 따라, G 생성부(1113)가 생성하는 제1 인코딩 행렬 G1의 행은, 인덱스가 1부터 s'/2까지인 엔트리들 중에서 1개의 엔트리만 1이고, 인덱스가 s'/2 + 1부터 s'까지인 엔트리들 중에서 1개의 엔트리만 1인 로우 벡터로 구성될 수 있다. 예를 들면, 도 8b에 도시된 바와 같이, s = 14 및 s' = 10일 때, 제1 인코딩 행렬 G1의 2번째 행은 로우 벡터 e3, e8 및 q의 합인 로우 벡터 r로 구성될 수 있다.
한편, G 생성부(1113)는 상기 로우 벡터 r을 확률공간에서 균등 확률로서 생성할 수 있다. 즉, 로우 벡터 r의 인덱스가 1부터 s'/2까지인 엔트리가 각각 1이 될 확률은 s'/2일 수 있고, 로우 벡터 r의 인덱스가 s'/2+1부터 s'까지인 엔트리가 각각 1이 될 확률은 인덱스가 1부터 s'/2까지인 엔트리에 독립적으로 s'/2 일 수 있다. 또한, 로우 벡터 r의 인덱스가 s'+1부터 s까지인 엔트리가 1이 될 확률은 각각 독립적으로 1/2일 수 있다. (Ω, P)가 확률 공간일 때, 로우 벡터 r을 나타내면 아래와 같고, 제1 인코딩 행렬 G1은 아래 확률 공간(Ω, P)로부터 독립 항등 분포(independent and identically distributed; i.i.d.)되게 샘플된 로우 벡터 r로 구성될 수 있다.
Ω={r = ei + ej + q: 1≤i≤s'/2 and (s'/2+1)≤j≤s'}
P는 균등 확률(uniform probility)
제1 인코딩 행렬 G1의 n개의 행들 중에서, 스턱 셀의 좌표와 대응하는 t개의 행들이 서로 선형 종속(linearly dependent)이 아닌 경우, 제1 인코딩 행렬 G1에 따른 인코딩 행렬 G는 컬럼 벡터 w를 생성할 수 있다. 즉, 제1 인코딩 행렬 G1의 t개의 행들이 포함하는 엔트리들은 t개의 1차 방정식에서 s개의 변수들에 대한 계수이므로, 상기 t개의 행들이 서로 선형 종속이 아닌 경우, t개의 1차 방정식들을 만족하는 s개의 근들은 존재할 수 있다. 따라서, 상기 확률 공간 (Ω, P)로부터 독립 항등 분포되게 샘플된 로우 벡터 r로 구성된 t×s 행렬을 V라고 할 때, V의 행들이 선형 종속(linear dependent)되는 확률은 아래 보조 명제들에 의해서 원하는 수준으로 조절이 가능할 수 있다.
보조명제 2.
M,K≥1이고, ei는 M개의 엔트리를 갖고, ei=[0,...i-1 times...,0,1,0...,]T를 만족하고, EM={ei: i∈[M]}이다.
(ⅰ) i(1),...,i(K)∈[s]일 때, 일련의 벡터들 (ei (k))k∈[K]가 선형 종속인 것은 k,k'∈[K], k≠k', ei (k)= ei ( k' )인 것과 필요 충분 조건이다.
정의:
VK={ [u1,...,uK]: for k∈[K], uk∈EM}
UK= { [u1,...,uK]∈VK: u1+...+uK = 0}
그러면,
(ⅱ) |VK|=MK
(ⅲ) 만약 K가 홀수이면, UK
(ⅳ) 만약 K가 짝수이면, |UK| ≤ MK /2·(K-1)·(K-3)·...·1 ≤ MK /2·(K!)1/2
(ⅴ) 만약 K가 짝수이면, |UK| ≥ M(M-1)·...·(M-K/2+1)·(K-1)·(K-3)·...·1
(ⅵ) 만약 균등한 확률로서 [u1,...,uK]∈VK (K는 짝수)를 샘플하는 경우, 합이 제로가 될 확률은 하기 값에 의해 위로 유계된다.
Pr(u1+...+uK = 0) ≤ M-K/2·(K-1)·(K-3)·...·1 = f(M,K)
(ⅶ) 만약 균등한 확률로서 [u1,...,uK]∈VK (K는 짝수)를 샘플하는 경우, 합이 제로가 될 확률은 하기 값에 의해 아래로 유계된다(bounded from below).
예를 들면,
for K=2: Pr(u1+u2 = 0) ≤ M-1
for K=4: Pr(u1+u2 + u3+u4 = 0) ≤ M-2·3
for K=6: Pr(u1+u2 + u3+u4 + u5+u6 = 0) ≤ M-3·15
증명. - 보조 명제 2
(ⅰ) 및 (ⅱ)에 대한 증명은 생략한다. (ⅲ)을 증명하기 위해 K=1인 경우를 먼저 주시한다. K>1을 홀수일 때, 1≤K'<K인 모든 K' 및 모든 [u1,...,uK']∈VK'에 대하여 u1+...+uK' ≠ 0를 가정한다. u1+...+uK = 0 처럼 모순되는 [u1,...,uK]∈VK'를 가정한다. u1=uk인 k>1가 반드시 존재하는 점은 u1+uk=0 및 이에 따른 u2+...+uk -1 + uk+1+...+uk-1 = 0를 내포하며, 이는 상기 귀납 가정과 모순된다.
(ⅳ)를 증명하기 위하여, 모든 a∈[K]에 대하여 다음과 같은 특성을 갖는 모든 원소 u=[u1,...,uK]∈UK에 대한 1:1 맵핑 함수 φ=φ u :[K]→[K]를 귀납적으로 정의한다.
ua=uφ(a)
φ(a)≠a
φ(φ(a))=a
이러한 맵핑은 명백한 이유에 의해서, 패어링(pairing)으로 불린다. φ는 다음과 같이 귀납적으로 정의된다. k=1에 대하여, φ(1)은 u1= uφ(1)을 만족하는 {2, ..., K} 에서 최소 인덱스라고 한다. φ(φ(1))=1라고 정의하고, b1=1이라고 한다. 상기 3개 특성들을 모든 a∈A 에 대하여 만족하는 1:1 맵핑 φ:Ar→Ar을 정의하면서, r(r<K/2) 단계들 이후에 부분집합Ar⊆[K] (|Ar|=2r)이 존재한다고 귀납적으로 가정한다.
a∈ Arua=0이고, 이에 따라 B=[K] \Ar에 대하여 아래를 만족한다.
b∈ Bub=0
r+1 단계에 대하여, ub=ub'를 만족하면서, b=br는 B에서 최소 원소이고, b'는 B\{b}에서 최소 원소일 때, φ(b)=b' 및 φ(b')=b을 정의한다. Ar +1=Ar∪{b.b'}일 때, 상기 귀납 가정은 r+1까지 수행되고, 이에 따라 최종 φ는 (a)-(c)의 조건을 만족하는 점은 명백하다. 이제 u=[u1,...,uK]∈UK일 때, 맵핑 in the mapping u→φ u 을 살펴본다.
F={φ u : u∈UK}라고 한다. 상기 패어링들의 수(|F|)는 다음의 결합된 관찰을 통해서 알 수 있다. φ(b1)에 대한 K-1, 및 φ(b2)에 대한 독립적인 K-3 확률, φ(b3)에 대한 독립적인 K-5 확률... 이로써 아래 수식이 유도된다.
|F|=(K-1)·(K-3)·(K-5)·...·1
각각의 φ∈F에 대하여 아래를 정의한다.
UK ={: u∈UK: φ u =φ}
UK는 UK (φ∈F)의 이산 합집합(disjoint union)이다. b1,...,br를 선택하는 모든 가능한 방법들인 UK 에서 최대한 MK /2 원소들이 존재하고, 이에 따라 |UK| ≤ MK/2·(K-1)·(K-3)·...·1가 된다. ◆
보조 명제 3.
모든 k≥1에 대하여, 만약 u1,...,uk가 (Ω,P)로부터 독립적으로 샘플되고 u=u1+...+uk일 이면,
k가 홀수이면, u≠0
k가 짝수이면, Pr(u=0) ≤ (2/s')k·[(k-1)·(k-3)·...·1]2·2-d
≤ (2/s')k·k!·2-d
이 때, qk=(2/s')k·[(k-1)·(k-3)·...·1]2라고 정의하면, q2= (2/s')2 이다.
증명. - 보조 명제 3
Ti는 Ti:Fs→Fs' /2 (i=1,2)이고, 투영(projection)일 때, w=[w1,...,ws]T∈Fs 에 대하여 아래와 같이 정의 된다.
T1(w)= [w1,...,ws' /2]T∈Fs'
T2(w)= [w s' /2+1,...,ws']T∈Fs'
T3(w)= [ws' +1,...,ws]T∈Fd
(Ω,P)로부터 독립적으로 샘플된 u1,...,uK에 대하여, u=u1+...+uK이면, 위에서 설명된 3개 섹터 및 상기 첫번째 2개 섹터들의 독립성은 아래를 도출한다.
Pr(T1(u)=0)=Pr(T2(u)=0)
Pr(T3(u)=0)=2-d
Pr(u=0) = Pr(T1(u)=0)·Pr(T2(u)=0)· Pr(T3(u)=0)= Pr(T1(u)=0)2·2-d
사건 (T1(u)=0)의 확률을 평가하기 위하여, 보조 명제 2로 회귀하여, FM의 K 유닛 벡터들 [u1,...,uK]을 균등한 확률로서 독립 항등 분포되게 샘플하면 아래와 같다.
Pr(u1+...+uK = 0) ≤ M-K/2·(K-1)·(K-3)·...·1 및
Pr(u1+...+uK = 0) ≥ M-K·M(M-1)·...·(M-K/2+1)·(K-1)·(K-3)·...·1
이는 아래를 유도한다.
Pr(T1(u)=0) ≤ (2/s')k/2·(k-1)·(k-3)·...·1
Pr(T1(u)=0)≥
(2/s')k·(s'/2)·(s'/2-1)·(s'/2-2)·...(s'/2-k/2+1)·(k-1)·(k-3)·...·1
= (2/s')k·(s'/2)·(s'/2-1)·(s'/2-2)·...(s'/2-k/2+1)·(k-1)·(k-3)·...·1
이에 따라, 아래가 성립한다.
Pr(u=0) = Pr(T1(u)=0)2·2-d ≤ (2/s')k·((k-1)·(k-3)·...·1)2·2-d.◆
보조 명제 4.
1≤t≤s'≤s≤n/2 및 s'+d=s가 만족한다. 행렬 V는 (Ω,P)로부터 독립 항등 분포되게 샘플된 행들을 포함하는 t×s 랜덤 행렬이라고 할 때, 다음을 만족한다.
Ⅰ. 행렬 V의 행이 선형 종속일 확률은 아래에 의해 위로 유계된다.
P 0 ≤ 2-d·∑1≤k≤t, k even
Figure 112013107293606-pat00004
·(2/s')k·k!
Ⅱ. 상수 γ >0일 때, (1-γ)·s'=2·t라고 가정하면 아래를 만족한다.
P 0 ≤ (2-d)/γ
따라서, 실패 확률은 δ>0일 때, s=(2+δ)·t 에 대하여 원하는 만큼 임의로 작게 할 수 있다.
증명. - 보조 명제 4 - Ⅰ
(v1,...,vt)를 행렬 V의 행이고, vi=(vij)1≤j≤s i=1,...,t이라고 한다. 행렬 V의 행이 선형 종속인 사건 U는 ∑i∈αvi=0일 때, 사건들 Uα(α⊆[t], α≠Ø)의 비이산 합집합이다.
보조 명제 2에 따라, k≥1(α⊆[t], |α|=k )에 대하여 아래를 만족한다.
k가 홀수이면, Pr(Uα) =0.
k가 짝수이면, Pr(Uα) ≤ (2/s')k·k!·2-d.
U= ∪α⊆[t], α≠ØUα이기 때문에, 이는 아래와 같이 합집합 유계된다.
Pr(U) ≤ ∑α⊆[t], α≠Ø Pr(Uα)
= ∑1≤k≤t, k even α⊆[t], |α|=k Pr(Uα)
= ∑1≤k≤t, k even α⊆[t], |α|=k (2/s')k·k!·2-d
= ∑1≤k≤t, k even
Figure 112013107293606-pat00005
·(2/s')k·k!·2-d
ak =
Figure 112013107293606-pat00006
·(2/s')k·k! = t·(t-1)·...·(t-k+1)·(2/s')k 라고 정의하면, ak+1/ak= (t-k)·2/s'< 2t/s'= 1-γ가 만족한다. 따라서 아래가 성립한다.
Pr(U) < 2-d·∑1≤k≤t,
Figure 112013107293606-pat00007
·(2/s')k·k!
≤ 2-d·∑1≤k≤t,
Figure 112013107293606-pat00008
ak
≤ 2-d·a1·∑1≤k≤t,
Figure 112013107293606-pat00009
(1-γ)k = 2-d/γ◆
따라서, t개의 1차 방정식들을 만족하는 s개의 근들을 구할 수 없는 확률은 δ>0를 조정함으로써 원하는 만큼 감소시킬 수 있다.
도 8c는 본 발명의 예시적 실시예에 따라 G 생성부(1113)가 생성하는 제1 인코딩 행렬 G1의 예를 나타내는 도면이다. 도 7을 참조하면, 본 발명의 예시적 실시예에 따라, G 생성부(1113)는 제로 행렬 0s×(n-s) 및 단위행렬 I(n-s)×(n-s)로 구성된 제2 인코딩 행렬 G2을 생성할 수 있다. 또한, G 생성부(1113)는 BEC(binary erasure channel) 코드의 체크 행렬 H의 전치 행렬 HT로 구성된 제1 인코딩 행렬 G1을 생성할 수 있다. 예컨대, 도 8c에 도시된 바와 같이, 제1 인코딩 행렬 G1은 s×n 행렬인 체크 행렬 H의 전치행렬로 구성될 수 있다. 체크 행렬 H는 BEC 코드에서 에러를 체크하기 위한 것으로서, 예컨대 밀도가 희박한(sparse) 행렬인 LDPC(low-density parity-check)의 체크 행렬일 수 있다.
본 발명의 예시적 실시예에 따라, 인코딩이 실패할 확률 ε는 작은 크기의 헤더 및 s개의 변수를 갖는 t개의 방정식을 푸는데 필요한 복잡도에 좌우된다. 인코더 및 디코더의 계산 복잡도(computational complexity)를 감소시키기는 것은, 밀도가 희박한(sparse) 제1 인코딩 행렬 G1을 특별하게 특정함으로써 가능할 수 있다. 밀도가 희박한 행렬은 각각의 행에 적은 수의 영이 아닌(nonzero) 원소들을 포함하는 행렬을 말한다. 구체적으로 각 행에 포함된 영이 아닌 원소들의 개수가 양의 상수 이하일 수 있다. 그러한 행렬들이 디코딩 동작의 선형 복잡도를 감소시키는 것은 당연하고, 선형 시스템의 근을 구하는 인코딩 동작의 복잡도 역시 감소할 수 있다.
본 명세서에서, t×s의 밀도가 희박한 선형 시스템의 근을 O(t·s)의 복잡도로서 근을 구하는 몇몇의 알고리즘들이 있다. 밀도가 희박한 행렬들에 기초한 코드들의 잘 알려진 것으로서 LDPC(low-density parity-check) 코드가 있다. 이러한 코드들은 최대 공산(maximum likelihood; ML) 디코딩 하에서 다수의 DMC(discrete memoryless channel)들의 용량을 확보할 수 있다.
이후 BEC의 특별한 경우에 대해 설명한다. BEC에서는 채널의 출력으로서 0, 1 및 E(erasure) 3개의 부호(symbol)가 있다. BEC는 소실 확률 p>0로 특징될 수 있고, BEC(p)로 표기한다. 이러한 채널에서, 선형 디코딩 복잡도로서 1-p의 BEC 용량에 근접하는 코드들이 존재할 수 있다.
메모리 셀이 스턱 셀(stuck cell; SC)이 될 확률이 p일 때, 스턱 셀 용량은 1-p가 될 수 있다. BEC 디코도 역시 t×s의 선형 시스템에서 방정식들을 구하는 시도를 하는바, 낮은 복잡도를 가지고 BEC(p)에 근접한 용량을 갖는 코드는 유사한 퀄리티를 가지는 SC(p)로 변형할 수 있음을 예상할 수 있다.
다만, BEC 및 SC 사이에는 근본적인 차이가 존재한다. BEC는 디코딩을 보장하기 위해서 선형 방정식들의 과잉결정된(overdetermined) 풀 랭크(full ranked) 시스템(즉, 변수보다 방정식이 더 많은)을 요구하는 반면, SC는 인코딩을 보장하기 위해서 선형 방정식의 미결정된(undetermined) 풀 랭크 집합을 요구한다. 그럼에도불구하고 BEC 및 SC는 공통적인 특징을 공유한다. 즉, 관련 행렬이 풀 랭크가 아닌 경우 실패가 일어날 수 있다. 이는 BEC 코드의 페리티-체크(parity-check) 행렬 및 SC의 인코딩 행렬에 포함된 제1 인코딩 행렬 G1사이에 관계가 있을 가능성을 암시할 수 있다.
ε-실패-확률(ε-failure-probability)을 갖는 인코딩 및 디코딩 BEC(p) 알고리즘은 같은 복잡도 및 ε-실패-확률을 갖는 인코딩 및 디코딩 SC(p) 알고리즘으로 변형될 수 있음을 증명한다. 이러한 이원성(duality) 결과의 중요성은 SC(p)의 1-p 용량이 선형 복잡도의 인코딩 및 디코딩 알고리즘에 근접할 수 있음을 보여주는데 있다. 다시 말해서, s 및 t(s>t)는 s/t가 1에 근접하도록 선택될 수 있다.
BEC 및 길이가 n인 코드워드를 갖는 선형 코드 C를 가정한다. 코드 C는 1-ε 확률로서 t 소실들을 정정할 수 있다. 코드 C는 s×n 패리티 체크 행렬 H로 표현될 수 있다(s>t). y=A·x은 t개의 소실을 갖는 BEC 디코딩 스킴(scheme)에서 풀이되어야 할 선형 시스템을 나타낸다. 따라서, A는 t개의 소실 비트들의 위치에 대응하는 t개의 열을 포함하는 행렬 H의 s×t 서브-행렬이다.
BEC 디코딩에서, 반복적인(iterative) 알고리즘은 하나의 1을 갖는 행(예컨대, j번째 행에서 i번째 엔트리가 1)을 검색하고, 관련된 변수(xi)를 구하고, xi와 연관된 모든 방정식들에 대하여 구한 값을 대입한다. 이는 j번째 행과 i번째 열을 소거하는 것과 등가적이다.
이러한 과정은 전체 행렬이 줄어들 때까지 계속된다. 만약 디코딩의 일부 단계에서 하나의 1을 갖는 행이 없는 경우, 디코딩 실패가 선언된다. 양호한 BEC 코드들은 t 소실들의 어떠한 집합에 대하여도 상기 과정을 성공시키는 특성 및 선형 시스템이 풀이될 때까지 어떠한 단계에서도 하나의 1을 갖는 적어도 하나의 행이 상기 행렬에 있도록 하는 특성을 가진다. BEC 코드들에 대한 방대한 연구들로부터 이러한 단순하고, 낮은 선형 복잡도의 알고리즘을 이용하여 채널 용량을 얻을 수 있는 코드들이 존재하는 것이 알려져 있다. 본 발명의 SC 알고리즘은 A의 전치된 버전(AT)을 다루기 때문에, 이러한 알고리즘이 SC 알고리즘에 직접적으로 적용될 수 없다. AT에서 하나의 1을 갖는 행(즉, A에서 하나의 1을 갖는 열)을 찾는 확률은 양호한 코드들의 경우 0에 근접하는 것은 증명하기 쉽다. BEC-SC 이원성에 기초하여 2개의 단계를 포함하는 SC에 대한 디코딩 알고리즘이 제안된다. 첫 번째 단계에서, AT를 상삼각행렬(upper triangular matrix)로 변환하는 반복적인 알고리즘이 제안된다. 두 번째 단계에서, 후방-대치(back-substitution) 방법을 이용하여 선형 시스템을 풀이한다. 첫 번째 단계에서는 단지 행과 열의 배치(permutation)가 행해지므로, AT에서 1의 개수는 유지된다. 따라서 두 번째 단계에서 연산의 수는 t에 선형 관계이다.
- 첫 번째 단계 - 반복적인 삼각화(triangulation), y=A·x 방정식들의 선형 시스템을 풀이하는 알고리즘의 개요
입력: t×s인 밀도가 희박한 행렬 A, 크기가 t인 벡터 y
출력: 상삼각행렬 Å, s 차수의 벡터 x의 재정렬 및 t 차수의 벡터 y의 재정렬
표기법(notation): I 및 J는 자연수의 집합이고, A[I, J]는 I에 의해 인덱스된 행들 및 J에 의해 인덱스된 열로 구성된 A의 서브-행렬이다.
알고리즘 1:
초기화: n=1
단계들:
1. A[n:t, n:s]에서 하나의 1을 갖는 열을 검색한다. A에서 열의 위치를 i로 표시하고, 1의 위치(행)를 j로 표시한다. 검색 결과가 존재하지 않는 경우 에러를 선언한다.
2. A의 i번째 및 n번째 열을 서로 바꾸고, X의 i번째 및 n번째 원소를 서로 바꾼다.
3. A의 j번째 및 n번째 행을 서로 바꾸고, y의 j번째 및 n번째 원소를 서로 바꾼다.
4. n=n+1
5. n=1이면, 다음 단계로 넘어가고, 그렇지 않으면 단계 1로 간다.
6. A#=A, x # =x (#는 재배치된 행렬/벡터를 의미한다) 종료.
- 두 번째 단계 - 후방-대치(back-substitution)
첫 번째 디코딩 단계 이후, A#·x # =y # 인 선형 방정식 시스템이 주어진다(A#는 상삼각행렬). 후방-대치 단계에서, x#는 반복적으로 구하고, 이에 따라 원래의 벡터 x를 구한다.
알고리즘 2:
초기화: i∈{t+1, t+2,...s}에 대하여 xi #=0이라고 한다(임의의 다른 초기 벡터도 유효하다). n=t로 설정한다.
단계들:
1. xn # = yn #-∑n+1≤i≤t a# n,i·x# i을 계산한다.
2. n=n-1
3. n=0이면, 성공적으로 종료하고, 그렇지 않으면 단계 1로 간다.
- 계산 복잡도(computational complexity)
다수의 제로 원소들의 이점을 이용하기 위하여, 특별한 저장 스킴(scheme)이 밀도가 희박한 행렬들을 저장하기 위해 요구된다. 하나의 행에 최대 r개의 1을 갖는 n×n 밀도가 희박한 행렬을 저장하기 위한 단순하고 효과적인 스킴의 예는, 각각의 행이 원래 행렬의 행에서 1인 원소들의 열 인덱스들을 함유하는 n×r 행렬을 저장하는 것이다. r개 보다 적은 수의 영이 아닌 원소들을 갖는 행들에 대해서, 마지막 영이 아닌 인덱스에 대해서 반복적으로 채워져야 한다. 저장 공간을 절약할 수 있는 다른 버전은 인덱스들의 델타(차이)를 저장하는 것이다.
상기 첫 번째 디코딩 단계는 최대 2·(t-1)번의 스왑(swap) 연산들을 필요로 한다. n개의 원소들에 대해 2개의 보조 메모리들(열의 순서를 위한 것 및 행의 순서를 위한 것)을 이용함으로써, 상기 스왑 연산은 원래의 행렬 저장에 어떠한 변경 없이 수행될 수 있다. i번째 메모리의 내용물은 스왑된(재배치된) 행(열)의 인덱스를 포함한다.
상기 두 번째 디코딩 단계는 단지 t에 선형인 횟수만큼의 XOR 연산들을 필요로 한다. 왜냐하면, 첫 번째 단계는 행렬에서 1들의 개수에 변화를 주지 않기 때문이다. 결론적으로, 제안된 디코딩 알고리즘은 매우 단순하며 HW/SW로 구현하기에 용이하다.
본 발명의 예시적 실시예에 따라, G1의 각 행이 3개의 영이 아닌 원소들을 포함할 때, 인코딩 행렬 G는 아래 수식을 만족할 수 있다(조합 #3). 아래 수식을 만족하는 인코딩 행렬 G에 따른 인코딩 코드는 1-1.21p의 전송율(transmission rate)을 가능하게 한다(채널 용량은 1-p이다).
G=[G1 G2]= [G11 0s×(n-s) ; G21 I(n-s)×(n-s) ] ∈Fn ×n
상기 인코딩 행렬 G에 따른 인코딩 코드는 저장공간 및 구현에 있어서, 상기 코드의 규칙성에 기인하여 높은 효율성을 가질 수 있다. 즉, 두 번째 디코딩 단계는 단지 3·t번의 XOR 연산들만을 필요로 할 수 있다.
도 9는 본 발명의 예시적 실시예에 따른 인코딩 방법을 나타내는 플로우차트이다. 본 발명의 예시적 실시예에 따른 인코딩 방법을 수행하는 인코더는 t개의 스턱 셀들을 포함하는 n개의 메모리 셀로 구성된 셀 어레이에 저장시킬 데이터에 대응하는 코드워드를 생성할 수 있다.
도 9에 도시된 바와 같이, 인코더는 메모리 장치에 저장할 데이터로부터 n개의 메모리 셀을 포함하는셀 어레이에 저장할 데이터에 대응하는 n-s개의 엔트리를 포함하는 컬럼 벡터 u를 생성할 수 있다(E10). 컬럼 벡터 u는 추후에 생성될 컬럼 벡터 w와 결합되어 컬럼 벡터 x를 형성할 수 있다.
인코더는 랜덤하게 또는 의사-랜덤하게 샘플된 적어도 하나의 행렬을 조합하여 n×n 행렬인 인코딩 행렬 G를 생성할 수 있다(E20). 예컨대, 인코더는 도 7에 도시된 인코딩 행렬 G를 생성할 수 있다. 즉, 인코더는 n×s 제1 인코딩 행렬 G1 및 n×(n-s) 제2 인코딩 행렬 G2를 생성하고, 제1 인코딩 행렬 G1 및 제2 인코딩 행렬 G2를 결합하여 인코딩 행렬 G를 생성할 수 있다. 이 때, 인코더는 제로 행렬 0s×(n-s) 및 단위 행렬 I(n-s)×(n-s)를 결합하여 제2 인코딩 행렬 G2를 생성할 수 있다.
인코더는 스턱 셀에 대한 좌표 정보 α, 스턱 셀에 대한 값 정보 μ, 컬럼 벡터 u 및 인코딩 행렬 G에 기초하여 s개의 엔트리를 갖는 컬럼 벡터 w를 생성할 수 있다(E30). 도 5에서 설명한 바와 같이, 인코더는 정보 α, μ, 컬럼 벡터 u 및 인코딩 행렬 G를 이용하여 t개의 1차 방정식들을 도출할 수 있고, 상기 t개의 1차 방정식들을 만족하는 s개의 근들을 구하여, 컬럼 벡터 w의 엔트리로서 구성할 수 있다.
인코더는 주어진 정보 α, μ, 컬럼 벡터 u 및 인코딩 행렬 G에 기초하여 컬럼 벡터 w가 생성될 수 없는 경우를 판단할 수 있다(E40). 예컨대, 인코더는 상기 t개의 1차 방정식을 만족하는 s개의 근들을 구할 수 없는 경우, 인코더는 주어진 정보 α, μ, 컬럼 벡터 u 및 인코딩 행렬 G에 따른 컬럼 벡터 w가 존재하지 않는 것을 판단할 수 있다. 만약 인코더가 컬럼 벡터 w가 존재하지 않는다고 판단한 경우, 인코더는 랜덤하게 또는 의사-랜덤하게 샘플된 적어도 하나의 행렬을 조합하여 새로운 인코딩 행렬 G를 생성할 수 있다(E20).
인코더가 컬럼 벡터 w를 생성한 경우, 인코더는 컬럼 벡터 w 및 컬럼 벡터 u를 결합하여 컬럼 벡터 x를 생성하고, 인코딩 행렬 G와 컬럼 벡터 x를 곱하여 n개의 엔트리를 갖는 컬럼 벡터 v를 생성할 수 있다(E50). 컬럼 벡터 v를 생성하는데 사용된 인코딩 행렬 G는 이전 단계(E30)에서 컬럼 벡터 w를 생성한 인코딩 행렬 G와 일치할 수 있다. 인코더가 생성한 컬럼 벡터 v는 n개의 메모리 셀을 포함하는 셀 어레이에 저장되는 데이터와 대응하고, t개의 스턱 셀에 대응하는 컬럼 벡터 v의 엔트리들은 각각 대응하는 스턱 셀의 값을 가질 수 있다.
인코더는 컬럼 벡터 w가 성공적으로 생성된 경우, 컬럼 벡터 w를 생성하는데 사용된(또는, 컬럼 벡터 v를 생성하는데 사용된) 인코딩 행렬 G의 레이블 및 컬럼 벡터 u의 엔트리 수인 s를 포함하는 헤더를 생성할 수 있다(E60). 인코더가 생성한 헤더는 컬럼 벡터 v에 대응하는 데이터와 별도의 저장공간에 저장될 수 있으며, 추후 디코더는 상기 저장공간에 접근하여 헤더로부터 메모리 셀로부터 수신한 데이터에 대응하는 컬럼 벡터 v'의 인코딩 행렬 G 및 s를 파악할 수 있다.
도 10은 본 발명의 예시적 실시예에 따라, 컬럼 벡터 w를 생성하는 방법을 나타내는 플로우차트이다. 인코더는 정보 α, μ, 컬럼 벡터 u 및 인코딩 행렬 G를 이용하여 t개의 1차 방정식들을 도출할 수 있다(E31). 상기 1차 방정식은 컬럼 벡터 w의 s개의 엔트리들을 변수로서 포함하고, 정보 α에 대응하는 제1 인코딩 행렬 G1의 행에 포함된 엔트리들을 계수로서 포함하고, 상기 정보 μ, 컬럼 벡터 u 및 제2 인코딩 행렬 G2의 산술 연산된 값을 상수항으로서 포함할 수 있다. 도 7 및 도 8a 내지 8c에서 설명한 바와 같이, 인코더는 제2 인코딩 행렬 G2을 제로 행렬 및 단위 행렬을 결합하여 생성시키고, 제1 인코딩 행렬 G1을 전술한 본 발명의 다양한 실시예들에 따라 생성할 수 있다.
인코더는 생성된 t개의 1차 방정식들을 만족하는 s개의 근들을 구하고, 상기 s개의 근들을 엔트리로서 포함하는 컬럼 벡터 w를 생성할 수 있다(E32). 전술한 본 발명의 실시예들에 따른 인코딩 행렬 G에 따라, 인코더는 낮은 복잡도로서 s개의 근들을 구할 수 있고, 컬럼 벡터 w를 생성할 수 있다.
도 11은 본 발명의 예시적 실시예에 따라, 컬럼 벡터 v를 생성하는 방법을 나타내는 플로우차트이다. 인코더는 제1 인코딩 행렬 G1 및 컬럼 벡터 w를 곱하여 n개의 엔트리를 갖는 컬럼 벡터 y를 생성할 수 있다(E51). 인코더는 제2 인코딩 행렬 G2 및 컬럼 벡터 u의 곱과 상기 컬럼 벡터 y를 더하여 컬럼 벡터 v를 생성할 수 있다(E52).
본 발명의 예시적 실시예들에 따라, 제2 인코딩 행렬 G2 및 컬럼 백터 u의 곱은 복잡도가 낮을 수 있다. 예컨대, 도 7에 도시된 바와 같이, 제2 인코딩 행렬 G2가 제로 행렬 및 단위 행렬의 결합으로 구성된 경우, 제2 인코딩 행렬 G2 및 컬럼 벡터 u의 곱은 s개의 제로 엔트리 및 컬럼 벡터 u의 엔트리를 포함하는 n개의 엔트리를 갖는 컬럼 벡터가 될 수 있다. 즉, 추가적인 산술 연산 없이, 컬럼 벡터 u의 배치를 통해서 제2 인코딩 행렬 G2 및 컬럼 벡터 u의 곱을 도출할 수 있다.
도 12는 본 발명의 예시적 실시예에 따른 디코딩 방법을 나타내는 플로우 차트이다. 본 발명의 예시적 실시예에 따른 디코딩 방법은 도 9에서 설명한 인코딩 방법의 역순과 유사할 수 있고, 상기 디코딩 방법을 수행하는 디코더는 n개의 메모리 셀을 포함하는 셀 어레이에 저장된 데이터에 대응하는 n개의 엔트리를 포함하는 컬럼 벡터 v'및 상기 데이터에 대응하는 헤더를 입력으로 하고, (n-s)개의 엔트리를 갖는 컬럼 벡터 u를 출력할 수 있다.
도 12에 도시된 바와 같이, 디코더는 셀 어레이에 저장된 데이터에 따른 n개의 엔트리를 포함하는 컬럼 벡터 v' 및 상기 데이터에 대응하는 헤더를 수신할 수 있다(D10). 컬럼 벡터 v'은 t개의 스턱 셀들에 대응하는 값들을 엔트리로서 포함할 수 있다. 헤더는 도 1의 메모리 컨트롤러(1000)가 포함하는 저장 공간 또는 메모리 장치(2000)가 포함하는 셀 어레이에 별도로 저장될 수 있으며, 디코더는 상기 헤더가 저장된 저장 공간 또는 셀 어레이로 부터 헤더를 수신할 수 있다.
헤더는 인코더가 상기 컬럼 벡터 v'을 생성할 때 이용한 인코딩 행렬 G의 레이블을 포함할 수 있고, 컬럼 벡터 w의 엔트리 수인 s를 포함할 수 있다. 디코더는 헤더에 포함된 인코딩 행렬 G의 레이블 및 s를 추출할 수 있다(D20). 디코더는 추출된 인코딩 행렬 G의 레이블에 따라 인코딩 행렬 G의 역행렬 G-1을 도출 할 수 있다(D30). 예컨대, 디코더는 상기 인코딩 행렬 G의 레이블에 기초하여 역행렬 G-1이 저장된 메모리에 접근하여 역행렬 G-1을 독출할 수 있다. 본 발명의 예시적 실시예들에 따른 인코딩 행렬 G의 형태에 따라, 역행렬 G-1은 인코딩 행렬 G와 동일하거나 인코딩 행렬 G와 유사한 형태를 포함할 수 있다.
디코더는 도출된 역행렬 G-1과 컬럼 벡터 v'을 곱하여 n개의 엔트리를 포함하는 컬럼 벡터 x'를 생성할 수 있고, 컬럼 벡터 x'로부터 (n-s)개의 엔트리를 추출하여 컬럼 벡터 u'을 생성할 수 있다(D40). 디코더 또는 디코더에 후속하는 구성요소는 컬럼 벡터 u'로부터 인코더에 의해 인코딩 되기 전의 데이터를 복원할 수 있다.
도 13은 본 발명의 예시적 실시예에 따른 인코더 및 디코더를 개략적으로 나타내는 블록도이다. 본 발명의 예시적 실시예에 따라 인코더(1100a)는 도 9에서 설명된 동작뿐만 아니라 추가적인 ECC 인코딩을 더 수행할 수 있다. 또한, 본 발명의 예시적 실시예에 따라 디코더(1200a)는 도 12에서 설명된 동작뿐만 아니라 추가적인 ECC 디코딩을 더 수행할 수 있다. 즉, 본 발명의 예시적 실시예에 따른 인코딩 방법은 다른 ECC 인코더가 출력하는 데이터를 인코딩하는데 사용될 수 있고, 본 발명의 예시적 실시예에 따른 인코딩 방법으로 생성된 데이터는 다른 ECC 인코더가 인코딩할 수 있다. 또한, 본 발명의 예시적 실시예에 따른 디코딩 방법은 다른 ECC 디코더가 출력하는 데이터를 디코딩하는데 사용될 수 있고, 본 발명의 예시적 실시예에 따른 디코딩 방법으로 생성된 데이터는 다른 ECC 디코더가 디코딩할 수 있다. 도 13에 도시된 바와 같이, 인코더(1100a)는 SC 인코더(1110), 제1 및 제2 인코더(1120 및 1130)를 포함할 수 있고, 디코더(1200a)는 SC 디코더(1210), 제1 및 제2 디코더(1220 및 1230)를 포함할 수 있다.
제1 ECC 인코더(1120)는 인코더(1100a) 외부로부터 로우 데이터(DATA_RAW)를 수신할 수 있다. 로우 데이터(DATA_RAW)는 도 1의 호스트(800)가 메모리 시스템(900)에 기록하고자하는 유저 데이터 및 상기 유저 데이터를 관리하기 위해 메모리 컨트롤러(1000)가 생성한 메타 데이터를 포함할 수 있다. 제1 ECC 인코더는 로우 데이터(DATA_RAW)를 인코딩하여 SC 인코더(1110)에 대한 입력 데이터(DATA_IN)을 출력할 수 있다.
본 발명의 예시적 실시예에 따라, SC 인코더(1110)는 도 3에 도시된 구성요소들을 포함할 수 있고, 도 9에서 도시된 동작을 수행할 수 있다. SC 인코더(1110)는 입력 데이터(DATA_IN) 및 스턱 셀 정보(SC_INFO)를 기초로 전술한 본 발명의 예시적 실시예들에 따른 인코딩 방법을 수행하여 코드워드(DATA_CW) 및 헤더(DATA_HD)를 출력할 수 있다.
제2 ECC 인코더(1130)는 SC 인코더(1110)로부터 코드워드(1130)를 수신하여 인코딩할 수 있다. 제2 ECC 인코더(1130)가 인코딩한 데이터는 노이즈 채널(2000a)를 통과하여 디코더(1200a)로 전달될 수 있다. 노이즈 채널(2000a)은 수신한 데이터와 송신하는 데이터 사이에 에러가 발생할 수 있는 채널로서, 예컨대 메모리 장치 또는 셀 어레이 등을 포함할 수 있다. 제2 ECC 디코더(1230)는 노이즈 채널(2000a)로부터 데이터를 수신할 수 있고, 수신한 데이터를 디코딩한 코드워드'(DATA_CW')를 출력할 수 있다.
제2 ECC 인코더(1130) 및 제2 ECC 디코더(1230)는 상기 노이즈 채널(2000a)에서 발생할 수 있는 에러를 정정하기 위하여 각각 인코딩 및 디코딩 동작을 수행할 수 있다. 본 발명의 예시적 실시예에 따라, 상기 제2 ECC 인코더(1130) 및 제2 ECC 디코더(1230)는 SC 인코더(1110) 및 SC 디코더(1210)가 스턱 셀에 대한 에러 정정이 가능하도록 스턱 셀에 대한 정보를 보존하면서 인코딩 및 디코딩 동작을 수행할 수 있다.
본 발명의 예시적 실시예에 따라, SC 디코더(1210)는 도 12에 도시된 동작을 수행할 수 있다. SC 디코더(1210)는 코드워드'(DATA_CW') 및 헤더(DATA_HD)를 수신하여 출력 데이터(DATA_OUT)를 생성할 수 있다. 헤더(DATA_HD)는 SC 인코더(1110)가 입력 데이터(DATA_IN)의 인코딩 당시에 생성시킨 헤더로서, 메모리 시스템(900) 내부의 별도의 저장 공간(910)에 저장되어 있다가 SC 디코더(1210)로 전달된다. 제1 ECC 디코더(1220)는 SC 디코더(1210)로부터 출력 데이터(DATA_OUT)를 수신하고, 제1 ECC 인코더(1120)의 인코딩 방법에 대응하는 디코딩 방법으로 출력 데이터(DATA_OUT)를 디코딩하여 로우 데이터'(DATA_RAW')를 출력할 수 있다.
제1 ECC 인코더 및 디코더(1120 및 1220)는 서로 대응하는 인코딩 및 디코딩 동작을 수행할 수 있고, 제2 ECC 인코더 및 디코더(1130 및 1230) 역시 서로 대응하는 인코딩 및 디코딩 동작을 수행할 수 있다. 예컨대, 상기 ECC 인코더들 및 디코더들은 LDPC를 수행할 수 있다.
비록 도 13은 SC 인코더(1110) 및 SC 디코더(1210)의 전후에 ECC 인코더들 및 디코더들이 모두 삽입된 실시예를 도시하였으나, 본 발명의 예시적 실시예에 따라 인코더(1100a) 및 디코더(1200a)는 상기 ECC 인코더들 및 디코더들 중 서로 대응하는 한쌍의 ECC 인코더 및 디코더를 포함할 수도 있다.
도 14는 본 발명의 예시적 실시예들에 따른 메모리 시스템을 포함하는 컴퓨팅 시스템을 나타내는 블록도이다. 모바일 기기, 데스크 탑 컴퓨터 또는 서버와 같은 컴퓨팅 시스템(3000)에서 본 발명의 예시적 실시예에 따른 메모리 시스템(3400)이 장착될 수 있다.
본 발명의 예시적 실시예에 따른 컴퓨팅 시스템(3000)은 중앙 처리부(3100), 램(3200), 유저 인터페이스(3300) 및 메모리 시스템(3400)를 포함할 수 있으며, 이들 구성요소는 각각 버스(3500)에 전기적으로 연결되어 있다. 도 14의 컴퓨팅 시스템(3000)에서 전술한 호스트는 중앙 처리부(3100), 램(3200) 및 유저 인터페이스(3300)를 포함할 수 있다. 중앙 처리부(3100)는 컴퓨팅 시스템(3000) 전체를 제어할 수 있고, 유저 인터페이스(3300)를 통해서 입력된 유저의 명령에 대응하는 연산을 수행할 수 있다. 램(3200)은 중앙 처리부(3100)의 데이터 메모리 역할을 할 수 있고, 중앙 처리부(3100)는 메모리 시스템(3400)에 데이터를 기록하거나 독출할 수 있다.
전술한 본 발명의 예시적 실시예들과 같이, 메모리 시스템(3400)은 메모리 컨트롤러(3410) 및 메모리 장치(3420)를 포함할 수 있다. 메모리 컨트롤러(3410)는 인코더, 디코더 및 스턱 셀 정보 저장부를 포함할 수 있으며, 메모리 장치(3420)는 복수개의 메모리 셀을 포함하는 셀 어레이를 포함할 수 있고, 상기 셀 어레이는 스턱 셀을 포함할 수 있다. 인코더는 스턱 셀 정보 저장부로부터 스턱 셀에 대한 정보를 수신하여 셀 어레이에 저장하고자 하는 데이터를 인코딩하여 코드워드를 생성할 수 있고, 상기 코드워드에 대응하는 헤더를 생성할 수 있다. 인코더가 생성한 코드워드는 셀 어레이에 포함된 스턱 셀의 값을 포함할 수 있다. 디코더는 헤더로부터 인코딩 정보를 추출하고, 상기 인코딩 정보에 따라 셀 어레이에 저장된 데이터를 디코딩할 수 있다.
도 15는 본 발명의 예시적 실시예에 따른 메모리 카드를 나타내는 블록도이다. 전술한 본 발명의 예시적 실시예들에 따른 메모리 시스템은 메모리 카드(4000)가 될 수 있다. 예컨대, 메모리 카드(4000)는 eMMC(embedded MultiMedia Card) 또는 SD(Secure Digital) 카드 등을 포함할 수 있다. 도 15에 도시된 바와 같이 메모리 카드(4000)는 메모리 컨트롤러(4100), 비휘발성 메모리(4200) 및 포트 영역(4300)를 포함할 수 있다. 본 발명의 예시적 실시예들에 따른 메모리 장치는 도 15에 도시된 실시예에서 비휘발성 메모리(4200)일 수 있다.
메모리 컨트롤러(4100)는 전술한 본 발명의 예시적 실시예들에 따른 인코더, 디코더 및 스턱 셀 정보 저장부를 포함할 수 있다. 상기 인코더 및 디코더는 본 발명의 예시적 실시예들에 따른 인코딩 방법 및 디코딩 방법을 수행할 수 있고, 스턱 셀 정보 저장부는 비휘발성 메모리(4200)에 포함된 스턱 셀에 대한 정보를 저장할 수 있다. 메모리 컨트롤러(4100)는 포트 영역(4300)을 통해서 외부의 호스트와 미리 정해진 프로토콜에 따라 통신할 수 있다. 상기 프로토콜은 eMMC 또는 SD 프로토콜, SATA, SAS 또는 USB 등이 될 수 있다. 비휘발성 메모리(4200)는 전원이 차단되어도 저장하고 있는 데이터를 유지하는 특징을 갖는 메모리 셀을 포함할 수 있다. 예컨대, 비휘발성 메모리(4200)는 플래시 메모리(Flash Memory), MRAM(Magnetic Random Access Memory), RRAM(Resistance RAM), FRAM(Ferroelectric RAM) 또는 PCM(Phase Change Memory) 등을 포함할 수 있다.
도 16은 본 발명의 예시적 실시예에 따른 메모리 시스템을 포함하는 네트워크 시스템에 대한 구현예를 나타내는 블록도이다. 도 16에 도시된 바와 같이, 네트워크 시스템(5000)은 네트워크(5200)를 통해 연결되는 서버 시스템(5100) 및 다수의 단말들(5300, 5400, 5500)을 포함할 수 있다. 본 발명의 예시적 실시예에 따른 서버 시스템(5100)은 네트워크(5200)에 연결되는 다수의 단말들(5300, 5400, 5500)로부터 수신되는 요청을 처리하는 서버(5110) 및 단말들(5300, 5400, 5500)로부터 수신되는 요청에 대응되는 데이터를 저장하는 SSD(5120)를 포함할 수 있다. 이 때, SSD(5120)는 전술한 본 발명의 예시적 실시예들에 따른 메모리 시스템이 적용될 수 있다.
한편, 전술한 본 발명의 예시적 실시예들에 따른 메모리 시스템은 다양한 형태들의 패키지를 이용하여 실장 될 수 있다. 예를 들면, 본 발명에 따른 메모리 시스템은 PoP(Package on Package), Ball grid arrays(BGAs), Chip scale packages(CSPs), Plastic Leaded Chip Carrier(PLCC), Plastic Dual In-Line Package(PDIP), Die in Waffle Pack, Die in Wafer Form, Chip On Board(COB), Ceramic Dual In-Line Package(CERDIP), Plastic MetricQuad Flat Pack(MQFP), Thin Quad Flatpack(TQFP), Small Outline(SOIC), Shrink Small Outline Package(SSOP), Thin Small Outline(TSOP), Thin Quad Flatpack(TQFP), System In Package(SIP), Multi Chip Package(MCP), Wafer-level Fabricated Package(WFP), Wafer-Level Processed Stack Package(WSP), 등과 같은 패키지들을 이용하여 실장될 수 있다.
[SC 인코더에 의해 사용되는 고속 선형 방정식들 풀이에 대한 부연]
- 도입
F는 임의의 필드(field)이고 m, n≥1이라고 한다. 행렬 A∈Fn ×m는 A에서 영이 아닌 엔트리들의 수가 C·n에 의해 위로 유계되는 경우, C-스파스(sparse)라고 부른다(C는 생략될 수 있다). 본 섹션의 목적은 A∈Fn ×m가 스파스 행렬이고, 컬럼 벡터 x 및 y가 각각 x∈Fm, y∈Fn를 만족할 때, 선형 방정식들의 집합 A·x=y 를 풀이하는 낮은 복잡도의 알고리즘을 제공하는데 있다. 이러한 목적은 우선 A를 대각선화하고(diagonalize), 이후(또는 동시에) 선형 방정식들의 집합을 풀이함으로써 달성할 수 있다.
i,j∈[n]에 대하여, E' i ,j,n ∈Fn ×n는 1인 (i, j) 엔트리를 제외하고 모든 엔트리가 제로인 행렬이라고 정의한다. 기본 행렬(elementary matrix)은 (In ×n+ x·E'p,q,n) 형태의 행렬 및 아래와 같이 2개 좌표들을 바꾼 재배치(permutation) 행렬이다.
E =
Figure 112013107293606-pat00010
모든 행렬 A∈Fn ×m는 아래와 같이 대각선화, 즉 분해될 수 있다.
A = E1 -1·...·EN -1 -1·EN -1·Ik ,n×m·E'M -1·E'M -1 -1·...·E'1 -1
여기서 Ik ,n×m는 대각선상에서 (1,1,..,1,0,...0)로서 대각선화되어 있다. 이는 각 서브루틴에서 알고리즘에 의해 수행되는 필드 연산들을 최소화하는 그리디 알고리즘을 제안한다. 각 서브루틴은 하나의 열 및 하나의 행에 의해 남은 행렬을 줄이는데, 즉 하나씩 n과 m을 줄인다. 이러한 점에서, 이는 일반적인 스파스 행렬에 대한 필드(F) 연산들을 감소시키는 것이 목적인 발견적(heuristic) 과정이다.
정의:
Mr ,d,n,m={A=(ai ,j)i∈[n],j∈[m]∈Fn ×m: for all 1≤i≤n: |{j∈[m-d]: aij≠0}|≤r}
상수 d를 포함하는 행렬의 이러한 형태는 랜덤 코딩에 대응하고, 이에 따라 A·x=y를 풀이하는 고속 알고리즘을 개발하는 것이 중요하다. 이하에서, r=2에 대한 O(n) 복잡도의 솔루션이 있는 것이 보여질 것이다.
- (In ×n+ x·E'p ,q,n) 형태의 행렬의 좌측 곱셈은 하나의 행과 다른 행의 스칼라 곱을 더한 것과 등가이다.
보조 명제 1.
A=(ai ,j)i∈[n],j∈[m]∈Fn ×m, x∈F 및 p,q∈[n]에 대하여,
(ⅰ) i∈[n],j∈[m]에 대하여, bi ,ji,p·aq ,ji,p는 크로네커(Kronecker) δ)일 때,
E'p ,q,n·A=B=(bi ,j)i∈[n],j∈[m]를 만족한다.
즉, B는 A의 q 행과 일치하는 p행을 제외한 행들이 모두 제로인 행렬이다.
(ⅱ) i∈[n],j∈[m]에 대하여, ci ,j= ai ,j + x·δi,p·aq ,ji,p는 크로네커 δ)일 때,
(In ×n+ x·E'p ,q,n)·A=C=(ci ,j)i∈[n],j∈[m]
즉, C는 A의 q행과 곱한 x와 A의 p 행의 합과 일치하는 q 행을 제외한 A의 행과 모든 행들이 일치하는 행렬이다.
"(Im ×m+ x·E'p ,q,m) 형태의 행렬의 우측 곱셈은 하나의 열과 다른 열의 스칼라 곱을 더한 것과 등가이다."
보조 명제 2.
A=(ai ,j)i∈[n],j∈[m]∈Fn ×m, x∈F 및 p,q∈[m]에 대하여,
(ⅰ) i∈[n],j∈[m]에 대하여 bi ,jj,q·ai ,p일 때,
A·E'p ,q,m=B=(bi ,j)i∈[n],j∈[m]를 만족한다.
즉, B는 A의 p행과 일치하는 q열을 제외한 열들이 모두 제로인 행렬이다.
(ⅱ) i∈[n],j∈[m]에 대하여 ci ,j= ai ,j + x·δj,q·ai ,pi,p는 크로네커 δ)일 때,
A·(Im ×m+ x·E'p ,q,m)=C=(ci ,j)i∈[n],j∈[m]를 만족한다.
즉, C는 A의 q열과 곱한 x와 A의 q 열의 합과 일치하는 q 열을 제외한 A의 열들이 일치하는 행렬이다.
- 재배치 및 스왑 재배치 행렬
[n]에 따른 모든 재배치들의 집합은 아래와 같이 표시한다.
Sn={π: π:[n]→[n] 1:1}
π∈Sn일 때, Ord(π)=min{k≥1: πk=1} 이다.
F=Z2이라고 한다. π∈Sn에 대하여 관련된 재배치 행렬 P π,n=(aij)1≤i,j≤n∈Fn ×n는 아래에 의해서 정의된다.
(1) 모든 i,j∈[n]에 대하여, aij=1 ⇔ j=π(i)
(2) 모든 i,j∈[n]에 대하여, aijπ(i),j
(3) 모든 i,j∈[n]에 대하여, aij=1 ⇔ i=π-1(j)
(4) 모든 i,j∈[n]에 대하여, aiji,π-1(j)
(1) ⇔ (2) ⇔ (3) ⇔ (4)임을 알 수 있다.
주장 1.
π∈Sn 및 v=[v1,...,vn]T∈F 에 대하여, P π,n·v=[vπ(1),...,vπ(n)]T를 만족한다.
증명.
i∈[n]에 대하여, u=[u1,...,un]T= Pπ,n·v라고 하면,
ui=∑1≤j≤nδi,π-1(j)·vj = vπ(i)
주장 2.
π,σ∈Sn에 대하여, P σ,n·P π,n= P ποσ,n이고, 이는 P π,n -1= P π1,n을 내포한다.
증명.
v=[v1,...,vn]T∈Fn이고, u=[u1,...,un]T= Pπ,n·v 및 w=[w1,...,wn]T= P σ,n·u이라고 한다. 즉, w= P σ,n·P π,n ·v가 된다. 그러면, i∈[n]에 대하여, ui = vπ(i)가 되고, 이에 다라 k∈[n]에 대하여 wk=uσ(k) = vπ(σ(k))를 만족한다. 따라서, P σ,n·P π,n= P ποσ,n. ◆
주장 3.
A=(ai ,j)i∈[n],j∈[m]∈Fn ×m에 대하여, P π,n·A=B=(bi ,j)i∈[n],j∈[m] (i∈[n],j∈[m])일 때, bi ,j=aπ(i),j를 만족한다. 즉, 각 열의 π-재배치이다.
주장 4.
A=(ai ,j)i∈[n],j∈[m]∈Fn ×m에 대하여, A·P π,m=B=(bi ,j)i∈[n],j∈[m] (i∈[n],j∈[m])일 때, bi ,j=ai ,π(j)를 만족한다. 즉, 각 행의 π-재배치이다.
정의: p,q∈[n]에 대하여, 스왑 재배치 πp,q=π[p,q]∈Sn는 아래에 의해 정의된다.
πp,q(p)=q
πp,q(q)=p
모든 i∈[n] i≠p and i≠q에 대하여, πp,q(i)=i이다.
그리고, 스왑 재배치 행렬은 아래와 같이 정의된다.
P p ,q,n= P π[p,q],n
p=q일 때, P p ,q,n= In × n 를 만족한다. P p ,q,n과의 우측 곱셈은 p 및 q 행을 스위치한다. P p ,q,n과의 좌측 곱셈은 p 및 q 행을 스위치한다.
"정의: 기본 행렬(elementary matrix)"
p,q∈[n]에 대하여, p≠q and x∈F일 때, 아래를 정의한다.
Ep ,q,n,x = In ×n+ x·E'p ,q,n
상기 행렬과의 우측 곱셈은 q 행과 x의 곱을 p 행에 더하는 것에 해당한다. 상기 행렬과의 좌측 곱셈은 p 열과 x의 곱을 q 열에 더하는 것에 해당한다. p∈[n] and x∈F에 대하여, 아래를 정의한다.
Ep ,n,x = In ×n+ (x-1)·E'p ,p,n
상기 행렬과의 우측 곱셈은, 다른 모든 행들은 변경하지 않으면서, x에 의해 곱해진 p 행을 곱하는 것에 해당한다. 상기 행렬과의 좌측 곱셈은 다른 모든 열들은 변경하지 않으면서, x에 의해 곱해진 q 열을 곱하는 것에 해당한다. 이러한 기본 행렬의 형태는 현재 Z2 응용들에 관련이 있는 것이 아니라, 다른 응용들에 관련이 있다.
아래를 정의한다.
E* 0,n={Ep ,n,x:p∈[n], x∈F\{0}}
E* 1,n={Ep ,q,n,x:p,q∈[n], p≠q x∈F\{0}}
E* 2,n={ P p ,q,n:p,q∈[n], p≠q }
E* n= E* 0,n E* 1,nE* 2,n
E* n는 Fn ×n에서의 기본 행렬의 집합이라고 부른다.
- 기본 행렬의 역행렬은 같은 형태의 기본 행렬이다.
주장:
p,q∈[n] 및 p≠q에 대하여, x∈F\{0}일 때,
(ⅰ) Ep ,n,x -1= Ep ,n,x-1
(ⅱ) P p ,q,n -1= P p ,q,n
(ⅲ) Ep ,q,n,x -1= Ep ,q,n,-x
증명:
(ⅰ)는 명백하므로 증명을 생략한다. (ⅱ)는 주장 2로부터 유도되고, (ⅲ)은 아래로부터 유도된다.
(In ×n+ x·E'p ,q,n)·( In ×n- x·E'p ,q,n ) = In ×n+ x·E'p ,q,n - x·E'p ,q,n -x2·E'p,q,n·E'p ,q,n = In ×n
- 대각선화: 정의
k<min(n, m)에 대하여, Fn ×m의 k 유닛 대각 행렬 Ik ,n×m은 아래와 같이 정의된다.
모든 1≤i≤k에 대하여 [Ik ,n×m]ij=0이고, 모든 i∈[n], j∈[m]에 대하여 i≠j 또는 i>k일 때, [Ik ,n×m]ii=1이다.
A∈Fn ×m이라고 할 때, 일련의 행렬 E1,...,ENE* n 및 E'1,...,E'ME*m는 아래를 만족할 때, 대각선화 A라고 부른다.
일부 k가 k≤min(n,m)일 때, Ik ,n×m= EN·EN -1·...·E1·A·E'1·E'2·...·E'M
이는 A의 아래와 같은 분해와 등가이다.
A = E1 -1·...·EN -1 -1·EN -1·Ik ,n×m·E'M -1·E'M -1 -1·...·E'1 -1
- 대각선화 이론
모든 A∈Fn ×m에 대하여, 아래를 만족하는 E1,...,ENE* n 및 E'1,...,E'ME* m와 유일무이한 k가 존재한다. ◆
k=rank(A)이고, 이에 따라 k는 유일무이하다. 이러한 잘 알려진 명제는 산술 연산들의 수 및 N+M의 그리디-최소화를 제공하는 구성적 증명(construct proof)를 통해서 증명될 것이다.
- 주어진 괄호를 갖는 대각선화
K≥1에 대하여, θ1∈{0,1}이고, i∈{2,...,K}에 대하여 θii-1∈{0,1}인 경우, θ=(θ1,...,θK)를 괄호 시퀀스라고 부른다. A∈Fn ×m일 때, E1,...,ENE* n 및 E'1,...,E'ME* m는, 일부 k≤min(n,m)에 대하여 A를 대각선화하는 것으로 가정한다. 즉, 아래와 같다.
Ik ,n×m= EN·EN -1·...·E1·A·E'1·E'2·...·E'M
θ=(θ1,...,θM+N)가 θM+N=N를 만족하는 괄호 시퀀스라고 한다. θ-차수의 대각화 과정은, 괄호들이 아래 시퀀스가 되도록 하는 시퀀스 θ에 의해 결정되는 기본 행렬 E1,...,ENE* n 및 E'1,...,E'ME* m을 갖는 대각선화 과정으로 정의한다.
k∈[M+N]에 대하여, 아래를 만족한다.
Ak= Eθ(k)·Eθ(k)-1·...·E1·A·E'1·E'2·...·E'k -θ(k)
이는 k∈[M+N]에 대하여,
θkk-1=1일 때, Ak= Eθ(k)·Ak -1이고,
θkk-1=0일 때, Ak=Ak -1·E'k -θ(k)를 내포한다.
- 기본 행렬과의 단일 곱셈의 복잡도 및 대각선화의 복잡도
A=(ai ,j)i∈[n],j∈[m]∈Fn ×m일 때, i∈[n], j∈[m]에 대하여, 아래를 정의한다.
X(A,i)=|{j∈[m]: aij≠0}|
Y(A,j)=|{i∈[n]: aij≠0}|
Z(A,i,j)=max(X(A,i)-1 , 0)·max(Y(A,j)-1 , 0)
p,q∈[n], p≠q 및 x∈F\{0}일 때, 곱셈 Ep ,q,n,x·A의 복잡도는 아래와 같이 정의된다.
C(Ep ,q,n,x,A) = c1·(X(A,q)-1)
이때, c1>0은 하나의 스칼라 곱셈 및 하나의 스칼라 덧셈의 복잡도를 반영하는 상수이다. Ep ,q,n,x와의 우측 곱셈이 q 행과 x의 곱을 p 행과 더하는 것에 해당하는 점을 복귀한다. F=Z2의 경우에서, 상기 곱셈은 관련되지 않고, 따라서 c1은 F에 의존한다. 상기 복잡도가 c1·X(A,p)이 아니라 c1·(X(A,p)-1)로 정의되는 것은 본 알고리즘에서, 하나의 행의 스칼라 곱을 다른 것에 더할 때, 선두가 1인 열에서 계산할 필요 없이 소거(cancelation)가 가능하기 때문이다. 마찬가지로, 곱셈 A·Ep,q,n,x의 복잡도는 아래와 같이 정의된다.
C(A,Ep ,q,n,x) = c1·(Y(A,p)-1)
상기 행렬과의 좌측 곱셈은 p 열과 x의 곱을 q 열에 더하는 것에 해당하는 점을 복귀한다. p∈[n] 및 x∈F\{0}일 때, 곱셈 Ep ,n,x·A의 복잡도는 아래와 같이 정의된다.
C(Ep ,n,x,A) = c0·X(A,p)
이 때, c0>0는 하나의 스칼라 곱셈의 복잡도를 반영한다. 마찬가지로 곱셈 A·Ep,n,x의 복잡도는 아래와 같이 정의된다.
C(Ep ,n,x,A) = c0·Y(A,p)
p,q∈[n] 및 p≠q일 때, 곱셈 P p ,q,n·A 및 A· P p ,q,n의 복잡도는 아래와 같이 정의된다.
C(P p ,q,n,A) = C(A, P p ,q,n) = c2
이 때, c0>0는 상수이다.
- 대각선화의 복잡도
A∈Fn ×m일 때, E1,...,ENE* n 및 E'1,...,E'ME* m 는, 일부 k≤min(n,m)에 대하여 A를 대각선화하는 것으로 가정한다. 즉, 아래와 같다.
Ik ,n×m= EN·EN -1·...·E1·A·E'1·E'2·...·E'M
θ=(θ1,...,θM+N)가 θM+N=N를 만족하는 괄호 시퀀스라고 한다. E1,...,ENE* n과 E'1,...,E'ME* m 및 θ에 대응하는 대각선화 과정의 복잡도는 아래와 같이 정의된다
C=C1+...+CM +N
이때, C1,...,CM +N는 후술하는 바와 같이 정의된다. k∈[M+N]에 대하여, 이전처럼 아래가 정의된다.
Ak= Eθ(k)·Eθ(k)-1·...·E1·A·E'1·E'2·...·E'k -θ(k)
k∈[M+N]에 대하여, θkk-1=1이면 Ak= Eθ(k)·Ak - 1를 만족하고, Ck=C(Eθ(k),Ak -1)라고 정의되고, θkk-1=0이면 Ak=Ak -1·E'k -θ(k)를 만족하고, Ck=C(Ak -1, Eθ(k))라고 정의된다.
- k-유닛 행렬
정의:
A∈Fn ×m 및 min(m,n)≥k≥1라고 한다. i≤k 또는 j≤k를 만족하고, 모든 (i,j)∈[n]×[m]에 대하여 [A]i,jij일 때, A는 k-유닛 행렬이라고 부른다. 처음 k 행들 및 처음 k 열들은 모두가 1인 대각선상을 제외하고 모두 제로인 것을 의미한다.
- 지네릭(generic) 그리디 대각선화 알고리즘 및 대각선화 이론의 증명
다음의 알고리즘은 밀도가 희박한 행렬에 대해서 효과적이다. 추후 설명될 이러한 행렬의 변형은 본 발명의 행렬의 조합에 특히 효과적일 수 있다. 본 발명의 조합된 인코딩 행렬을 위해서 설계된 알고리즘은 이러한 지네릭 알고리즘으로부터 유래될 수 있다. A∈Fn ×m가 제로 행렬이 아닐 때, A는 다음의 알고리즘의 입력이 된다. 알고리즘의 출력은 일부 K≤min(n,m)에 대하여 A를 대각화하는 E1,...,ENE* n 및 E'1,...,E'ME* m가 된다. 즉, 아래와 같다.
IK ,n×m= EN·EN -1·...·E1·A·E'1·E'2·...·E'M
상기 알고리즘의 부산물은 θM+N=N를 만족시키는 괄호 시퀀스 θ=(θ1,...,θM+N)이며, 이는 상기 알고리즘에 의해 실행된 대각선화 과정에 대응한다.
상기 알고리즘은 K≤min(n,m) 서브루틴들에 의해 실행된다. 상기 알고리즘의 k-서브루틴(1≤k≤ min(n,m))의 입력이 B1=A를 만족하는 행렬 Bk인 것은 귀납적으로 성립하고, k>1에 대하여 Bk는 (k-1)-유닛 행렬이고, k-서브루틴의 입력은 아래를 만족하는 E1,...,EN (k)E* n and E'1,...,E'M (k)E* m를 포함한다.
Bk= EN (k)·EN (k)-1·...·E1·A·E'1·E'2·...·E'M (k)
Bk=Ik -1,n×m이면, 상기 알고리즘은 종료되고, 그 출력은 k-서브루틴의 입력이 된다. 그렇지 않으면, k-서브루틴은 k-유닛 행렬이고 다음 루틴의 입력인 행렬 Bk + 1를 계산한다. 상기 알고리즘의 k-서브루틴의 입력은 모든 i∈[n], j∈[m]에 대하여 아래 값들을 포함하는 것은 귀납적으로 성립한다.
X(Bk,i), Y(Bk,j)
그리고, [Bk]i,j≠0일 때, 그 값은 [Bk]i,j≠0이다. 이를 저장하기 위해 필요한 추가적인 메모리는 M(Bk)이고, 아래와 같이 정의된다.
M1(Bk)={ X(Bk,i), Y(Bk,j): i∈[n], j∈[m] }
M2(Bk) ={ Z(Bk,i,j) : i∈[n], j∈[m] and [Bk]i,j≠0}
M(Bk)= M1(Bk)∪M2(Bk)
M(Bk)를 저장하기 위해 필요한 메모리 크기는 Bk의 영이 아닌 엔트리들을 저장하는데 필요한 메모리 크기에 비례한다. 상기 알고리즘의 k-서브루틴은, [Bk]i,j≠0이고 Z(A,i,j)가 최소가 되는 좌표 (i,j)를 나열하는 것에 의해서 출발한다. 즉, min(M2(Bk))를 구하고, 아래 집합을 형성한다.
M3(Bk) ={(i,j): k≤i≤n, k≤ j≤m and Z(Bk,i,j) = min(M2(Bk))}
다음 k-서브루틴은 X(Bk,i)+Y(Bk,j)가 최대가 되는 (i*,j*)∈M3(Bk)를 선택한다. 재배치 스왑 기본 행렬은 (i*,j*) to (k,k)로 이동시키는 것으로 구현될 수 있다. 이것은 (필요한 경우) 아래 수식의 계산을 통해 수행된다.
Bk ,1= P k ,i*,n·Bk·P k ,j*,n
(k= i*이면, P k ,i*,n=In ×n이므로 상기 곱셈은 불필요하며, k=j*이면, P k ,j*,n=In ×n 이므로 상기 곱셈은 불필요하다) (k, k)는 (i*,j*)를 대신하여 (k,k)∈M3(Bk ,1)이며, X(Bk ,1,k)+Y(Bk ,1,k)는 (i,j)∈M3(Bk ,1)에 대하여 X(Bk ,1,i)+Y(Bk ,1,j)의 최대값이다. 이 시점에서, 상기 알고리즘은 X( , ), Y( , ), Z( , )를 갱신한다. 아래 수식들이 성립한다.
1) X(Bk ,1,k)=X(Bk,i*)
2) X(Bk ,1,i*)=X(Bk,k)
3) 모든 i∈[n], i≠i* 및 i≠k에 대하여, X(Bk ,1,i)=X(Bk,i)
4) Y(Bk ,1,k)=Y(Bk,j*)
5) Y(Bk ,1,j*)=Y(Bk,k)
6) 모든 j∈[m], j≠j* 및 j≠k에 대하여, Y(Bk ,1,j)=Y(Bk,J)
이에 따라 Z는 그 정의에 따라 i*와 k 행 및 j*와 k 열을 스왑시킴으로써 갱신된다.
x=([B'k]k,k)-1이라고 한다. (F=Z2일 때 항상 해당되는) x=1이면 Bk ,2=Bk ,1이다. 그렇지 않으면, k 행과 x를 곱하고, 기본 행렬의 대응하는 곱을 계산한다:
Bk ,2 =Ek ,n,x·Bk ,1
X(Bk ,2,k)=X(Bk,i*) 및 Y(Bk ,2,k)=Y(Bk,j*)이 성립한다. [Bk ,2]k,k=1이다. X(Bk,2,k)=Y(Bk,2,k)=1라면, k-단계는 여기서 종료하고 Bk +1= Bk ,2가 성립한다. 만약 이와 같지 않다고 가정하면, 예컨대 X(Bk ,2,k)>1를 내포하는 X(Bk ,2,k)≥Y(Bk ,2,k)가 성립한다고 가정하자. 표기를 단순하게 하기 위해서, B=(bij=b(i,j))i∈[n],j∈[m]=Bk ,2라고 한다. d=X(B,k)-1=X(Bk,i*)-1 (B는 k-유닛 행렬)는 bkk를 제외하고 k B-행에서 영이 아닌 원소들의 수가 된다. 즉, bk ,j(l)≠0이고, l∈[d]에 대하여 bkk를 제외한 k-행의 나머지 전부는 영인 것을 만족하는 k<j(1)<j(2)...<j(d)≤m가 존재한다. 또한, k-열의 처음 k-1 원소들은 영이다. k-서브루틴은 이제 E* 1,n={Ep ,q,n,x} 형태의 d 기본 행렬과의 좌측 곱셈을 k 행의 영에 적용할 수 있다. 즉, l∈[d]에 대하여, 엔트리 bk,j(l)≠0를 만족한다. 따라서 Bk , 3는 아래와 같이 계산된다.
(ⅰ) Bk ,3= Bk ,2·Ek ,j(1),n,-b(k,j(l))· Ek ,j(2),n,-b(k,j(2))·...· Ek ,j(d),n,-b(k,j(d))
Ep ,q,n,x과의 좌측 곱셈은 q 행과 x의 곱을 p 행에 더하는 것에 해당하고, 상기 행렬의 우측 곱셈은 p 열과 x의 곱을 q 열에 더하는 것에 해당하는 점을 복귀한다.
Ek ,j(2),n,-b(k,j(2))( l∈[d] )과의 각 곱셈은 B의 k 열의 스칼라 곱을 영이 아닌 엔트리를 갖는 k 행과 교차하는 B-열들 중 각각에 더하는 것과 등가이다. 이는 이러한 열들에서 k 원소를 소거하는 방식으로 수행될 수 있다. 이러한 과정에 이어서, Bk ,3의 k 행에서 영이 아닌 원소는 [Bk ,3]k,k이다. Ek ,j(r),n,-b(k,j(r))과의 각 곱셈은 처음 (k-1)-엔트리들이 영인 열을 같은 형태의 다른 열에 더하는 것을 내포한다. 그 결과, Bk ,3의 각 열의 처음 (k-1)-엔트리들은 영이다. k<j(1)<j(2)...<j(d)≤m이기 때문에, Bk ,3의 각 행의 처음 (k-1)-엔트리들도 역시 영이다. 따라서, Bk , 3는 값이 1인 [Bk ,3]k, k 를 제외하고, k-행이 모두 영인 k-유닛 행렬이다.
이 시점에서, Y(Bk ,3,k)=Y(Bk,j*) 및 X(Bk ,3,k)=1가 성립한다. Y(Bk ,3,k) =1이면, k-단계는 종료하고, Bk +1= Bk ,3이다. 이와 달리, Y(Bk ,3,k)>1라고 가정한다. 표기를 단순하게 하기 위해서 C=(cij=c(i,j))i∈[n],j∈[m]=Bk , 3라고 한다. ckk를 제외하고 C의 k 열에서 정확하게 d'=Y(C,k)-1의 영이 아닌 원소들이 존재한다. 즉, ck ,i(l) ≠0이고, l∈[d']에 대하여 ckk를 제외하고 k-열의 나머지 모두가 영인 것을 만족하는 k<i(1)<i(2)...<i(d')≤n가 존재한다. k-서브루틴은 이제 E* 1,n 형태의 d' 기본 행렬과의 우측 곱셈을, 아래의 방식으로, k 열의 영((k,k) 엔트리 제외)에 적용할 수 있다.
(ⅱ) Bk ,4= Ei (1),k,n,-c(i(l))· Ei (2),k,n,-c(i(2))·...· E i( d' ),k,n,-c(i( d' ))·Bk ,3
여기서, 어떠한 산술 필드 연산도 없으며, 실질적으로 (ⅱ)의 상대적 복잡도는 미미함을 알 수 있다. 복잡도와 관련하여 중요한 점은 k-서브루틴의 모든 복잡도의 대부분은 (ⅰ)에 있다는 점이다. Z(Bk,i*,j*)=Z(Bk ,2,k,k)에서 곱셈 및 덧셈은 (ⅰ)과 관련된다. 이는 (i)에서 k-열을 다른 열과 X(Bk ,2,k)-1번 더하고, 각각에서 Y(Bk ,2,k)-1 곱셈과 덧셈을 수행하기 때문이다. 따라서, (i*,j*)를 고르는데 있어서 중요한 것은 k-서브루틴의 벌크 복잡도의 그리디 최소화이다. 또한, Z(Bk,i*,j*)- X(Bk ,1,k)-Y(Bk ,1,k)+2가, (ⅰ) 및 (ⅱ)를 통해서 Bk에 더해진 영이 아닌 엔트리들의 수에 대한 상한이다. 이 단계에서, 상기 알고리즘은, j(l)≠0이고, l∈[d]애 대하여, 아래와 같이 X( , ), Y( , ), Z( , )를 갱신한다.
1) Y(Bk +1,k)=1
2) X(Bk +1,k)=1
3) Y(Bk +1,j(l))=Y(Bk ,1, j(l)) - 1 for l∈[d]
4) X(Bk +1,i(l))=X(Bk ,1, i(l)) - 1 for l∈[d']
그리고, Z(,)도 이에 따라 갱신된다. X(Bk ,2,k)≥Y(Bk ,2,k)라는 가정은 (ⅰ)에서 k-라인의 제거로서 k 서브루틴을 출발하게 했다. 마찬가지로, X(Bk ,2,k)≤Y(Bk,2,k)라면, (ⅰ)에서 k-열의 제거로서 k 서브루틴을 출발할 수 있으며, 그러면 k 행을 제거할 수 있다.
상기 알고리즘은, 일부 k<min(n, m)에 대하여, Bk=Ik -1,n×m가 성립하는 경우, 종ㄹ한다. 그렇지 않으면, k=min(n, m)에서 종료한다.
- 대각선화가 제공되는 경우, A·x=y를 풀이하는 알고리즘
A∈Fn ×m\{0} 및 y∈Fn일 때, x∈Fm에 대하여 선형 방적식들의 시스템 A·x=y를 풀이한다고 가정한다. 첫 번째 단계는 일부 some k≤min(n,m)에 대하여 A를 대각선화하는 E1,...,ENE* n 및 E'1,...,E'ME* m를 찾는 것이다. 즉, 아래와 같다.
(1) Ik ,n×m= EN·EN -1·...·E1·A·E'1·E'2·...·E'M.
k<min(n,m)의 경우, 상기 알고리즘은 실패를 선언한다. 그러나 일부 흔치 않은 경우들에서, 솔루션이 원래의 방정식 A·x=y을 벗어날 수도 있고, 심지어 min(n,m)-k이 작은 경우, 임시방편의 정정과 같이 실패 선언에 대한 대안이 존재할 수 있다. 따라서, 이후 A가 풀-랭크인 것과 등가인 k=min(n,m)를 가정한다. (1)로부터 아래가 유도된다.
(2) A= E1 -1·E2 -1·...·EN -1 -1·EN -2·Ik ,n×m ·E'M -1·E'M -1 -1·...·E'2 -1·E'1 -1
따라서, 아래를 풀이하는 것이 요구되고,
(3) y = E1 -1·E2 -1·...·EN -1 -1·EN -2·Ik ,n×m ·E'M -1·E'M -1 -1·...·E'2 -1·E'1 -1·x
이는 아래와 등가이다.
(4) z≡ EN·EN -1·...·E1·y = Ik ,n×m ·(E'M -1·E'M -1 -1·...·E'2 -1·E'1 -1·x)
(5) u=E'M -1·E'M -1 -1·...·E'2 -1·E'1 -1·x
따라서, A·x=y를 풀이하는 것과 아래 식을 풀이하는 것은 등가이다.
(6) z=Ik ,n×m·u
z는 N개의 성공적인 좌표 교환 / 곱셈 / 덧셈 및 필드 F에서의 곱셈들로 부터 계산된 다. 이는 A의 대각선화와 동시에 수행될 수 있다. 동일-차수이고 부족 결정된 경우에서, m>n일 때, 아래 수식은 z=Ik ,n×m·u를 풀이한다.
u=[y,0Fm-n]T∈Fm
과잉결정된 경우에서, m<n일 때, u∈Fm가 z= Ik ,n×m·u를 풀이하는 것은, 모든 n≥i>m에 대하여 zi=0가 성립하고 모든 i∈[m]에 대하여 ui=zi가 성립하는 것과 필요충분 조건이다. 최종적으로, 수식 z=Ik ,n×m·u가 솔루션을 가지면, 원래의 수식 A·x=y는 솔루션을 가진다. 이는, 이와 경우 아래를 만족하는 (5)로부터 유도된다.
x=E'1·E'2·...·E'M·u.
부족 결정된 경우에서, m>n일 때, A가 풀 랭크인 경우 m>n 솔루션이 존재하고, 과잉 결정된 경우에서, m<n일 때 A가 풀 랭크인 경우 솔루션이 존재하는 것은, y가 A의 열들에 의해 걸쳐있는 서브스페이스에 있는 것과 필요충분 조건이다.
[조합 #2 행렬의 대각선화 및 O(n) 최악 복잡도로서 A·x=y의 풀이 (d=0 일 때의 증명)]
증명하기 위하여, 우선 A=(aij)i∈[n],j∈[m]∈Fn ×m는 각 행이 2개 이하의 1을 갖는 것으로 한다. 즉, d=0일 때, A∈M2 ,d,n,m이다. m>n인 것은 당연하다. 제안된 알고리즘은 전술한 그리디 알고리즘의 변형이다. 상기 그리디 알고리즘에서, k-서브루틴에서 X(Bk ,2,k)≤Y(Bk ,2,k)이면, 먼저 (ⅰ)에서 k-열을 제거함으로써 k-서브루틴을 수행하고, 이후 k 행을 제거하는 사실에 의해 특징된다.
d≥0라고 한다. 다음 섹션에서, A∈M2 ,d인 일반적인 경우에 대한 증명은 복잡도의 d 스케일링, 즉 O(n·(d+1))-복잡도를 내포할 것이다. M2 ,d,n,m에서 모든 행렬들은 A∈M2 ,0을 선택하고, 이를 d 랜덤 열들에 더함으로써 형성될 수 있다(즉, 엔트리별 각 F-스칼라에 대한 1/|F|로서 독립 균등 분포된 베르누이(Bernoulli)). 특정 시점에서 A의 랭크가 n-d 아래로 떨어지는 경우, 상기 알고리즘은 중단된다.
선두의 영이 아닌 엔트리의 위치가 같은 행과 다른 행의 곱을 계산하고(이러한 2개의 행 각각은 최대 2개의 영이 아닌 엔트리들을 가진다), 그 결과도 최대 2개의 영이 아닌 엔트리를 갖는 행이다. ei가 Fm의 i 유닛 행일 때, 아래와 같은 2개 행을 정의한다.
u=ek + x·ei, v=y·ek + z·ej (1≤k<i,j≤m)
그리고, 아래를 만족한다.
v - y·u = z·ej - x·y·ei
상기 알고리즘의 단계들을 설명하기 전에, k 서브루틴의 시작에 있어서 Bk의 각 행은 2개 이하의 영이 아닌 엔트리 가진다는 귀납적 추론에서 출발한다. 이러한 추론은 k+1까지 계속되는 것이 보여질 것이다. 각 서브루틴의 시작에 있어서, 최소 개수의 영이 아닌 원소들을 갖는 인덱스 j*∈{k,k+1,...,m}의 영이 아닌 열을 고려한다(j* 열에서 1이 유일할 확률이 높다). i*를 [Bk]i*,j*≠0 조건에서 최소 개수의 영이 아닌 엔트리들을 갖는 행이라고 한다. 아래를 정의한다.
Bk ,1= P k ,i*,n·Bk·P k ,j*,n
x=([B'k]k,k)-1일 때, 아래를 계산한다.
Bk ,2 =Ek ,n,x·Bk ,1
그 결과, i* 행은 k 행과 바뀌고, j* 열은 k 열과 교환된다. 다음으로, Y(Bk,2,k)=Y(Bk,j*)=1이면, k 서브루틴은 (ⅰ)에서와 같이 k 행을 제거함으로써 출발한다. 이와 달리, Y(Bk ,2,k)=Y(Bk,j*)>1이면, k 서브루틴은 (ⅱ)에서와 같이 k 열을 제거함으로써 출발한다. 양 경우에서, (ⅰ) 및 (ⅱ)가 수행된 이후, k 행에서 하나의 영이 아닌 엔트리가 존재하고(실제로 (k, k) 엔트리가 1), k 열에서 하나의 영이 아닌 엔트리가 존재한다. 게다가, 그 결과인 행렬 Bk + 1는 각 행에 2개 이하의 영이 아닌 엔트리들을 가진다. 또한, 영이 아닌 엔트리의 총 개수는 상기 서브루틴에의해 증가될 수 없다. Y(Bk,j*)-1가 k-서브루틴에서 필드 연산의 개수에 대한 상한이다. 이는, X(Bk,i*)-1≤1 및 이에 따른 Y(Bk,j*)-1≥ (Y(Bk,j*)-1)·(X(Bk,i*)-1)= Z(Bk,i*,j*)이기 때문이다. Z(Bk,i*,j*)이 k-서브루틴에서 필드 연산의 개수임을 복귀한다. 또한, Y(Bk,j*)+3는 k-서브루틴에서 기본 행렬과의 곱셈의 개수의 상한이다.
Ck=([Bk]i,j) k≤i≤n,k≤j≤m를 정의한다. 상기 정지(stopping) 조건으로부터, Ck에서 영이 아닌 열의 수가 n-k-d+1 아래이면 알고리즘은 중단되는 것이 유도된다. 또한 상기와 같이, Ck는 각 행에 2개 이하의 영이 아닌 엔트리들을 가진다. Ck는 최대 2(n-k+1)개의 영이 아닌 엔트리들을 가지는 것이 유도된다. 영이 아닌 컬럼들의 관련 인덱스들의 집합은 아래와 같다.
Jk={j∈{k,...,m}: Bk의 j 열은 영이 아닌 열(즉, Y(Bk,j)>0)}
아래가 성립한다.
2(n-k+1)≥∑j∈ JkY(Bk,j)
k-서브루틴이 시작될 때까지, 상기 알고리즘이 중단되지 않는다면, 아래가 성립한다.
|Jk|≥n-k-d+1
j*∈Jk에 대하여, Y(Bk,j)를 최소화하는 것은 아래를 만족한다.
Y(Bk,j*) ≤ 2(n-k+1)/(n-k-d+1)
≤ 2(n-k)/(n-k-d)
≤ 2/(1 -d/(n-k))
따라서, n-k≥2d일 때, Y(Bk,j*) ≤ 4가 성립한다.
n-2d<k≤n일 때, 나머지 2d 행들의 대각선화가 남는다. Bk (n-2d<k≤n)는 2개이하의 영이 아닌 엔트리들을 가지고, Y(Bk,j*)-1≤2d는 k-서브루틴에서 필드 연산의 수의 상한이며, Y(Bk,j*)+3≤2d+3는 k-서브루틴에서 기본 행렬과의 곱셈의 수에 대한 상한이다.
필드 연산의 수는 대각선화 과정의 말미에서 3·n + 4d2에 의해 위로 경계되된다. 아래의 대각선화 조건을 만족하는 E1,...,ENE* n 및 E'1,...,E'ME* m를 찾을 수 있다.
A= E1 -1·E2 -1·...·EN -1 -1·EN -2·Ik ,n×m ·E'M -1·E'M -1 -1·...·E'2 -1·E'1 -1
N+M≤ 6·n + 4d2+ 6d가 성립한다. 여기서 상한은 충분한 여유가 있다.
(참고: ...(A+ Ek ,n,x)-1=(A·(I+ A-1·Ek ,n,x))-1...)
- d>0일 때, 일반적인 경우
d>0라고 한다. B=(bi ,j)i∈[n],j∈[m]∈Fn ×m, i∈[n] 및 j∈[m]에 대하여 아래를 정의한다.
Xd(B,i)=|{j∈[m-d]: bij≠0}|
Y(B,j)=|{i∈[n]: bij≠0}|
Zd(B,i,j)=max(Xd(B,i)-1 , 0)·max(Y(A,j)-1 , 0)
A∈M2 ,d,n,m라고 하고, m>n은 당연하다. 제안된 알고리즘은 상기 그리디 알고리즘의 변형이다. 특정 시점에서 A의 랭크가 풀 랭크가 아니면 상기 알고리즘은 종료한다.
W={w=[w1,...,wm]∈Fm: wi=0 for i∈[m-d]}라고 한다. 중요한 점은 선두의 영이 아닌 엔트리의 위치가 같은 행과 다른 행의 곱을 계산하고(이러한 2개의 행은 최대 2개의 영이 아닌 엔트리를 처음 m-d 좌표내에서 가진다), 그 결과도 최대 2개의 영이아닌 엔트리들을 처음 m-d 좌표내에서 가진다. ei가 Fm의 i 유닛 행일 때, 아래와 같은 2개 행을 정의한다.
u=ek + x·ei +w, v=y·ek + z·ej +w'(1≤k<i,j≤m, w,w'∈W)
그리고 아래를 만족한다.
v - y·u = z·ej - x·y·ei + (w'-y·w) ( (w'-y·w)∈W )
여기서도 역시, 알고리즘의 단계들을 설명하기 전에, k 서브루틴의 시작에 있어서 Bk의 각 행은 처음 m-d 좌표내에서 2개 이하의 영이 아닌 엔트리들을 가진다는 귀납적 추론에서 출발한다. 상기 추론은 k+1까지 계속되는 것이 보여질 것이다. 각 서브루틴의 시작에 있어서, 최소 개수의 영이 아닌 원소들을 갖는 인덱스 j*∈{k,k+1,...,m-d}의 영이 아닌 열을 고려한다. i*를 [Bk]i*,j*≠0 조건에서 처음 m-d 좌표내에서 최소 개수의 영이 아닌 엔트리들을 갖는 행이라고 한다. 아래를 정의한다.
Bk ,1= P k ,i*,n·Bk·P k ,j*,n
x=([B'k]k,k)-1일 때, 아래를 계산한다.
Bk ,2 =Ek ,n,x·Bk ,1
그 결과, i* 행은 k 행과 바뀌고, j* 열은 k 열과 바뀐다. 다음으로, Yd(Bk,2,k)=Yd(Bk,j*)=1이면, k 서브루틴은 (ⅰ)에서와 같이 k 행을 제거함으로써 출발한다(Yd(Bk ,2,k)=Yd(Bk,j*)≤2일 때도 같다). 그렇지 않고, Yd(Bk ,2,k)=Yd(Bk,j*)>1이면, k 서브루틴은 (ⅱ)에서와 같이 k 열을 제거함으로써 출발한다. 양 경우에서, (ⅰ) 및 (ⅱ)가 수행된 이후,k 행에 하나의 영이 아닌 엔트리가 존재하고, k 열에서 하나의 영이 아닌 엔트리가 존재한다. 게다가, 그 결과인 행렬 Bk + 1는 각 행에 2개 이하의 영이 아닌 엔트리를 가진다. 또한, 영이 아닌 엔트리의 총 개수는 상기 서브루틴에 의해 증가될 수 없다. d·Y(Bk,j*)가 k-서브루틴에서 필드 연산의 수의 상한이고, d·Yd(Bk,j*)+4가 k-서브루틴에서 기본 행렬과의 곱셈의 개수의 상한이다.
Ck=([Bk]i,j) k≤i≤n,k≤j≤m-d를 정의한다. d=0인 경와 상기 정의는 다르지 않다. 상기 정지 조건으로부터, Ck에서 영이 아닌 열의 수가 n-k-d+1 아래이면 알고리즘이 중단되는 것이 유도된다. 또한, Ck는 각 행에 2개 이하의 영이 아닌 엔트리들을 가진다. Ck는 최대 2(n-k+1)개의 영이 아닌 엔트리들을 가지는 것이 유도된다. 그렇게 함으로써, 영이 아닌 컬럼들의 관련 인덱스들의 집합은 아래와 같다.
Jk={j∈{k,...,m}: Bk의 j 열은 영이 아닌 열(즉, Y(Bk,j)>0)}
아래가 성립한다.
2(n-k+1)≥∑j∈ JkY(Bk,j)
k-서브루틴이 시작될 때까지, 상기 알고리즘이 중단되지 않는다면, 아래가 성립한다.
|Jk|≥n-k-d+1
j*∈Jk에 대하여, Y(Bk,j)를 최소화하는 것은 아래를 만족한다.
Y(Bk,j*) ≤ 2(n-k+1)/(n-k-d+1)
≤ 2(n-k)/(n-k-d)
≤ 2/(1 -d/(n-k))
따라서, n-k≥2d일 때, Y(Bk,j*) ≤ 4가 성립한다.
n-2d<k≤n일 때, 나머지 2d 행들의 대각선화가 남는다. Bk (n-2d<k≤n)는 2개이하의 영이 아닌 엔트리들을 처음 m-d 좌표내에서 가진다. 또한 상기 d·2d는 k-서브루틴에서 필드 연산의 수의 상한이며, d·2d+4는 k-서브루틴에서 기본 행렬과의 곱셈의 수에 대한 상한이다.
필드 연산의 수는 대각선화 과정의 말미에서 4·d·n + 4·d3에 의해 위로 경계된다. 아래의 대각선화 조건을 만족하는 E1,...,ENE* n 및 E'1,...,E'ME* m를 찾을 수 있다.
A= E1 -1·E2 -1·...·EN -1 -1·EN -2·Ik ,n×m ·E'M -1·E'M -1 -1·...·E'2 -1·E'1 -1
N+M≤ (4·d +4)·n + 4·d3 +8d가 성립한다. 여기서 상한은 충분한 여유가 있다.
- 1차 방정식 풀이의 더 큰 행렬로의 확장
A∈Fn ×m일 때, 일부 k<min(n,m)=L에 대하여, 일련의 행렬 E1,...,ENE* n and E'1,...,E'ME* m는 A를 대각선화 시킨다. 즉, 아래와 같다.
Ik ,n×m= EN·EN -1·...·E1·A·E'1·E'2·...·E'M
또는, 등가적으로 아래와 같다.
A= E1 -1·E2 -1·...·EN -1 -1·EN -1·Ik ,n×m ·E'M -1·E'M -1 -1·...·E'2 -1·E'1 -1.
B∈Fn ×q일 때, m+q개 변수를 가지는 n개 방정식의 집합은 아래와 같다.
z=[A,B]·[x, y]T
[E1 -1·E2 -1·...·EN -1 -1·EN -1·Ik ,n×m ·E'M -1·E'M -1 -1·...·E'2 -1·E'1 -1·x +B·y]
[SC 및 BEC의 이원성에 대한 부연 및 증명]
- 도입
n>s>t>0이라고 한다. n-s 정보 비트들을 포함하고 1-δ의 성공 확률로서 스턱 비트들을 처리하는 능력을 갖는 길이 n의 코드 블록을 갖는 모든 SC 선형 코드는 n-s 정보 비트를 포함하고 1-δ의 성공 확률로서 t 에러를 정정하는 능력을 가지는 BEC 코드와 이중성이 있음을 증명한다.
- 도입 정의
α⊆[n]에 대하여, [n]에 관해서 α의 여집합은 αc = [n]\α로 표기한다. n≥s,k≥1에 대하여, 아래를 정의한다.
Ω(n,k)={α: α={α(1),...,α(k)}⊆[n], α(1)<...<α(k)}
G∈Fn ×n 및 α∈Ω(n,k)에 대하여, Gα,s=(gα(i),j)i∈[k],j∈[s]를 정의한다.
v=[v1,...,vn]∈Fn 및 α∈Ω(n,k)에 대하여, vα=[vα(1),...,vα(k)]를 정의한다.
- SC 인코더 행렬의 집합에 대한 정의
F=Z2, n>s>t≥1, δ>0라고 한다. 우선 아래를 정의한다.
SC(n,s) = {G∈Fn ×n: G는 가역적이고 다음을 만족한다: G=[G1,G2]=(g,i,j)1≤i,j≤n =[G11, 0s×(n-s) ; G21 , I(n-s)×(n-s) ]}
다음으로, SC(n,s,t,δ)를 정의하는데, 이는 δ의 에러 확률 및 리던던시 (t, s)를 갖는 t개 스턱 비트들을 처리할 수 있는 SC 인코더 행렬 집합을 말한다. G1∈Fn ×s 및 G2∈Fn ×(n-s)를 만족하는 G=[G1,G2]∈Fn ×n가 있을 때, SC(n,s,t,δ)는, Gα,s가 풀 랭크가 아닐 균등한 확률(<δ)로서 α∈Ω(n,t)를 샘플할 때,행렬 G∈SC(n,s)의 집합이다.
- 소실 채널, 코드워드의 서브스페이스 및 이원성 이론
BEC의 매개변수는 좌표당 소실의 독립된 확률인 ε>0를 포함한다. 길이를 n으로 고정시키면, 벡터 u=[u1,...,un]T∈Fn를 전송하기 위해서, 모든 ui는 소실될 독립된 확률 ε를 가지고, 그에 따라, t∈[n]에 대하여 u의 t 좌표들보다 많이 소실될 확률 δ(t,ε)>0이 존재한다(t0를 양의 정수라고 하고, v=[v1,...,vn]T∈Fn 가 전송될 때, t0개 보다 많이 소실될 확률은 δ'보다 작다고 한다).
아래를 정의한다.
Vs={v=[v1,...,vn]∈Fn: vi=0 for all i∈[s]}.
가역인 G∈Fn ×n에 대하여, UG ,s={v·G-1: v∈Vs}.를 정의한다.
G1∈Fn ×s and G2∈Fn ×(n-s)를 만족할 때, 가역인 G=[G1,G2]∈Fn ×n를 구한다. u∈Fn에 대하여, u∈ UG ,s ⇔ v=u·G∈Vs ⇔ u·G1=01×s+가 성립한다. 따라서, G1은 코드 UG,s의 패리티 체크 행렬이다.
- 이원성(duality) 이론
G∈SC(n,s,t,δ), G=[G11, 0s×(n-s) ; G21 , I(n-s)×(n-s) ]∈Fn ×n인 G를 구한다. 즉 아래가 성립한다.
(ⅰ) n 비트의 블록에서 균등한 확률로서 랜덤하게 선택된 위치 α∈Ω(n,t)를 가지는 t개의 스턱 비트가 있는 경우, n-s 정보 비트들이 G와 관련된 SC 코드를 통해서 저장될 수 있을 확률 δ가 존재한다.
(ⅱ) 임의의 u∈UG .s가 상기 채널을 통해서 전송되는 경우, t개의 소실들과 x가 수신되고, u가 디코딩될 수 있는 확률 δ>0가 존재한다.
근본적인 보조 명제.
u=[u1,...,un]∈U 및 y=[y1,...,yn]∈U라고 한다. α⊆[n]가 |α|≤s를 만족하고, Gα,s가 풀 랭크이며, 모든 i∈αc 에 대하여 yi=ui일 때, y=u가 성립한다.
증명.
u,y∈U이므로, y·G1=u·G1=01×s가 성립한다. 아래 수식이 유도된다.
01×s=(y-u)·G1=(y-u)α·Gα,s
이제 Gα,s가 풀 랭크이고, |α|≤s이므로, (y-u)α=0가 성립한다. 따라서 모든 i∈α에 대하여 yi=ui가 성립한다. 따라서 y=u이다.
- 체계적인 코드를 제공하는 소실 채널 디코더 스킴
입력은 오프라인에서 이미 계산된 G21∈F(n-s)×s 및 G11 -1∈Fs ×s과 암호화되지 않은 정보 벡터인 v'=[vs +1,...,vn] ∈F1×(n-s)이다. v=[01×s,v']∈V라고 한다.
1. u= v·G- 1를 계산한다.
u= v·G-1= [01×s,v']· [G11 -1, 0s×(n-s) ; -G21·G11 -1, I(n-s)×(n-s) ] = [-v'·G21·G11 -1, v'] ∈F1×n
상기 계산은 낮은 복잡도로서 가능하고, 이는 체계적인 코드를 제공한다. 단계들을 아래와 같다.
(a) w' = -v'·G21 ∈Fs를 계산한다. 산술 복잡도는 (n-s)·s에 의해 위로 유계되나, 목적하는 밀도가 희박한 행렬의 활용으로 인해, w'은 O(n)의 복잡도로서 계산될 것이다.
(b) w = -v'·G21·G11 -1= w'·G11 -1+를 계산한다. 산술 복잡도는 s2에 의해 위로 유계된다. 밀도가 희박한 행렬에서, 상기 복잡도는 O(s)로 감소할 수 있다.
2. 출력은 u=[w,v']가 되고, u=[u1,...,un]∈Fn를 전송한다.
- 인코더 스킴
입력. 입력의 일부는 소실 채널을 통한 전송 벡터 u=[u1,...,un]∈Fn로부터 얻어진 수신된 벡터 x=[x1,...,xn]∈Fn이다. 입력의 다른 부분은 상기 G=[G1,G2]∈Fn ×n가 된다.
1) 소실은 카운트되고 그 인덱스들은 저장된다. α={α(1),...,α(t)}⊆[n] (α(1)<...<α(t))를 소실들의 인덱스들이라고 한다. t>t0이면, 디코딩은 u가 모호하지 않은 방식으로 계산될 수 없음을 이유로 종료된다. 가정에 따라, 사건(t>t0)의 확률이 δ'보다 작다. 이후부터 t≤ t0라고 가정한다.
2) 전술한 알고리즘(행렬-대각화를 위한 그리디 알고리즘)을 통해 행렬 Gα,s=(gα(i),j)i∈[t],j∈[s]를 대각화시킨다. 이 과정에서 Gα,s가 풀랭크가 아닌 경우, 디코딩은 u가 모호하지 않은 방식으로 계산될 수 없음을 이유로 종료된다. 상기 가정에 따라, 이러한 사건의 확률은 δ보다 작다. 이후부터 Gα,s는 풀 랭크라고 가정한다.
3) w1 ×s = uαc·Gαc, s를 계산한다. 산술 복잡도는 (n-s)·s에 의해 위로 유계되나, 목적하는 밀도가 희박한 행렬의 활용으로 인해, w'는 O(n)의 복잡도로서 계산될 것이다.
4) 이제 -w= yα·Gα, s가 성립한다. 아래의 가정하에서, t개의 변수를 갖는 1차 방정식의 집합은 단일 솔루션을 가진다.
(ⅰ) Gα,s는 풀 랭크이다.
(ⅱ) t<s
(ⅲ) uα는 상기 방정식의 집합을 만족한다.
각 행렬이 대각화된 방정식들의 집합을 풀이하는 전술한 알고리즘을 통해서, 상기 솔루션은 구할 수 있다. 1차 방정식들의 상기 집합에 대한 솔루션은 uα이며, 이는 수신측에서 u를 알수 있게 한다.
[노이즈 채널을 통하는 SC 알고리즘에 대한 부연]
- 서문
F=Z2, n>s>t이라고 한다. 알고리즘은 아래 행렬 G에의해 표현되는 코드에 기초한다.
G=[G1,G2]= (g,i,j)1≤i,j≤n = [G11, 0s×(n-s) ; G21 , I(n-s)×(n-s) ] ∈Fn ×n
G11∈Fs ×s이 가역일 때, 일부 예시에서 G11=Is ×s를 만족한다. 행렬 G의 역행렬은 아래와 같이 주어진다.
G-1=[G11 -1, 0s×(n-s) ; -G21·G11 -1, I(n-s)×(n-s) ] ∈Fn ×n
따라서, G11=Is ×s일 때, G-1=G이 성립한다.
채널에서 노이즈는 수신된 데이터 벡터가 메모리(NAND 플래시)에 저장된 이후에 유발된다. 이는 다른 ECC 해결책과 SC 해결책이 결합된 구조로 처리될 수 있다. 저장매체 노이즈 채널은 δ>0의 에러 확률 및 독립적인 좌표를 갖는 BSC(binary symmetric channel)이다. 문제의 매개변수는 블록 에러 확률의 상한인 작은 수인 ε12>0(예를 들면, ε1=10-15 ε2=10-20)을 포함한다.
k∈[n], i=1,2에 대하여, gi(w)=[w,G'k(w)]T(다른 것보다 위에 있는 하나의 컬럼 벡터를 의미)를 저장하고 디코딩의 블록 에러 확률이 εi로 한정될 때, 인코더 및 디코더가, 모든 w∈Fk에 대하여 G'k ,i∈Fd (k,i)×k에 대응하고 k/(d(k,i)+k) 비율을 갖는 쳬계적인 선형 코드들 제공한다고 가정한다. i=1인 채널은 BSC(δ) 채널이고, i=2인 채널은 다른 선행된 암호화가 없을 때, SC 채널과 BSC(δ)의 조합이다. 실제로, k=n-s에 대하여 G'k , 1를 사용하고, k=s에 대하여 G'k ,2를 이용하므로, 인덱스 k는 필수적이지 않고, 단지 현재 표현을 목적으로 필요하다. 따라서, 코드는 서브스페이스 Vk={(w, G'k(w)): w∈Fk}에 의해 표현될 수 있다.
따라서, 다음과 같이 SC 노이즈 채널 문제를 수식화할 수 있다. 즉, t(N>t≥0)개 인덱스들 α={α(1),...,α(t)}⊆[N] (α(1)<...<α(t))에 대하여, (vα(1),vα(2),..., vα(t))가 미리 정해진 조건하에서, 벡터 v=[v1,...,vN]∈FN를 통해 정보를 전달하는 것으로 수식화할 수 있다.
- 전송측 알고리즘
입력은 N>s>t≥1 (s는 N과 연관되어 선택된다)를 포함하고, 행렬 G1=(g,i,j)1≤i≤n,1≤j≤s∈Fn ×s, α={α(1),...,α(t)}⊆[n] ( α(1)<...<α(t)), (v'α(1), v'α(2), ..., v'α(t))∈Ft를 포함한다.
1) Vn -s⊆Fn -s는 전술한 BSC(δ) linear code일 때, 정보 + ECC 중에서 u=[u1, ..., un -s]∈Vn -s를 선택한다. G2·uT = uT가 성립하고, 아래를 정의한다.
Gα=(gα(i),j)i∈[t],j∈[s]
v'α=[v'α(1),v'α(2),...,v'α(t)]T
uα=[uα(1),uα(2),...,uα(t)]T.
2) 가능한 경우, Gα·w=v'α-uα를 만족하는 유일한 w∈Fs를 계산한다. 실패한 경우, 즉 Gα가 풀 랭크가 아닌 경우, 아래 (F)항목으로 이동하고, 그렇지 않으면 다음 단계를 계속한다. w를 찾는 복잡도는 단순하게 O(s3)가 된다. 목적하는 밀도가 희박한 G를 통해서 복잡도의 상한은 O(s2)일 수 있고, 일부 경우에서 O(s)까지 낮아질 수 있다.
3) G1·wT을 계산한다. 복잡도는 단순하게 s·(n-s)가 된다. 그러나 목적하는 밀도가 희박한 G를 통해서, w'은 O(n) 복잡도로서 계산될 것이다.
4) n개의 덧셈으로서 y=G·[w,u]T = G1·wT+G2·uT = G1·wT + uT를 계산한다. y1=[y1,...,ys] 및 y2=[ys +1,...,yn]이라고 한다.
5) y1 ecc=G's ,2·y1를 계산한다.
출력은 v=[yecc ,y]T가 된다.
(F) 단계(3)에서 Gα·w=v'α-uα를 만족하는 w∈Fs의 계산에 실패하는 경우, G1의 행들의 랜덤 배치를 통해 전체 과정을 다시 시작하고, 상기 랜덤 배치는 전송측 및 수신측에 알려진 리스트로부터 선택된다. 상기 배치의 인덱스를 포함하는 헤더가 첨부된다. (3)의 실패 확률이 ε>0 (예를 들면, ε=10-6)보다 크고, k번 다시 시작하는 경우, 전체 실패 확률은 εk가 된다. 실제로, 의사 랜덤 시프트를 통한 Zn-s에서의 순환 또는 n-s 나머지 의사 랜덤 시퀀스들을 통한 XOR 중 어느 하나인 의사 랜덤 배치들이 이용될 수 있다.
- 수신측 알고리즘
BSC 채널. 노이즈 채널 BSC(δ)을 통해서 전성된 모든 벡터 z∈Fk에 대하여, 결과적인 수신 벡터를 z+ze라고 표기한다. ze의 각 좌표는 1이 되는 확률 δ>0로서 독립 항등 분포되게 선택된다.
입력은 오프라인에서 미리 계산된 G21, G11 -1 (G11=Is ×s은 필요하지 않다) 및 v+ve이다. ve의 각 좌표는 1이 되는 확률이 δ>0로서 독립 항등 분포되게 선택된다.
높은 성공 확률(실패 확률 ε2)로서, y1= DecoderBSC(δ)(y1+y1 e , y1 ecc + y1 ecc,e)를 계산한다. 그 결과, 디코더는 (실패 확률 ε2로서) [y1,y2+y2 e] 를 알 수 있다.
아래를 계산한다.
G-1·[y1, y2+y2 e]T = [G11 -1, 0s×(n-s) ; -G21·G11 -1, I(n-s)×(n-s) ]·[y1, y2+y2 e]T =
= [G11 -1·y1, -G21·G11 -1·y1]T + y2 + y2 e = G-1·[y1,y2] + y2 e = [w,u]T+ y2 e
주요 단계들은 ξ= G11 -1·y1를 계산하는 단계, z = - G21·(G11 -1·y1) = - G21·y를 계산하는 단계, 높은 성공 확률(실패 확률 ε2)로서 u= DecoderBSC (δ)(u+ y2 e)를 계산하는 단계, u를 출력하는 단계로 구성된다.
G11=Is ×s으로 인해 상당한 복잡도의 감소가 가능하다.
상기한 실시예의 설명은 본 발명의 더욱 철저한 이해를 위하여 도면을 참조로 예를 든 것에 불과하므로, 본 발명을 한정하는 의미로 해석되어서는 안될 것이다. 또한, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 있어 본 발명의 기본적 원리를 벗어나지 않는 범위 내에서 다양한 변화와 변경이 가능함은 명백하다 할 것이다.

Claims (10)

  1. 메모리 셀에 저장할 데이터 중, t개의 스턱 셀을 포함하는 n개의 메모리 셀에 저장할 데이터에 대응하고, n-s개의 엔트리를 갖는 벡터 u를 생성하는 제1 벡터 생성부(0≤t≤s<n 단, n, s 및 t는 정수);
    n×n 인코딩 행렬 G를 생성하는 행렬 생성부;
    상기 스턱 셀의 좌표를 포함하는 정보 α 및 상기 스턱 셀의 값을 포함하는 정보 μ를 수신하고, 상기 정보 α, 상기 정보 μ, 상기 벡터 u 및 상기 인코딩 행렬 G를 연산하여 s개의 엔트리를 갖는 벡터 w를 생성하는 제2 벡터 생성부; 및
    상기 벡터 w 및 u가 결합된 벡터 x를 상기 인코딩 행렬 G에 곱하여 n개의 엔트리를 갖는 벡터 v를 생성하는 제3 벡터 생성부;를 포함하고,
    상기 벡터 v에 포함된, 상기 정보 α에 대응하는 인덱스의 엔트리들은 상기 정보 μ에 따른 스턱 셀의 값을 가지는 것을 특징으로 하는 인코더.
  2. 제1항에 있어서,
    상기 벡터 v의 생성에 사용된 인코딩 행렬 G의 레이블 및 s를 포함하는 헤더를 생성하는 헤더 생성부;를 더 포함하는 것을 특징으로 하는 인코더.
  3. 제1항에 있어서,
    0≤t≤s<n
    α={α(1), ..., α(t)}, 1≤α(1)<...<α(t) ≤n
    μ={μ(1), ..., μ(t)}
    u=[u1 ... un-s]T
    w=[w1 ... ws]T
    x=[w1 ... ws u1 ... un-s]T
    v=[v1 ... vn]T, vα(j)=μ(j), 1≤j≤t
    를 각각 만족하고,
    상기 행렬 생성부는 G=[G1, G2]=[G11, 0s×(n-s); G21, I(n-s)×(n-s)]를 만족하는 인코딩 행렬 G를 생성하고,
    제1 인코딩 행렬 G1은 n×s 행렬이고, 제2 인코딩 행렬 G2는 n×(n-s) 행렬이고, G11은 s×s 가역 행렬이고, G21은 (n-s)×s 행렬이고, 0s×(n-s)는 제로 행렬이고, I(n-s)×(n-s)는 단위 행렬이고,
    상기 제2 벡터 생성부는 t개의 1차 방정식인 [G1·w]α(j)= μ(j)-[G2·u]α(j) (1≤j≤t)를 만족하는 벡터 w를 생성하고, 상기 벡터 w가 존재하지 않는 경우, 상기 행렬 생성부로부터 다른 인코딩 행렬 G를 수신하고,
    상기 제3 벡터 생성부는 y=[y1 ... yn]T = G1·w를 만족하는 벡터 y를 계산하고, v=[v1 ... vn]T = y+[0 ... 0 u1 ... un-s]T를 만족하는 벡터 v를 계산하는 것을 특징으로 하는 인코더.
  4. 제3항에 있어서, 상기 행렬 생성부는
    상기 s×s 가역 행렬 G11이 단위 행렬이고, 상기 (n-s)×s 행렬 G21의 엔트리는 1이 되는 확률이 1/2로서, 독립 항등 분포된(independent and identically distributed; i.i.d.) 0 또는 1의 값을 가지도록 상기 인코딩 행렬 G를 생성하는 것을 특징으로 하는 인코더.
  5. 제3항에 있어서, 상기 행렬 생성부는
    1≤t≤s'<s≤n/2
    e1=[1 0 ... 0]T
    es=[0 ... 0 1]T,
    ei=[01×(i-1) 1 01×(s-i)]T ( 0<i<s )
    q=[0 s' qs' +1 ... qs]T
    Ω={ei + ej + q: 1≤i≤s'/2 and (s'/2+1)≤j≤s'}, P는 균등확률로 확률 공간 (Ω, P)일 때, 상기 제1 인코딩 행렬 G1의 행을 상기 확률 공간 (Ω, P)로부터 독립 항등 분포되게 샘플된 벡터를 전치한 로우 벡터로 구성하는 것을 특징으로하는 인코더.
  6. 제3항에 있어서, 상기 행렬 생성부는
    상기 제1 인코딩 행렬 G1을 BEC(binary erasure channel)의 체크 행렬 H의 전치 행렬 HT로 구성하는 것을 특징으로 하는 인코더.
  7. t개의 스턱 셀(stuck cell)을 포함하는 n개의 메모리 셀에 저장할 데이터에 대응하고, n-s개의 엔트리를 갖는 벡터 u를 생성하는 단계(0≤t≤s<n 단, n, s 및 t는 정수);
    상기 스턱 셀의 좌표를 포함하는 정보 α, 상기 스턱 셀의 값을 포함하는 정보 μ, 상기 벡터 u 및 n×n 인코딩 행렬 G에 기초하여 s개의 엔트리를 갖는 벡터 w를 생성하는 단계; 및
    상기 벡터 w 및 u를 결합한 벡터 x를 상기 인코딩 행렬에 곱하여 n개의 엔트리를 갖는 벡터 v를 생성하는 단계;를 포함하고,
    상기 벡터 v에 포함된, 상기 정보 α에 대응하는 인덱스의 엔트리들은 상기 정보 μ에 따른 스턱 셀의 값을 가지는 것을 특징으로 하는 데이터 인코딩 방법.
  8. 제7항에 있어서,
    상기 인코딩 행렬 G는 n×s 제1 인코딩 행렬 G1 및 n×(n-s) 제2 인코딩 행렬 G2를 포함하고,
    상기 벡터 w를 생성하는 단계는 t개의 1차 방정식(linear equation)들을 풀어 s개의 근(root)들을 상기 벡터 w의 엔트리로 구성하고,
    상기 1차 방정식의 계수(coefficient)들은 상기 제1 인코딩 행렬 G1의, 상기 정보 α에 대응하는 행이 포함하는 엔트리들이고,
    상기 1차 방정식의 상수항(constant term)은 상기 제2 인코딩 행렬 G2의, 상기 정보 α에 대응하는 행이 포함하는 엔트리들, 상기 벡터 u 및 상기 정보 μ에 따른 산술 연산에 의해 결정되는 것을 특징으로 하는 데이터 인코딩 방법.
  9. 제8항에 있어서,
    상기 벡터 v를 생성하는 단계는
    상기 제1 인코딩 행렬 G1과 상기 벡터 w의 곱 및 상기 제2 인코딩 행렬 G2와 상기 벡터 u의 곱을 더하여 상기 벡터 v를 생성하는 것을 특징으로 하는 데이터 인코딩 방법.
  10. 제8항에 있어서,
    상기 벡터 w를 생성하는 단계는, 상기 s개의 근들이 존재하지 않는 경우 상기 인코딩 행렬 G를 다른 인코딩 행렬 G로 교체하는 단계를 더 포함하고, 상기 데이터 인코딩 방법은 상기 벡터 w의 생성에 사용된 인코딩 행렬 G의 레이블 및 s를 포함하는 헤더를 생성하는 단계를 더 포함하는 것을 특징으로 하는 데이터 인코딩 방법.
KR1020130143913A 2013-11-25 2013-11-25 메모리 시스템에서 데이터를 인코딩 및 디코딩하기 위한 방법 및 장치 KR102098247B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020130143913A KR102098247B1 (ko) 2013-11-25 2013-11-25 메모리 시스템에서 데이터를 인코딩 및 디코딩하기 위한 방법 및 장치
US14/542,828 US9384087B2 (en) 2013-11-25 2014-11-17 Method and apparatus for encoding and decoding data in memory system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020130143913A KR102098247B1 (ko) 2013-11-25 2013-11-25 메모리 시스템에서 데이터를 인코딩 및 디코딩하기 위한 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20150060019A KR20150060019A (ko) 2015-06-03
KR102098247B1 true KR102098247B1 (ko) 2020-04-08

Family

ID=53183757

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130143913A KR102098247B1 (ko) 2013-11-25 2013-11-25 메모리 시스템에서 데이터를 인코딩 및 디코딩하기 위한 방법 및 장치

Country Status (2)

Country Link
US (1) US9384087B2 (ko)
KR (1) KR102098247B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114095036B (zh) * 2022-01-18 2022-04-22 苏州浪潮智能科技有限公司 一种动态哈夫曼编码的码长生成装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130124943A1 (en) 2011-11-16 2013-05-16 HGST Netherlands B.V. Techniques For Storing Data in Stuck Memory Cells

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6473877B1 (en) * 1999-11-10 2002-10-29 Hewlett-Packard Company ECC code mechanism to detect wire stuck-at faults
US6895421B1 (en) 2000-10-06 2005-05-17 Intel Corporation Method and apparatus for effectively performing linear transformations
US7272773B2 (en) 2003-04-17 2007-09-18 International Business Machines Corporation Cache directory array recovery mechanism to support special ECC stuck bit matrix
US7069494B2 (en) 2003-04-17 2006-06-27 International Business Machines Corporation Application of special ECC matrix for solving stuck bit faults in an ECC protected mechanism
JP4686520B2 (ja) 2007-09-18 2011-05-25 株式会社東芝 データ記憶システム
JP5214422B2 (ja) 2008-02-15 2013-06-19 株式会社東芝 データ記憶システム
KR101436506B1 (ko) 2008-07-23 2014-09-02 삼성전자주식회사 메모리 장치 및 메모리 데이터 프로그래밍 방법
US8331168B2 (en) * 2009-04-30 2012-12-11 International Business Machines Corporation Increased capacity heterogeneous storage elements
US20110041016A1 (en) 2009-08-12 2011-02-17 Taiwan Semiconductor Manufacturing Company, Ltd. Memory errors and redundancy
JP5121874B2 (ja) 2010-04-14 2013-01-16 株式会社東芝 データ記憶システムの設定方法
KR20130127234A (ko) 2012-05-14 2013-11-22 삼성전자주식회사 메모리의 구동 방법
US8972649B2 (en) * 2012-10-05 2015-03-03 Microsoft Technology Licensing, Llc Writing memory blocks using codewords
US9274884B2 (en) * 2012-10-10 2016-03-01 HGST Netherlands B.V. Encoding and decoding data to accommodate memory cells having stuck-at faults

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130124943A1 (en) 2011-11-16 2013-05-16 HGST Netherlands B.V. Techniques For Storing Data in Stuck Memory Cells

Also Published As

Publication number Publication date
US20150149859A1 (en) 2015-05-28
KR20150060019A (ko) 2015-06-03
US9384087B2 (en) 2016-07-05

Similar Documents

Publication Publication Date Title
JP5567378B2 (ja) 不揮発性メモリの適応型エンデュランス・コーディング方法及びシステム
US9819361B2 (en) List decoding method for polar code and memory system using the same
JP5464703B2 (ja) 異機種混合ストレージ要素の容量を増大させる方法及びシステム
KR101710025B1 (ko) 재기록 불능 메모리에서의 결합 재기록 및 에러 정정
KR101438072B1 (ko) 소거 없는 플래시 메모리의 다중 프로그래밍
KR101753498B1 (ko) 신뢰도 데이터 업데이트
US8694866B2 (en) MDS array codes with optimal building
Sala et al. Dynamic threshold schemes for multi-level non-volatile memories
US9141467B2 (en) Semiconductor memory system including Reed-Solomon low density parity check decoder and read method thereof
KR102275717B1 (ko) 플래시 메모리 시스템 및 그의 동작 방법
KR102528972B1 (ko) 연판정 디코딩 방법 및 시스템
JP7066584B2 (ja) メモリシステム
JP6847796B2 (ja) メモリシステム
EP3182601B1 (en) Data processing method and system based on quasi-cyclic ldpc
KR20160144960A (ko) 폴라 코드들을 이용한 비대칭 에러 정정 및 플래시 메모리 재기록
JP2022124682A (ja) メモリシステム
JP7237674B2 (ja) メモリシステム
JP2021047712A (ja) メモリシステム
CN112134573B (zh) 用于将数据存储在存储器装置内的方法和检索数据的方法
KR20140088423A (ko) 리드-솔로몬 저밀도 패리티 검사 디코더를 포함하는 반도체 메모리 시스템 및 그것의 읽기 방법
JP2020046823A (ja) メモリシステム
KR102098247B1 (ko) 메모리 시스템에서 데이터를 인코딩 및 디코딩하기 위한 방법 및 장치
KR101722798B1 (ko) 천공 코드의 콤팩트 디코딩
US20160269046A1 (en) Memory controller, memory system, and decoding method
CN105938728B (zh) 用于近似平衡码的编码器和解码器设计

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant