當(dāng)前位置:首頁(yè) > 電源 > 數(shù)字電源
[導(dǎo)讀]糾錯(cuò)編碼被廣泛應(yīng)用在各種數(shù)字通訊、數(shù)字廣播和數(shù)據(jù)存儲(chǔ)系統(tǒng)中。

摘要:糾錯(cuò)編碼被廣泛應(yīng)用在各種數(shù)字通訊、數(shù)字廣播和數(shù)據(jù)存儲(chǔ)系統(tǒng)中。隨著單片機(jī)、DSP和FPGA等器件的發(fā)展,越來越容易在各種通用硬件平臺(tái)上實(shí)現(xiàn)糾錯(cuò)編碼。本文基于TI的54系列DSP,實(shí)現(xiàn)由常用RS碼、卷積編碼、Viterbi解碼、交織技術(shù)構(gòu)成的級(jí)聯(lián)碼,并提供編碼原理和實(shí)現(xiàn)方案。

    關(guān)鍵詞:RS碼 Viterbi解碼 級(jí)聯(lián)糾錯(cuò)碼

隨著越來越多的系統(tǒng)采用數(shù)字技術(shù)來實(shí)現(xiàn),糾錯(cuò)編碼技術(shù)也得到了越來越廣泛的應(yīng)用。如GSM標(biāo)準(zhǔn)中,對(duì)語音的信道編碼采用卷積糾錯(cuò)、分組碼檢錯(cuò)。美國(guó)的蜂窩數(shù)字分組數(shù)據(jù)系統(tǒng)(CDPD)中采用了m=6的(63,47)RS(Reed Solomon)碼。CDMA標(biāo)準(zhǔn)中,主要包括卷積編碼(Turbo碼等)、交織編碼、幀循環(huán)校驗(yàn)等。DVD采用RS糾錯(cuò)編碼。近些年來,隨著軟件無線電技術(shù)的發(fā)展,糾錯(cuò)編碼一般都在通用的硬件平臺(tái)上實(shí)現(xiàn),這樣有利于保證靈活性和通用性。通常采用基于FPGA的VHDL編碼硬件實(shí)現(xiàn),或者在DSP、單片機(jī)上用C和匯編編程軟件實(shí)現(xiàn)。本文基于TMS320C54X的DSP,實(shí)現(xiàn)一種RS+交織+卷積的級(jí)聯(lián)糾錯(cuò)碼。

1 級(jí)聯(lián)糾錯(cuò)編碼原理

糾錯(cuò)編碼技術(shù)是通過引入可控制的冗余來提高系統(tǒng)的可靠性。它的理論基石是1948年Shannon在《通信的數(shù)字理論》中提出的著名的有擾信道編碼定理。糾錯(cuò)碼按照不同的分類標(biāo)準(zhǔn),有著不同的分類。我們常用的是按照對(duì)信息元處理的不同方法來分類的,分為分組碼和卷積碼。分組碼是把信源輸出的信息序列,以k個(gè)碼元?jiǎng)澐譃橐欢?,通過編碼器把這段的k個(gè)信息元,按一定規(guī)則產(chǎn)生r個(gè)校驗(yàn)(監(jiān)督)元,輸出長(zhǎng)為n=k+r的一個(gè)碼組。比較常用的有BCH碼、RS碼、Hamming碼等。卷積碼是把輸出信源輸出的信息序列,以k0個(gè)(k0通常小于k)碼元分為段,通過編碼器輸出長(zhǎng)為n0(≥通常小于k)碼元分為一段,通過編碼器輸出長(zhǎng)為n0(≥通常小于k)碼元分為一段,通過編碼器輸出為n0(≥k0)的一的碼以。但是該碼段的n0-k0個(gè)校驗(yàn)元不僅與本組的信息有關(guān),而且也與其前m段信息元有關(guān),稱m為編碼存儲(chǔ)。因此卷積碼用(n0,k0,k)表示。

