摘 要: 提出一種基于FPGA" title="FPGA">FPGA技術(shù)的偽隨機(jī)序列" title="偽隨機(jī)序列">偽隨機(jī)序列編解碼器的設(shè)計(jì)方案,用以模擬擴(kuò)頻通信" title="擴(kuò)頻通信">擴(kuò)頻通信的過程,,可用于現(xiàn)今高校的擴(kuò)頻通信技術(shù)教學(xué)工作,。
關(guān)鍵詞: 擴(kuò)頻通信 偽隨機(jī)序列 FPGA
1 擴(kuò)頻通信技術(shù)及理論基礎(chǔ)
擴(kuò)頻通信技術(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所示,。
2 擴(kuò)頻系統(tǒng)的偽隨機(jī)序列
在擴(kuò)展頻譜通信系統(tǒng)中,偽隨機(jī)序列起著很重要的作用,。在直擴(kuò)系統(tǒng)中,,用偽隨機(jī)序列將傳輸信息展寬,在接收時(shí)又用它將信號(hào)壓縮,,并使干擾信號(hào)功率擴(kuò)散,,提高了系統(tǒng)的抗干擾能力;在跳頻系統(tǒng)中,,用偽隨機(jī)序列控制脈沖發(fā)送的時(shí)間和持續(xù)時(shí)間,。由此可見,偽隨機(jī)序列性能的好壞是一個(gè)至關(guā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),。
首先要解決幀同步的問題,,即如何在對(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è)超過閾值的信號(hào)之后才認(rèn)定達(dá)到了完全的同步,;在此之后進(jìn)行同步解碼,等收到第一個(gè)0信號(hào)之后,,進(jìn)入數(shù)據(jù)接收狀態(tài),,這樣就解決了如何同步的問題。在進(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ù)上面的過程,,再次達(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)連接到FPGA管腳上,,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)串行模塊,。由于漢明碼的編解碼過程是對(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)過漢明碼編碼后變?yōu)?2位并行數(shù)據(jù);在p_s模塊,,把12位并行數(shù)據(jù)讀入寄存器,,再依次移位輸出,即完成了編碼的過程,。解碼過程與其類似,。從圖中可以看到,經(jīng)編碼后8位數(shù)據(jù)(如11011010)變?yōu)?2位(1101101011100),,之后又可解碼出原數(shù)據(jù),,說明這兩個(gè)模塊的設(shè)計(jì)達(dá)到了預(yù)期效果。
3.3 m_code模塊
當(dāng)本模塊中的數(shù)據(jù)采樣時(shí)鐘信號(hào)clk_1的上升沿來臨的時(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)),完成編碼的過程,。在本模塊中還同時(shí)進(jìn)行了發(fā)送信號(hào)的調(diào)制過程,,也就是在產(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í)移位寄存器,,通過查表知道產(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)來一個(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序列串。
3.4 addnoise模塊
此模塊是一行為模塊,,模擬的是實(shí)際傳輸過程,。這個(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,。也就是說在clk_31的上升沿到來的時(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)說過,,為了解決編碼和解碼時(shí)鐘不完全一樣的問題,,在每發(fā)送480個(gè)數(shù)據(jù)之后重新進(jìn)行一次同步查找過程。這由其中的一個(gè)計(jì)數(shù)器main_counter來控制,,當(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)行多次的過程才可以將一個(gè)完整的信息完全發(fā)送到接收端,。
在這里需要對(duì)程序中的一些細(xì)節(jié)與對(duì)應(yīng)的圖像進(jìn)行比較詳細(xì)的說明。
首先,,在同步頭的判斷時(shí)選取的閾值是28,。在尋找同步的過程中,如果接收到的31個(gè)信號(hào)和本地的31位M序列沒有完全同步,,則由于M序列的性質(zhì)使得累加的結(jié)果比較小,,一般小于10,即使在噪聲的干擾下也不會(huì)超出20的水平,;但是如果兩者完全同步,,累加的結(jié)果應(yīng)當(dāng)在30左右。所以在這里所選取的閾值為28,。
第二,,在本模塊中,不論是尋找同步頭還是同步解碼,,對(duì)解碼用到的累加器所賦的初始值都為50,。也就是說,在上面介紹的判斷同步頭的過程中,,在對(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)的過程中,,舉個(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é)果,。這種方法只有通過相應(yīng)的擴(kuò)位運(yùn)算才可以達(dá)到所要的結(jié)果。也就是說對(duì)于輸入的3位信號(hào)(indata),,必須將其擴(kuò)充成為相應(yīng)的9位值才可以跟sum進(jìn)行加減運(yùn)算,。還是以上面數(shù)據(jù)為例,在indata(2’b110)數(shù)據(jù)一進(jìn)來就將其擴(kuò)展成為帶符號(hào)位9位的數(shù)據(jù)(9’b111111110),,兩者都是表示帶符號(hào)位的數(shù)據(jù)-2,但是后者和sum進(jìn)行加減時(shí)就不會(huì)出現(xiàn)上面的問題,。
但是這樣對(duì)于這種方法來說,,遠(yuǎn)不如直接將累加器sum的初始值設(shè)定為50方便,這樣一來就只在正數(shù)的范圍內(nèi)進(jìn)行考慮,。同樣的到達(dá)同步解碼狀態(tài)后,,實(shí)際也不是將0定為判斷基準(zhǔn),而是50,。通過如圖9所示的圖像可以看出來,。
上面的圖形是在找到同步頭之后進(jìn)行同步解碼的開始情況。最上面兩個(gè)信號(hào)是輸入信號(hào)indata和將輸入信號(hào)經(jīng)過絕對(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,,見圖10,。
圖中在計(jì)數(shù)器j達(dá)到30的時(shí)候,對(duì)應(yīng)的sum值為12(小于50),,于是outdata進(jìn)行判斷輸出,,輸出信號(hào)為0(低電平),。這樣就完成了計(jì)數(shù)累加判斷的過程。
4 系統(tǒng)性能
在加入差錯(cuò)控制編碼后,,傳輸20 000個(gè)字節(jié)未發(fā)現(xiàn)誤碼,。
參考文獻(xiàn)
[1] 夏宇聞. Verilog 數(shù)字系統(tǒng)設(shè)計(jì)教程.北京:北京航空航天大學(xué)出版社,2003.
[2] 曹志剛,,錢亞生.現(xiàn)代通信原理.北京:清華大學(xué)出版社,,1992.
[3] 鄭繼禹,林基明.同步理論與技術(shù).北京:電子工業(yè)出版社,,2003.
[4] 曾興雯,,劉乃安,孫獻(xiàn)璞.擴(kuò)展頻譜通信及其多址技術(shù).西安:西安電子科技大學(xué)出版社,,2004.