Matlab 移动通信原理-扩频通信系统仿真实验(扩频通信系统的多用户数据传输、利用蒙特卡罗仿真方法对扩频增益进行性能仿真)_函数genmseq的作用-程序员宅基地

技术标签: matlab  MATLAB  

移动通信原理的扩频通信系统仿真实验,完成扩频通信系统的多用户数据传输、利用蒙特卡罗仿真方法对扩频增益进行性能仿真。
项目实验环境是Matlab2018,软件版本不同可能会有些出入,需要稍作修改。

仿真要求

要求一:扩频通信系统的多用户数据传输
①传输的数据随机产生,要求采用频带传输(BPSK调制);
②扩频码要求采用周期为63(或127)的m序列;
③仿真从基站发送数据到三个不同的用户,各不同用户分别进行数据接收;
④设计三种不同的功率延迟分布,从基站到达三个不同的用户分别经过多径衰落(路径数分别为2,3,4);
⑤三个用户接收端分别解出各自的数据并与发送前的数据进行差错比较。
要求二:利用蒙特卡罗仿真方法对扩频增益进行性能仿真
设计仿真方案,得到在数据传输过程中进行扩频(扩频序列用m序列)和不进行扩频的BER性能结论,要求得到的BER曲线较为平滑,并说明这种结论与理论上的结论是否相符,为什么?

仿真方案设计

要求一:
通信系统的总体框图如下所示:
在这里插入图片描述
在这里插入图片描述
发射机原理图:
在这里插入图片描述
接收机原理图:
在这里插入图片描述
其中发射端主要完成m序列的产生,随机0, 1序列的产生。然后利用m序列对产生的随机序列进行扩频,然后再用cos (wt)对其进行调制。
信道主要模拟信号的多径传输,在这个信道中一共有三个用户的数据进行传输,用户一经过了2径衰落,用户二经过了3径衰落,用户三经过了4径衰落。
接收端接收到的信号是几路多径信号的加噪后的叠加,首先要完成信号的解扩,然后再解调,滤波,抽样判决最后分别与原始信号比较并统计误码率。

1、m序列的产生
需要32位的扩频序列,经过计算易知要产生32位的m序列需要长度为6的反馈系数,为了得到较好的结果,选取了自相关性较好而互相关性较差的三组反馈系数(八进制)45、67、75,其对应的二进制为100101、110111、111101。并将二进制与移位寄存器级数对应,例如反馈系数移100101得到的移位寄存器为C5=1, C4=0, C3=0, C2=1, C1=0, C0=1, 其具体的寄存器结构图如下图所示:

在这里插入图片描述
2、 m序列的扩频
扩频的主要思想是每一位数据位都扩展成长度为m序列长的信息,其具体做法是将数据信息中的‘1’用m序列代替,而对于‘0’用-m序列代替,这样对每一个数据位都进行扩展就实现了对原始数据的扩频。其结构框图如下:
在这里插入图片描述
3. DPSK调制
为了使低频信号能够在高频中传输,并且增强系统的抗噪声性能,我们必须采用一定的调制解调技术,这里选用的DPSK进行调制。BPSK对扩频信号进行调试,并在接收端对解扩信号进行BPSK解调以恢复出原有信号。BPSK的主要思路是将不同的数据用不同相位的载波进行调制,以将低频的信号调制到较高频率。
4.多径信道仿真
在这个模块中我将模拟无线信道,对不同用户产生的数据经三径进行传输,每一径信号又有三个用户数据叠加而成,并且每一径信号具有不同的延迟和衰减。最后在信道的另一端三径信号进行叠加并对其加噪。
5.解扩和带通滤波
在假定扩频码与接收信号同步的情况下, 可对接收信号进行解扩, 其解扩的过程与扩频的过程一样, 也是利用扩频码与接收信号进行相乘即可。

