新聞中心

EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 擴(kuò)頻通信中偽隨機(jī)序列編解碼器的FPGA實(shí)現(xiàn)

擴(kuò)頻通信中偽隨機(jī)序列編解碼器的FPGA實(shí)現(xiàn)

作者: 時(shí)間:2008-12-30 來(lái)源:網(wǎng)絡(luò) 收藏

1 技術(shù)及理論基礎(chǔ)
技術(shù)一般是將待傳送的信息數(shù)據(jù)被偽隨機(jī)編碼(擴(kuò)頻序列:Spread Sequence)調(diào)制,實(shí)現(xiàn)頻譜擴(kuò)展后再傳輸;接收端則采用相同的編碼進(jìn)行解調(diào)及相關(guān)處理,恢復(fù)原始信息數(shù)據(jù)。
一種典型的擴(kuò)頻系統(tǒng)的物理模型如圖1所示。

本文引用地址:http://www.butianyuan.cn/article/192174.htm


2 擴(kuò)頻系統(tǒng)的
在擴(kuò)展頻譜通信系統(tǒng)中,起著很重要的作用。在直擴(kuò)系統(tǒng)中,用將傳輸信息展寬,在接收時(shí)又用它將信號(hào)壓縮,并使干擾信號(hào)功率擴(kuò)散,提高了系統(tǒng)的抗干擾能力;在跳頻系統(tǒng)中,用偽隨機(jī)序列控制脈沖發(fā)送的時(shí)間和持續(xù)時(shí)間。由此可見(jiàn),偽隨機(jī)序列性能的好壞是一個(gè)至關(guān)重要的問(wèn)題。
m序列是最常用的一種偽隨機(jī)序列。它是最長(zhǎng)線性反饋移位寄存器序列的簡(jiǎn)稱。是由帶線性反饋的移位寄存器產(chǎn)生的序列,并且具有最長(zhǎng)的周期。
帶線性反饋邏輯的移位寄存器設(shè)定各級(jí)寄存器的初始狀態(tài)后,在時(shí)鐘觸發(fā)下,每次移位后各級(jí)寄存器狀態(tài)會(huì)發(fā)生變化。觀察其中一級(jí)寄存器(通常位末級(jí))的輸出,隨著移位時(shí)鐘節(jié)拍的推移會(huì)產(chǎn)生移位寄存器序列。它是一個(gè)周期序列,其周期不但與移位寄存器的級(jí)數(shù)有關(guān),而且與線性反饋邏輯有關(guān)。此外,周期還與移位寄存器的初始狀態(tài)有關(guān)。
一般情況下,n極線性反饋移位寄存器的構(gòu)造如圖2所示。


圖中,ci(i=0,1,???,n)表示反饋線的連接狀態(tài),ci=1表示連接線通,第n-i級(jí)輸出加入反饋中;ci=0表示連接線斷開,第n-i級(jí)輸出為參加反饋。因此,一般形式的線性反饋邏輯表達(dá)式為:

將等式左邊的an移至右邊,并將an=C0an(C0=1)代入上式,則上式可以改寫為:

并稱之為線性反饋移位寄存器的特征多項(xiàng)式。特征多項(xiàng)式與輸出序列的周期有密切的關(guān)系,一個(gè)產(chǎn)生最長(zhǎng)線性反饋移位寄存器序列(即m序列)的n級(jí)移位寄存器,其特征多項(xiàng)式必須是n次的本原多項(xiàng)式。
3 設(shè)計(jì)模塊圖
設(shè)計(jì)選擇用(12,8)線性分組碼、5級(jí)M序列從2倍噪聲中恢復(fù)原始信號(hào), 整個(gè)系統(tǒng)的構(gòu)架如圖3所示。

