直接序列扩频系统.docx
- 文档编号:8994403
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:25
- 大小:146.10KB
直接序列扩频系统.docx
《直接序列扩频系统.docx》由会员分享,可在线阅读,更多相关《直接序列扩频系统.docx(25页珍藏版)》请在冰点文库上搜索。
直接序列扩频系统
直接序列扩频系统
简述
直接序列扩频就是直接用具有高码率的扩频码序列在发送端去扩展信号的频谱。
而在接收端,用相同的扩频码序列去进行解扩,将展宽的扩频信号还原成原始的信息。
直扩通信系统原理如图1所示。
在发送端输入的信息先经信息调制形成调频或调相数字信号,然后由扩频码发生器产生的扩频码序列去调制数字信号以展宽信号的频谱,再将展宽后的宽带信号调制到射频发送出去。
在接收端,接收机接收到宽带射频信号后,首先将其变频至中频,然后通过同步电路捕捉发送来的扩频码的准确相位,由此产生与发送来的伪随机码相位完全一致的接收用的伪随机码,作为扩频解调用的本地扩频码序列,最后经信息解调,恢复成原始信息输出。
由此可见,直扩通信系统要进行三次调制和相应的解调,分别为信息调制、扩频调制和射频调制,以及相应的信息解调、解扩和射频解调。
与一般通信系统比较,扩频通信就是多了扩频调制和解扩部分。
1.功能介绍
所谓扩展频谱通信,可简单表述如下:
“扩频通信技术是一种信息传输方式,其信号所占有的频带宽度远大于所传信息必需的最小带宽;频带的扩展是通过一个独立的码序列来完成,用编码及调制的方法来实现的,与所传信息数据无关;在接收端则用同样的码进行相关同步接收、解扩及恢复所传信息数据”。
扩频通信的基本特点,是传输信号所占用的频带宽度(W)远大于原始信息本身实际所需的最小带宽(B),其比值称为处理增益(Gp)。
总之,我们用扩展频谱的宽带信号来传输信息,就是为了提高通信的抗干扰能力,即在强干扰条件下保证可靠安全地通信。
这就是扩展频谱通信的基本思想和理论依据。
2.功能实现
2.1Walsh函数的产生
产生Walsh函数的源代码如下:
functionA=walsh(x)
H2=[11;1-1];%2阶哈达码
NH2=H2*(-1);
H4=[H2H2;H2NH2];%4阶哈达码
NH4=-1*H4;
H8=[H4H4;H4NH4];%8阶哈达码
NH8=-1*H8;
H16=[H8H8;H8NH8];%16阶哈达码NH16=-1*H16;
H32=[H16H16;H16NH16];%32阶哈达码NH32=-1*H32;
H64=[H32H32;H32NH32];%64阶哈达码
NH64=-1*H64;
H128=[H64H64;H64NH64];%128阶哈达码
NH128=-1*H128;
switchx
case2
A=H2;
case4
A=H4;
case8
A=H8;
case16
A=H16;
case32
A=H32;
case64
A=H64;
case128
A=H128;
otherwise
disp('error');
end
在本实验中我们采用16阶哈达码对用户数据进行Walsh扩频调制,只要调用函数N=16;B=walsh(N),即可产生扩频增益为N=16的扩频码。
2.2发送端
实验中我们把发送端的各个子模块写在一个函数中,由main函数进行调用,发送模块的函数名为send_module(nA,N,m,B),其中nA为用户A通过调用MATLAB自带的fix(unifrnd(0,255))函数,产生一个字节的随机信号;N为哈达码的阶数;m为N阶哈达码的第m行,即Walsh扩频码。
函数返回两组值,[nA_2,ChannelA]中nA_2表示用户A数据从十进制转换为二进制,并分解为适合电路传输的双极性数字基带信号(例如,nA=112,则nA_2=[+1+1+1-1-1-1-1-1]),可以做为误码计数器的原始比较信号。
而ChannelA表示用户A数据调制后的最终数据。
图4是用户A调制过程的各个波形。
发送端函数调用的源代码如下:
fori=1:
4
switchi
case1
%nA=input('用户A数据nA=');
nA=fix(unifrnd(0,255));%产生一个字节随机信号
m=i+1;
figure
(1);
[nA_2,ChannelA]=send_module(nA,N,m);
case2
%nB=input('用户B数据nB=');
nB=fix(unifrnd(0,255));%产生一个字节随机信号
m=i+1;
figure
(2);
[nB_2,ChannelB]=send_module(nB,N,m);
case3
%nC=input('用户C数据nC=');
nC=fix(unifrnd(0,255));%产生一个字节随机信号
m=i+1;
figure(3);
[nC_2,ChannelC]=send_module(nC,N,m);
case4
%nD=input('用户D数据nD=');
nD=fix(unifrnd(0,255));%产生一个字节随机信号
m=i+1;
figure(4);
[nD_2,ChannelD]=send_module(nD,N,m);
otherwise
disp('error');
end
i=i+1;
end
图4用户A直接序列扩频通信调制
图5用户B直接序列扩频通信调制
图6用户C直接序列扩频通信调制
图7用户D直接序列扩频通信调制
2.3信道
如图8所示,是信道两端信号的波形。
将用户A、B、C、D已调信号相加后,送入传输信道中,用高斯加性白噪声对信道中的信号进行干扰。
本实验调用MATLAB自带的awgn(Channel,snr,'measured')函数,其中,Channel是所有用户已调信号的和,snr是信道的信噪比。
信道传输的源代码如下:
figure(5);
hannelD;
q=1:
1:
128*8;
subplot(2,1,1);
plot(q,Channel);
title('发射信号')
axis([11024-4.44.4])
Channel=ChannelA+ChannelB+ChannelC+C
snr=0.00001;%信道的信噪比,单位dB
y=awgn(Channel,snr,'measured');
subplot(2,1,2);
plot(q,y);
axis([11024-4.44.4])
title('接收信号')
图8awng信道发送端和接收端波形
2.4接收端
接收函数的函数名为receive_module(N,y,m),其中N为哈达码的阶数,y为接收信号,m为N阶哈达码的第m行,即Walsh扩频码。
返回值receiveA表示接收对用户A发送的信号进行解调后还原的信号,作为最后差错计数器还原比较信号。
如图9所示,是接收端信号解调过程中各个子模块的波形图。
接收端解调过程的具体源代码如下:
fori=1:
4;
switchi
case1
m=i+1;
figure(6);
case3
m=i+1;
figure(8);
receiveC=receive_module(N,y,m);
case4
m=i+1;
figure(9);
receiveA=receive_module(N,y,m);
case2
m=i+1;
figure(7);
receiveB=receive_module(N,y,m);
receiveD=receive_module(N,y,m);
otherwise
disp('error');
end
i=i+1;
end
图9用户A直接序列扩频通信解调
图10用户B直接序列扩频通信解调
图11用户C直接序列扩频通信解调
图12用户D直接序列扩频通信解调
2.5差错计数器
将4个用户的发送函数和接收函数的返回值逐位进行比较。
差错计数器源代码如下:
send=[nA_2;nB_2;nC_2;nD_2]%发送端用户原始数据
receive=[receiveA;receiveB;receiveC;receiveD]%接收端还原后的数据
count=0;%统计误码个数
fori=1:
32
ifsend(i)~=receive(i)
count=count+1;
end
end
disp('误码个数');
1.程序总结
3.1误码率
在数字通信中,误码率是一项主要的性能指标。
在实际测量数字通信系统的误码率时,一般测量结果与信源送出信号的统计特性有关。
通常认为二进制信号中0和1是以等概率随机出现的,所以测量误码率时最理想的信源应是随机信号发生器。
由于Walsh函数是周期性的伪随机序列,因而可作为一种较好的随机信源。
扩频序列通过终端机和信道后,输出仍为扩频序列。
在接收端,本地产生一个同步的扩频码,与收码序列逐位相乘再求规格化内积,再与发送端信源码进行比较,一旦有错,误码计数器加一。
误码率的数学表达式为:
其中S是信码个数,e是误码个数,E就是误码率。
3.2信噪比
测量通信系统的性能时,常常要使用噪声发生器,由它给出具有所要求的统计特性和频率特性的噪声,并且可以随意控制其强度,以便得到不同信噪比条件下的系统性能。
在实际测量中,往往需要用到带限高斯白噪声。
本实验中的噪声主要有两类,一类是用户间相互干扰的噪声,由于用户信息经过扩频具有伪随机性,所以又可称为伪噪声;另一类是我们自己添加到信道的高斯加性白噪声AWNG,它独立于信源信号。
信噪比计算是数学表达式为:
其中
为信码发射功率,
为噪声功率,
为信源码,
为信宿码,计算结果单位为dB。
图13用户A的误码率与信噪比关系曲线
2.课程总结
经过本次课程设计,我们对Matlab和移动通信相关知识点更加熟悉了解。
尤其是matlab程序编程的使用。
经过查阅了大量的文献和不断的实践,由一开始的不知从何入手到渐渐理解了整个设计的原理和具体设计的思路,并且一遍又一遍的重复实践,直到我们期望的结果实现,那种解决一个难题的成就感不是一个两个词能够形容的,可以说,痛并快乐着。
更重要的是,这次课程设计的内容是我们以后从事通信系统研究和工作的基础。
在毕业前的这次练笔,无疑也是一次巩固知识的机会。
在各种专业面试中更增加了一个筹码。
附录(部分程序)
(1)主函数main.m
clear
clc
N=16;
fori=1:
4
switchi
case1
nA=fix(unifrnd(0,255));
m=i+1;
figure
(1);
[nA_2,ChannelA]=send_module(nA,N,m);
case2
nB=fix(unifrnd(0,255));
m=i+1;
figure
(2);
[nB_2,ChannelB]=send_module(nB,N,m);
case3
nC=fix(unifrnd(0,255));
m=i+1;
figure(3);
[nC_2,ChannelC]=send_module(nC,N,m);
case4
nD=fix(unifrnd(0,255));
m=i+1;
figure(4);
[nD_2,ChannelD]=send_module(nD,N,m);
otherwise
disp('error');
end
i=i+1;
end
figure(5);
Channel=ChannelA+ChannelB+ChannelC+ChannelD;
q=1:
1:
128*8;
subplot(2,1,1);
plot(q,Channel);
title('发射信号')
axis([11024-55])
snr=0000.1;
y=awgn(Channel,snr,'measured');
subplot(2,1,2);
plot(q,y);
axis([11024-15.515.5])
title('接收信号')
fori=1:
4;
switchi
case1
m=i+1;
figure(6);
receiveA=receive_module(N,y,m);
case2
m=i+1;
figure(7);
receiveB=receive_module(N,y,m);
case3
m=i+1;
figure(8);
receiveC=receive_module(N,y,m);
case4
m=i+1;
figure(9);
receiveD=receive_module(N,y,m);
otherwise
disp('error');
end
i=i+1;
end
send=[nA_2;nB_2;nC_2;nD_2;]
receive=[receiveA;receiveB;receiveC;receiveD;]
count=0;
fori=1:
32
ifsend(i)~=receive(i)
count=count+1;
end
end
disp('ÎóÂë¸öÊý');
(2)walsh.m
functionA=walsh(x)
H2=[11;1-1];%2阶哈达码
NH2=H2*(-1);
H4=[H2H2;H2NH2];%4阶哈达码
NH4=-1*H4;
H8=[H4H4;H4NH4];%8阶哈达码
NH8=-1*H8;
H16=[H8H8;H8NH8];%16阶哈达码
NH16=-1*H16;
H32=[H16H16;H16NH16];%32阶哈达码
NH32=-1*H32;
H64=[H32H32;H32NH32];%64阶哈达码
NH64=-1*H64;
H128=[H64H64;H64NH64];%128阶哈达码
NH128=-1*H128;
switchx
case2
A=H2;
case4
A=H4;
case8
A=H8;
case16
A=H16;
case32
A=H32;
case64
A=H64;
case128
A=H128;
otherwise
disp('error');
end
(3)send_module.m
function[data_2,I]=send_module(n,N,unum)
B=walsh(N);
data=dec2base(n,2);
data_2=ones(1,8)*(-1);
fori=1:
8;
da=n/2;
n=fix(da);
if(da-n)>0;
data_2(i)=1;
elsedata_2(i)=-1;
end
i=i+1;
end
C=ones(1,128);
i=1;
fork=1:
8;
foru=(k-1)*128+1:
k*128;
D(u)=data_2(k).*C(i);
u=u+1;
i=i+1;
end
k=k+1;
i=1;
end
q=1:
1:
128*8;
subplot(5,1,1)
plot(q,D);%生成用户数据的波形
axis([11024-1.21.2])
title('直接序列扩频通信调制部分')
ylabel('用户m(t)')
n2=128/N;
n3=ones(1,n2);
n6=1;
forn4=1:
N
forn5=(n4-1)*n2+1:
n4*n2;
E(n5)=B(unum,n4).*n3(n6);
n5=n5+1;
n6=n6+1;
end
n4=n4+1;
n6=1;
end
F=[EEEEEEEE];
subplot(5,1,2)
plot(q,F);%循环生成Walsh码
axis([11024-1.21.2])
ylabel('Walsh码p(t)');
G=D.*F*(-1);
subplot(5,1,3)
plot(q,G);%直接序列扩频
axis([11024-1.21.2])
ylabel('c(t)=m(t)*p(t)');
T=n2;
w=2*pi/T;
H=sin(w*q);
subplot(5,1,4)
plot(q,H);
axis([11024-1.21.2])
ylabel('载波');
I=H.*G*(-1);
subplot(5,1,5)
plot(q,I);
axis([11024-1.21.2])
ylabel('BPSK已调波');
(4)receive_module.m
functionreceive_signal=receive_module(N,y,unum);
K=walsh(N);
q=1:
1:
128*8;
n2=128/N;
T=n2;
w=2*pi/T;
L=sin(w*q);
subplot(5,1,1)
plot(q,L);
axis([11024-1.21.2])
ylabel('载波');
title('直接序列扩频通信解调部分')
R=y.*L;
P=1./2./(16+9.*sin(2.*w.*q).*sin(2.*w.*q)).*(12.*sin(2.*w.*q).*cos(2.*w.*q).*R+20.*sin(2.*w.*q).*R+4.*sqrt(9.*sin(2.*w.*q).*sin(2.*w.*q).*cos(2.*w.*q).*cos(2.*w.*q).*R.*R+48.*sin(2.*w.*q).*sin(2.*w.*q).*cos(2.*w.*q).*R.*R-41.*R.*R.*sin(2.*w.*q).*sin(2.*w.*q)-32.*cos(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q)+66.*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q)+32.*sin(2.*w.*q).*sin(2.*w.*q)+32.*R.*R.*cos(2.*w.*q)-32.*R.*R-18.*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q).*cos(2.*w.*q)+27.*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q)-27.*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q).*R.*R))./sin(2.*w.*q);
subplot(5,1,2)
plot(q,P);%BPSK解调
axis([11024-1.51.5])
ylabel('BPSK解调');
n3=ones(1,n2);
n6=1;
forn4=1:
N
forn5=(n4-1)*n2+1:
n4*n2;
E(n5)=K(unum,n4).*n3(n6);
n5=n5+1;
n6=n6+1;
end
n4=n4+1;
n6=1;
end
F=[EEEEEEEE];%F为对应用户的Walsh码序列
V=P.*F;
subplot(5,1,3)
plot(q,V);
axis([11024-1.51.5])
ylabel('Walsh解扩');
sum=0;
forn7=1:
8;
forn8=1:
128
sum=sum+V(n8+(n7-1)*128)/128;
n8=n8+1;
end
R(n7)=sum;
sum=0;
n7=n7+1;
end
S=ones(1,128);
n7=0;
forn7=1:
8;
forn8=(n7-1)*128+1:
n7*128;
forn9=1:
128;
U(n8)=S(n9).*R(n7);
n9=n9+1;
end
n8=n8+1;
end
n7=n7+1;
end
subplot(5,1,4)
plot(q,U);%利用Walsh函数的正交性求规格化内积
axis([11024-11])
ylabel('解调');
forn10=1:
128*8
ifU(n10)>=0W(n10)=1;
elseW(n10)=-1;
end
n10=n10+1;
end
subplot(5,1,5)
plot(q,W);%判决器
axis([11024-1.21.2])
ylabel('判决器');
i=0;
forn7=1:
8;
receive_signal(n7)=W(n7+i*128);
i=i+1;
end
(4)SNR
functioncount=SNR(snr)
N=16;
fori=1:
4
switchi
case1
nA=fix(unifrnd(0,255));
m=i+1;
[nA_2,ChannelA]=send_module(nA,N,m);
case2
nB=fix(unifrnd(0,255));
m=i+1;
[nB_2,ChannelB]=send_module(nB,N,m);
case3
nC=fix(unifrnd(0,255));
m=i+1;
[nC_2,ChannelC]=send_module(nC,N,m);
case4
nD=fix(unifrnd(0,255));m=i+1;
[nD_2,ChannelD]=send_module(nD,N,m);
otherwise
disp('error');
end
i=i+1;
end
Channel=ChannelA+ChannelB+ChannelC+ChannelD;
q=1:
1:
128*8;
y=awgn(Channel,snr,'measured');
fori=1:
4;
switchi
case1
m=i+1;
%figure(6);
receiveA=receive_module(N,y,m);
case2
m=i+1;
receiveB=receive_module(N,y,m);
case3
m=i+1;
receiveC=receive_module(N,y,m);
case4
m=i+1;
receiveD=receive_module(N,y,m);
otherwise
disp('error');
end
i=i+1;
end
send=nA_2
receive=receiveA;receiveB;receiveC;receiveD
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 直接 序列 系统