0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深度解讀VHDL語言的卷積碼和Viterbi譯碼的實現(xiàn)

電子工程師 ? 來源:微型機與應(yīng)用 ? 作者:陶 杰 王 欣 張?zhí)燧x ? 2021-05-12 15:22 ? 次閱讀

摘 要: 介紹并用VHDL語言實現(xiàn)了卷積編碼和維特比譯碼。根據(jù)編碼器特征設(shè)計了一種具有針對性的簡潔的維特比譯碼器結(jié)構(gòu),并通過ModelSim平臺驗證了該設(shè)計的正確性。

卷積碼自1955年由愛里斯(Elias)提出以來,因其良好的糾錯能力,已經(jīng)在現(xiàn)代通信系統(tǒng)中得到了廣泛應(yīng)用,比如,電力系統(tǒng)通信、衛(wèi)星通信、移動通信等。Viterbi譯碼是1967年維特比(Viterbi)基于Viterbi算法提出的,這種譯碼算法是基于碼的網(wǎng)格(trellis)圖基礎(chǔ)之上的一種最大似然譯碼算法,是一種最佳的概率譯碼算法[1]。本設(shè)計是在認真研究了卷積編碼和維特比譯碼原理以后,用VHDL語言實現(xiàn)了(2,1,2)卷積編碼,并根據(jù)這種編碼特性簡化了相應(yīng)的維特比譯碼器結(jié)構(gòu)。

1 卷積編碼

卷積碼是一種有限記憶系統(tǒng),它與分組碼類似,也是先將信息序列分隔成長度為k的一個個分組;不同的是,某一時刻的編碼輸出不僅取決于本時刻的分組,而且取決于本時刻以前的L個分組[2],稱L+1為約束長度。一般情況下卷積碼寫成(n,k,L)的形式,其中:n表示編碼器有n位編碼輸出,k表示編碼器有k位輸入。如果用R表示卷積編碼的效率,則R=k/n。

圖1是(n,k,L)卷積編碼器的一般結(jié)構(gòu)圖[2]。從該圖可以看出,串行信號可由串/并轉(zhuǎn)換器轉(zhuǎn)換成L個分組,并按位存儲到k-1個存儲器中,存儲器中的每一個單元與線性組合器的連線表示該單元數(shù)據(jù)參與了線性組合計算,但實際中是否參與取決于線性組合系數(shù)。

在二進制系統(tǒng)中,該系數(shù)為“0”和“1”,當(dāng)系數(shù)為“0”時,表示該單元數(shù)據(jù)沒參與線性組合計算;當(dāng)系數(shù)為“1”時,表示該單元數(shù)據(jù)參與了線性組合計算。并/串轉(zhuǎn)換器可將線性組合器計算得到的并行結(jié)果轉(zhuǎn)化成串行輸出。

o4YBAGCbgbGADUrNAADUZXct950313.png

圖1示意的是卷積編碼器的一般結(jié)構(gòu),實際應(yīng)用時可根據(jù)需求進行相應(yīng)改變。例如圖2是(2,1,2)碼的編碼器,由于只有一位輸入,串/并轉(zhuǎn)換器自然不存在,線性組合器就是兩個模2加法器,存儲單元由兩個移位寄存器組成,其生成多項式矩陣可表示為:G(D)=[1+D+D2,1+D2]。

圖3是圖2所示卷積碼的狀態(tài)轉(zhuǎn)移圖,根據(jù)這個狀態(tài)轉(zhuǎn)移圖用VHDL語言實現(xiàn)卷積編碼。圖3中S0、S1、S2、S3表示該卷積碼的4個不同狀態(tài),編程時用狀態(tài)機完成狀態(tài)之間的跳變和編碼輸出。

10601074305040.gif

10601152305384.gif

部分程序如下:

……

if(clk1=′1′) then

state 《=next_state;

……

else

state 《=state;

……

case state is

when “00” =》

if(datain = ′0′) then

next_state 《= “00”;

enc_out 《= “00”;

else

next_state 《= “10”;

enc_out 《= “11”;

end if;

when “01” =》

……

其中,clk1為編碼時鐘(另一時鐘是碼輸入時鐘,為clk1的2倍頻),state為本次編碼狀態(tài),并根據(jù)它的值和數(shù)據(jù)輸入(datain)的值給出卷積碼的下一個狀態(tài)值(next_state)和編碼輸出值(enc_out)。如此往復(fù)循環(huán)下去,便可得到卷積碼。

2 維特比譯碼

維特比譯碼算法是一種最大似然譯碼算法。根據(jù)維特比譯碼算法的譯碼步驟,譯碼算法的實現(xiàn)一般包括:加比選模塊、度量查找表、狀態(tài)變量存儲器等模塊,如圖4所示。本設(shè)計根據(jù)該卷積碼的特性,找到一種簡便的改進譯碼方法。

