无线通信扩频仿真 实验报告

Xx大学信息科学与工程学院

综合性设计性实验报告

专        业:    

学        号:            

姓        名:               

实验所属课程:移动通信原理与应用

实验室(中心):软件与通信实验中心  

指 导 教 师 :              

  

20##年3月


一、题目

扩频通信系统仿真实验

二、仿真要求

扩频通信系统的多用户数据传输

①传输的数据随机产生,要求采用频带传输(BPSK调制);

②扩频码要求采用周期为31的m序列;

③仿真从基站发送数据到三个不同的用户,各不同用户分别进行数据接收;

④设计三种不同的功率延迟分布,从基站到达三个不同的用户分别经过多径衰落(路径数分别为2,3,4);

⑤三个用户接收端分别解出各自的数据并与发送前的数据进行差错比较。

三、仿真方案详细设计

仿真方案详细设计

扩频技术:

扩频技术实质是在发送端将欲发送的数据信息的频带展宽到一个比原信号带宽宽的多的频带上去,接收端通过相关接收方法,再将其恢复到原来信息带宽的一种技术。扩频通信的信号带宽与信息带宽之比则高达100~1000,属于宽带通信。 

 扩展频谱技术的理论基础是Shannon公式

式中,C为信道容量,意指单位时间内信道中无差错传输的最大信息量,其单位为b/s;B为信号频带宽度,单位为Hz;S为信号功率,单位为W;N为噪声功率,单位为W;S/N为输入功率与噪声功率之比,称为信噪功率比。

扩频系统组成:  

扩频系统主要由3部分组成,即发射机,信道,接收机

  发射机:

信源→将随机产生的0,1数据比特流对应变成-1,1,提供要传输的信息,即原始数据a(t)。

扩频→发射机的核心部分,利用扩频码M序列(c(t))将a(t)信号带宽拓的非常宽,得到扩频信号d(t)=a(t)*c(t)。

调制→为了使信号在信道中进行传输,将信号进行调制处理,s(t)=a(t)*c(t)*cos(2πf0t )。

对扩频码的要求:

自相关特性(良好的自相关特性,便于扩频码的同步)

互相关特性(良好的互相关特性,便于区分不同的用户)

扩频码包括m序列Walsh码,Gold码,M序列,Hadama矩阵,本实验采用M序列。M序列是最长线性移位寄存器序列的简称。顾名思义,M序列是由多级移位寄存器或其延迟元件通过线性反馈产生的最长的码序列。在二进制移位寄存器中,若n为移位寄存器的级数,n级移位寄存器共有2n个状态,除去全零状态外,还剩下2n-1种状态,因此它能产生的最大长度的码序列为2n-1位。故产生m序列的线性反馈移位寄存器称做最长线性移位寄存器。

产生M序列的移位寄存器的电路结构,即反馈线连接不是随意的,M序列的周期T也不能取任意值,而是必须满足:T=2n-1 (n是移位寄存器的级数)。

 

                 上图中B0B1B2B3...Bn是反馈系数

      在本仿真中,人为自定义反馈系数为8进制45(1 0 0 1 0 1),67(1 1 0 1 1 1),75(1 1 1 1 0 1),有上述理论可得出级数为5(寄存器个数为5),M序列周期T=31.

   信道:在扩频系统中,信号传输过程,有自身信号的衰落,有外界高斯白噪声的干扰,还有多径的影响。本仿真系统主要考虑多径对扩频系统的影响。本仿真中,多径通过信号延时的叠加得出。

   接收机:

    混频→接收端天线上感应的信号经高放的选择放大和混频后,得到包括以下几部分的信号:有用信号sI (t)、信道噪声nI (t)、干扰信号JI (t)和其它网的扩频信号sJ (t)等,即收到的信号(经混频后)为 rI(t)=sI(t)+nI(t)+JI(t)+sI(t)

    解扩→是接收机的核心部分,解扩要求接收端提供和发送端相同结构且完全同步的伪随机(PN)码序列c(t),如果接收机中的c’(t)与发端c(t)相同且同步,得到解扩信号rI’(t)=a(t)*c(t)*cos(2πf0t )*c(t),利用了伪随机序列的强的自相关特性和弱的互相关特性,接收机中利用相同且同步的伪随机(PN)码序列进行解扩的接收方法,常称为相关接收方法。