要求二:
1、构造或描述概率过程实际上就是建立随机试验模型,构造概率过程是对确定性问题而言的,描述概率过程是对随机性问题而言的,不同的问题所需要建立的随机试验模型各不相同。
2、已知概率分布抽样指的是随机试验过程,随机模型中必要包含某些已知概率分布的随机变量或随机过程作为输入,进行随机试验的过程就是对这些随机变量的样本或随机过程的样本函数作为输入产生相应输出的过程,因此通常被称为对已知概率分布的抽样。如何产生已知分布的随机变量或随机过程是蒙特卡罗方法中的一个关键问题。
3、获得估计量,蒙特卡罗方法所得到的问题的解总是对真实解的一个估计,本身也是一个随机变量,这个随机变量是由随机试验模型输出通过统计处理得到的。
这里直接采用不经过直接扩频与经过直接扩频的信号进行比较,通过误码率曲线进行分析。

主要仿真代码

主程序如下:

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]; %103
b2=[1,1,0,0,1,1,1]; %147
b3=[1,1,0,1,1,0,1];  %155
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);

    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);
    
    mixsignal=modusignal1+modusignal2+modusignal3;
    receivesignal=awgn(mixsignal,snr(i));
%多径干扰
    receivesignal1= channels (receivesignal,snr(i),2) ;
    receivesignal2= channels (receivesignal,snr(i),3) ;
    receivesignal3= channels (receivesignal,snr(i),4) ;
    
    dedssignal1=dedsss(receivesignal1,c1,chipRate,fs);
    demoSignal1=demodu(dedssignal1,dataRate,fc,fs);
    dedssignal2=dedsss(receivesignal1,c2,chipRate,fs);
    demoSignal2=demodu(dedssignal1,dataRate,fc,fs);
    dedssignal3=dedsss(receivesignal1,c3,chipRate,fs);
    demoSignal3=demodu(dedssignal1,dataRate,fc,fs);
    err_bit1(i)=sum(demoSignal1~=signal1)/N;
    err_bit2(i)=sum(demoSignal2~=signal2)/N;
    err_bit3(i)=sum(demoSignal3~=signal3)/N;
    
    dedssignal21=dedsss(receivesignal2,c1,chipRate,fs);
    demoSignal21=demodu(dedssignal21,dataRate,fc,fs);
    dedssignal22=dedsss(receivesignal2,c2,chipRate,fs);
    demoSignal22=demodu(dedssignal22,dataRate,fc,fs);
    dedssignal23=dedsss(receivesignal2,c3,chipRate,fs);
    demoSignal23=demodu(dedssignal23,dataRate,fc,fs);
    err_bit21(i)=sum(demoSignal21~=signal1)/N;
    err_bit22(i)=sum(demoSignal22~=signal2)/N;
    err_bit23(i)=sum(demoSignal23~=signal3)/N;
    
    dedssignal31=dedsss(receivesignal3,c1,chipRate,fs);
    demoSignal31=demodu(dedssignal31,dataRate,fc,fs);
    dedssignal32=dedsss(receivesignal3,c2,chipRate,fs);
    demoSignal32=demodu(dedssignal32,dataRate,fc,fs);
    dedssignal33=dedsss(receivesignal3,c3,chipRate,fs);
    demoSignal33=demodu(dedssignal33,dataRate,fc,fs);
    err_bit31(i)=sum(demoSignal31~=signal1)/N;
    err_bit32(i)=sum(demoSignal32~=signal2)/N;
    err_bit33(i)=sum(demoSignal33~=signal3)/N;
    
    %不进行扩频的BER
    modusignal1=modu(signal1,chipRate/63,fc, fs);
    modusignal2=modu(signal2,chipRate/63,fc, fs);
    modusignal3=modu(signal3,chipRate/63,fc, fs); 
    
    modusignal1= channels (modusignal1,snr(i),3) ;
    modusignal2= channels (modusignal2,snr(i),3) ;
    modusignal3= channels (modusignal3,snr(i),3) ;
 
    demoSignal41=demodu(modusignal1,dataRate,fc,fs);
    demoSignal42=demodu(modusignal2,dataRate,fc,fs);
    demoSignal43=demodu(modusignal3,dataRate,fc,fs);
    err_bit41(i)=sum(demoSignal41~=signal1)/N;
    err_bit42(i)=sum(demoSignal42~=signal2)/N;
    err_bit43(i)=sum(demoSignal43~=signal3)/N;
