MATLAB扩频通信系统仿真实验(含代码)

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

扩频:每一位数据位都扩展成长度为m的序列,将数据信息中的‘1’用m序列代替,而对于‘-1’用-m序列代替。m序列有良好的自相关特性,便于接收端与发送端同步。
解扩:扩频码与接收信号同步的情况下, 可对接收信号进行解扩, 利用扩频码与接收信号进行相乘即可。扩频码采用周期为63的m序列,对应的级数为6,反馈系数Ci对应的二进制为1000011、1100111、1101101。
调制与解调:本实验采用DBPSK调制,先对信号进行差分编码,然后再进行BPSK调制。解调过程先对信号进行相干解调,然后再进行差分译码。
MTALAB代码:

主函数:
clear all;
clc;
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);    
    c1=genMseq(b1);c2=genMseq(b2);c3=genMseq(b3);%产生扩频码
    
    %差分编码
    difcodes1=Difcode(signal1);
    difcodes2=Difcode(signal2);
    difcodes3=Difcode(signal3);
    
    %扩频
    dssignal1=dsss(difcodes1,c1);
    dssignal2=dsss(difcodes2,c2);
    dssignal3=dsss(difcodes3,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);
     %多路用户信号叠加
    mixsignal=modusignal11+modusignal22+modusignal33;
    
    %用户一的解扩、解调、差分译码
    dedssignal1=dedsss(mixsignal,c1,chipRate,fs);
    demoSignal1=demodu(dedssignal1,dataRate,fc,fs);
    dedifcodes1=Dedifcode(demoSignal1);
    
    %用户二的解扩、解调、差分译码
    dedssignal2=dedsss(mixsignal,c2,chipRate,fs); 
    demoSignal2=demodu(dedssignal2,dataRate,fc,fs);
    dedifcodes2=Dedifcode(demoSignal2);
    
    %用户三的解扩、解调、差分译码
    dedssignal3=dedsss(mixsignal,c3,chipRate,fs);
    demoSignal3=demodu(dedssignal3,dataRate,fc,fs);
    dedifcodes3=Dedifcode(demoSignal3);

    
    %性能比较
    err_bit1(i)=sum(dedifcodes1~=signal1)/N;
    err_bit2(i)=sum(dedifcodes2~=signal2)/N;
    err_bit3(i)=sum(dedifcodes3~=signal3)/N;
end
figure(1)
plot(signal1);
title('原始信号signal1');
figure(2)
plot(difcodes1);
title('差分编码difcodes1');
figure(3)
plot(dssignal1);
title('扩频信号dssignal1');
figure(4)
plot(modusignal1);
title('调制信号modusignal1');
figure(5)
plot(dedssignal1);
title('解扩信号dedssignal1');
figure(6)
plot(demoSignal1);
title('解调信号demoSignal1');
figure(7)
plot(dedifcodes3);
title('差分译码信号dedifcodes3');
figure(8)
semilogy(snr,err_bit1,'-s',snr,err_bit2,'-h',snr,err_bit3,'-*');
legend('用户1','用户2','用户3');
xlabel('信噪比');
ylabel('误比特率');
信号产生函数:
function signal=information(N)
signal=rand(1,N)>=0.5;signal=signal*2-1;
end

扩频码产生函数:
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=2*c-1; %变为1-1的序列
end
差分编码函数:
function difcodes=Difcode(modusignal)%差分编码
N=length(modusignal);
difcodes=[];
if(modusignal(1)==1)
    difcodes(1)=1;
else
    difcodes(1)=-1;
end
for n=2:N
    if(difcodes(n-1)==modusignal(n))
        difcodes(n)=1;
    else
        difcodes(n)=-1;
    end
end
扩频函数:
function ssignal=dsss(signal,c) %扩频
ssignal=[];
    for i=1:length(signal)
        ssignal=[ssignal,signal(i)*c];
    end
end
BPSK调制函数:
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
多径信道函数:
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);

解扩函数:
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=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

差分译码函数:
function dedifcodes=Dedifcode(modusignal)%差分译码
N=length(modusignal);
dedifcodes=[];
if(modusignal(1)==1)
    dedifcodes(1)=1;
else
    dedifcodes(1)=-1;
end
for n=2:N
    if(modusignal(n-1)==modusignal(n))
        dedifcodes(n)=1;
    else
        dedifcodes(n)=-1;
    end
end
end
MATLAB是一种强大的工具,可以用来设计和仿真各种系统,包括扩频通信系统扩频通信系统是一种使数据更加难以被窃听或干扰的通信技术。在这个系统中,数据被通过编码方式变成了宽带信号,由此扩大了信号的频带,使它比原来的信号更加难以被检测或干扰。以下是一个MATLAB扩频通信系统仿真实验的示例。 首先,我们要定义信号的编码方式。在本示例中,我们使用3位PN序列作为编码器。在MATLAB中,我们可以通过以下代码来生成PN序列: pncode = comm.PNSequence('Polynomial', [3 2 0], 'SamplesPerFrame', 10); 接下来,我们需要生成数据,然后将其转换为数字信号,以进行传输。在这个过程中,我们可以在MATLAB中通过以下代码来实现: msg = randi([0 1], 100, 1); txdata = pskmod(msg, 2); 接下来,我们需要将数字信号转换成扩频信号,以便传输。在MATLAB中,我们可以通过以下代码来实现: sf = comm.ChipRate('SamplesPerSymbol', 4); txsignal = step(sf,txdata); 最后,我们将发送的信号通过信道发送出去,然后接收到的信号被解码,以生成数据。在MATLAB中,我们可以通过以下代码来实现: rxsignal = awgn(txsignal, 10, 'measured'); rxdata = step(sf, rxsignal); rxmsg = pskdemod(rxdata, 2); ber = sum(xor(msg, rxmsg))/length(msg); 在上面的代码中,“awgn”函数用于向信号中添加高斯白噪声,以模拟信道中的干扰。最后,我们计算误码率(BER),以评估通信系统的性能。 在总体上,MATLAB是一个非常有用的工具,它可以用于设计和仿真各种通信系统,包括扩频通信系统。使用MATLAB,我们可以轻松地实现系统的模拟,并评估性能。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值