解调→对解扩后的信号进行解调,然后进行抽样判决,对信号进行恢复。a(t)=r’(t)*cos(2πf0t )

                上图为各种信号的图示

 

四、仿真结果及结论

为了观察到较好的图示效果,仿真时只产生了7个数据

第一行分别是3个用户信号的信源波形

第一行分别是3个用户信号的扩频波形

第一行分别是3个用户信号的调制波形

第一行为3个用户信号分别调制后的叠加信号

第二行为经过多径后的信号(延时效果)

 第一行为分别对调制信号进行解扩

 第一行为分别对调制信号进行解调

第一行分别为解调信号经过滤波器后的波形

第二行分别为抽样判决恢复原始输入信号

五、总结与体会

各种数据的含义、大小:

n:为输入的初始信息个数,这里n=7

signal1,signal2,signal3:用户1,2,3各产生7个长度的随机1/-1数据

S1,S2,S3:抽样画图时用到的数据

b1,b1,b3:人为初始定义的反馈系数(长度为6)

c1,c2,c3:由b1,b2,b3得到的M序列(长度为31)

ssignal1,ssignal2,ssignal3:分别为由c1,c2,c3对signal1,signal2,signal3进行扩频得到的扩频信号。(长度7*31=217)

B1,B2,B3:抽样画图时用到的数据

datarate=1:定义的信源码元的速率(datarate=1)

chiprate=datarate*31:定义码片速率(chiprate=31)

fc=chiprate*1:一个码片用一个载波表示(fc=31)

fs=fc*16:一个载波内抽样16个点(fs=496)

carrier:载波(长度16)

modusignal1:由ssignal1,fc,fs等参数进行调制得到,modusignal2、3同理

(长度为7*31*16=3472)

djmodusignal:为3路用户调制信息的叠加,其中延时为100个单位(长度为3472+100=3572),后面为了去除多径的100的数据,把长度减去了100,所以为3472。

jkdjmodusignal1: 对经过多径后的信号分别进行解扩(长度为3472),jkdjmodusignal2,jkdjmodusignal3同理。

jmodusignal1:对信号进行解调(长度为3472),jmodusignal2,jmodusignal3同理

y1:经过滤波器的解调信号(长度3521,其中包含了滤波器的延时)

Y1:对滤波后的信号进行抽样判决(长度为7)

Yy:抽样画图时用到的数据(长度为3472)

     以上对仿真过程中用到的参数进行了解释,并详细计算了参数的长度,

验证了程序的准确性。

     通过本次试验,了解了扩频通信系统的组成部分,各部分的功能,系统的工作原理,然后利用Matlab软件,然后将这些理论变成仿真系统

六、主要仿真代码

              主函数

clear;

clc;

%----------产生信源数据-----------

n=input('input:\n');

[signal1,S1]=generate(n);

[signal2,S2]=generate(n);

[signal3,S3]=generate(n);

%----------产生伪随机序列---------

b1=[1 0 0 1 0 1];c1=genemseq(b1);

b2=[1 1 1 1 0 1];c2=genemseq(b2);

b3=[1 1 0 1 1 1];c3=genemseq(b3);

%-------对信源数据进行扩频--------

[ssignal1,B1]=DSSS(signal1,c1);

[ssignal2,B2]=DSSS(signal2,c2);

[ssignal3,B3]=DSSS(signal3,c3);

%----------初始化datarate/chiprate/fc/fs/carrier------------

datarate=1;

chiprate=datarate*31;

fc=chiprate*1;