end
figure(1)
semilogy(snr,err_bit1,'-s',snr,err_bit2,'-h',snr,err_bit3,'-*');
legend('用户1','用户2','用户3');
xlabel('信噪比');
ylabel('误比特率');
title('多径衰落(路径数为2)');

figure(2)
semilogy(snr,err_bit21,'-s',snr,err_bit22,'-h',snr,err_bit23,'-*');
legend('用户1','用户2','用户3');
xlabel('信噪比');
ylabel('误比特率');
title('多径衰落(路径数为3)');

figure(3)
semilogy(snr,err_bit31,'-s',snr,err_bit32,'-h',snr,err_bit33,'-*');
legend('用户1','用户2','用户3');
xlabel('信噪比');
ylabel('误比特率');
title('多径衰落(路径数为4)');

figure(4)
N1=1:length(signal1);
subplot(2,1,1);
plot(N1,signal1);
title('扩频前信号');
axis([0 100 -1.1 1.1]);
dssignal1=dsss(signal1,c1);
N1=1:length(dssignal1);
subplot(2,1,2);
plot(N1,dssignal1);
title('扩频后信号');
axis([0 320 -1.1 1.1]);

figure(5)
modusignal1=modu(dssignal1,chipRate,fc, fs);
N1=1:length(modusignal1);
subplot(2,1,1);
plot(N1,modusignal1);
axis([0 250 -1.1 1.1]);
grid on
N2=1:length(mixsignal);
subplot(2,1,2);
plot(N2,mixsignal);
axis([0 500 -5.1 5.1]);
grid on

figure(6)
receivesignal1= channels (modusignal1,snr(i),2) ;
N1=1:length(receivesignal1);
subplot(3,1,1);
plot(N1,receivesignal1);
axis([0 200 -1.1 1.1]);
dedssignal1=dedsss(receivesignal,c1,chipRate,fs);
subplot(3,1,2);
plot(N1,dedssignal1);
axis([0 200 -1.1 1.1]);
demoSignal1=demodu(dedssignal1,dataRate,fc,fs);
N1=1:length(demoSignal1);
subplot(3,1,3);
plot(N1,demoSignal1);
axis([0 200 -1.1 1.1]);

figure(7)
plot(snr,err_bit21,'-s',snr,err_bit22,'-h',snr,err_bit23,'-*');
legend('用户1','用户2','用户3');
xlabel('信噪比');
ylabel('误比特率');
title('扩频');
% axis([0 100 -1.1 1.1]);

figure(8)
plot(snr,err_bit41,'-s',snr,err_bit42,'-h',snr,err_bit43,'-*');
legend('用户1','用户2','用户3');
xlabel('信噪比');
ylabel('误比特率');
title('不扩频');

接收端解扩代码如下:

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 signal=information(N)
		signal=rand(1,N)>=0.5;
      signal=signal*2-1;
   end

扩频码的产生(只产生一个周期的m序列)、扩频、调制。
解扩实现代码如下:

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 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

仿真结果

扩频通信的理论基础为香农公式:C=Blog(1+S/N)。我们可以用牺牲带宽的办法来换取较低的信噪比,增加系统的抗干扰能力。直接序列扩频,是直接利用具有高码率的扩频码序列在发送端扩展信号的频谱,而在接收端,用相同的扩频码序列进行解扩,把展宽的扩频信号还原成原始的信息,是一种数字调制方法。
扩频通信系统具有较强的抗干扰能力,且具有很强的隐蔽性和抗侦查,抗窃听的能力。这种能力随着扩频增益的增大而增大。扩频增益的提高就需要提高扩频码m序列的位数了。
因为m序列具有良好的自相关特性和互相关特性,正是这两大特性使得在接收端可以很好的进行扩频码的同步,以及多路用户的区分,从而具有很好的抗多径干扰能力。