整個(gè)系統(tǒng)分為6大模塊,分別實(shí)現(xiàn)不同的功能。其中包括兩個(gè)行為模塊:信號(hào)產(chǎn)生即頂層測(cè)試模塊(Signal)、模擬信道加噪模塊(add_noise);4個(gè)可綜合模塊:漢明碼編碼和解碼模塊(ham_code、ham_decode)、m序列編碼和解碼模塊(m_code、m_decode)。
首先要解決幀同步的問(wèn)題,即如何在對(duì)真正信號(hào)進(jìn)行m序列解碼之前判斷已經(jīng)達(dá)到完全的同步。在發(fā)送實(shí)際信號(hào)之前,發(fā)送一個(gè)8位的同步頭數(shù)據(jù)1111110,在接收端開始時(shí)每進(jìn)入一個(gè)信號(hào)就進(jìn)行一次乘法加法運(yùn)算,選取一個(gè)比較大的閾值,只有在開始接收到一個(gè)超過(guò)閾值的信號(hào)之后才認(rèn)定達(dá)到了完全的同步;在此之后進(jìn)行同步解碼,等收到第一個(gè)0信號(hào)之后,進(jìn)入數(shù)據(jù)接收狀態(tài),這樣就解決了如何同步的問(wèn)題。在進(jìn)入數(shù)據(jù)接收狀態(tài)后,每收到480個(gè)(實(shí)際發(fā)送400個(gè),經(jīng)漢明碼編碼后變?yōu)?80個(gè))信號(hào)就進(jìn)行下一次尋找同步的狀態(tài),也就是重新發(fā)送一個(gè)8位的同步頭信號(hào),重復(fù)上面的過(guò)程,再次達(dá)到同步,繼續(xù)接收下480個(gè)信號(hào)。這樣即使產(chǎn)生頻率錯(cuò)位也只會(huì)在480個(gè)信號(hào)的后幾個(gè)信號(hào)產(chǎn)生錯(cuò)誤,不會(huì)保持很多的錯(cuò)碼,是個(gè)很好的方案。
3.1 時(shí)鐘信號(hào)
此處把M序列時(shí)鐘信號(hào)連接到管腳上,clk_1及其31倍頻clk_31,其中clk_31時(shí)鐘頻率為20MHz(如圖4所示)。為驗(yàn)證此時(shí)鐘信號(hào),選用RIGOL DS1102CD數(shù)字存儲(chǔ)示波器。DS1102CD數(shù)字存儲(chǔ)示波器是可選裝16通道邏輯分析儀的混合信號(hào)示波器,可以將16路數(shù)字信號(hào)和2路模擬信號(hào)同時(shí)顯示到屏幕上,它具備400 MSa/s實(shí)時(shí)采樣率、25 GSa/s等效采樣率和1M的存儲(chǔ)深度,且體積小巧、觸發(fā)靈敏度可調(diào),很適合日常實(shí)驗(yàn)使用。


3.2 ham_code,ham_decode模塊
漢明碼編解碼模塊的內(nèi)部框圖如圖5所示,其中s_p,p_s分別為串行轉(zhuǎn)并行和并行轉(zhuǎn)串行模塊。由于漢明碼的編解碼過(guò)程是對(duì)并行數(shù)據(jù)進(jìn)行處理,所以需要將輸入的串行數(shù)據(jù)流進(jìn)行轉(zhuǎn)換,編解碼完畢以后再轉(zhuǎn)換為串行。


兩個(gè)模塊聯(lián)合仿真結(jié)果如圖6所示,p_out_link信號(hào)為并行輸出控制信號(hào),error為錯(cuò)誤指示位。先把串行數(shù)據(jù)流依次讀入8位移位寄存器,每讀入8個(gè)數(shù)據(jù),產(chǎn)生一個(gè)p_out_link脈沖,將移位寄存器中的數(shù)據(jù)并行輸出;經(jīng)過(guò)漢明碼編碼后變?yōu)?2位并行數(shù)據(jù);在p_s模塊,把12位并行數(shù)據(jù)讀入寄存器,再依次移位輸出,即完成了編碼的過(guò)程。解碼過(guò)程與其類似。從圖中可以看到,經(jīng)編碼后8位數(shù)據(jù)(如11011010)變?yōu)?2位(1101101011100),之后又可解碼出原數(shù)據(jù),說(shuō)明這兩個(gè)模塊的設(shè)計(jì)達(dá)到了預(yù)期效果。


