一、仿真要求

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

二、仿真方案设计原理

1.扩频通信的基本原理
①香农公式:C=Blog(1 + S / N) (C是信道容量,指单位时间内无差错传播的最大信息量,单位为b/s;B是信号频带带宽,单位HZ;S是信号功率,单位W;N为噪声功率,单位W;其中S/N为输入功率与噪声功率之比,称为性躁功率比,简称性躁比)
由信号频谱图知,减小时域周期持续时间更短,频谱更宽,可以提高信号带宽B。
②信号频谱
在这里插入图片描述
2.发射端频谱如何发展?
Tc = Tb / L
(L是频谱的扩展倍数,扩频增益;Tb是比特周期;Tc是码片周期 )
①将一个数据位的持续时间进行分片
②一个数据位的持续时间有多个小片组成,显然从频谱的角度看,每个小片的持续时间比一个数据位的持续时间短,显然其频谱就宽
③其频谱的扩展倍数 L= Tb / Tc
④码片速率也就变成数据数率的L倍
3.接收端如何解扩恢复原来的带宽?
如表所示
在这里插入图片描述
在这里插入图片描述
4.其中的关键问题
对扩频码的要求:
①自相关特性(良好的自相关特性,便于扩频码的同步):时间延迟τ = 0时达到峰值,其他情况尽量等于0。
②互相关特性(良好的互相关特性,便于区分不同的用户):希望互相关系数ρ(x,y)在0附件完全正交。
在这里插入图片描述
由上图知,m序列在一个点达到峰值,其他情况接近0,,所以它的自相关特性很好,互相关特性在0附件还行,所以一般。
5.扩频通信系统发射机模型
本文采用的是BPSK调制解调方式。发送端将扩频后的信号s乘上载波
cos(2πft)即完成了调制
在这里插入图片描述
6.扩频通信系统发射机设计
在这里插入图片描述
7.参数设置
数据速率:dataRate
载波速率:fc
抽样频率:fs(将连续信号变为离散信号)
码片速率:chipRate

8.接收机原理
接收端再乘以载波cos(2*πft)做相干解调,再经过一个低通滤波器滤除相乘过程中产生的高频成分即完成了解调
在这里插入图片描述
思考:扩频通信系统中为什么要先解扩再解调,而不是发射机端处理过程的逆过程?
答:因为我们通过发送端扩频调制出来的信号,功率很低,像噪声一样,无法解调,所以在接收端应该先解扩检查出信号,然后再解调,通过低通滤波器。
注意:仿真中没有考虑所有的同步问题,都假定是精准同步的
9.接收机设计
在这里插入图片描述
10.扩频通信系统仿真的主程序
在这里插入图片描述
信道主要模拟信号的多径传输,在这个信道中一共有三个用户的数据进行传输,用户一经过了2径衰落,用户二经过了3径衰落,用户三经过了4径衰落。接收端接收到的信号是几路多径信号的加噪后的叠加,首先要完成信号的解扩,然后再解调,滤波,抽样判决最后分别与原始信号比较并统计误码率。
在这里插入图片描述
11.如图,扩频码采用周期为63的m序列,可知其对应的级数为6,反馈系数Ci对应的八进制(二进制)分别为103(1000011)、147(1100111)、155(1101101)。因此本实验中设计的反馈系数为

b1=[1,0,0,0,0,1,1]; %C0=1,C1=1,C2=0,C3=0,C4=0,C5=0,C6=1
b2=[1,1,0,0,1,1,1]; %C0=1,C1=1,C2=1,C3=0,C4=0,C5=1,C6=1
b3=[1,1,0,1,1,0,1]; %C0=1,C1=0,C2=1,C3=1,C4=0,C5=1,C6=1

m序列部分反馈系数:
在这里插入图片描述
12.线性反馈移位寄存器(m序列)
在这里插入图片描述

三、详细仿真代码

1.产生随机的-1,1信号,函数information()

function signal=information(N)  %N为本次产生的数据个数
%产生随机的-1,1信号
signal=rand(1,N)>=0.5;
signal=signal*2-1;
end

2.产生m序列,函数genMseq()

