概述
目录
- 一、仿真要求
- 二、仿真方案详细设计
- 三、仿真结果及结论
- 四、总结与体会
- 五、主要仿真代码
- 六、求助大佬
一、仿真要求
要求:扩频通信系统的多用户数据传输
①传输的数据随机产生,要求采用频带传输(DBPSK调制);
②扩频码要求采用周期为63(或127)的m序列; ③仿真从基站发送数据到三个不同的用户,各不同用户分别进行数据接收;
④设计三种不同的功率延迟分布,从基站到达三个不同的用户分别经过多径衰落(路径数分别为2,3,4);
⑤三个用户接收端分别解出各自的数据并与发送前的数据进行差错比较。
二、仿真方案详细设计
通信系统的总体框图
发射机原理图
接收机原理图
如图二图三,该通信系统设计由发射机、信道、接收机三部分组成。
发射端主要完成m序列的产生,产生随机的0 1序列,利用m序列对产生的随机序列进行扩频,在用DBPSK调制方式进行调制。
信道主要是模拟信号的多径传输,在这个信道中一共有三个用户的数据进行传输,用户1经过了2径衰落,用户2经过了3径衰落,用户3经过了4径衰落。
接收机主要完成对信号的解扩、解调、滤波、抽样判决。
扩频通信系统发射机设计
扩频通信系统接收机设计
系统整体流程图
扩频码(m序列)的产生
扩频码为伪随机序列,因为有三路用户,故选取带有6位移位寄存器,周期为63的m 序列。其对应的二进制序列分别为:1000011,1100111,1101101.以1000011为例,其具体的寄存器结构图如下所示:初始化各寄存器单元内容为1
DBPSK的调制解调:
多径信道
因为信号通过各个路径的距离不同,所以各个路径电波到达接收机的时间不同,相位也就不同。不同相位的多个信号在接收端叠加,有时是同相叠加而加强,有时是反相叠加而减弱。这样接收信号的幅度将急剧变化,即产生了所谓的多径衰落。
三、仿真结果及结论
差分编码后的信号与调制后的信号
与载波相乘后的波形
通过低通滤波器后的波形
误差比较
四、总结与体会
整个实验做完,总体感觉挺难的,即使能清楚原理,但是在写仿真程序的时候有点不知道从何下手,尽管该实验的一些方面的知识点老师讲过,但是在一些细节上还是很有难度,比如BPSK调制解调改为DBPSK调制解调。
做完了整个实验,整个实验的设计可以概括为扩频码的产生,扩频与解扩,DBPSK调制与解调,多径信道的传输这四个部分,扩频码产生的部分要注意寄存器的阶数 n 与扩频码的长度满足特定的关系: c=2^n-1,且对于不同阶数的寄存器其反馈系数也有严格的限制。扩频就是在每一个码元周期内扩频码与原信号直接相乘,扩频后周期和频谱都会进行相应的扩大,抗干扰能力也有了显著的提高,解调过程采用的是相干解调就是让扩频后的信号再次与扩频码相乘达到解调的目的。DBPSK的调制中最重要的是差分码的产生,两种二进制数对应不同相位的正弦信号,解调过程包括与本地载波相乘、低通滤波、抽样判决、差分译码四大部分,本次实验采用也只能采用相干解调,抽样判决中所采用的判决门限为0.25。在进行多径信道传输时,三个用户所经历的信道径数不一致,根据最后的结果可知用户所经历的衰落径数越多,解调后的误码率越高。
五、主要仿真代码
(1,-1)比特流的产生函数
function signal=information (N)
signal=rand (1,N) >=0.5;
signal=signal*2-1; %将产生的0,1比特流转化为-1,1比特流
end
扩频码(m序列)的产生函数
function c=genMseq(b)%b为c的个数,比阶数多一
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;
end
扩频
function ssignal=dsss (signal, c)
ssignal=[ ];
for i=1 : length(signal)
ssignal=[ssignal,signal(i)*c];
end
end
DBPSK调制函数
function modusignal=modu (signal,dataRate,fc,fs)
Num_Unit = fs/dataRate;%在一个码元周期内的采样点数
High_Level = ones ( 1,Num_Unit ) ;
Low_Level = zeros ( 1,Num_Unit );
A= 1;
%载波幅度
N= length ( signal ) ;
b=zeros ( 1,N) ;
modusignal = zeros ( 1,Num_Unit * N ) ;
sign_orign = zeros( 1,Num_Unit *N );
t = 0 : 1/fs : N/dataRate - 1/fs; %产生频率为fs,长度为N的时间序列
signal=(signal+1) /2;
for n=1:N
b (n+1)=xor (signal (n),b (n) ) ;
end
for n=1:N
b(n) =b (n+1);
end
for I = 1 : N
if b (I) == 1
sign_orign((I-1)*Num_Unit+1:I*Num_Unit)=High_Level;
else
sign_orign((I-1)*Num_Unit+1:I*Num_Unit)= Low_Level;
end
end
for I = 1 : N
if b(I) ==1
modusignal((I-1)*Num_Unit+1:I*Num_Unit)=A*cos(2*pi*fc*t((I-1)*Num_Unit+1:I*Num_Unit)+(pi/2));
else
modusignal((I-1)*Num_Unit+1:I*Num_Unit)=A*cos(2*pi*fc*t((I-1)*Num_Unit+1:I*Num_Unit));
end
end
figure
subplot ( 2, 1, 1 )
plot(t, sign_orign);
%axis ( [0,(1/dataRate)* ( N + 1),- (A/ 2),A + (A/ 2) ] );
title ( '差分编码后的信号' );
grid
subplot ( 2,1,2 );
plot(t,modusignal );
axis( [0, (1/dataRate)* ( N+ 1),- 3*(A / 2),3* (A/ 2)] );
title ( '调制后的信号');
grid
多径信道传输函数
function multis=channels (modusignal,snr,k)%模拟多径衰落
len=length (modusignal);
x1=randn ( 1,len);
y1=randn ( 1,len);
r1=abs (x1+1i*y1).*modusignal;
r1=[zeros(1,5),r1(1:length (modusignal)-5)];
x2=randn(1,len);
y2=randn(1,len);
r2=abs(x2+1i*y2 ).*modusignal;
r2=[zeros(1,8 ),r2(1:length(modusignal)-8)];
x3=randn(1,len);
y3=randn(1,len);
r3=abs(x3+1i*y3 ).*modusignal;
r3=[zeros(1,10 ),r3(1:length (modusignal)-10)];
if k==2
multis=modusignal+r1;
else if k==3
multis=modusignal+r1+r2;
else if k==4
multis=modusignal+r1+r2+r3;
end
end
end
multis=awgn (multis,snr);
解扩函数
function dessignal=dedsss(recievesignal,c,chipRate,fs)%chipRate为码片速率
L=fs/chipRate;
c1=[];
for i=1:length(c)
c1=[c1,c(i)*ones(1,L)];
end
dessignal= [ ];
for i=1 : length(c1) : length (recievesignal)
dessignal=[dessignal,recievesignal(i:(i+length(c1)-1)).*c1];
end
end
解调函数
function demodusignal=demodu (signal,dataRate,fc, fs)
Num_Unit=fs/dataRate;
N=length(signal);
A=1;
demodusignal=zeros(1,N*Num_Unit);
t=0:1/fs:N/fs-1/fs; %产生频率为fs,长度为N的时间序列
dt=signal.*cos(2*pi*fc*t );
figure
subplot(2,1,1)
plot(t,dt);
%axis([0,(1/dataRate)*( N+ 1),-3*(A/ 2),3*(A/2)]);
title('相乘后的波形');
grid
[n,Wn]=buttord(2*pi*fc/4,2*pi*fc/2,3,25,'s' );
[b,a]=butter(n,Wn,'s');
[bz,az]=impinvar(b,a,fs);
dt=filter(bz,az,dt);
subplot(2,1,2)
plot(t,dt);
axis([0,(1/dataRate)*(N+1),-3*(A/2),3*(A/2)]);
title('低通滤波后的波形');
grid
c=zeros(1,N);
d=zeros(1,N);
for I=1:N
if (dt((2*I-1)/2*Num_Unit)<0.25)
c(I)=1;
else
c(I)=-1;
end
end
d(1)=xor(c(1),0);
for n=2:N
d(n)=xor(c(n),c(n-1));
end
for I=1:N
if (d(I)==1)
demodusignal((I-1)*Num_Unit+1:I*Num_Unit)=High_Level;
else
demodusignal((I-1)*Num_Unit+1:I*Num_Unit)=Low_Level;
end
end
figure
plot(t,demodusignal);
axis([0,(1/dataRate)*( N+1),-3*(A/2),3*(A/2)]);
title('逆码变换后的波形');
grid
end
主函数
clear all
clc
dataRate=1000;
chipRate=63*dataRate;
fc=chipRate*2;
fs=fc*8;
N=2;
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);
modusignall=modu(dssignal1,chipRate,fc,fs);
modusignal2=modu(dssignal2,chipRate,fc,fs);
modusignal3=modu(dssignal3,chipRate,fc,fs);
receivesignal1=channels(modusignall,snr(i),2);
receivesignal2=channels(modusignal2,snr(i),3);
receivesignal3=channels(modusignal3,snr(i),4);
dedssignal1=dedsss (receivesignal1,c1,chipRate,fs);
demosignal1=demodu (dedssignal1,dataRate,fc,fs);
dedssignal2=dedsss (receivesignal2,c2,chipRate,fs);
demosignal2=demodu (dedssignal2,dataRate,fc,fs );
dedssignal3=dedsss (receivesignal3,c3, chipRate,fs);
demosignal3=demodu (dedssignal3,dataRate,fc,fs);
err_bit1 (i)=sum(demosignal1~=signal1)/N;
err_bit2 (i)=sum(demosignal2~=signal2)/N;
err_bit3 (i)=sum(demosignal3~=signal3)/N;
end
semilogy(snr,err_bit1,'-s' ,snr,err_bit2,'-h' ,snr,err_bit3,'-*');
legend('用户1','用户2','用户3');
xlabel('信噪比');
ylabel('误比特率');
六、求助大佬
本次实验做得不是很完善,在设计DBPSK的调制解调时,总是出现判决时超出数组的范围(2016),希望有大佬能指点指点。
最后
以上就是坦率月光为你收集整理的扩频通信系统matlab仿真实验——扩频通信系统的多用户数据传输(采用DBPSK调制、m序列、路径数分别为2,3,4、进行差错比较分析)一、仿真要求二、仿真方案详细设计三、仿真结果及结论四、总结与体会五、主要仿真代码六、求助大佬的全部内容,希望文章能够帮你解决扩频通信系统matlab仿真实验——扩频通信系统的多用户数据传输(采用DBPSK调制、m序列、路径数分别为2,3,4、进行差错比较分析)一、仿真要求二、仿真方案详细设计三、仿真结果及结论四、总结与体会五、主要仿真代码六、求助大佬所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复