日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BCH编码与译码(MATLAB实现)

發(fā)布時間:2024/8/1 编程问答 93 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BCH编码与译码(MATLAB实现) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

BCH碼的定義

BCH碼是由Bose、Chandhari 和 Hocquenhem 分別獨立提出的一種能夠糾正多個隨機錯誤的循環(huán)碼。
BCH 碼的定義:給定任一有限域 GF(q)及其擴域 GF(qm)(其中 q 為素數(shù)或素數(shù)冪),m 為某一正整數(shù),若碼元取自 GF(q) 循環(huán)碼的生成多項式 g(x) 的根集合 R 中有 σ-1 個連續(xù)根 αm0, αm0+1, αm0+σ-2,則該循環(huán)碼稱為 q 進制 BCH 碼。其中 α∈GF(qm) 是域中的 n 級元素,αm0+i∈GF(qm)(0 ≤ i≤ σ-2),m0 是任意整數(shù),通常取值為 0 或 1,當(dāng) m0=1 時生成的 BCH 碼為狹義 BCH 碼。如果在生成多項式 g(x) 的根中有 GF(qm) 的本原元,則 BCH 碼的碼長 n=qm-1,相應(yīng)的 BCH 稱為本原 BCH 碼。
設(shè) mi(x) 和 ei 分別是 αm0+i(i = 1,2,…,σ-2) 元素的最小多項式和級,則 BCH 碼的生成多項式和碼長分別為:

BCH碼的性質(zhì)

對于 BCH 碼,有如下性質(zhì)和結(jié)論。
①(BCH 限)BCH 碼的最小距離 d 至少為 σ;若 BCH 碼的生成多項式 g(x) 的根集合為 R = {αm0, αm0+c,αm0+(σ-2)c} 且 (n,c) = 1,則其最小距離 d ≥ σ。
②(HT 限)如果 BCH 碼的生成多項式 g(x) 的根集合 R 中有 s 組 σ-1 個 α 的連續(xù)元素(α∈GF(qm) 是 n 級元素),即 R = {αm0+σi+j ,i = 0,1,…,s-1; j = 0,1,…,σ-2} 且 (n,α) = 1 ,則 BCH 碼的最小距離 d ≥ σ + s - 1。類似的,(GHT 限)如果 BCH 碼的生成多項式 g(x) 的根集合為 R= {αm0+σ1i+σ2j ,i = 0,1,…,s-1; j = 0,1,…,σ-2} 且 (n,σ1) < σ,σ ≥ 2 ,則 BCH 碼的最小距離 d ≥ σ + s - 1。
③如果二進制本原 BCH 碼的碼長 n = 2m-1 ,設(shè)計距離為 σ = 2t+1 ,則如果滿足 :

則,當(dāng) t --> 0 時 BCH 碼的實際距離等于設(shè)計距離。
④若二進制 BCH 碼的碼長 n = ab 且設(shè)計距離為 σ = a ,則碼的實際距離就為 a 。
⑤如果 GF(q) 上 BCH 碼的碼長為 n = qm-1 ,設(shè)計距離 σ = qh-1 ,則碼的實際距離為 σ 。
⑥ GF(q) 上設(shè)計距離為 σ 的本原 BCH 碼的實際最小距離 d ≤ qσ +q-2 。
在我們平時的編碼中,主要討論的是 q = 2 的二進制狹義 BCH 碼。

BCH的構(gòu)造

對于二進制 BCH 碼,其碼元取自 GF(2) 。根據(jù) BCH 碼的定義,若設(shè) m0=1, σ=2t+1,α 為 GF(2m) 上的本原元【0、1】,若碼以 α,α2,…,α2t 為根,每個根對應(yīng)的最小多項式為 mi(x),i = 1,2,…,2t,則二進制 BCH 碼的生成多項式為:

