Welch-Berlekamp 알고리즘의 오류 수를 어떻게 결정합니까?


9

리드 솔로몬 코드를 디코딩하기위한 Welch-Berlekamp 알고리즘에서, 하나는 알려지지 않은 위치 에서 에 오류가 있는 메시지를 나타내는 포인트 목록 이 주어진다 ( 는 알고리즘에 주어진다). 출력은 오류가 발생한 지점을 제외한 모든 주어진 지점을 통과하는 다항식입니다.(ai,bi)ebie

이 방법은 다음과 같은 형태의 선형 방정식 시스템을 푸는 것을 포함합니다.

biE(ai)=Q(ai)

모든 여기서 도 갖는 및 기껏도 갖는다 . 변수는 및 의 계수입니다 .iEeQe+kEQ

가 갖는 것을 보장하기 위해, 일반적으로 의 계수 가 1 인 위의 선형 시스템에 대한 제한을 추가합니다 . 그러나 실제로는 반드시 알 필요는 없습니다 . 이를 처리하는 비효율적 인 (그러나 여전히 다항식 시간) 방법 중 하나 는 솔루션을 찾을 때까지 시작하는 모든 값에 대해 를 시도 하는 것입니다.Eexeee(n+k1)/21

내 질문은 : 를 결정하는보다 효율적인 방법이 있습니까? e대안으로, 정확한 값 대신 상한을 사용할 수 있도록 선형 시스템에 수정이 있습니까?e

특히 다른 기술을 기반으로 한 완전히 다른 알고리즘이 아닌 리드 솔로몬 코드 에이 특정 디코더를 사용하고 싶습니다.


DW의 답변에 대한 응답으로 다음은 실제 작업 예입니다. 모든 것은 모듈로 7입니다.

plain message is: [2, 3, 2]
polynomial is: 2 + 3 t^1 + 2 t^2
encoded message is: [[0, 2], [1, 0], [2, 2], [3, 1], [4, 4]]
corrupted message is: [[0, 2], [1, 0], [2, 3], [3, 1], [4, 4]]

따라서 오류는 세 번째 지점에 있습니다.

언제 e=2 문제의 다항식은

bi(e0+e1x+e2x2)q0q1xq2x2q3x3q4x4=0

그리고 연결 엑스=0,1,2,,4 시스템을 매트릭스 형태로 제공합니다.

[2, 0, 0, 6, 0, 0, 0, 0, 0]
[0, 0, 0, 6, 6, 6, 6, 6, 0]
[3, 6, 5, 6, 5, 3, 6, 5, 0]
[1, 3, 2, 6, 4, 5, 1, 3, 0]
[4, 2, 1, 6, 3, 5, 6, 3, 0]
[0, 0, 1, 0, 0, 0, 0, 0, 1]

마지막 행은 이자형2=1. 우리가 얻는 가우시안 제거 적용

[1, 0, 0, 0, 0, 0, 1, 4, 0]
[0, 1, 0, 0, 0, 0, 3, 3, 1]
[0, 0, 1, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 1, 0, 0, 2, 1, 0]
[0, 0, 0, 0, 1, 0, 2, 2, 5]
[0, 0, 0, 0, 0, 1, 4, 5, 2]

그리고 두 자유 변수 모두에 대해 1을 선택하면

[2, 2, 1, 4, 1, 0, 1, 1]

어느 것이

E is 2 + 2 t^1 + 1 t^2
Q is 4 + 1 t^1 + 0 t^2 + 1 t^3 + 1 t^4

이자형 나누지 않는다 . 참고 과 같은 인수(+6)(+22+2+)모드7

대한 나는 좋은 해결책을 얻을 :이자형=1

system is:    
[2, 0, 6, 0, 0, 0, 0]
[0, 0, 6, 6, 6, 6, 0]
[3, 6, 6, 5, 3, 6, 0]
[1, 3, 6, 4, 5, 1, 0]
[4, 2, 6, 3, 5, 6, 0] 
[0, 1, 0, 0, 0, 0, 1]

reduced system is:

[1, 0, 0, 0, 0, 0, 5]
[0, 1, 0, 0, 0, 0, 1]
[0, 0, 1, 0, 0, 0, 3]
[0, 0, 0, 1, 0, 0, 3]
[0, 0, 0, 0, 1, 0, 6]
[0, 0, 0, 0, 0, 1, 2]

solution is [5, 1, 3, 3, 6, 2]
Q is 3 + 3 t^1 + 6 t^2 + 2 t^3
E is 5 + 1 t^1
P(x) = 2 + 3 t^1 + 2 t^2 # this is correct!
r(x) = 0