function c=genMseq(b)
%产生m序列
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;                       %变为1,-1的序列
end

3.扩频,函数dsss()

function ssignal=dsss(signal,c)
%扩频
ssignal=[];
for i=1:length(signal)
    ssignal=[ssignal,signal(i)*c];
end
end

4.采用BPSK调制方式,函数modu()

function [modusignal]=modu(signal, dataRate,fc, fs)
%采用BPSK调制方式
t=linspace(0,1/dataRate,fs/dataRate);
carrier=cos(2*pi*fc*t);
modusignal=[];
for i=1:length(signal)
    modusignal=[modusignal,carrier*signal(i)];
end
end

5.解扩,函数dedsss()

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

6.解调,函数demodu()

function demoSignal=demodu(Resignal,datarate,fc,fs)
%解调
t = linspace(0,1/datarate,fs/datarate);
carrier=cos(2*pi*fc*t);
Lc=length(carrier);
Ls=length(Resignal);
designal=[];
for i=1:Lc:Ls
    designal=[designal,carrier.*Resignal(i:i+Lc-1)];
end
demoSignal = [];
for i= 1:Lc:Ls
    threshold=sum(designal(i:i+Lc-1));
    if threshold>0
        tt=1;
    else
        tt=-1;
    end
    demoSignal=[demoSignal,tt];
end
end

7.模拟多径衰落 函数channels()

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,6),r2(1:length(modusignal)-6)];
x3=randn(1,len);
y3=randn(1,len);
r3=abs(x3+j*y3).*modusignal;
r3=[zeros(1,8),r3(1:length(modusignal)-8)];
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);

8.扩频通信系统仿真的主程序 函数main()

dataRate=1000;
chipRate=63*dataRate;
fc=chipRate*2;
fs=fc*8;
N=1000;
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);
    %产生m码
    c1=genMseq(b1);
    c2=genMseq(b2);
    c3=genMseq(b3);
    %扩频
    dssignal1=dsss(signal1,c1);
    dssignal2=dsss(signal2,c2);
    dssignal3=dsss(signal3,c3);
    %调制
    [modusignal1]=modu(dssignal1,chipRate,fc, fs);
    [modusignal2]=modu(dssignal2,chipRate,fc, fs);
    [modusignal3]=modu(dssignal3,chipRate,fc, fs);
    %模拟多径衰落
    modusignal11=channels(modusignal1,snr(i),2);
    modusignal22=channels(modusignal2,snr(i),3);
    modusignal33=channels(modusignal3,snr(i),4);
    %混合接收
    receivesignal=modusignal11+modusignal22+modusignal33;
    %解扩
    dedssignal1=dedsss(receivesignal,c1,chipRate,fs);
    dedssignal2=dedsss(receivesignal,c2,chipRate,fs);
    dedssignal3=dedsss(receivesignal,c3,chipRate,fs);
    %解调
    demoSignal1=demodu(dedssignal1,dataRate,fc,fs);
    demoSignal2=demodu(dedssignal2,dataRate,fc,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
figure;
semilogy(snr,err_bit1,'-s',snr,err_bit2,'-h',snr,err_bit3,'-*');
legend('用户1','用户2','用户3');
xlabel('信噪比');
ylabel('误比特率');

四、仿真结果比较

模拟信号的多径传输,用户1经过了2径衰落,用户2经过了3径衰落,用户3经过了4径衰落仿真结果:
在这里插入图片描述
结论:由上图可以知道,用户1通过2径衰落、用户2通过3径衰落,用户3通过4径衰落,随着信噪比的增加,用户的误比特率会降低,信噪比越大,误比特率越低也可看见用户2在≥-14的性躁比时,后面没有显示出来,表示后面没有任何错误的比特;其次,也能知道每个用户在很低的性躁比下误比特率也还可以,在性躁比达到-10时的误比特率几乎快接近于0。因此,扩频通信扩频码特性确实能够以很低的功率进行传播来实现很小的误比特率。由于信号是随机产生,接收信号是PDP构成的,PDP不同,接收信号不一样,故每次的运行结果都不一样,但是并不影响最后的误比特率与信噪比的整体关系。


  • 加油!💚在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