摘 要: 提出一種基于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í)又用它將信號壓縮,并使干擾信號功率擴(kuò)散,提高了系統(tǒng)的抗干擾能力;在跳頻系統(tǒng)中,用偽隨機(jī)序列控制脈沖發(fā)送的時(shí)間和持續(xù)時(shí)間。由此可見,偽隨機(jī)序列性能的好壞是一個(gè)至關(guān)重要的問題。
m序列是最常用的一種偽隨機(jī)序列。它是最長線性反饋移位寄存器序列的簡稱。是由帶線性反饋的移位寄存器產(chǎn)生的序列,并且具有最長的周期。
帶線性反饋邏輯的移位寄存器設(shè)定各級寄存器的初始狀態(tài)后,在時(shí)鐘觸發(fā)下,每次移位后各級寄存器狀態(tài)會發(fā)生變化。觀察其中一級寄存器(通常位末級)的輸出,隨著移位時(shí)鐘節(jié)拍的推移會產(chǎn)生移位寄存器序列。它是一個(gè)周期序列,其周期不但與移位寄存器的級數(shù)有關(guān),而且與線性反饋邏輯有關(guān)。此外,周期還與移位寄存器的初始狀態(tài)有關(guān)。
一般情況下,n極線性反饋移位寄存器的構(gòu)造如圖2所示。
圖中,ci(i=0,1,···,n)表示反饋線的連接狀態(tài),ci=1表示連接線通,第n-i級輸出加入反饋中;ci=0表示連接線斷開,第n-i級輸出為參加反饋。因此,一般形式的線性反饋邏輯表達(dá)式為:
將等式左邊的an移至右邊,并將an=C0an(C0=1)代入上式,則上式可以改寫為:
并稱之為線性反饋移位寄存器的特征多項(xiàng)式。特征多項(xiàng)式與輸出序列的周期有密切的關(guān)系,一個(gè)產(chǎn)生最長線性反饋移位寄存器序列(即m序列)的n級移位寄存器,其特征多項(xiàng)式必須是n次的本原多項(xiàng)式。
3 設(shè)計(jì)模塊圖
設(shè)計(jì)選擇用(12,8)線性分組碼、5級M序列從2倍噪聲中恢復(fù)原始信號, 整個(gè)系統(tǒng)的構(gòu)架如圖3所示。
整個(gè)系統(tǒng)分為6大模塊,分別實(shí)現(xiàn)不同的功能。其中包括兩個(gè)行為模塊:信號產(chǎn)生即頂層測試模塊(Signal)、模擬信道加噪模塊(add_noise);4個(gè)可綜合模塊:漢明碼編碼和解碼模塊(ham_code、ham_decode)、m序列編碼和解碼模塊(m_code、m_decode)。
首先要解決幀同步的問題,即如何在對真正信號進(jìn)行m序列解碼之前判斷已經(jīng)達(dá)到完全的同步。在發(fā)送實(shí)際信號之前,發(fā)送一個(gè)8位的同步頭數(shù)據(jù)1111110,在接收端開始時(shí)每進(jìn)入一個(gè)信號就進(jìn)行一次乘法加法運(yùn)算,選取一個(gè)比較大的閾值,只有在開始接收到一個(gè)超過閾值的信號之后才認(rèn)定達(dá)到了完全的同步;在此之后進(jìn)行同步解碼,等收到第一個(gè)0信號之后,進(jìn)入數(shù)據(jù)接收狀態(tài),這樣就解決了如何同步的問題。在進(jìn)入數(shù)據(jù)接收狀態(tài)后,每收到480個(gè)(實(shí)際發(fā)送400個(gè),經(jīng)漢明碼編碼后變?yōu)?80個(gè))信號就進(jìn)行下一次尋找同步的狀態(tài),也就是重新發(fā)送一個(gè)8位的同步頭信號,重復(fù)上面的過程,再次達(dá)到同步,繼續(xù)接收下480個(gè)信號。這樣即使產(chǎn)生頻率錯(cuò)位也只會在480個(gè)信號的后幾個(gè)信號產(chǎn)生錯(cuò)誤,不會保持很多的錯(cuò)碼,是個(gè)很好的方案。
3.1 時(shí)鐘信號
此處把M序列時(shí)鐘信號連接到FPGA管腳上,clk_1及其31倍頻clk_31,其中clk_31時(shí)鐘頻率為20MHz(如圖4所示)。為驗(yàn)證此時(shí)鐘信號,選用RIGOL DS1102CD數(shù)字存儲示波器。DS1102CD數(shù)字存儲示波器是可選裝16通道邏輯分析儀的混合信號示波器,可以將16路數(shù)字信號和2路模擬信號同時(shí)顯示到屏幕上,它具備400 MSa/s實(shí)時(shí)采樣率、25 GSa/s等效采樣率和1M的存儲深度,且體積小巧、觸發(fā)靈敏度可調(diào),很適合日常實(shí)驗(yàn)使用。
3.2 ham_code,ham_decode模塊
漢明碼編解碼模塊的內(nèi)部框圖如圖5所示,其中s_p,p_s分別為串行轉(zhuǎn)并行和并行轉(zhuǎn)串行模塊。由于漢明碼的編解碼過程是對并行數(shù)據(jù)進(jìn)行處理,所以需要將輸入的串行數(shù)據(jù)流進(jìn)行轉(zhuǎn)換,編解碼完畢以后再轉(zhuǎn)換為串行。
兩個(gè)模塊聯(lián)合仿真結(jié)果如圖6所示,p_out_link信號為并行輸出控制信號,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í)鐘信號clk_1的上升沿來臨的時(shí)候,對同步頭信號或者要發(fā)送的隨機(jī)數(shù)據(jù)信號進(jìn)行采樣,并將采樣值存在輸入數(shù)據(jù)寄存器indata_buf中。由clk_31控制產(chǎn)生m序列的移位寄存器進(jìn)行循環(huán),產(chǎn)生相應(yīng)的m序列串(包含0、1信號),完成編碼的過程。在本模塊中還同時(shí)進(jìn)行了發(fā)送信號的調(diào)制過程,也就是在產(chǎn)生m序列串的同時(shí)對其完成相應(yīng)的調(diào)制:將信號1調(diào)制為2位的01(帶符號位的+1)信號;將信號0調(diào)制為2位的11(帶符號位的-1)信號。
圖7中最下邊的信號shift_buf就是產(chǎn)生m序列的5級移位寄存器,通過查表知道產(chǎn)生5級m序列的本原多項(xiàng)式為x5+x2+1,推出其線性反饋邏輯表達(dá)式為a5=于是將一個(gè)+1數(shù)據(jù)信號編碼并調(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信號對應(yīng)于一個(gè)-m序列串。每進(jìn)來一個(gè)clk_31上升沿就根據(jù)indata_buf中存的待發(fā)數(shù)據(jù)和移位寄存器的相應(yīng)關(guān)系發(fā)送一位信號,將待發(fā)送的信號轉(zhuǎn)化為與之對應(yīng)的±m序列串。
3.4 addnoise模塊
此模塊是一行為模塊,模擬的是實(shí)際傳輸過程。這個(gè)模塊相對比較簡單:將前一個(gè)coder模塊產(chǎn)生的m序列串(unnoised_data)讀入之后加入帶符號的2倍噪聲(noise<=random % 3產(chǎn)生最大值為2的隨機(jī)數(shù)),這樣所得到的就是加入噪聲的接收端信號(noised_data)。
圖8中可以看到, noised_data=unnoised_data+noise。也就是說在clk_31的上升沿到來的時(shí)候,將收到的M序列串與隨機(jī)噪聲相加,得到加噪聲的信號,在接收端進(jìn)行相應(yīng)的解調(diào),恢復(fù)原有信號。
3.5 decoder模塊
當(dāng)接收到同步頭結(jié)束信號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信號之后,開始對main_counter進(jìn)行計(jì)數(shù)加1。當(dāng)main_counter計(jì)數(shù)到480后,進(jìn)行同步頭再次檢測,再次達(dá)到同步之后重復(fù)上面的步驟。所以每次解碼只能得到480個(gè)數(shù)據(jù),要進(jìn)行多次的過程才可以將一個(gè)完整的信息完全發(fā)送到接收端。
在這里需要對程序中的一些細(xì)節(jié)與對應(yīng)的圖像進(jìn)行比較詳細(xì)的說明。
首先,在同步頭的判斷時(shí)選取的閾值是28。在尋找同步的過程中,如果接收到的31個(gè)信號和本地的31位M序列沒有完全同步,則由于M序列的性質(zhì)使得累加的結(jié)果比較小,一般小于10,即使在噪聲的干擾下也不會超出20的水平;但是如果兩者完全同步,累加的結(jié)果應(yīng)當(dāng)在30左右。所以在這里所選取的閾值為28。
第二,在本模塊中,不論是尋找同步頭還是同步解碼,對解碼用到的累加器所賦的初始值都為50。也就是說,在上面介紹的判斷同步頭的過程中,在對每一個(gè)輸入數(shù)據(jù)都進(jìn)行累加之后,實(shí)際選取的閾值是50+28=78。這樣做的目的很簡單,為了方便計(jì)算和相應(yīng)的判斷。因?yàn)檩斎氲男盘柨赡苁钦囊部赡苁秦?fù)的,所以所做的運(yùn)算也可能是加法或減法。如果把基準(zhǔn)值都賦為0,那么在電路實(shí)現(xiàn)的過程中,舉個(gè)很簡單的例子:9位的累加結(jié)果寄存器如果為0(二進(jìn)制表示為2’b000000000),加上輸入信號-2(即帶符號的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)算會出現(xiàn)預(yù)料之外的結(jié)果。這種方法只有通過相應(yīng)的擴(kuò)位運(yùn)算才可以達(dá)到所要的結(jié)果。也就是說對于輸入的3位信號(indata),必須將其擴(kuò)充成為相應(yīng)的9位值才可以跟sum進(jìn)行加減運(yùn)算。還是以上面數(shù)據(jù)為例,在indata(2’b110)數(shù)據(jù)一進(jìn)來就將其擴(kuò)展成為帶符號位9位的數(shù)據(jù)(9’b111111110),兩者都是表示帶符號位的數(shù)據(jù)-2,但是后者和sum進(jìn)行加減時(shí)就不會出現(xiàn)上面的問題。
但是這樣對于這種方法來說,遠(yuǎn)不如直接將累加器sum的初始值設(shè)定為50方便,這樣一來就只在正數(shù)的范圍內(nèi)進(jìn)行考慮。同樣的到達(dá)同步解碼狀態(tài)后,實(shí)際也不是將0定為判斷基準(zhǔn),而是50。通過如圖9所示的圖像可以看出來。
上面的圖形是在找到同步頭之后進(jìn)行同步解碼的開始情況。最上面兩個(gè)信號是輸入信號indata和將輸入信號經(jīng)過絕對值運(yùn)算得到的結(jié)果psumi,將帶符號的3位信號轉(zhuǎn)化為不帶符號的2位數(shù)據(jù),再根據(jù)與第j位+M序列符號位與輸入數(shù)據(jù)符號位的比較,選取相應(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就輸出信號為1,如果小于50就輸出為0,見圖10。
圖中在計(jì)數(shù)器j達(dá)到30的時(shí)候,對應(yīng)的sum值為12(小于50),于是outdata進(jìn)行判斷輸出,輸出信號為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.