扩频通信系统仿真实验
一、题目
扩频通信系统仿真实验
二、仿真要求
要求一:扩频通信系统的多用户数据传输
①传输的数据随机产生,要求采用频带传输(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的误比特率。
③解调是,一定是先解扩在解调。