通信系统仿真实验报告

 

  综合实验报告

( 20##--2013 年度 第 一 学期)

名    称:   通信系统仿真  

  题    目:   基本题(注明题号121       

               综合题(注明题号16       

院    系:电子与通信工程系

班    级:                 

学    号:                 

学生姓名:                 

指导教师:                 

设计周数:        1        

成    绩:                   

          

日期:20##年 11 月 2 日


 

第二篇:扩频通信系统仿真实验报告

重庆交通大学信息科学与工程学院

综合性设计性实验报告

专        业:       通信工程专业10      

学        号:                     

姓        名:                      

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

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

指 导 教 师 :                        

  

20##年3月


一、题目

扩频通信系统仿真实验

二、仿真要求

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

①传输的数据随机产生,要求采用频带传输(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

 

产生m序列的matlab程序如下

v     function c=genMseq(b)

v                                              N=length(b)-1;

v         D=ones(1,N);

v         A=b(N:-1:1);

v         c=[];

v         for i=1:2^N-1

v                                                 c1=rem(sum(D.*A),2);

v              c=[c,D(N)];

v              D=[c1,D(1:N-1)];

v        end

v        c=c*2-1;                       %变为1,-1的序列

v    End

2、扩频

扩频的主要思想是每一位数据位都扩展成长度为m序列长的信息,其具体做法是将数据信息中的‘1’用m序列代替,而对于‘-1’用-m序列代替,这样对每一个数据位都进行扩展就实现了对原始数据的扩频。其结构框图如下

                                  

 


Signal                               扩频码

                           

M序列

其仿真代码如下:

function ssignal=dsss(signal,c)

signal=signal*2-1;

ssignal=[];

for i=1:length(signal)

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

end

end

3、多径信道的仿真

function multiS=channels(modusignal,snr,k)

%模拟多径衰落

len=length(modusignal);

x1=randn(1,len);

y1=randn(1,len);

r1=abs(x1+j*y1).*modusignal;

r1=[zeros(1,5),r1(1:length(modusignal)-5)];

x2=randn(1,len);

y2=randn(1,len);

r2=abs(x2+j*y2).*modusignal;

r2=[zeros(1,8),r2(1:length(modusignal)-8)];

x3=randn(1,len);

y3=randn(1,len);

r3=abs(x3+j*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);

4、接收端解扩

在假定扩频码与接收信号同步的情况下, 可对接收信号进行解扩, 其解扩的过程与扩频的过程一样, 也是利用扩频码与接收信号进行相乘即可。其原理图如下:

解扩代码如下:

v  function dessignal=dedsss(receiveSignal,c,chipRate,fs)

v      L=fs/chipRate;

v      c1=[];

v      for i=1:length(c)

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

v      end

v      dessignal=[];

v      for i=1:length(c1):length(receiveSignal)

v     dessignal=[dessignal,reciveSignal(i:i+length(c1)-1).*c1];

v      end

v  end

5、调制与解调

本文采用的是BPSK调制解调方式。发送端将扩频后的信号s乘上载波cos(2*πft)即完成了调制,接收端再乘以载波cos(2*πft)做相干解调,必须保证接收端乘以的载波与发送端的载波是相干的才能很好的解调,最后再经过一个低通滤波器滤除相乘过程中产生的高频成分即完成了解调。

四、仿真结果及结论

原信号和扩频之后的信号


图1

原信号频谱与扩频后信号频谱

图2


第一个用户信号经过扩频,调制之后的信号以及三个用户信号分别经过2径,3径,4径信道后的叠加信号之和如下图所示


图3

第一个原始用户信号与其经过接收端解扩,解调,抽样判决之后的最终信号的比较如下

图4


第二个原始用户信号与其经过接收端解扩,解调,抽样判决之后的最终信号的比较如下


图5

第三个原始用户信号与其经过接收端解扩,解调,抽样判决之后的最终信号的比较如下


实验结果分析

图6

扩频通信的理论基础为香农公式:C=Blog(1+S/N)

由公式可知,我们可以用牺牲带宽的办法来换取较低的信噪比,增加系统的抗干扰能力。直接序列扩频,是直接利用具有高码率的扩频码序列在发送端扩展信号的频谱,而在接收端,用相同的扩频码序列进行解扩,把展宽的扩频信号还原成原始的信息,是一种数字调制方法。

由图2可知,信号经过扩频后信号的频谱被展宽了,并且频谱功率降低了,这使得扩频通信系统具有较强的抗干扰能力,且具有很强的隐蔽性和抗侦查,抗窃听的能力。这种能力随着扩频增益的增大而增大。扩频增益的提高就需要提高扩频码m序列的位数了。

因为m序列具有良好的自相关特性和互相关特性,正是这两大特性使得在接收端可以很好的进行扩频码的同步,以及多路用户的区分,从而具有很好的抗多径干扰能力。

图三的上半部分为用户1的信号,下半部分为三个用户经过叠加的信号,由图可知,三个信号叠加过后有点儿像一个信号上面叠加了一些噪声。

A用户经过的是两径信道,B用户经过的是三径信道,C用户经过的是四径信道,所以在接收端A用户的误码率最低,其次是B用户,最后是C用户。本实验没有进行扩频码的同步,所以效果不是那么地好。

由图四、五、六可知接收端还是能比较好的恢复出原信号的。说明了扩频通信还是具有较好的抗干扰能力的。

五、总结与体会

     通过本次实验,我对直接序列扩频的原理有了一个更加全面的认识,对扩频系统在通信过程中的作用有了深刻的理解,特别是扩频通信抗多径衰落的能力在本实验中得到了很好的体现。

     在实验过程中也遇到了一些问题,中途连滤波器的设计也是拿出以前写过的代码重读了一遍然后参照那个写的。感觉到知识具有很强的遗忘性,那我们在今后的学习中要经常温习学过的东西,这样不仅能巩固知识还能学到新的东西,正所谓温故而知新嘛。

      MATLAB确实是一个很好的模拟软件,它能够让人很直观的理解通信的过程。

我深知实验中还是存在着很大的不足的,比如说由于时间关系没有在接收端进行扩频码序列的跟踪同步,使得系统的抗多径效果不是特别明显,在接下来的时间里,我会继续努力的,最后感谢李老师的辛苦教学。

六、主要仿真代码


主程序代码如下:

%主函数

function main()

clc;

clear;

close all;

N=100;

%扩频部分

sscPara1=[1 0 0 0 0 1 1];

sscPara2=[1 1 0 0 1 1 1];

sscPara3=[1 1 0 1 1 0 1];

c1=genMseq(sscPara1);

c2=genMseq(sscPara2);

c3=genMseq(sscPara3);

[modusignal1,dataRate,fc,fs,ssignal1,chipRate,data1]=transmitters(c1,N);

data=[];

for i=1:1/(8*63):length(data1)

    data=[data,2*data1(fix(i))-1];

end

figure;

subplot(2,1,1);

n=1:1/(8*63):length(data1);

plot(n,data);

ssignal=[];

for i=1:1/8:length(ssignal1)

   ssignal=[ssignal,ssignal1(fix(i))];

end

subplot(2,1,2);

l=1:1/8:length(ssignal1);

plot(l,ssignal);

N1=length(data);

figure;subplot(2,1,1);

sff1=-fix(N1/2):1:(fix(N1/2));

plot(sff1,fftshift(abs(fft(data))));

title('扩频前信号频谱');

N2=length(ssignal);

subplot(2,1,2);

sff2=-fix(N2/2):1:(fix(N2/2));

plot(sff2,fftshift(abs(fft(ssignal))));

title('扩频后信号频谱');

t=1:length(modusignal1);

figure;subplot(2,1,1);

plot(t,modusignal1);

[modusignal2,dataRate,fc,fs,ssignal2,chipRate,data2]=transmitters(c2,N);

[modusignal3,dataRate,fc,fs,ssignal3,chipRate,data3]=transmitters(c3,N);

modusignal1=channels(modusignal1,2);

t=1:length(modusignal1);

subplot(2,1,2);

plot(t,modusignal1);

modusignal2=channels(modusignal1,3);

modusignal3=channels(modusignal1,4);

modusignal=modusignal1+modusignal2+modusignal3;

BER1=[];BER2=[];BER3=[];

for snr=-10:2:10

    wr1=0; wr2=0; wr3=0;

    for i=1:10

receiveSignal=awgn(modusignal,snr);

[d1]=receiver(receiveSignal,dataRate,chipRate,fc,fs,c1);

[d2]=receiver(receiveSignal,dataRate,chipRate,fc,fs,c2);

[d3]=receiver(receiveSignal,dataRate,chipRate,fc,fs,c3);

wr1=wr1+sum(d1~=data1)/100;

wr2=wr2+sum(d2~=data2)/100;

wr3=wr3+sum(d3~=data3)/100;

    end

    wr1=wr1/11;

    wr2=wr2/11;

    wr3=wr3/11;

BER1=[BER1,wr1];

BER2=[BER2,wr2];

BER3=[BER3,wr3];

end

BER1

BER2

BER3

figure;

subplot(2,1,1);

n=1:1/8:length(data);

plot(n,data);

n=1:1/8:length(d1);

da1=[];

for i=1:1/8:length(d1)

    da1=[da1,d1(fix(i))];

end

subplot(2,1,2);

plot(n,da1);

figure;

n=0:1:10;

semilogy(n,BER1,'*r');

hold on

semilogy(n,BER2,'*y');

hold on

semilogy(n,BER3,'*b');

%解扩实现

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

%接收端信号解调

function  [demoSignal,b]=demodu(dessignal,dataRate,fc,fs)

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

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

demoSignal=[];

for i=1:length(carrier):length(dessignal)

demoSignal=[demoSignal,carrier.*dessignal(i:i+length(carrier)-1)];

end

  load lowpas;

l=fix((length(lowpas))/2);

demoSignal=[demoSignal,zeros(1,l)];

b=filter(lowpas,1,demoSignal);

b=b(l+1:end);

    panjue=[];

for i=1:length(demoSignal)/length(carrier)

    if demoSignal((i-1)*length(carrier)+3)>=0

        panjue=[panjue,1];

    else

        panjue=[panjue,0];

    end

end

b=panjue;

end

相关推荐