要求一
1、原信号和扩频之后的信号,如下图所示。
在这里插入图片描述

2、第一个用户信号经过扩频,调制之后的信号以及三个用户信号分别经过2径,3径,4径信道后的叠加信号之和如下图所示。
由上到下第一个坐标系为用户1经过扩频、调制的信号,第二、三、四为三个用户经过叠加的信号再分别通过2径、3径、4径的信道之后的信号,由图可知,经过多径之后的信号已经和原信号的图形相差很大。这是因为信道的衰落使用延时来进行模拟的,会造成一些误差。
在这里插入图片描述

3、第一个原始用户信号与其经过接收端解扩,解调,抽样判决之后的最终信号的比较,如下图所示。
在这里插入图片描述

4、3个用户的信号分别经过多径衰落。衰落信道的个数为2、3、4,通过下面三张图可以发现,随着多径数目的增加,3个用户的误码率都呈现增加的趋势。同一个用户随着信噪比的增加,误码率会减小。
多径衰落路径数为2时,3个用户的误码率比较图如下:
在这里插入图片描述
多径衰落路径数为3时,3个用户的误码率比较图如下:
在这里插入图片描述

多径衰落路径数为4时,3个用户的误码率比较图如下:
在这里插入图片描述
要求二
在数据传输过程中进行扩频和不进行扩频的BER性能比较如图所示。
进行扩频的BER曲线(第一张图)更加平缓,并且经过扩频的信号在信噪比比较低的情况下,呈现出优于不扩频信号的性能,这体现了扩频通信可以提高系统的信噪比,改善系统的性能。
通过直接序列扩频得到的BER曲线较为平滑。直扩系统有较强的抗多径干扰的能力,多径信号到达接收端,由于利用了伪随机码的相关特性,只要多径时延超过伪随机码的一个切普,则通过相关处理后,可消除这种多径干扰的影响,甚至可以利用这些多径干扰的能量,提高系统的信噪比,改善系统的性能。

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44436677/article/details/105757775

智能推荐

希捷7200.11固件门完全DIY修正方法! 不用几块钱, DIYers请进!!!_希捷stcomtool转t失败-程序员宅基地

文章浏览阅读1.5w次,点赞2次,收藏9次。分享给有需要的朋友, 数据无价... 以后注意备份重要资料... 1. 老外的方法[By Gradius]: The Solution for Seagate 7200.11 HDDs (final and revised version): http://www.msfn.org/board/index.php?showtopic=128807&hl=7200.112. (第_希捷stcomtool转t失败

数据库安全:Hadoop 未授权访问-命令执行漏洞._hadoop未授权访问-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏4次。Hadoop 未授权访问主要因HadoopYARN资源管理系统配置不当,导致可以未经授权进行访问,从而被攻击者恶意利用。攻击者无需认证即可通过RESTAPI部署任务来执行任意指令,最终完全控制服务器。_hadoop未授权访问

100个替代昂贵商业软件的开源应用_citadel开源中文版本-程序员宅基地

文章浏览阅读4.1k次,点赞3次,收藏18次。100个替代昂贵商业软件的开源应用面对大,中,小企业和家庭用户,立竿见影显著降低成本的开源软件。某些商业软件素以昂贵著称。随着云计算的日益普及,很多常用软件包供应商将一次性收费改为月租模式。虽然月租费貌似便宜,但也经不起长时间的累积。100个替代昂贵商业软件的开源应用尽管有许多好理由,但避免或减少使用费,仍然是许多用户看中开源应用软件的主要因素。基于这一点,我们更新了可替代_citadel开源中文版本

竞选计算机协会网络部部长,2019年计算机协会部长竞选演讲稿-程序员宅基地

文章浏览阅读55次。2019年计算机协会部长竞选演讲稿篇一:计算机协会部长竞选演讲稿尊敬的领导,敬爱的老师,亲爱的同学们:大家晚上好!俗话说:马只有驰骋千里,方知其是否为良驹;人只有通过竞争,才能知其是否为栋梁。我是来自xxx班的伍朝海,今晚,我很荣幸能够站在这里参加这次学生会的竞选,职位是xx系的宣传窗口——新闻网络部的负责人。我知道,今晚竞选的不仅仅是个职位,也是在竞选一个为同学们服务的机会,更是在竞选一个为我们...

