UA MATH636 信息论9 Berlekamp-Welch算法
UA MATH636 信息論9 Berlekamp-Welch算法
- Naive RS decoder
- Berlekamp-Welch算法
- 一個例子
上一講介紹了RS code,這一講介紹RS code的decode算法。先回顧一下RS code的構造:message vector為
m=[x1,?,xk],xi∈GF(p),i=1,?,km = [x_1,\cdots,x_k],x_i \in GF(p),i=1,\cdots,km=[x1?,?,xk?],xi?∈GF(p),i=1,?,k
用定義在Galois域GF(p)GF(p)GF(p)上的多項式來表示這個message:
P(t)=∑i=1kxiti?1P(t) = \sum_{i=1}^k x_i t^{i-1}P(t)=i=1∑k?xi?ti?1
然后用這個多項式來編碼:
c=[c1,?,cn]=[P(0),P(1),?,P(n?1)]c = [c_1,\cdots,c_n] = [P(0),P(1),\cdots,P(n-1)]c=[c1?,?,cn?]=[P(0),P(1),?,P(n?1)]
這個編碼會經(jīng)由到噪聲信道傳送到接收端,假設接收端接收到的碼是R=[R0,?,Rn?1]R=[R_0,\cdots,R_{n-1}]R=[R0?,?,Rn?1?],接下來的問題就是怎么從RRR還原出message m^\hat{m}m^。
Naive RS decoder
先考慮比較簡單的erasure,對于傳輸?shù)拇ac=[c1,?,cn]=[P(0),P(1),?,P(n?1)]c = [c_1,\cdots,c_n] = [P(0),P(1),\cdots,P(n-1)]c=[c1?,?,cn?]=[P(0),P(1),?,P(n?1)]
假設接收端收到的碼有lll個erasure,則剩下的n?ln-ln?l個符號是正確的。如果n?l≥k?1n-l \ge k-1n?l≥k?1,也就是l≤n?(k?1)=dl \le n-(k-1)=dl≤n?(k?1)=d時,可以用n?ln-ln?l個符號帶入到P(t)P(t)P(t)中把系數(shù)解出來。
如果是有error,最簡單的想法是從RRR中取一個有kkk個元素的subset,比如{R0,?,Rk?1}\{R_0,\cdots,R_{k-1}\}{R0?,?,Rk?1?}。如果它們是正確的碼,那么一定是P(t)P(t)P(t)的取值。根據(jù)
P(i)=Ri,i=0,?,k?1P(i)=R_i,i=0,\cdots,k-1P(i)=Ri?,i=0,?,k?1
可以解出一組P(t)P(t)P(t)的系數(shù),也就是decode得到的message vector的元素。一共有CnkC_n^kCnk?種可能的subset,每一個都可以計算出一組系數(shù)。比如n=255,k=249n=255,k=249n=255,k=249,這種RS code最多可以改掉三個噪聲信道造成的傳輸錯誤,但卻需要比較C255249≈3590C_{255}^{249} \approx 3590C255249?≈3590億個subset,顯然這種naive算法的性價比非常低。
Berlekamp-Welch算法
這種算法比較有效,復雜度是O(n3)O(n^3)O(n3)。如果有lll個error,而且不知道error在哪個位置,我們定義一個error polynomial
E(t)=∏j=1l(t?ij)E(t) = \prod_{j=1}^l (t-i_j)E(t)=j=1∏l?(t?ij?)
其中ij=1,?,ni_j=1,\cdots,nij?=1,?,n代表error的位置(就是第幾個符號出錯了),deg(E(t))=ldeg(E(t))=ldeg(E(t))=l。這真的是一個非常巧妙的構造,因為Berlekamp-Welch發(fā)現(xiàn):?i\forall i?i, RiE(i)=E(i)P(i)R_i E(i) = E(i) P(i)Ri?E(i)=E(i)P(i)。這個等式之所以成立是因為當RiR_iRi?是正確的碼時,直接就有Ri=P(i)R_i=P(i)Ri?=P(i);當RiR_iRi?是錯誤的碼時,因為E(i)=0E(i)=0E(i)=0,所以等式也會成立。接下來就用這個等式來構造decoder。
定義Q(t)=E(t)P(t)Q(t) = E(t)P(t)Q(t)=E(t)P(t),則Q(i)=E(i)P(i)=E(i)RiQ(i) = E(i)P(i) = E(i)R_iQ(i)=E(i)P(i)=E(i)Ri?
他們的階數(shù)的關系是
deg(Q(t))≤deg(P(t))+deg(E(t))≤k?1+l≤k?1+n?k2deg(Q(t)) \le deg(P(t)) + deg(E(t)) \le k-1+l \le k-1 + \frac{n-k}{2}deg(Q(t))≤deg(P(t))+deg(E(t))≤k?1+l≤k?1+2n?k?
因為RiR_iRi?是已知的,如果我們能夠巧妙的得到E(i)E(i)E(i),就可以計算出Q(i)Q(i)Q(i),就可以解出Q(t)Q(t)Q(t)和E(t)E(t)E(t),則P(t)P(t)P(t)就可以表示為
P(t)=Q(t)E(t)P(t) = \frac{Q(t)}{E(t)}P(t)=E(t)Q(t)?
這個除法是GF(p)GF(p)GF(p)上的多項式的除法。一般在用到抽代的結構的時候需要驗證這種自己搞出來的定義是不是良定義,下面說明Q(t)=P(t)E(t)Q(t)=P(t)E(t)Q(t)=P(t)E(t)是良定義。考慮D(t)=Q(t)?P(t)E(t)D(t) = Q(t) - P(t)E(t)D(t)=Q(t)?P(t)E(t),
deg(D(t))≤max?(deg(Q(t),deg(P(t)E(t)))≤k?1+n?k2=(n?1)?n?k2deg(D(t)) \le \max(deg(Q(t),deg(P(t)E(t))) \le k-1 + \frac{n-k}{2} = (n-1) -\frac{n-k}{2} deg(D(t))≤max(deg(Q(t),deg(P(t)E(t)))≤k?1+2n?k?=(n?1)?2n?k?
又因為
D(i)=Q(i)?P(i)E(i)=RiE(i)?P(i)E(i)=(Ri?P(i))E(i)D(i) = Q(i) - P(i)E(i) = R_iE(i) - P(i)E(i) = (R_i - P(i))E(i)D(i)=Q(i)?P(i)E(i)=Ri?E(i)?P(i)E(i)=(Ri??P(i))E(i)
對于不是error的那些位置iii,D(i)D(i)D(i)是等于0的,也就是說D(t)D(t)D(t)至少有n?n?k2n-\frac{n-k}{2}n?2n?k?個零點。這種零點比階數(shù)更多的現(xiàn)象只會在Q(t)=0,?tQ(t)=0,\forall tQ(t)=0,?t的時候發(fā)生。
下面討論這個算法具體怎么操作。因為E(t)E(t)E(t)是首1多項式,可以假設它為
E(t)=tl+vl?1tl?1+?+v0E(t) = t^l + v_{l-1}t^{l-1} + \cdots + v_0E(t)=tl+vl?1?tl?1+?+v0?
假設Q(t)Q(t)Q(t)是
Q(t)=ul+k?1tl+k?1+ul+k?2tl+k?2+?+u0Q(t) = u_{l+k-1} t^{l+k-1} + u_{l+k-2} t^{l+k-2} + \cdots + u_0Q(t)=ul+k?1?tl+k?1+ul+k?2?tl+k?2+?+u0?
這里面未知數(shù)有2l+k2l+k2l+k個,注意到2l+l≤2n?k2+k=n2l+l \le 2\frac{n-k}{2} + k = n2l+l≤22n?k?+k=n。根據(jù)
Q(i)=RiE(i),i=0,?,n?1Q(i) = R_i E(i),i=0,\cdots,n-1Q(i)=Ri?E(i),i=0,?,n?1
我們可以得到nnn個線性方程,顯然方程數(shù)量是夠解出所有的系數(shù)的。解出來之后根據(jù)P(t)=Q(t)E(t)P(t) = \frac{Q(t)}{E(t)}P(t)=E(t)Q(t)?計算出P(t)P(t)P(t),它的系數(shù)就是m^\hat{m}m^。
一個例子
接著上一講的例子,R=[2,3,4,0]R=[2,3,4,0]R=[2,3,4,0],生成矩陣是
G=[11110123]G = \left[ \begin{matrix} 1 & 1 & 1 & 1 \\ 0& 1 & 2 & 3 \\ \end{matrix} \right] G=[10?11?12?13?]
接下來用Berlekamp-Welch算法來解碼。假設l=1l=1l=1,則k?1+l=2k-1+l=2k?1+l=2,假設
E(t)=v0+tQ(t)=u0+u1t+u2t2E(t) = v_0+t \\Q(t) = u_0 + u_1 t + u_2 t^2E(t)=v0?+tQ(t)=u0?+u1?t+u2?t2
接下來根據(jù)Q(i)=RiE(i)Q(i) = R_i E(i)Q(i)=Ri?E(i)解其中的四個參數(shù):
u0=2v0u0+u1+u2=3(v0+1)u0+2u1+4u2=4(v0+2)u0+3u1+9u2=0u_0 = 2v_0 \\ u_0 + u_1 + u_2 = 3(v_0 + 1) \\ u_0 + 2u_1 + 4u_2 = 4(v_0 + 2) \\ u_0 + 3u_1 + 9u_2 =0u0?=2v0?u0?+u1?+u2?=3(v0?+1)u0?+2u1?+4u2?=4(v0?+2)u0?+3u1?+9u2?=0
解出來發(fā)現(xiàn)v0=0,u0=0,u1=1,u2=2v_0=0,u_0 = 0,u_1 = 1,u_2 = 2v0?=0,u0?=0,u1?=1,u2?=2,所以
E(t)=t,Q(t)=t+2t2P(t)=Q(t)E(t)=t+2t2t=1+2tE(t)=t,Q(t)=t+2t^2 \\ P(t) = \frac{Q(t)}{E(t)} = \frac{t+2t^2}{t} = 1 + 2tE(t)=t,Q(t)=t+2t2P(t)=E(t)Q(t)?=tt+2t2?=1+2t
從而解碼之后得到的message是m^=[1,2]\hat{m}=[1,2]m^=[1,2]
總結
以上是生活随笔為你收集整理的UA MATH636 信息论9 Berlekamp-Welch算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UA MATH636 信息论9 Reed
- 下一篇: UA MATH565C 随机微分方程V