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