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

扩频通信系统仿真
本文详细介绍了扩频通信系统的仿真过程,包括系统设计、程序代码实现及仿真结果分析。重点探讨了多用户数据传输和扩频增益性能,通过BPSK调制和m序列扩频,展示了多径衰落环境下信号的传输与接收。

一、仿真要求

要求一:扩频通信系统的多用户数据传输
①传输的数据随机产生,要求采用频带传输(BPSK调制);
②扩频码要求采用周期为63(或127)的m序列;
③仿真从基站发送数据到三个不同的用户,各不同用户分别进行数据接收;
④设计三种不同的功率延迟分布,从基站到达三个不同的用户分别经过多径衰落(路径数分别为2,3,4);
⑤三个用户接收端分别解出各自的数据并与发送前的数据进行差错比较。

要求二:利用蒙特卡罗仿真方法对扩频增益进行性能仿真
设计仿真方案,得到在数据传输过程中进行扩频(扩频序列用m序列)和不进行扩频的BER性能结论,要求得到的BER曲线较为平滑,并说明这种结论与理论上的结论是否相符,为什么?

二、设计方案

1.系统的总体框图

在这里插入图片描述

2.发射机原理图及设计

在这里插入图片描述
在这里插入图片描述

3.接收机原理图

在这里插入图片描述
从上面的图可以知道,整个设计由发送端、信道和接收机组成。

在发射端主要完成m序列的产生,随机0,1序列的产生。然后利用m序列对产生的随机序列进行扩频,然后再用cos(wt)对其进行调制。
信道主要模拟信号的多径传输,假设有三个用户在进行数据传输,分别经过了2,3,4径衰落。

接收端接收到的信号是多种信号的叠加,经过解扩,解调,滤波,抽样判决等操作后得到解调信号,最后与原始信号进行比较,并得到误码率。

4.主程序流程图

在这里插入图片描述

5.扩频码的产生

m序列是由多位级移寄存器或其它延迟元件通过线性反馈产生的最长的码序列。在二进制位移寄存器发生器中,若n为级数,则能产生的最大长度的码序列为位。

在这里插入图片描述

6.扩频

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

在这里插入图片描述

7.接收端解扩

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

在这里插入图片描述

8.调制与解调

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

三、程序代码

1.产生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;
end
2.扩频代码:
function ssigna1=dsss(signa1,c)
    ssignal=[];
    for i=1:length(signal)
        ssigna1=[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);
end
4.解扩代码:
function dessignal=dedsss(receiveSignal,c,chipRate,fs)
    L=fs/chipRate;
    c1=[];
    for i=1:length(c
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值