擴頻通信系統仿真實驗
一、題目
擴頻通信系統仿真實驗
二、仿真要求
要求一:擴頻通信系統的多用戶數據傳輸
①傳輸的數據隨機產生,要求採用頻帶傳輸(BPSK調製);
②擴頻碼要求採用週期爲63(或127)的m序列;
③仿真從基站發送數據到三個不同的用戶,各不同用戶分別進行數據接收;
④設計三種不同的功率延遲分佈,從基站到達三個不同的用戶分別經過多徑衰落(路徑數分別爲2,3,4);
⑤三個用戶接收端分別解出各自的數據並與發送前的數據進行差錯比較。
三、仿真方案詳細設計
我選擇擴頻通信系統的多用戶數據傳輸
通信系統的總體框圖如下:
發射機原理框圖:
接收機原理框圖:
由上圖可知,整個設計由發送端、信道和接收機組成。
其中發射端主要完成m序列的產生,隨機0, 1序列的產生。然後利用m序列對產生的隨
機序列進行擴頻,然後再用cos (wt)對其進行調製。
信道主要模擬信號的多徑傳輸,在這個信道中一共有三個用戶的數據進行傳輸,用戶一經過了2徑衰落,用戶二經過了3徑衰落,用戶三經過了4徑衰落。
接收端接收到的信號是幾路多徑信號的加噪後的疊加,首先要完成信號的解擴,然後再解調,濾波,抽樣判決最後分別與原始信號比較並統計誤碼率
現對主要功能部分進行詳細描述:
1.擴頻碼(m序列)的產生
擴頻碼爲僞隨機序列,本實驗採用自相關特性好,互相關特性較差的M序列,因爲有三路用戶,故選取帶有6位移位寄存器,週期爲63的m序列。根據上圖可以得出其對應的二進制序列分別爲:
1000011, 1100111, 1101101.以1000011爲例,其具體的寄存器結構圖如下所示:
初始化各寄存器單元內容爲1
2.產生信息(1,-1)的數據流
代碼如下:
function signal=information(N)
signal=rand(1,N)\>=0.5;
signal=signal\*2-1;
End
% 其中參數N是指本次產生的數據個數。
3.產生擴頻碼(只產生一個週期的m序列)
代碼如下:
function c=genMseq(b)
N=length(b)-1;
D=ones(1,N);
A=b(N:-1:1);
c=[];
for i=1:2\^N-1
c1=rem(sum(D.\*A),2);
c=[c,D(N)];
D=[c1,D(1:N-1)];
end
c=c\*2-1; %變爲1,-1的序列
end
4.擴頻
擴頻的主要思想是每一位數據位都擴展成長度爲m序列長的信息,其具體做法是將數據信息中的‘1’
用m序列代替,而對於‘-1’
用-m序列代替,這樣對每-一個數據位都進行擴展就實現了對原始數據的擴頻。
代碼如下:
%擴頻
function ssignal=dsss(signal,c)
ssignal=[];
for i=1:length(signal)
ssignal=[ssignal,signal(i)\*c];
end
end
5.調製,使用BPSK方式
代碼如下:
%調製
function modusignal=modu(signal, dataRate,fc, fs)
%採用BPSK調製方式
t=linspace(0,1/dataRate,fs/dataRate);
carrier=cos(2\* pi\*fc\*t);
modusignal=[];
for i=1:length(signal)
modusignal=[modusignal,carrier\*signal(i)];
end
end
6.解擴
代碼如下:
%解擴實現
function dessignal=dedsss(receiveSignal,c,chipRate,fs)
L=fs/chipRate;
c1=[];
for i=1:length(c)
c1=[c1,c(i)\*ones(1,L)];
end
dessignal=[];
for i=1:length(c1):length(receiveSignal)
dessignal= [dessignal,receiveSignal(i:i+length(c1)-1).\*c1];
end
end
7.解調
代碼如下:
%解調實現.
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:Ls
designal=[designal,carrier.\*Resignal(i:i+Lc-1)];
end
demoSignal = [];
for i= 1:Lc:Ls
threshold= sum(designal(i:i+Lc-1));
if threshold\>0
tt=1;
else
tt= -1;
end
demoSignal=[demoSignal,tt];
end
end
四、主函數仿真代碼
%擴頻通信系統仿真的主程序.
clear all;
close 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];
b2=[1,1,0,0,1,1,1];
b3=[1,1,0,1,1,0,1];
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));
dedssignal1=dedsss(receiveSignal,c1 ,chipRate,fs);
demoSignal1=demodu(dedssignal1,dataRate,fc,fs);
dedssignal2=dedsss(receiveSignal,c2,chipRate,fs);
demoSignal2=demodu(dedssignal2,dataRate,fc,fs);
dedssignal3=dedsss(receiveSignal,c3,chipRate,fs);
demoSignal3=demodu(dedssignal3,dataRate,fc,fs);
err_bitl(i)=sum(demoSignal1\~=signal1)/N;
err_bit2(i)=sum(demoSignal2\~=signal2)/N;
err_bit3(i)=sum(demoSignal3\~=signal3)/N;
end
semilogy(snr,err_bitl,'-s',snr,err_bit2,'-h',snr,err_bit3,'-\*');
legend('用戶1',' 用戶2','用戶3');
xlabel('信噪比');
ylabel('誤比特率');
emoSignal3=demodu(dedssignal3,dataRate,fc,fs);
err_bitl(i)=sum(demoSignal1\~=signal1)/N;
err_bit2(i)=sum(demoSignal2\~=signal2)/N;
err_bit3(i)=sum(demoSignal3\~=signal3)/N;
end
semilogy(snr,err_bitl,'-s',snr,err_bit2,'-h',snr,err_bit3,'-\*');
legend('用戶1',' 用戶2','用戶3');
xlabel('信噪比');
ylabel('誤比特率');
五、仿真結果
各項的數值如下:
結論:
①當誤比特率一定時,看曲線圖總體來說,用戶1的信噪比\>用戶2的信噪比\>用戶3的信噪比。
②當誤信噪比一定時,看曲線圖總體來說,用戶3的誤比特率\>用戶2的誤比特率\>用戶1的誤比特率。
③解調是,一定是先解擴在解調。