直接序列扩频通信系统
代碼下載:https://download.csdn.net/download/xvrixingkong/10968192
一、系統功能描述:
實現如下圖所示的直接序列擴頻通信系統。
信源——不斷發送簡單的四一零碼,即反復發送“11110”
擾碼——用偽隨機對數據比特進行擾碼,可利用移位寄存器產生擾碼序列,擾碼序列的生成多項式為 ,移位寄存器的初始狀態為“100101010000000”。擾碼模塊的結構框圖如下圖所示。
交織——采用簡單的塊交織,交織深度為64,交織器為8行8列,橫向讀入,縱向讀出,可采用雙RAM結構實現(即兩個RAM,一個讀,一個寫,并交替讀寫),也可只采用一塊RAM實現(自己思考方法,可加分)。以交織深度為16的塊交織為例,輸入數據比特的序號為1-16,寫入的順序為1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16,讀出的順序為1、5、9、13、2、6、10、14、3、7、11、15、4、8、12、16。
直擴——將數據比特與偽隨機序列相乘,擴頻比為63(即偽碼速率為數據率的63倍),擴頻序列為1+X+X6和1+X+ X2+ X5+ X6構成的Gold序列
BPSK——比特‘0’對應為符號“01111111”,‘1’對應為“10000000”
解調——BPSK解調,將符號對應為比特
相關——將接收數據與擴頻序列相乘,并判決為‘0’或‘1’
解交織——交織的逆操作(實現方法與交織器相同)
解擾——擾碼的逆操作(實線方法與擾碼器相同)
附加功能:
在BPSK調制和解調之間加入噪聲模塊,檢驗直接序列擴頻系統的抗干擾能力。
二、功能描述:
1、分頻模塊——Odiv_freq
功能描述:用于時鐘分頻,可以實現任意奇數分頻。
輸入輸出解釋:
| num_div | generic | integer | 分頻數 |
| clk | IN | std_logic | 時鐘 |
| reset | IN | std_logic | 復位信號 |
| div_clk | OUT | std_logic | 分頻輸出 |
2、信源模塊——Source
功能描述:生成連續的四一零碼數據 “11110”。
輸入輸出解釋:
| clk | IN | std_logic | 時鐘 |
| reset | IN | std_logic | 復位信號 |
| dout | OUT | std_logic | 信號輸出 |
3、擾碼模塊——Scrambling
功能描述:用偽隨機碼對數據比特進行擾碼。
輸入輸出解釋:
| clk | IN | std_logic | 時鐘 |
| reset | IN | std_logic | 復位信號 |
| en | IN | std_logic | 使能信號 |
| idata | IN | std_logic | 輸入信號 |
| odata | OUT | std_logic | 輸出信號 |
| o_valid | OUT | std_logic | 輸出有效信號 |
4、交織模塊——Interweave
功能描述:對數據碼進行交織,采用簡單的塊交織,交織深度為64,交織器8行8列,橫向讀入縱向讀出。
輸入輸出解釋:
| clk | IN | std_logic | 時鐘 |
| reset | IN | std_logic | 復位信號 |
| idata | IN | std_logic | 輸入信號 |
| i_valid | IN | std_logic | 輸入有效信號 |
| odata | OUT | std_logic | 輸出信號 |
| o_valid | OUT | std_logic | 輸出有效信號 |
5、Gold碼生成模塊——Gold_code
功能描述:生成直擴模塊和解擴模塊需要用到的gold碼。
輸入輸出解釋:
| clk | IN | std_logic | 時鐘 |
| reset | IN | std_logic | 復位信號 |
| en | IN | std_logic | 使能信號 |
| odata | OUT | std_logic | 輸出信號 |
| o_valid | OUT | std_logic | 輸出有效信號 |
6、直擴模塊——Spread
功能描述:利用Gold碼生成模塊得到的gold碼對數據比特進行擴頻。
輸入輸出解釋:
| clk | IN | std_logic | 時鐘 |
| reset | IN | std_logic | 復位信號 |
| idata | IN | std_logic | 輸入信號 |
| i_gold | IN | std_logic | 輸入gold碼 |
| odata | OUT | std_logic | 輸出信號 |
7、BPSK調制模塊——Bpsk_modu
功能描述:對直擴模塊輸出的數據進行BPSK調制。
輸入輸出解釋:
| clk | IN | std_logic | 時鐘 |
| reset | IN | std_logic | 復位信號 |
| en | IN | std_logic | 使能信號 |
| idata | IN | std_logic | 輸入信號 |
| odata | OUT | std_logic_vector | 輸出信號 |
| o_valid | OUT | std_logic | 輸出有效信號 |
8、BPSK解調模塊——Bpsk_demodu
功能描述:對接收到的數據進行BPSK解調。
輸入輸出解釋:
| clk | IN | std_logic | 時鐘 |
| reset | IN | std_logic | 復位信號 |
| en | IN | std_logic | 使能信號 |
| idata | IN | std_logic_vector | 輸入信號 |
| odata | OUT | std_logic | 輸出信號 |
| o_valid | OUT | std_logic | 輸出有效信號 |
9、相關模塊——Correlation
功能描述:數據同步后,在一個數據比特內將解調后的數據與gold碼相乘并求和,若和大于判決門限判決為‘1’,否則判決為‘0’。
輸入輸出解釋:
| clk | IN | std_logic | 時鐘 |
| reset | IN | std_logic | 復位信號 |
| en | IN | std_logic | 使能信號 |
| idata | IN | std_logic | 輸入信號 |
| i_gold | IN | std_logic | 輸入Gold碼 |
| odata | OUT | std_logic | 輸出信號 |
| o_valid | OUT | std_logic | 輸出有效信號 |
10、解交織模塊——De_Interweave
功能描述:將相關解擴后的數據比特進行解交織得到發射端的原數據序列。實現過程與交織器相同。
輸入輸出解釋:
| clk | IN | std_logic | 時鐘 |
| reset | IN | std_logic | 復位信號 |
| i_valid | IN | std_logic | 輸入有效信號 |
| idata | IN | std_logic | 輸入信號 |
| odata | OUT | std_logic | 輸出信號 |
| o_valid | OUT | std_logic | 輸出有效信號 |
11、解擾模塊——De_Scrambling
功能描述:將交織后的數據比特進行擾碼的逆操作得到信源輸出的原信號。
輸入輸出解釋:
| clk | IN | std_logic | 時鐘 |
| reset | IN | std_logic | 復位信號 |
| en | IN | std_logic | 使能信號 |
| i_valid | IN | std_logic | 輸入有效信號 |
| idata | IN | std_logic | 輸入信號 |
| odata | OUT | std_logic | 輸出信號 |
12、信號延遲模塊——Delay
功能描述:可以實現將輸入信號延遲任意需要的時鐘周期。
輸入輸出解釋:
| num | generic | integer | 延遲的時鐘周期數 |
| clk | IN | std_logic | 時鐘 |
| sig | IN | std_logic | 輸入待延遲信號 |
| del_sig | OUT | std_logic | 延遲后的輸出信號 |
13、發射模塊——Transmitter
功能描述:將信源、擾碼、交織、直擴和BPSK調制等功能模塊組合在一起,構成發射機模塊。
輸入輸出解釋:
| clk | IN | std_logic | 時鐘 |
| reset | IN | std_logic | 復位信號 |
| en | IN | std_logic | 使能信號 |
| odata | OUT | std_logic_vector | 發射的BPSK信號 |
| syn_sig | OUT | std_logic | 同步信號 |
14、接收模塊——Receiver
功能描述:將BPSK解調、相關、解交織和解擾等功能模塊組合在一起,構成接收機模塊。
輸入輸出解釋:
| clk | IN | std_logic | 時鐘 |
| reset | IN | std_logic | 復位信號 |
| en | IN | std_logic | 使能信號 |
| syn_sig | IN | std_logic | 同步信號 |
| idata | IN | std_logic_vector | 接收的BPSK信號 |
| odata | OUT | std_logic | 解調出的信源信號 |
15、測試模塊——Transmitter_tb和Receiver_tb
功能描述:Transmitter_tb對發射模塊進行測試。Receiver_tb對發射模塊和接收模塊進行綜合測試。
16、噪聲模塊——Noise
功能描述:利用本原生成多項式 生成一個m序列,將m序列最高為與BPSK輸出數據的低位進行異或,相當于給BPSK輸出數據一個干擾。
輸入輸出解釋:
| clk | IN | std_logic | 時鐘 |
| idata | IN | std_logic_vector | BPSK模塊輸出信號 |
| odata | OUT | std_logic_vector | 加干擾后的BPSK信號 |
17、測試模塊——Noise_Receiver_tb
功能描述:Noise_Receiver_tb對發射模塊、噪聲模塊和接收模塊進行綜合測試。
三、仿真結果:
1、分頻模塊仿真測試:
實驗中實現了一個任意奇數分頻器,為便于測試分析,設置其為5分頻得到的仿真結果如圖1所示。
從圖1中可以看出,設置的分頻數為5。圖中紅色方框內為分頻后的一個周期,可以看出里面有5個原時鐘周期。即該模塊功能完好。
2、信源模塊仿真測試:
信源模塊要生成連續的四一零碼數據 “11110”,得到的仿真結果如圖2所示。
從圖2中可以看出,信源模塊輸出為連續的“11110”,紅色方框內為一個周期。即該模塊功能完好。
3、擾碼模塊仿真測試:
擾碼模塊用偽隨機碼對信源得到的數據進行擾碼,得到的仿真結果如圖3所示。
從圖3中可以看出,擾碼模塊的輸入idata為連續的“11110”,輸出odata被擾碼成隨機序列。根據擾碼結構框圖可知,當en為‘1’時,輸出是輸入與移位寄存器左端異或的結果,在圖3紅色方框內第1個周期,idata為‘1’,寄存器左端為‘0’,異或的結果在下一個時鐘周期賦給odata即‘1’。
4、交織模塊仿真測試:
交織模塊用塊交織器對擾碼模塊輸出的數據進行交織處理,得到的仿真結果如圖4.1所示。
該模塊在實現過程中進行了三版修改。
第一版Interweave3的設計思路是:使用3個RAM,第一個RAM寫數據,寫滿64個數據后賦給第二個RAM,然后對第二個RAM中的數據進行交織變換,變換后將數據傳送給第三個RAM用于讀出。
第二版Interweave2的設計思路是:使用2個RAM,第一個RAM按順序寫入數據,寫滿64個數據后賦給第二個RAM,然后直接改變第二個RAM的數據讀出順序。
第三版Interweave的設計思路是:使用1個RAM,邊讀邊寫,每讀出一個數據就在該地址重新寫入一個數據。每64次讀寫為一個周期,每過一個周期調換一次讀寫順序。
數據讀寫順序用下面兩句代碼描述:
odata <= data_rom( Index_IIndex_a + Index_JIndex_b );
data_rom( Index_IIndex_a + Index_JIndex_b ) <= idata;
其中, Index_I和Index_J是一個雙層循環,Index_I是外循環從7到0,Index_J是內循環從7到0。
如第一個周期內,Index_a = 8;Index_b = 1;則下一個周期內 Index_a = 1;Index_b = 8。
如果用交織深度為16,即4行4列來演示讀寫順序如圖4.2和圖4.3表示。
5、Gold碼生成模塊仿真測試:
Gold碼生成模塊利用移位寄存器實現,得到的仿真結果如圖5所示。
從圖5中可以看出,Gold碼生成模塊的輸出是寄存器g1的高位與寄存器g1的高位異或得到,如紅色方框內,異或結果延遲一個時鐘周期賦給odata。
6、直擴模塊仿真測試:
直擴模塊將Gold碼與交織模塊的輸出數據進行異或,得到的仿真結果如圖6所示。
從圖6中可以看出,直擴模塊輸出odata是輸入idata與Gold碼異或并延遲一個時鐘周期。圖6中紅色方框內為一個數據比特,對應63個Gold碼,滿足擴頻比63.
7、BPSK調制模塊仿真測試:
BPSK調制模塊實現對直擴模塊輸出的數據進行BPSK調制,得到的仿真結果如圖7所示。
圖7中,BPSK調制結果odata比輸出數據idata延遲一個時鐘周期,由此可以看出idata為‘1’時,odata輸出“10000000”,idata為‘0’時,odata輸出“01111111”。
8、BPSK解調模塊、解交織模塊、解擾模塊
BPSK解調模塊、解交織模塊、解擾模塊分別與BPSK調制模塊、交織模塊和擾碼模塊功能實現相似,為其逆操作,故這里不再一一給出仿真測試結果。
9、相關模塊仿真測試:
相關模塊是將BPSK解調模塊的輸出數據與Gold碼做異或并求和,然后進行數據比特判決,得到的仿真結果如圖8所示。
因直擴模塊中擴頻比為63,即一個數據比特與63個Gold碼異或,所以在相關模塊中,使同步之后,將一個數據比特內的63個數據分別與對應的Gold碼異或求和。若原數據比特為1,兩次和Gold碼異或后仍為1則理論上求和為63;若原數據比特為0,兩次和Gold碼異或后仍為0,則理論上求和為0;因此設置一個門限值如本次實驗設置門限值為30,當求和sum大于30是將數據比特判決為‘1’,否則判決為‘0’,由此也可以得到擴頻通信的抗干擾原理,允許傳輸過程中若一些數據錯誤,并不會影響數據判決進而影響結果。
10、延遲模塊仿真測試:
為了在設計過程中將特定的信號進行延遲和在仿真調試過程中將關注的信號進行延遲和另一個信號比較便于分析,故設計了延遲模塊,其可以實現任意時鐘周期的延遲,為觀察方便這里將延遲周期數設為3,得到的仿真結果如圖9所示。
從圖9中可以看出,延遲模塊的輸出del_sig比輸入信號sig延遲了3個時鐘周期,與設置的延遲周期數num為3相符。
11、發射模塊和接收模塊聯合仿真測試:
利用testbench文件——Receiver_tb對發射模塊和接收模塊進行聯合測試,得到的仿真結果如圖10所示。
圖10中,temp_data0為信源模塊輸出、temp_data1為擾碼模塊輸出、temp_data2為交織模塊輸出、gold_data為Gold碼生成模塊輸出、temp_data3為直擴模塊輸出、temp_data4為BPSK調制模塊輸出、temp_data5為BPSK解調模塊輸出、temp_data6為相關模塊輸出、temp_data7為解交織模塊輸出,U1/odata為解擾模塊即最終解調結果輸出。從圖中可以看出左上角紅色方框內為“11110”的信源,右下角紅色方框內為“11110”的解調數據。可以看出該仿真系統最終完全解調出了信源數據。
12、加入噪聲模塊后的聯合仿真測試:
利用testbench文件——Noise_Receiver_tb對發射模塊、噪聲模塊和接收模塊進行聯合測試,得到的仿真結果如圖11、圖12和圖13所示。
從圖11可以看出,經過噪聲模塊加干擾后,BPSK模塊輸出的數據部分發生改變,即idata和odata的數據存在不同。
從圖12可以看出,經過噪聲模塊加干擾后,當數據比特為‘1’時,相關模塊的相關結果不再是63,當數據比特為‘0’時,相關模塊的相關結果不再是0,是因為噪聲干擾后存在誤碼,但是因為相關模塊設置的判決門限為30,因此仍能正確判決,如圖12中當U2/sum為44時判決為‘1’即U2/odata輸出為‘1’;當U2/sum為16時判決為‘0’即U2/odata輸出為‘0’。這在一定程度上驗證了擴頻通信的抗干擾能力。
從圖13中可以看出最終解調輸出仍為連續的“11110”。
系統的VHDL代碼及報告下載,請點擊這里.
總結
以上是生活随笔為你收集整理的直接序列扩频通信系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GCB:农田土壤丰富真菌比稀有真菌适应更
- 下一篇: 车载信息系统平台的未来发展