fs=16*fc;

%---------------对扩频信号进行调制-------------------

[modusignal1,carrier]=modu(ssignal1,chiprate,fc,fs);

[modusignal2,carrier]=modu(ssignal2,chiprate,fc,fs);

[modusignal3,carrier]=modu(ssignal3,chiprate,fc,fs);

modusignal=modusignal1+modusignal2+modusignal3;

%---------画出信源波形---------

figure(1);

subplot(331),plot(S1);

axis([0 length(S1) -1.5 1.5]);

title('信源1波形');

subplot(332),plot(S2);

axis([0 length(S2) -1.5 1.5]);

title('信源2波形');

subplot(333),plot(S3);

axis([0 length(S3) -1.5 1.5]);

title('信源3波形');

%--------画出扩频波形----------

subplot(334),plot(B1);

axis([0 length(B1) -1.5 1.5]);

title('扩频1波形');

subplot(335),plot(B2);

axis([0 length(B2) -1.5 1.5]);

title('扩频2波形');

subplot(336),plot(B3);

axis([0 length(B3) -1.5 1.5]);

title('扩频3波形');

%------------画出调制波形---------------

subplot(337),plot(modusignal1);

axis([0 length(modusignal1) -1.5 1.5]);

title('调制1波形');

subplot(338),plot(modusignal2);

axis([0 length(modusignal2) -1.5 1.5]);

title('调制2波形');

subplot(339),plot(modusignal3);

axis([0 length(modusignal3) -1.5 1.5]);

title('调制3波形');

%------------信号经过多径----------------

djmodusignal=mulpath(modusignal);

djmodusignal=djmodusignal(1:end-100);

%----画出调制波形和经过多径后的调制波形----

figure(2);

subplot(211),plot(modusignal);

axis([0 length(modusignal) -3.5 3.5]);

title('调制波形');

subplot(212),plot(djmodusignal);

axis([0 length(djmodusignal) -3.5 3.5]);

title('多径波形');

%---------------分别对信号进行解扩--------------------

jkdjmodusignal1=jDSSS(djmodusignal,c1,chiprate,fs);

jkdjmodusignal2=jDSSS(djmodusignal,c2,chiprate,fs);

jkdjmodusignal3=jDSSS(djmodusignal,c3,chiprate,fs);

%---------------分别对信号进行解调--------------------

jmodusignal1=jmodu(jkdjmodusignal1,carrier);

jmodusignal2=jmodu(jkdjmodusignal2,carrier);

jmodusignal3=jmodu(jkdjmodusignal3,carrier);

%---------------画出解扩波形----------------

figure(3)

subplot(231),plot(jkdjmodusignal1);

axis([0 length(jkdjmodusignal1) -3.5 3.5]);

title('解扩1波形');

subplot(232),plot(jkdjmodusignal2);

axis([0 length(jkdjmodusignal2) -3.5 3.5]);

title('解扩2波形');

subplot(233),plot(jkdjmodusignal3);

axis([0 length(jkdjmodusignal3) -3.5 3.5]);

title('解扩3波形');

%---------------画出解调波形--------------

subplot(234),plot(jmodusignal1);

axis([0 length(jmodusignal1) -3.5 3.5]);

title('解调1波形');

subplot(235),plot(jmodusignal2);

axis([0 length(jmodusignal2) -3.5 3.5]);

title('解调2波形');

subplot(236),plot(jmodusignal3);

axis([0 length(jmodusignal3) -3.5 3.5]);

title('解调3波形');

%-----分别对解调信号进行滤波-----

load lowNum;

IN=(length(lowNum)-1)/2;

R=ones(1,ceil(IN));

V1=jmodusignal1;V1=[V1,R];

y1=filter(lowNum,1,V1);

V2=jmodusignal2;V2=[V2,R];

y2=filter(lowNum,1,V2);

V3=jmodusignal3;V3=[V3,R];

y3=filter(lowNum,1,V3);