由信道編碼理論可知,隨著碼長(zhǎng)n的增加,解碼錯(cuò)誤概率以指數(shù)方式趨近于零。因此,為提高糾錯(cuò)碼的有效性,就必須使用長(zhǎng)碼。但碼長(zhǎng)增加,碼率會(huì)相應(yīng)下降,解碼設(shè)備的復(fù)雜性與計(jì)算量也相應(yīng)增加,級(jí)聯(lián)碼有針對(duì)性的解決這了一矛盾。它將編碼過程分為前后串行的幾級(jí)完成,可以滿足信道糾錯(cuò)對(duì)編碼長(zhǎng)度的要求,得到與長(zhǎng)碼相同的糾錯(cuò)能力和高編碼增益;而且增加的編/解碼復(fù)雜度不是很大。其原理示意框圖如圖1所示。

級(jí)聯(lián)碼有內(nèi)碼和外碼兩級(jí),內(nèi)碼是GF(2)上的一個(gè)[n,k]碼,外碼是GF(2k)上的[N,K]壽終正寢,編碼規(guī)則如下。

①先將k×k個(gè)二進(jìn)制信息元?jiǎng)澐殖蒏段,每段有k個(gè)信息元。

②每段的k個(gè)信息元可看成是GF(2k)上的一個(gè)符號(hào)。將K個(gè)符號(hào)按外碼的編碼規(guī)則編成一個(gè)外碼,碼長(zhǎng)為N,有K個(gè)信息符號(hào),N-K個(gè)校驗(yàn)符號(hào),最小碼距為do,碼率Ro=K/N。

③外碼的每一個(gè)符號(hào),看成是k個(gè)二進(jìn)制碼元的碼組,輸入內(nèi)碼編碼器,得到一個(gè)內(nèi)存,碼長(zhǎng)n,有n-k個(gè)校驗(yàn)元,最小碼距為di,碼率Ri=k/n,由此得到N個(gè)[n,k]內(nèi)碼的碼字序徇。兩級(jí)編碼總共得到N×n個(gè)二進(jìn)制碼元,K×k個(gè)信息元,組成[K×n,K×k,do×di]級(jí)聯(lián)碼的碼。

我們選用的外碼為RS(31,15)碼,生成多項(xiàng)式為G(X)=1+x2+x3,內(nèi)碼用卷積碼(2,1,7),其生成多項(xiàng)式G0=171,G1=131(都是八進(jìn)制)。RS碼是GF(q)(q!=2)上,碼長(zhǎng)N=q-1的本原BCH碼,具有很強(qiáng)的糾錯(cuò)能力,其最大可能的最小距離是校驗(yàn)元的個(gè)數(shù)加1,因而RS碼是一種極大最小距離可分碼(MDS),是一種最佳的線性循環(huán)碼。本例中使用的RS(31,15)碼的漢明距為17,可以糾8個(gè)錯(cuò)誤。交織技術(shù)是抗突發(fā)干擾的重要手段,它是采用一個(gè)交織矩陣,存儲(chǔ)方向與發(fā)送時(shí)的方向不一樣,從而將突發(fā)錯(cuò)誤離散化,提高抗突發(fā)干擾的能力。本方案中RS編碼按行存儲(chǔ),發(fā)送時(shí)按列,并且對(duì)每列都進(jìn)行卷積編碼,可以抵抗8×列長(zhǎng)的突發(fā)干擾。卷積編碼Viterbi軟判決解碼,可以充分的利用各個(gè)碼組之間的相關(guān)性,提高很高的編碼增益。各個(gè)組成碼和級(jí)聯(lián)后的糾錯(cuò)性能仿真圖如圖2所示。

2 級(jí)聯(lián)碼的DSP編程實(shí)現(xiàn)