該 BCH 碼能夠糾正 t 個錯誤。
在特征為 2 的 GF(2m) 上 (αi2 和 αi 的最小多項式相同,因此 BCH 碼以 α ,α3,…,α2t-1 為根,其生成多項式可以寫成:

相應(yīng)的碼長為:

其中,ei(i = 1,3,…,2t-1) 為 αi(i = 1,3,…,2t-1) 的級。
根據(jù)生成多項式以及循環(huán)碼(https://blog.csdn.net/weixin_45115771/article/details/125571083?spm=1001.2014.3001.5501)的循環(huán)移位特性可以構(gòu)造 BCH 碼的生成矩陣 G。若設(shè) C(x) = q(x)g(x) 是 BCH 碼的任一碼字,則 α ,α3,…,α2t-1 為碼多項式 C(x) 的根,即若碼多項式為:

則有:

根據(jù) CHT = 0,可知 BCH 碼的校驗矩陣 H 為:

對于二進制 BCH 碼,有如下結(jié)論:
對于任意正整數(shù) m 和 t,一定存在一個二進制 BCH 碼,以 α ,α3,…,α2t-1 為根,碼長為 n = 2m-1 或 2m-1 的因子,能夠糾正 t 個錯誤,碼中校驗元的個數(shù)為 mt 個(生成多項式 g(x) 的次數(shù))。

例:對于定義在 GF(24) 上的本原 BCH 碼,m = 4,α 為 GF(24) 上的本原元,GF(24) 上的本原多項式 p(x) = x4+x+1,則針對不同的 t 值,可以構(gòu)造不同碼參數(shù)的 BCH 碼(假設(shè)碼長 n = 2m-1 = 15)。
①如果 t = 1,則構(gòu)造的 BCH 碼以 α 為根,同時 α2,α4,α8 也是該 BCH 碼的根,α 的最小多項式就是本原多項式,所以生成多項式為 g(x) = x4+x+1,校驗元的個數(shù)為 mt = 4,得到的是糾錯能力 t=1 的(15,11,4)BCH 碼。
參考下表:

冪次表示二進制表示 十進制表示
000000
100011
α100102
α200113
α301004
α4=α+101015
α5201106
α63201117
α7= α3+α+110008
α8 = α2+110019
α93101010
α102+α+1101111
α1132110012
α1232+α+1110113
α1332+1111014
α143+1111115

根據(jù)表中 GF(24) 的元素列表及 BCH 碼校驗矩陣的形式,可以寫出該 (15,11,4)BCH 碼的檢驗矩陣 H 為:
![在這里插入圖片描述](https://img-blog.csdnimg.cn/83f409fd6bab41a8afa97db4aec53f5d.png
根據(jù)校驗矩陣 H 和生成矩陣 G 的對偶關(guān)系或者根據(jù)生成多項式 g(x) 及循環(huán)碼生成多項式矩陣的構(gòu)造方法可以寫出該 BCH 碼的生成矩陣 G。

②如果 t = 2,則構(gòu)造的 BCH 碼以 α ,α3 為根,α 的最小多項式為 m1(x) = x4+1,α3 的最小多項式為 m3(x) = x4+ x3+ x2+x+1,所以生成多項式為:g(x) = m1(x) m3(x) = x8+ x7+ x6+x4+1,校驗元的個數(shù)為 mt = 8,得到的是糾錯能力 t = 2 的(15,7,5)BCH 碼。參考上表中 GF(24) 的元素列表及 BCH 碼校驗矩陣的形式,可以寫出該 (15,7,5)BCH 碼的校驗矩陣 H 為:

根據(jù)校驗矩陣 H 和生成矩陣 G 的對偶關(guān)系或者根據(jù)生成多項式 g(x) 及循環(huán)碼生成多項式矩陣的構(gòu)造方法可以寫出該 BCH 碼的生成矩陣 G。
③如果 t = 3,則構(gòu)造的 BCH 碼以α ,α3, α5 為根,α 的最小多項式為 m1(x) = x4+1,α3 的最小多項式為 m3(x) = x4+ x3+ x2+x+1,α5 的最小多項式為 m5(x) = x2+x+1,所以生成多項式為:g(x) = m1(x) m3(x)m5(x) = x10+ x8+ x5+x4+x2+x+1,校驗元的個數(shù)為 mt = 12,得到的是糾錯能力 t = 3 的(15,5,7)BCH 碼。參考上表中 GF(24) 的元素列表及 BCH 碼校驗矩陣的形式,可以寫出該 (15,5,7)BCH 碼的校驗矩陣 H 為:

④如果 t = 4,則構(gòu)造的 BCH 碼以α ,α3, α5 , α7為根,α 的最小多項式為 m1(x) = x4+1,α3 的最小多項式為 m3(x) = x4+ x3+ x2+x+1,α5 的最小多項式為 m5(x) = x2+x+1,α7 的最小多項式為 m7(x) = x4+ x3+1,所以生成多項式為:g(x) = m1(x) m3(x)m5(x)m7(x) = x14+ x13+x12+x11+x10+x9+ x8+x7+x6+ x5+x4+x3+ x2+x+1,得到的是(15,1,15)BCH 碼,也即重復(fù)碼。該碼的設(shè)計距離為 σ = 2t+1 = 9,可以計算該碼的實際最小距離 d = 15。在此情況下,設(shè)計距離不等于實際最小距離,碼設(shè)計太過度了,該碼實際可糾 (d-1)/2 = 7個隨機錯誤。
與線性分組碼和循環(huán)碼類似,也可以通過增加全校驗位實現(xiàn)擴展 BCH 碼。

BCH碼編碼

BCH 碼編碼的關(guān)鍵是生成多項式的選取,或者說生成矩陣 G 和校驗矩陣 H 的構(gòu)造。對于定義在 GF(qm) 上分組長度 n = qm-1、可糾正 t 個錯誤的 BCH 碼,編碼步驟如下:
①選取一個次數(shù)為 m 的既約多項式并構(gòu)造 GF(qm) 。
②求 αi,i = 1,3,…,2t-1的最小多項式 mi(x)。
③構(gòu)造可糾 t 個錯誤的碼生成多項式 g(x) = m1(x) m3(x)… m2t-1(x)。
④按照循環(huán)碼的編碼方法和編碼電路及逆行編碼(所有加法運算和乘法運算都在 GF(qm)。
在MATLAB中提供了 BCH 碼的編碼和譯碼相關(guān)函數(shù)和 Simulink 仿真模塊,具體說明如下:
—bchgenpoly—:該函數(shù)根據(jù)碼長 n 和信息組長度 k 計算狹義 BCH 碼的生成多項式。語法結(jié)構(gòu)為:

genpoly = bchgenpoly(n,k) genpoly = bchgenpoly(n,k,prim_poly) [genpoly,t] = bchgenpoly(……)

其中,輸入?yún)?shù) n 為碼長,k 為信息組長度,碼長 n 必須等于 2m-1,3 ≤ m ≤ 16,輸入 prim_poly 為按冪次下降順序排列的整數(shù),表示本原多項式的系數(shù)。輸出 genpoly 是 GF(2) 上按冪次下降順序排列的生成多項式系數(shù),輸出 t 表示該碼的糾錯能力。
例:生成糾錯能力為 3 的(15,5)BCH 碼的生成多項式。

m = 4; n = 2^m-1; % 碼長 k = 5; % 信息組長度 [genpoly,t] = bchgenpoly(n,k) % 計算生成多項式和糾錯能力 disp(genpoly); % 顯示 genpoly disp(t); % 顯示 t

輸出結(jié)果:

genpoly:1×11 gf 數(shù)組 - 屬性:x: [1 0 1 0 0 1 1 0 1 1 1]m: 1prim_poly: 3 t:3

有了生成多項式,就可以進行 BCH 碼的編碼和譯碼了。

—bchnumerr—:該函數(shù)計算給定參數(shù)條件下 BCH 碼的可糾正錯誤數(shù),語法結(jié)構(gòu)為:

T = bchnumerr(N) T = bchnumerr(N,K)

語法結(jié)構(gòu) 1 表示在給定碼長 N 的條件下返回所有可能的信息組長度 K 組成不同 (N,K) BCH 碼時的可糾正錯誤數(shù) T,其返回值 T 為一個包含 3 列元素的矩陣,第 1 列為碼長 N ,第 2 列為可能的信息組長度 K,第3列為糾錯能力T。
例:當(dāng)N=15時,輸出結(jié)果T為:

T = bchnumerr(15); T = 15 11 115 7 215 5 3

也即對于N=15的情況,可以生成信息組長度K分別為 11 , 7 和 5 的 BCH 碼,其糾錯能力分別為 1、2 和 3。
語法結(jié)構(gòu) 2 要求輸入信息組長度 K,函數(shù)執(zhí)行后返回 (N,K) BCH 碼的糾錯能力 T。

—bchenc—:該函數(shù)為 BCH 碼的編碼函數(shù),語法結(jié)構(gòu)為:

code = bchenc(msg,n,k) code = bchenc(……,paritypos)

該函數(shù)使用狹義(n,k)BCH 碼的生成多項式對輸入信息組 msg 進行 BCH 碼編碼。其中信息組 msg 定義在 GF(2) 上,可以是矩陣形式,每行包含 k 個元素作為一個信息組。最左邊為最高位符號。在輸出的 GF(2) 域上編碼碼字 code 中檢驗符號位于每個碼字的右端。
語法結(jié)構(gòu) 2 中參數(shù) paritypos 用于指定檢驗符號的位置,值可以是 “end” 或 “beginning”,分別表示校驗符號位于輸出碼字信息組的開始部分和結(jié)束部分,默認(rèn)值為 “end”。
例:假設(shè)對(15,5)BCH 碼進行編碼,輸入為:

code = bchenc(msg,n,k) code = bchenc(……,paritypos)

若輸入為:

msg = gf([1 0 1 0 1; 0 1 0 1 0 ]); code = bchenc(msg,15,5);

則輸出為:

code: 2×15 gf 數(shù)組 - 屬性:x: [2×15 uint32][1,0,1,0,1,1,0,0,1,0,0,0,1,1,1;0,1,0,1,0,0,1,1,0,1,1,1,0,0,0]m: 1prim_poly: 3

BCH碼譯碼

一、伴隨式譯碼
BCH 碼的伴隨式譯碼分為如下3個步驟:
①根據(jù)接收碼多項式 R(x) ,利用公式:

計算伴隨式 S(x)。
②根據(jù)伴隨式 S(x),在碼字糾錯能力范圍內(nèi)得到錯誤圖樣 E(x) 的估計 E^(x)。
③估計發(fā)送碼字 C^(x) = R(X)+E^(x)。

二、迭代譯碼
BCH 碼伴隨式譯碼中最復(fù)雜的部分是錯誤位置多項式系數(shù)的計算和根的求解。Berlekamp 提出了一種通過迭代方式求解錯誤位置多項式根的方法(BM 算法),結(jié)合 Chien搜索電路,可以加快錯誤多項式的求解,簡化譯碼過程。
BCH 碼的迭代譯碼分為如下5個步驟:
①根據(jù)接收碼多項式 R(x),利用公式:

計算伴隨式 S(x)。
②用 BM 算法求解錯誤位置多項式的系數(shù)。
③用 Chien 搜索法求錯誤位置多項式的根。
④計算錯誤值(對于二元碼,可以省略該步驟)。
⑤根據(jù)錯誤位置(和錯誤值)獲得錯誤圖樣 E(x) 的估計 E^(x)并譯碼, C^(x) = R(X)+E^(x)。

—bchenc—:該函數(shù)為 BCH 碼的譯碼函數(shù),使用BM算法進行 BCH 碼的譯碼。語法結(jié)構(gòu)為:

decoded = bchdec(code,n,k) decoded = bchdec(……,paritypos) [decoded,cnumerr] = bchdec(……) [decoded,cnumerr,ccode] = bchdec(……)

其中,輸入?yún)?shù) n 和 k 分別表示碼長和信息組長度,code 為定義在 GF(2) 上的接受碼符號序列,paritypos 用于指定校驗符號的位置(與 bchenc 中相對應(yīng))。
輸出參數(shù)中 decoded 表示譯碼輸出碼字,定義在有限域上,可以是矩陣形式,每一行對應(yīng)輸入 code 中一行碼字的譯碼輸出。如果 bchdec 函數(shù)檢測到在 code 的行中出現(xiàn)超過其糾錯能力 t 的錯誤(錯誤數(shù)大于 t),則譯碼失敗,這種情況下 bchdec 函數(shù)因輸出輸入 code 中每一行的前 k 個符號(默認(rèn) paritypos = “end”)。輸出參數(shù)中 cnumerr 返回的是列矢量,其中每個元素是對輸入 code 的每行譯碼時糾正的錯誤說,如果某行譯碼失敗,則 cnumerr 列矢量中相應(yīng)的元素值為 -1。輸出參數(shù)中 ccode 返回的是糾正了 code 中的錯誤之后的碼向量(或矩陣),其格式與輸入 code 相同。如果譯碼失敗,則直接輸出 code 中相應(yīng)的行。
例:對(15,5)BCH 碼進行編譯碼。

n = 15; k = 5; dat = randi([0,1],4,k); msg = gf(dat); code = bchenc(msg,n,k); decode = bchdec(code,n,k); % 檢查譯碼過程是否正確 chk = isequal(decode,msg);

在上述例子中,要求編碼函數(shù) bchenc 和譯碼函數(shù) bchdec 中參數(shù) paritypos 的值必須相同,才能正確譯碼。

總結(jié)

以上是生活随笔為你收集整理的BCH编码与译码(MATLAB实现)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。