Matlab 移动通信原理-扩频通信系统仿真实验(扩频通信系统的多用户数据传输、利用蒙特卡罗仿真方法对扩频增益进行性能仿真)
移動通信原理的擴頻通信系統仿真實驗,完成擴頻通信系統的多用戶數據傳輸、利用蒙特卡羅仿真方法對擴頻增益進行性能仿真。
項目實驗環境是Matlab2018,軟件版本不同可能會有些出入,需要稍作修改。
目錄
- 仿真要求
- 仿真方案設計
- 主要仿真代碼
- 仿真結果
仿真要求
要求一:擴頻通信系統的多用戶數據傳輸
①傳輸的數據隨機產生,要求采用頻帶傳輸(BPSK調制);
②擴頻碼要求采用周期為63(或127)的m序列;
③仿真從基站發送數據到三個不同的用戶,各不同用戶分別進行數據接收;
④設計三種不同的功率延遲分布,從基站到達三個不同的用戶分別經過多徑衰落(路徑數分別為2,3,4);
⑤三個用戶接收端分別解出各自的數據并與發送前的數據進行差錯比較。
要求二:利用蒙特卡羅仿真方法對擴頻增益進行性能仿真
設計仿真方案,得到在數據傳輸過程中進行擴頻(擴頻序列用m序列)和不進行擴頻的BER性能結論,要求得到的BER曲線較為平滑,并說明這種結論與理論上的結論是否相符,為什么?
仿真方案設計
要求一:
通信系統的總體框圖如下所示:
發射機原理圖:
接收機原理圖:
其中發射端主要完成m序列的產生,隨機0, 1序列的產生。然后利用m序列對產生的隨機序列進行擴頻,然后再用cos (wt)對其進行調制。
信道主要模擬信號的多徑傳輸,在這個信道中一共有三個用戶的數據進行傳輸,用戶一經過了2徑衰落,用戶二經過了3徑衰落,用戶三經過了4徑衰落。
接收端接收到的信號是幾路多徑信號的加噪后的疊加,首先要完成信號的解擴,然后再解調,濾波,抽樣判決最后分別與原始信號比較并統計誤碼率。
1、m序列的產生
需要32位的擴頻序列,經過計算易知要產生32位的m序列需要長度為6的反饋系數,為了得到較好的結果,選取了自相關性較好而互相關性較差的三組反饋系數(八進制)45、67、75,其對應的二進制為100101、110111、111101。并將二進制與移位寄存器級數對應,例如反饋系數移100101得到的移位寄存器為C5=1, C4=0, C3=0, C2=1, C1=0, C0=1, 其具體的寄存器結構圖如下圖所示:
2、 m序列的擴頻
擴頻的主要思想是每一位數據位都擴展成長度為m序列長的信息,其具體做法是將數據信息中的‘1’用m序列代替,而對于‘0’用-m序列代替,這樣對每一個數據位都進行擴展就實現了對原始數據的擴頻。其結構框圖如下:
3. DPSK調制
為了使低頻信號能夠在高頻中傳輸,并且增強系統的抗噪聲性能,我們必須采用一定的調制解調技術,這里選用的DPSK進行調制。BPSK對擴頻信號進行調試,并在接收端對解擴信號進行BPSK解調以恢復出原有信號。BPSK的主要思路是將不同的數據用不同相位的載波進行調制,以將低頻的信號調制到較高頻率。
4.多徑信道仿真
在這個模塊中我將模擬無線信道,對不同用戶產生的數據經三徑進行傳輸,每一徑信號又有三個用戶數據疊加而成,并且每一徑信號具有不同的延遲和衰減。最后在信道的另一端三徑信號進行疊加并對其加噪。
5.解擴和帶通濾波
在假定擴頻碼與接收信號同步的情況下, 可對接收信號進行解擴, 其解擴的過程與擴頻的過程一樣, 也是利用擴頻碼與接收信號進行相乘即可。
要求二:
1、構造或描述概率過程實際上就是建立隨機試驗模型,構造概率過程是對確定性問題而言的,描述概率過程是對隨機性問題而言的,不同的問題所需要建立的隨機試驗模型各不相同。
2、已知概率分布抽樣指的是隨機試驗過程,隨機模型中必要包含某些已知概率分布的隨機變量或隨機過程作為輸入,進行隨機試驗的過程就是對這些隨機變量的樣本或隨機過程的樣本函數作為輸入產生相應輸出的過程,因此通常被稱為對已知概率分布的抽樣。如何產生已知分布的隨機變量或隨機過程是蒙特卡羅方法中的一個關鍵問題。
3、獲得估計量,蒙特卡羅方法所得到的問題的解總是對真實解的一個估計,本身也是一個隨機變量,這個隨機變量是由隨機試驗模型輸出通過統計處理得到的。
這里直接采用不經過直接擴頻與經過直接擴頻的信號進行比較,通過誤碼率曲線進行分析。
主要仿真代碼
主程序如下:
clear all;clc; dataRate=1000; chipRate=63*dataRate; fc=chipRate*2; fs=fc*8; N=1000; c=63; b1=[1,0,0,0,0,1,1]; %103 b2=[1,1,0,0,1,1,1]; %147 b3=[1,1,0,1,1,0,1]; %155 snr=-20:2:10;for i=1:length(snr) signal1=information(N);signal2=information(N); signal3=information(N); c1=genMseq(b1);c2=genMseq(b2);c3=genMseq(b3);dssignal1=dsss(signal1,c1);dssignal2=dsss(signal2,c2);dssignal3=dsss(signal3,c3);modusignal1=modu(dssignal1,chipRate,fc, fs);modusignal2=modu(dssignal2,chipRate,fc, fs);modusignal3=modu(dssignal3,chipRate,fc, fs);mixsignal=modusignal1+modusignal2+modusignal3;receivesignal=awgn(mixsignal,snr(i)); %多徑干擾receivesignal1= channels (receivesignal,snr(i),2) ;receivesignal2= channels (receivesignal,snr(i),3) ;receivesignal3= channels (receivesignal,snr(i),4) ;dedssignal1=dedsss(receivesignal1,c1,chipRate,fs);demoSignal1=demodu(dedssignal1,dataRate,fc,fs);dedssignal2=dedsss(receivesignal1,c2,chipRate,fs);demoSignal2=demodu(dedssignal1,dataRate,fc,fs);dedssignal3=dedsss(receivesignal1,c3,chipRate,fs);demoSignal3=demodu(dedssignal1,dataRate,fc,fs);err_bit1(i)=sum(demoSignal1~=signal1)/N;err_bit2(i)=sum(demoSignal2~=signal2)/N;err_bit3(i)=sum(demoSignal3~=signal3)/N;dedssignal21=dedsss(receivesignal2,c1,chipRate,fs);demoSignal21=demodu(dedssignal21,dataRate,fc,fs);dedssignal22=dedsss(receivesignal2,c2,chipRate,fs);demoSignal22=demodu(dedssignal22,dataRate,fc,fs);dedssignal23=dedsss(receivesignal2,c3,chipRate,fs);demoSignal23=demodu(dedssignal23,dataRate,fc,fs);err_bit21(i)=sum(demoSignal21~=signal1)/N;err_bit22(i)=sum(demoSignal22~=signal2)/N;err_bit23(i)=sum(demoSignal23~=signal3)/N;dedssignal31=dedsss(receivesignal3,c1,chipRate,fs);demoSignal31=demodu(dedssignal31,dataRate,fc,fs);dedssignal32=dedsss(receivesignal3,c2,chipRate,fs);demoSignal32=demodu(dedssignal32,dataRate,fc,fs);dedssignal33=dedsss(receivesignal3,c3,chipRate,fs);demoSignal33=demodu(dedssignal33,dataRate,fc,fs);err_bit31(i)=sum(demoSignal31~=signal1)/N;err_bit32(i)=sum(demoSignal32~=signal2)/N;err_bit33(i)=sum(demoSignal33~=signal3)/N;%不進行擴頻的BERmodusignal1=modu(signal1,chipRate/63,fc, fs);modusignal2=modu(signal2,chipRate/63,fc, fs);modusignal3=modu(signal3,chipRate/63,fc, fs); modusignal1= channels (modusignal1,snr(i),3) ;modusignal2= channels (modusignal2,snr(i),3) ;modusignal3= channels (modusignal3,snr(i),3) ;demoSignal41=demodu(modusignal1,dataRate,fc,fs);demoSignal42=demodu(modusignal2,dataRate,fc,fs);demoSignal43=demodu(modusignal3,dataRate,fc,fs);err_bit41(i)=sum(demoSignal41~=signal1)/N;err_bit42(i)=sum(demoSignal42~=signal2)/N;err_bit43(i)=sum(demoSignal43~=signal3)/N; end figure(1) semilogy(snr,err_bit1,'-s',snr,err_bit2,'-h',snr,err_bit3,'-*'); legend('用戶1','用戶2','用戶3'); xlabel('信噪比'); ylabel('誤比特率'); title('多徑衰落(路徑數為2)');figure(2) semilogy(snr,err_bit21,'-s',snr,err_bit22,'-h',snr,err_bit23,'-*'); legend('用戶1','用戶2','用戶3'); xlabel('信噪比'); ylabel('誤比特率'); title('多徑衰落(路徑數為3)');figure(3) semilogy(snr,err_bit31,'-s',snr,err_bit32,'-h',snr,err_bit33,'-*'); legend('用戶1','用戶2','用戶3'); xlabel('信噪比'); ylabel('誤比特率'); title('多徑衰落(路徑數為4)');figure(4) N1=1:length(signal1); subplot(2,1,1); plot(N1,signal1); title('擴頻前信號'); axis([0 100 -1.1 1.1]); dssignal1=dsss(signal1,c1); N1=1:length(dssignal1); subplot(2,1,2); plot(N1,dssignal1); title('擴頻后信號'); axis([0 320 -1.1 1.1]);figure(5) modusignal1=modu(dssignal1,chipRate,fc, fs); N1=1:length(modusignal1); subplot(2,1,1); plot(N1,modusignal1); axis([0 250 -1.1 1.1]); grid on N2=1:length(mixsignal); subplot(2,1,2); plot(N2,mixsignal); axis([0 500 -5.1 5.1]); grid onfigure(6) receivesignal1= channels (modusignal1,snr(i),2) ; N1=1:length(receivesignal1); subplot(3,1,1); plot(N1,receivesignal1); axis([0 200 -1.1 1.1]); dedssignal1=dedsss(receivesignal,c1,chipRate,fs); subplot(3,1,2); plot(N1,dedssignal1); axis([0 200 -1.1 1.1]); demoSignal1=demodu(dedssignal1,dataRate,fc,fs); N1=1:length(demoSignal1); subplot(3,1,3); plot(N1,demoSignal1); axis([0 200 -1.1 1.1]);figure(7) plot(snr,err_bit21,'-s',snr,err_bit22,'-h',snr,err_bit23,'-*'); legend('用戶1','用戶2','用戶3'); xlabel('信噪比'); ylabel('誤比特率'); title('擴頻'); % axis([0 100 -1.1 1.1]);figure(8) plot(snr,err_bit41,'-s',snr,err_bit42,'-h',snr,err_bit43,'-*'); legend('用戶1','用戶2','用戶3'); xlabel('信噪比'); ylabel('誤比特率'); title('不擴頻');接收端解擴代碼如下:
function dessignal=dedsss(receiveSignal,c,chipRate,fs)L=fs/chipRate;c1=[];for i=1:length(c)c1=[c1,c(i)*ones(1,L)];enddessignal=[];for i=1:length(c1):length(receiveSignal)dessignal=[dessignal,receiveSignal(i:i+length(c1)-1).*c1];end end接收端解調代碼如下:
function demoSignal=demodu(Resignal,datarate,fc,fs) t = linspace(0,1/datarate,fs/datarate);carrier=cos(2*pi*fc*t);Lc=length(carrier);Ls=length(Resignal);designal=[]; for i=1:Lc:Lsdesignal=[designal,carrier.*Resignal(i:i+Lc-1)];enddemoSignal = []; for i= 1:Lc:Lsthreshold=sum(designal(i:i+Lc-1));if threshold>0tt=1;elsett=-1;enddemoSignal=[demoSignal,tt];end end數據流的產生代碼如下:
function signal=information(N)signal=rand(1,N)>=0.5;signal=signal*2-1;end擴頻碼的產生(只產生一個周期的m序列)、擴頻、調制。
解擴實現代碼如下:
解調實現的代碼如下:
function dessignal=dedsss(receiveSignal,c,chipRate,fs)L=fs/chipRate;c1=[];for i=1:length(c)c1=[c1,c(i)*ones(1,L)];enddessignal=[];for i=1:length(c1):length(receiveSignal)dessignal=[dessignal,receiveSignal(i:i+length(c1)-1).*c1];end end仿真結果
擴頻通信的理論基礎為香農公式:C=Blog(1+S/N)。我們可以用犧牲帶寬的辦法來換取較低的信噪比,增加系統的抗干擾能力。直接序列擴頻,是直接利用具有高碼率的擴頻碼序列在發送端擴展信號的頻譜,而在接收端,用相同的擴頻碼序列進行解擴,把展寬的擴頻信號還原成原始的信息,是一種數字調制方法。
擴頻通信系統具有較強的抗干擾能力,且具有很強的隱蔽性和抗偵查,抗竊聽的能力。這種能力隨著擴頻增益的增大而增大。擴頻增益的提高就需要提高擴頻碼m序列的位數了。
因為m序列具有良好的自相關特性和互相關特性,正是這兩大特性使得在接收端可以很好的進行擴頻碼的同步,以及多路用戶的區分,從而具有很好的抗多徑干擾能力。
要求一
1、原信號和擴頻之后的信號,如下圖所示。
2、第一個用戶信號經過擴頻,調制之后的信號以及三個用戶信號分別經過2徑,3徑,4徑信道后的疊加信號之和如下圖所示。
由上到下第一個坐標系為用戶1經過擴頻、調制的信號,第二、三、四為三個用戶經過疊加的信號再分別通過2徑、3徑、4徑的信道之后的信號,由圖可知,經過多徑之后的信號已經和原信號的圖形相差很大。這是因為信道的衰落使用延時來進行模擬的,會造成一些誤差。
3、第一個原始用戶信號與其經過接收端解擴,解調,抽樣判決之后的最終信號的比較,如下圖所示。
4、3個用戶的信號分別經過多徑衰落。衰落信道的個數為2、3、4,通過下面三張圖可以發現,隨著多徑數目的增加,3個用戶的誤碼率都呈現增加的趨勢。同一個用戶隨著信噪比的增加,誤碼率會減小。
多徑衰落路徑數為2時,3個用戶的誤碼率比較圖如下:
多徑衰落路徑數為3時,3個用戶的誤碼率比較圖如下:
多徑衰落路徑數為4時,3個用戶的誤碼率比較圖如下:
要求二
在數據傳輸過程中進行擴頻和不進行擴頻的BER性能比較如圖所示。
進行擴頻的BER曲線(第一張圖)更加平緩,并且經過擴頻的信號在信噪比比較低的情況下,呈現出優于不擴頻信號的性能,這體現了擴頻通信可以提高系統的信噪比,改善系統的性能。
通過直接序列擴頻得到的BER曲線較為平滑。直擴系統有較強的抗多徑干擾的能力,多徑信號到達接收端,由于利用了偽隨機碼的相關特性,只要多徑時延超過偽隨機碼的一個切普,則通過相關處理后,可消除這種多徑干擾的影響,甚至可以利用這些多徑干擾的能量,提高系統的信噪比,改善系統的性能。
總結
以上是生活随笔為你收集整理的Matlab 移动通信原理-扩频通信系统仿真实验(扩频通信系统的多用户数据传输、利用蒙特卡罗仿真方法对扩频增益进行性能仿真)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “睡服”面试官系列第三篇之变量的结构赋值
- 下一篇: 前端学习(1855)vue之电商管理系统