10601432485479.gif

通過圖3可知,到達每一狀態(tài)的輸入碼均相同。例如,無論是由S0轉(zhuǎn)變成S1還是由S2轉(zhuǎn)變成S1,雖然編碼輸出段不一樣,但是碼輸入都是‘1’,其他狀態(tài)之間的轉(zhuǎn)變也是如此。因而,通過這個特征可以去掉該卷積碼的維特比譯碼實現(xiàn)時的度量查找表和路徑存儲器等模塊,只保留加比選模塊即可,如圖5所示,從而簡化了維特比譯碼算法的實現(xiàn)。再結(jié)合該卷積碼的狀態(tài)轉(zhuǎn)移圖,畫出相應(yīng)籬笆圖,如圖6所示。

10601563831092.gif

在這個譯碼器結(jié)構(gòu)中,“加”是指計算在該時刻實際編碼輸入與圖3中狀態(tài)轉(zhuǎn)移編碼輸出之間的漢明距,“比”是指比較出上述漢明距最小距離,“選”是指通過“比”的結(jié)果選擇一位最佳碼字輸出。按照這一結(jié)構(gòu),在本時刻即可得到一位最佳輸出碼字。

例如,在L=0時刻時,實際編碼輸入若為“01”或“10”,則可以通過判斷L=1時刻的實際編碼輸入來選擇一位最佳碼字輸出。本設(shè)計運用VHDL語言編程實現(xiàn)這一譯碼過程時,采用了兩個時鐘,在一個clk周期內(nèi)將16 bit卷積碼輸入到譯碼器內(nèi),然后再由其8倍頻時鐘clk1完成“加”、“比”、“選”、譯碼輸出等動作。由于信號只能采用阻塞賦值,因而,“加”與“比”、“選”分別在兩個clk1時鐘周期內(nèi)完成,并且“加”先于后兩者1個時鐘周期。

3 仿真結(jié)果

3.1 卷積編碼仿真結(jié)果

依據(jù)“卷積編碼”單元分析,運用VHDL語言在ModelSim下實現(xiàn)的圖2編碼器仿真結(jié)果,如圖7所示,當(dāng)輸入碼分別為:10111000、11000000、01001000時,對應(yīng)輸出碼序列:1110000110011100、1101011100000000、0011101111101100。

可以通過輸入碼和生成多項式矩陣來驗證此卷積編碼是正確有效的。圖7中dataouta為編碼輸出端,clr為編碼器清零端,datain為串行碼輸入端,clk為碼輸入時鐘,clk1為編碼時鐘。

3.2 維特比譯碼仿真結(jié)果

依據(jù)“維特比譯碼”單元分析,運用VHDL語言在ModelSim下實現(xiàn)的圖5譯碼器仿真結(jié)果如圖8所示,當(dāng)輸入碼分別為:1110000110011100、1101011100000000、0011101111101100時,對應(yīng)輸出碼序列為:10111000、11000000、01001000。

圖8中c_out為譯碼輸出端,clr_viterbi_acs為譯碼器清零端,c_in為卷積碼并行輸入端,clk為譯碼處理時鐘,clk2為并行碼輸入時鐘。

10601758053510.gif

本文利用VHDL語言在ModelSim平臺上實現(xiàn)與驗證了(2,1,2)卷積編碼和維特比譯碼,并根據(jù)給出的編碼器的特征簡化了譯碼器結(jié)構(gòu),從而減小了用VHDL語言編程的復(fù)雜度,同時也提高了程序的健壯性。該設(shè)計可以為同類型采用卷積編碼和維特比譯碼的方案提供一定的幫助。