3.3 m_code模塊
當(dāng)本模塊中的數(shù)據(jù)采樣時(shí)鐘信號(hào)clk_1的上升沿來(lái)臨的時(shí)候,對(duì)同步頭信號(hào)或者要發(fā)送的隨機(jī)數(shù)據(jù)信號(hào)進(jìn)行采樣,并將采樣值存在輸入數(shù)據(jù)寄存器indata_buf中。由clk_31控制產(chǎn)生m序列的移位寄存器進(jìn)行循環(huán),產(chǎn)生相應(yīng)的m序列串(包含0、1信號(hào)),完成編碼的過(guò)程。在本模塊中還同時(shí)進(jìn)行了發(fā)送信號(hào)的調(diào)制過(guò)程,也就是在產(chǎn)生m序列串的同時(shí)對(duì)其完成相應(yīng)的調(diào)制:將信號(hào)1調(diào)制為2位的01(帶符號(hào)位的+1)信號(hào);將信號(hào)0調(diào)制為2位的11(帶符號(hào)位的-1)信號(hào)。
圖7中最下邊的信號(hào)shift_buf就是產(chǎn)生m序列的5級(jí)移位寄存器,通過(guò)查表知道產(chǎn)生5級(jí)m序列的本原多項(xiàng)式為x5+x2+1,推出其線性反饋邏輯表達(dá)式為a5=于是將一個(gè)+1數(shù)據(jù)信號(hào)編碼并調(diào)制為相應(yīng)的+M序列串:1 -1 -1 -1 -1 1 -1 1 -1 1 1 1 -1 1 1 -1 -1 -1 1 1 1 1 1 -1 -1 1 1 -1 1 -1 -1;相應(yīng)的0信號(hào)對(duì)應(yīng)于一個(gè)-m序列串。每進(jìn)來(lái)一個(gè)clk_31上升沿就根據(jù)indata_buf中存的待發(fā)數(shù)據(jù)和移位寄存器的相應(yīng)關(guān)系發(fā)送一位信號(hào),將待發(fā)送的信號(hào)轉(zhuǎn)化為與之對(duì)應(yīng)的±m(xù)序列串。


3.4 addnoise模塊
此模塊是一行為模塊,模擬的是實(shí)際傳輸過(guò)程。這個(gè)模塊相對(duì)比較簡(jiǎn)單:將前一個(gè)coder模塊產(chǎn)生的m序列串(unnoised_data)讀入之后加入帶符號(hào)的2倍噪聲(noise=random % 3產(chǎn)生最大值為2的隨機(jī)數(shù)),這樣所得到的就是加入噪聲的接收端信號(hào)(noised_data)。
圖8中可以看到, noised_data=unnoised_data+noise。也就是說(shuō)在clk_31的上升沿到來(lái)的時(shí)候,將收到的M序列串與隨機(jī)噪聲相加,得到加噪聲的信號(hào),在接收端進(jìn)行相應(yīng)的解調(diào),恢復(fù)原有信號(hào)。


3.5 decoder模塊
當(dāng)接收到同步頭結(jié)束信號(hào)0之后,就進(jìn)入了同步解調(diào)主體部分。在coder模塊中曾經(jīng)說(shuō)過(guò),為了解決編碼和解碼時(shí)鐘不完全一樣的問(wèn)題,在每發(fā)送480個(gè)數(shù)據(jù)之后重新進(jìn)行一次同步查找過(guò)程。這由其中的一個(gè)計(jì)數(shù)器main_counter來(lái)控制,當(dāng)查找到同步頭結(jié)束0信號(hào)之后,開始對(duì)main_counter進(jìn)行計(jì)數(shù)加1。當(dāng)main_counter計(jì)數(shù)到480后,進(jìn)行同步頭再次檢測(cè),再次達(dá)到同步之后重復(fù)上面的步驟。所以每次解碼只能得到480個(gè)數(shù)據(jù),要進(jìn)行多次的過(guò)程才可以將一個(gè)完整的信息完全發(fā)送到接收端。
在這里需要對(duì)程序中的一些細(xì)節(jié)與對(duì)應(yīng)的圖像進(jìn)行比較詳細(xì)的說(shuō)明。
首先,在同步頭的判斷時(shí)選取的閾值是28。在尋找同步的過(guò)程中,如果接收到的31個(gè)信號(hào)和本地的31位M序列沒(méi)有完全同步,則由于M序列的性質(zhì)使得累加的結(jié)果比較小,一般小于10,即使在噪聲的干擾下也不會(huì)超出20的水平;但是如果兩者完全同步,累加的結(jié)果應(yīng)當(dāng)在30左右。所以在這里所選取的閾值為28。
第二,在本模塊中,不論是尋找同步頭還是同步解碼,對(duì)解碼用到的累加器所賦的初始值都為50。也就是說(shuō),在上面介紹的判斷同步頭的過(guò)程中,在對(duì)每一個(gè)輸入數(shù)據(jù)都進(jìn)行累加之后,實(shí)際選取的閾值是50+28=78。這樣做的目的很簡(jiǎn)單,為了方便計(jì)算和相應(yīng)的判斷。因?yàn)檩斎氲男盘?hào)可能是正的也可能是負(fù)的,所以所做的運(yùn)算也可能是加法或減法。如果把基準(zhǔn)值都賦為0,那么在電路實(shí)現(xiàn)的過(guò)程中,舉個(gè)很簡(jiǎn)單的例子:9位的累加結(jié)果寄存器如果為0(二進(jìn)制表示為2’b000000000),加上輸入信號(hào)-2(即帶符號(hào)的3’b110),本應(yīng)當(dāng)產(chǎn)生-2的結(jié)果,但是在實(shí)際硬件實(shí)現(xiàn)的時(shí)候卻不能得到所要的答案。它的運(yùn)算方法為:
  

