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