%-----分别对滤波信号进行抽样判决---------

[Y1,Yy1]=cypj(y1,IN);

[Y2,Yy2]=cypj(y2,IN);

[Y3,Yy3]=cypj(y3,IN);

%--------画出滤波后的信号--------

figure(4);

subplot(231),plot(y1);

axis([IN length(y1)+IN -3 3]);

title('滤波1波形');

subplot(232),plot(y2);

axis([IN length(y2)+IN -3 3]);

title('滤波2波形');

subplot(233),plot(y3);

axis([IN length(y3)+IN -3 3]);

title('滤波3波形');

%--------画出抽样判决后的波形--------

subplot(234),plot(Yy1);

axis([IN length(Yy1)+IN -1.5 1.5]);

title('抽样判决1波形');

subplot(235),plot(Yy2);

axis([IN length(Yy2)+IN -1.5 1.5]);

title('抽样判决2波形');

subplot(236),plot(Yy3);

axis([IN length(Yy3)+IN -1.5 1.5]);

title('抽样判决3波形');

生成信源数据函数

function [signal,S]=generate(n)

signal=(rand(1,n)>=0.5)*2-1;

S=[];

for i=1:length(signal)

    if signal(i)==1

        S=[S,ones(1,20)];

    else

        S=[S,-ones(1,20)];

    end

end

生成伪随机序列(M序列)函数

function c=genemseq(b)

L=length(b)-1;

c=[];

D=ones(1,L);

for i=1:2^L-1

    cnew=rem(sum(b(2:end).*D),2);

    c=[c,D(L)];

    D=[cnew,D(1:L-1)];

end

c=2*c-1;

扩频函数

function [ssignal,B]=DSSS(signal,c)

ssignal=[];

for i=1:length(signal)

    ssignal=[ssignal,signal(i)*c];

end

B=[];

for i=1:length(ssignal)

    if ssignal(i)==1

        B=[B,ones(1,20)];

    else

        B=[B,-ones(1,20)];

    end

end

调制函数

function [modusignal,carrier]=modu(ssignal,chiprate,fc,fs)

t=linspace(0,1/chiprate,fs/chiprate);

carrier=sin(2*pi*fc*t);

modusignal=[];

for i=1:length(ssignal)

    modusignal=[modusignal,carrier*ssignal(i)];

end

多径函数

function djmodusignal=mulpath(modusignal)

delay0=[modusignal,zeros(1,100)];

delay1=[zeros(1,100),modusignal];

delay2=[zeros(1,50),modusignal,zeros(1,50)];

djmodusignal=delay0+delay1+delay2;

解扩函数

function jkdjmodusignal=jDSSS(djmodusignal,c,chiprate,fs)

L=fs/chiprate;

c1=[];

for i=1:length(c)

    c1=[c1,c(i)*ones(1,L)];

end

c2=[];

for j=1:(length(djmodusignal)/length(c1))

    c2=[c2,c1];

end

jkdjmodusignal=[];

jkdjmodusignal=[jkdjmodusignal,djmodusignal.*c2];

解调函数

function jmodusignal=jmodu(jkdjmodusignal,carrier)

len=length(jkdjmodusignal)/16;

jmodusignal=[];

for i=0:len-1

    jmodusignal=[jmodusignal,jkdjmodusignal(i*16+1:i*16+16).*carrier];

end

抽样判决函数

function [Y,Yy]=cypj(y,IN)

Y=[];

for i=1:length(y)/496

    Y(i)=sum(y((ceil(IN)+496*(i-1)):(ceil(IN)+496*i)));

end

for j=1:length(Y)

    if Y(j)>0

        Y(j)=1;

    else

        Y(j)=-1;

    end

end

Yy=[];

for k=1:length(Y)

    if Y(k)==1

        Yy=[Yy,ones(1,496)];

    else

        Yy=[Yy,-ones(1,496)];

    end

end

 

          

相关推荐