可以從上面的運(yùn)算結(jié)果中清楚地看出,直接在0的基礎(chǔ)上進(jìn)行加減運(yùn)算會(huì)出現(xiàn)預(yù)料之外的結(jié)果。這種方法只有通過(guò)相應(yīng)的擴(kuò)位運(yùn)算才可以達(dá)到所要的結(jié)果。也就是說(shuō)對(duì)于輸入的3位信號(hào)(indata),必須將其擴(kuò)充成為相應(yīng)的9位值才可以跟sum進(jìn)行加減運(yùn)算。還是以上面數(shù)據(jù)為例,在indata(2’b110)數(shù)據(jù)一進(jìn)來(lái)就將其擴(kuò)展成為帶符號(hào)位9位的數(shù)據(jù)(9’b111111110),兩者都是表示帶符號(hào)位的數(shù)據(jù)-2,但是后者和sum進(jìn)行加減時(shí)就不會(huì)出現(xiàn)上面的問(wèn)題。

但是這樣對(duì)于這種方法來(lái)說(shuō),遠(yuǎn)不如直接將累加器sum的初始值設(shè)定為50方便,這樣一來(lái)就只在正數(shù)的范圍內(nèi)進(jìn)行考慮。同樣的到達(dá)同步解碼狀態(tài)后,實(shí)際也不是將0定為判斷基準(zhǔn),而是50。通過(guò)如圖9所示的圖像可以看出來(lái)。


上面的圖形是在找到同步頭之后進(jìn)行同步解碼的開始情況。最上面兩個(gè)信號(hào)是輸入信號(hào)indata和將輸入信號(hào)經(jīng)過(guò)絕對(duì)值運(yùn)算得到的結(jié)果psumi,將帶符號(hào)的3位信號(hào)轉(zhuǎn)化為不帶符號(hào)的2位數(shù)據(jù),再根據(jù)與第j位+M序列符號(hào)位與輸入數(shù)據(jù)符號(hào)位的比較,選取相應(yīng)的加法或者減法運(yùn)算。
  從上圖中還可以看出,累加器sum的開始的基準(zhǔn)值為50。每進(jìn)入一個(gè)數(shù)據(jù)就在50的基準(zhǔn)上進(jìn)行加減法運(yùn)算。最后當(dāng)計(jì)數(shù)器j從0累加到31之后,就做一次相應(yīng)的判決輸出:如果sum值大于50就輸出信號(hào)為1,如果小于50就輸出為0,見(jiàn)圖10。


圖中在計(jì)數(shù)器j達(dá)到30的時(shí)候,對(duì)應(yīng)的sum值為12(小于50),于是outdata進(jìn)行判斷輸出,輸出信號(hào)為0(低電平)。這樣就完成了計(jì)數(shù)累加判斷的過(guò)程。
4 系統(tǒng)性能
在加入差錯(cuò)控制編碼后,傳輸20 000個(gè)字節(jié)未發(fā)現(xiàn)誤碼。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