作者:陶 杰 王 欣 張?zhí)燧x

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 轉(zhuǎn)換器
    +關(guān)注

    關(guān)注

    27

    文章

    8576

    瀏覽量

    146538
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7403

    瀏覽量

    163393
  • vhdl
    +關(guān)注

    關(guān)注

    30

    文章

    816

    瀏覽量

    128018
  • 卷積編碼
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    2626
收藏 人收藏

    評論

    相關(guān)推薦

    如何在Tensorflow中實現(xiàn)卷積

    在TensorFlow中實現(xiàn)卷積(也稱為轉(zhuǎn)置卷積或分數(shù)步長卷積)是一個涉及多個概念和步驟的過程。反卷積
    的頭像 發(fā)表于 07-14 10:46 ?492次閱讀

    深度學(xué)習(xí)中反卷積的原理和應(yīng)用

    像分割、圖像重建和生成對抗網(wǎng)絡(luò)(GANs)等,反卷積展現(xiàn)出了其獨特的優(yōu)勢和廣泛的應(yīng)用前景。本文將詳細探討深度學(xué)習(xí)中的反卷積技術(shù),包括其定義、原理、實現(xiàn)方式、應(yīng)用場景以及與其他上采樣方法
    的頭像 發(fā)表于 07-14 10:22 ?1021次閱讀

    基于PyTorch的卷積核實例應(yīng)用

    深度學(xué)習(xí)和計算機視覺領(lǐng)域,卷積操作是一種至關(guān)重要的技術(shù),尤其在圖像處理和特征提取方面發(fā)揮著核心作用。PyTorch作為當(dāng)前最流行的深度學(xué)習(xí)框架之一,提供了強大的張量操作功能和靈活的API,使得
    的頭像 發(fā)表于 07-11 15:19 ?301次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的基本概念、原理及特點

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)是一種深度學(xué)習(xí)算法,它在圖像識別、視頻分析、自然語言處理等領(lǐng)域有著廣泛的應(yīng)用。本文將詳細介紹卷積
    的頭像 發(fā)表于 07-11 14:38 ?543次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)概述及Python實現(xiàn)

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks, CNN)是一類包含卷積計算且具有深度結(jié)構(gòu)的前饋神經(jīng)網(wǎng)絡(luò)(Feedforward Neural Networks),是
    的頭像 發(fā)表于 07-04 14:22 ?323次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)示例

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡稱CNN)是一種深度學(xué)習(xí)模型,主要用于處理具有網(wǎng)格結(jié)構(gòu)的數(shù)據(jù),如圖像。CNN通過卷積層自動提取圖像特征,然后通過全連接層進行
    的頭像 發(fā)表于 07-03 10:51 ?311次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的實現(xiàn)原理

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、視頻分析、自然語言處理等領(lǐng)域。本文將詳細介紹卷積神經(jīng)網(wǎng)絡(luò)的
    的頭像 發(fā)表于 07-03 10:49 ?450次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)和工作原理

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、視頻分析、自然語言處理等領(lǐng)域。本文將詳細介紹卷積神經(jīng)網(wǎng)絡(luò)的
    的頭像 發(fā)表于 07-03 09:38 ?312次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練的是什么

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、視頻分析、自然語言處理等領(lǐng)域。本文將詳細介紹卷積神經(jīng)網(wǎng)絡(luò)的
    的頭像 發(fā)表于 07-03 09:15 ?271次閱讀

    深度學(xué)習(xí)與卷積神經(jīng)網(wǎng)絡(luò)的應(yīng)用

    到自然語言處理,深度學(xué)習(xí)和CNN正逐步改變著我們的生活方式。本文將深入探討深度學(xué)習(xí)與卷積神經(jīng)網(wǎng)絡(luò)的基本概念、工作原理及其在多個領(lǐng)域的應(yīng)用,并展望其未來的發(fā)展趨勢。
    的頭像 發(fā)表于 07-02 18:19 ?667次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的原理與實現(xiàn)

    1.卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、視頻分析、自然語言處理等領(lǐng)域。 卷積神經(jīng)網(wǎng)絡(luò)是一種前饋
    的頭像 發(fā)表于 07-02 16:47 ?378次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的基本原理和應(yīng)用范圍

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、語音識別、自然語言處理等領(lǐng)域。本文將詳細介紹卷積神經(jīng)網(wǎng)絡(luò)的基
    的頭像 發(fā)表于 07-02 15:30 ?666次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)及其功能

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、視頻分析、自然語言處理等領(lǐng)域。本文將詳細介紹卷積神經(jīng)網(wǎng)絡(luò)的基
    的頭像 發(fā)表于 07-02 14:45 ?805次閱讀

    verilog實現(xiàn)卷積運算

    在Verilog中實現(xiàn)卷積運算,你可以使用以下示例代碼。這里假設(shè)輸入數(shù)據(jù)是有符號8位數(shù),輸出數(shù)據(jù)也是有符號8位數(shù)。卷積在數(shù)字信號處理中通常指的是兩個序列的逐元素乘積的和,也就是點乘。 module
    發(fā)表于 03-26 07:51

    基于VHDL語言實現(xiàn)遠程防盜報警設(shè)計

    電子發(fā)燒友網(wǎng)站提供《基于VHDL語言實現(xiàn)遠程防盜報警設(shè)計.pdf》資料免費下載
    發(fā)表于 11-08 14:33 ?0次下載
    基于<b class='flag-5'>VHDL</b><b class='flag-5'>語言實現(xiàn)</b>遠程防盜報警設(shè)計