由于RS碼和卷積碼的Viterbi解碼運(yùn)算量都很大,所以需要大量的存儲(chǔ)空間。本方案中實(shí)現(xiàn)在100kbps的信道上,RS碼的解碼運(yùn)算量為8MIPS,Viterbi解碼需要14MIPS。整個(gè)編解碼程序需要24MIPS,因而選用在TMS320C54X芯片上實(shí)現(xiàn)。使用TI公司推出有XXA進(jìn)行編程開發(fā),考慮到編程的可移植性、可讀性和效率,采用C語言與DSP匯編語言混合編程實(shí)現(xiàn)。Viterbi解碼的算法由于程序運(yùn)算量很大,采用DSP匯編語言來實(shí)現(xiàn),蓁部分結(jié)構(gòu)如圖3所示。下面我們分別對(duì)整個(gè)系統(tǒng)中的關(guān)鍵部分RS碼迭代解碼和卷積碼Viterbi解碼中的編程進(jìn)行闡述。

2.1 RS碼迭代解碼的實(shí)現(xiàn)

RS解碼分頻域解碼和時(shí)域解碼,比較常用的解碼方法是時(shí)域的迭代解碼。解碼的主要步驟如下:①由接收碼字r(x)求出部分伴隨式Si的值,若Si全為0,則輸出接收碼字r(x);②由伴隨式Si求出σi(i=1,2,…K),確定差錯(cuò)多項(xiàng)式σ(x);③通過搜索法得到σ(x)的根,進(jìn)一步確定差錯(cuò)位置βi;

④由部分伴隨式Si及其差錯(cuò)位置βi求出差錯(cuò)大?。虎萦刹铄e(cuò)位置和差錯(cuò)大小求出誤碼多項(xiàng)式e(x),計(jì)算c(x)=r(x)-e(x);⑥校驗(yàn)是否成立,若成立,則輸出c(x),否則輸出r(x)。

程序設(shè)計(jì)的關(guān)鍵在于域中運(yùn)算的實(shí)現(xiàn)。對(duì)于中的乘法,可以采用指數(shù)形式表示元素,從而將相乘運(yùn)算轉(zhuǎn)換成相加運(yùn)算。對(duì)于域中的加法,我們采用矢量形式表示,從而將加法運(yùn)算轉(zhuǎn)換成位異或運(yùn)算。因而我們需要設(shè)計(jì)兩張查找表,當(dāng)遇到加法運(yùn)算時(shí),可以很方便的將元素從指數(shù)形式轉(zhuǎn)換成矢量形式;遇到乘法時(shí),可以將元素從矢量從指數(shù)形式轉(zhuǎn)換成矢量形式;遇到乘法時(shí),可以將元素從矢量形式轉(zhuǎn)換成多項(xiàng)式形式。下面給出的是GF(2 4)域中,元素從指數(shù)形式轉(zhuǎn)換矢量形式查表Alpha_to,由矢量形式轉(zhuǎn)換成指數(shù)形式查表Index_of,其中域的生成多項(xiàng)式是g(x)=x5+x2+1。

Int Index_of[]={-1,31,1,18,2,5,19,11,3,29,6,27,20,8,12,23,4,10,30,17,7,22,28,26,21,25,9,16,13,14,24,15};

Int Alpha_to[]={1,2,4,8,16,5,10,20,13,26,17,7,14,28,29,31,27,19,3,6,12,24,21,15,30,25,23,11,22,9,18,1};

由上面我們可以很方便地進(jìn)行運(yùn)算,例如伴隨式的計(jì)算程序如下:

for(j=0;j<NN;j++)

if(recd[j]!=0) s[i]^=Alpha_to[(Index_of[j])+i*j]]+i*j)%NN];其中recd[]存儲(chǔ)的是Yi的值。是域中的本原元。

2.2 卷積碼Viterbi解碼的實(shí)現(xiàn)

Viterbi解碼算法是一種最大似然算法,它不是在網(wǎng)格圖上依次比較所有可能的路徑,而是接收一段,計(jì)算、比較一段,保留最有可能的路徑,從而達(dá)到整個(gè)碼序列是一個(gè)最大似然序列。雖然如此,Viterbi解碼算法的運(yùn)算量還是巨大的,而且隨著卷積碼結(jié)束長(zhǎng)度的增大成幾何級(jí)數(shù)增長(zhǎng)。

    2.2 卷積碼Viterbi解碼的實(shí)現(xiàn)