ipython和jupyter notebook_第02章 Python语法基础,IPython和Jupyter Notebook-程序员宅基地

文章浏览阅读185次。第2章 Python语法基础,IPython和Jupyter Notebooks当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少。这部分上是一个鸡和蛋的问题:我们现在使用的库,比如pandas、scikit-learn和statsmodels,那时相对来说并不成熟。2017年,数据科学、数据分析和机器学习的资源已经很多,原来通用的科学计算拓展到了计算机科学家..._jupyter notebook if后面有多个条件

雪花算法生成的ID精度丢失问题_雪花算法生成id精度丢失-程序员宅基地

文章浏览阅读494次,点赞2次,收藏2次。雪花算法生成的ID精度丢失问题雪花算法ID精度丢失_雪花算法生成id精度丢失

随便推点

Ubuntu20.04安装向日葵_ubuntu20.04 安装向日库-程序员宅基地

文章浏览阅读1k次,点赞3次,收藏6次。下载最新版本:https://sunlogin.oray.com/download/缺少部分依赖,手动下载:# 你知道最新的版本号了sudo wget http://download.oray.com/sunlogin/linux/SunloginClient-10.0.2.24779_amd64.debsudo wget http://mirrors.aliyun.com/ubuntu/pool/main/i/icu/libicu60_60.2-3ubuntu3_amd64.debsudo w_ubuntu20.04 安装向日库

JMeter之脚本录制_jmeter脚本录制,大厂软件测试高级多套面试专题整理集合-程序员宅基地

文章浏览阅读635次,点赞14次,收藏7次。打开IE浏览器,点击右上方工具按钮,依次选择“Internet选项” -> “连接” -> “局域网设置” -> “代理服务器”,勾选“为LAN使用代理服务器”,输入本地IP地址127.0.0.1及端口号8888,点击确定保存。若页面提示“此网站的安全证书存在问题”,点击“继续浏览此网站(不推荐) ”即可。4.选择“Requests Filtering”,在“包含模式”中填入“.+(baidu.com).+”用以过滤非。选中“工作台”,右键选择“添加” -> “非测试元件” -> “HTTP代理服务器”

20231114歌谣v3--学习篇-组件注册-props-程序员宅基地

文章浏览阅读326次,点赞8次,收藏10次。前端

pandas:多个dataframe写入同一个excel, html_多个dataframe写入一个excel-程序员宅基地

文章浏览阅读6.9k次,点赞4次,收藏20次。1,dataframe 写入excel:多个dataframe需要写入同一个excel时,每次使用df.to_excel(文件名)的形式去写,系统都会重新创建一个新的文件。也就意味着前面的文件会被覆盖掉,你得到的只能是最后一个df写入的结果文件通过创建一个ExcelWriter对象,可以解决上面的问题writer = pd.ExcelWriter(os.path.join(os.ge..._多个dataframe写入一个excel

文本文件数据输入与读取_文本输入读取-程序员宅基地

文章浏览阅读654次。步骤1两个Edittext用来作为输入和获取的媒介<android.support.constraint.ConstraintLayout ="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:to..._文本输入读取

极速进化,光速转录,C++版本人工智能实时语音转文字(字幕/语音识别)Whisper.cpp实践_c++语音识别库-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏8次。业界良心OpenAI开源的[Whisper模型](https://v3u.cn/a_id_272)是开源语音转文字领域的执牛耳者,白璧微瑕之处在于无法通过苹果M芯片优化转录效率,Whisper.cpp 则是 Whisper 模型的 C/C++ 移植版本,它具有无依赖项、内存使用量低等特点,重要的是增加了 Core ML 支持,完美适配苹果M系列芯片。 _c++语音识别库

推荐文章

热门文章

相关标签