위의 카운터 예제는 처음부터 작성한 코드에 의해 생성되었지만 (기본적으로 내가 시도한 첫 번째 것임) 솔루션이 손으로 유효한지 확인할 수 있으므로 코드가 버그가 있어도 여전히 주장에 대한 유효한 카운터 예제입니다 를 사용하는 것이 효과적입니다.이자형=2


@DW 솔루션 벡터가 유효합니다. 실제로는 1 * 2 + 1 * 1 + 4 * 1입니다 (행렬 벡터의 차원은 행렬의 마지막 열이 빠져 있기 때문에 하나입니다). 남기는 것은 여기의 글에서 오타이지만 구현에서는 정확합니다. 예를 들어 점 [1, 0]을 사용하는 시스템의 두 번째 행에서 그 효과를 볼 수 있으며 처음 세 개는 0을 곱하기 때문에 모두 0입니다. 예제가 명확하지 않으면 게시 할 수 있습니다. github의 코드입니다. 내 코드는 깨끗하다고 ​​생각하지만 일반적으로 인해 더 복잡합니다. b나는
JeremyKun

답변:


3

동일한 절차는 실제로 까지의 많은 수의 오류를 수정합니다 .이자형

요구 사항은 오류가 있는 모든 지점 에서 오류 다항식 가 0이어야한다는 것 입니다. 그 시점에서만 그것이 0이되어야한다고 말하는 것은 없습니다. 다른 지점에서도 0 인 를 가질 수 있으며 정도가 괜찮습니다 .이자형(엑스)나는이자형(엑스)이자형

따라서 가 오류 수의 상한 이면 원하는 모든 속성을 갖는 다항식 가 존재 합니다 (즉, 정확히 가 있고 오류가있는 모든 지점에서 0 임). 예를 들어, 미만의 오류가있는 경우, 모든 오류에서 0 인 다항식 가 존재하며 , 더 많은 점에서 0으로 0의 수를 정확히 로 얻습니다 .이자형이자형(엑스)이자형이자형이자형(엑스)이자형

마지막으로, 정확성 정리는 그러한 다항식 가 존재하면 Berlekamp-Welch 알고리즘이 그것을 찾을 수 있다고 말합니다. 따라서 미만의 오류가 있더라도 를 식별하기 위해 절차가 여전히 올바르게 작동합니다 . 당신은 일단 , 당신은 식별 할 수있는 오류 무료 입장을, 다음은 간단한 방법으로 디코딩 할 수있다.이자형(엑스)이자형이자형(엑스)이자형(엑스)이자형


질문의 "counterexample"에 대한 대화 결과를 문서화하려면 다음을 수행하십시오.

실제로 유효한 반례가 아닙니다. 이 결함은 Berlekamp-Welch가 수정할 수있는 오류 수를 계산하는 데있었습니다. 거리는 이므로 Ran G.가 지적한대로 최대 오류 까지 수정할 수 있어야합니다 . 카운터 예제 및 이므로 절차는 하나의 오류 (예 : 수정할 수 있어야합니다 . 따라서 있는 예제 에서 프로 시저를 실행할 때 프로 시저가 올바르게 작동 할 것으로 예상 할 이유가 없습니다.케이+1(케이)/2=5케이=(케이)/2=1이자형=1이자형=2

따라서 반례는 실제로 반례가 아니며 위의 대답과 모순되지 않습니다.


1
@JeremyKun 거리는 케이+1 그래서 코드는 (케이)/2오류?
Ran G.

증거가 누락되었지만이 답변의 설명이 의미가 있습니다. 에 제로 설정이자형(엑스)다항식을 보간 할 때 무시해야하는 알고리즘을 "알립니다". 따라서 제로 세트가있는 한이자형(엑스) 오류가 발생한 지점 세트를 포함 하며 디코딩이 작동해야합니다. 이 경우 더 많은 자유 변수가 있어야합니다 (임의의 다른 장소를 임의의 방식으로 설정).
Ran G.

Ooooh 이것이 문제입니다 ... Singleton 바운드를 엉망으로 만들었습니까? 확인을 위해 설정해야한다면=7, 단일 오류를 도입하고 설정 이자형=2우리는 모든 것이 잘 될 것으로 기대해야합니다. 나는 이것을 시도 할 것이다.
JeremyKun

좋아, 이것은 내가 시도하고있는 예제에서 작동합니다. 우수한!
JeremyKun
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.