Viterbi解碼算法是一種最大似然算法,它不是在網(wǎng)絡(luò)圖上依次比較所有可能的路徑,而是接收一段,計(jì)算,比較一段,保留最有可能的路徑,從而達(dá)到整個(gè)碼序列是一個(gè)最大似然序列。雖然如此,Viterbi解碼算法的運(yùn)算量還是巨大的,而且隨著卷積碼約束長(zhǎng)度的增大成幾何級(jí)數(shù)增長(zhǎng)。因而如何減少運(yùn)算量,盡可能的采用結(jié)束長(zhǎng)度長(zhǎng)的碼,成為Viterbi解碼程序設(shè)計(jì)的關(guān)鍵。54X系列DSP中的結(jié)構(gòu)和指令系統(tǒng),通過精巧的算法和編程,可以使Viterbi解碼快速實(shí)現(xiàn)。許多卷積碼網(wǎng)絡(luò)圖中存在蝶形結(jié)構(gòu),因而可以利用DSP的相加、比較和存儲(chǔ)單元(ACS)快速地實(shí)現(xiàn)蝶形運(yùn)算。DSP的雙字節(jié)指令,可以在個(gè)周期內(nèi)進(jìn)行單字節(jié)加減運(yùn)算。指令系統(tǒng)包括單尋址重復(fù)和塊指令重復(fù)操作??傊?,通過充分利用DSP芯片的特點(diǎn)進(jìn)行編程,可以達(dá)到較快的速度。蝶形單元運(yùn)算的宏編程如下:

BFLY_DIR .macro

DADST *AR5,A ;A=Old_Met(2*j)+T//Old_Met(2*j+1)-T

DSADT *AR5+,B ;B=Old_Met(2*j)-T//Old_Met(2*j+1)+T

CMPS A,*AR4+ ;New_Met(j)=(Max (Old_Met(2*j)+T,

;Old_Met(2*j+1)-T)TRN=TRN<<1

;If(Old_Met(2*j)+T=<Old_Met(2*j+1)

;T)Then TRN[0]=1

CMPS B,*AR3+ ;New_Met(j+2^(k-2))=(Max(Old_Met

;(2*j)-T,Old_Met(2*j+1)+T)

;TRN=TRN<<1

;If(Old_Met(2*j)+T=<Old_Met(2*j+1)

;T) Then TRN[0]=1

.endm

(2,1,7)的卷積碼共有64個(gè)狀態(tài),需保留一條重量最大路徑(幸存路徑)。對(duì)每一個(gè)節(jié)點(diǎn)的組輸入解碼碼元(2個(gè)),需要計(jì)算碼元重量增量,通過32個(gè)蝶形運(yùn)算單元來選擇更新64個(gè)狀態(tài)的存儲(chǔ)路徑。

    由于解碼處理的一個(gè)數(shù)據(jù)流,不可能等待所有輸入完以后再解碼,因而需要回溯。實(shí)驗(yàn)證明,當(dāng)存儲(chǔ)路徑是約束長(zhǎng)度的5倍時(shí),每條路徑的前端節(jié)點(diǎn)就收斂了,因而不需要等接收完成就可以輸出。我們?cè)诰幊讨校捎昧诵枰冉邮胀瓿删涂梢暂敵?。我們?cè)诰幊讨?,采用了固定長(zhǎng)度的Viterbi解碼算法,即一個(gè)幀長(zhǎng)。因而在卷積碼的編程器端需要添加0,使編碼器的狀態(tài)因而在卷積碼的編碼器端需要添加0,使編碼器的狀態(tài)最后歸0。同樣,在解碼器端最后也是收斂于0狀態(tài)。

結(jié)語

本文就在TMS320C54X上實(shí)現(xiàn)RS+交織+卷積的級(jí)聯(lián)編碼技術(shù)進(jìn)行了探討,給出了性能仿真和編程實(shí)現(xiàn)中的一些關(guān)鍵思想。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