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

智能推荐

网络安全资料-程序员宅基地

文章浏览阅读1.3k次。做安全的,这里有你意想不到的东西分类: 信息于网络安全 2011-09-05 22:03 275人阅读 评论(0)收藏 举报目录(?)[+]Blogs Worth It:Forums:Magazines:Video:Methodologies:OSINTPresentations:People and Organizational:Inf

GDAL:创建矢量线、矢量面数据_gdal创建面-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏26次。分享给有需要的人,代码质量勿喷。一、创建矢量线数据 单个要素 void xjCreateVectorLineByGDAL(QList<xjPoint> ListNode, const QString &xjSavePath) { GDALAllRegister(); OGRRegisterAll(); const char *xjDriverName =..._gdal创建面

MATLAB01:基本的数学运算与矩阵运算_matrixxd 赋值-程序员宅基地

文章浏览阅读10w+次,点赞1.6k次,收藏3.9k次。MATLAB01:基本的数学运算与矩阵运算MATLAB基本语法变量变量名保留变量不适合做变量名变量不应当覆盖内置函数MATLAB的调用优先级变量类型数字型变量的显示格式MATLAB命令行使用MATLAB进行数字运算使用MATLAB计算数学表达式MATLAB内置的数学函数使用MATLAB进行矩阵运算定义矩阵向终端输入矩阵使用冒号运算符创建向量定义特殊矩阵矩阵的索引矩阵的操作操作矩阵的运算符操作矩阵的..._matrixxd 赋值

ADC驱动开发-程序员宅基地

文章浏览阅读292次,点赞4次,收藏5次。两片ADC,需要时钟,始终来源与时钟选择芯片,选择外部时钟源或者HMC830的输出时钟,外部时钟源是由铷钟授时卡提供。两片ADC,需要时钟,始终来源与时钟选择芯片,选择外部时钟源或者HMC830的输出时钟,外部时钟源是由铷钟授时卡提供。看原理图——找ADC的时钟——时钟是怎么来的——时钟选择芯片,时钟扇出BUF——外部时钟源或HMC830的输出时钟。看原理图——找ADC的时钟——时钟是怎么来的——时钟选择芯片,时钟扇出BUF——外部时钟源或HMC830的输出时钟。

Java教学团队管理系统(开题+源码)-程序员宅基地

文章浏览阅读22次。本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。教学团队管理系统:研究背景、意义与目的随着教育环境的日益复杂化,教学团队管理系统的重要性日益凸显。传统的教学管理方式已经无法满足现代教育的需求,这主要表现在对教师资源的管理、课程的安排以及教学团队的协作等方面。因此,一个高效、便捷、易用的教学团队管理系统变得十分必要。研究背景:在现有的教育环境中,教学团队管理系统的需求日益增长。然而,目前的教学团队管理系统仍存在诸多问题,如教师资源的分配不均,课程的安排不合理,以及教学团

photoshop 导出 qml脚本问题(问题解决)_photoshop怎么转为qt的qml-程序员宅基地

文章浏览阅读2.2k次。2012-02-29 16:33Photoshop在从8.0到cs 4的发展中对脚本的支持越来完善,而致力于为移动平台打造更流畅、更易于开发的Qt新框架——QtQuick也日渐成熟。而QtQuick的核心之一就是QML语言。至此,gemfield本文题目中的两个名词全都出现了。下面gemfield详细说说。关于QML的一些基本元素在CivilNet社区的相关版块中已_photoshop怎么转为qt的qml

随便推点

CSS基础(超详解)-程序员宅基地

文章浏览阅读2.3w次,点赞103次,收藏800次。Css (层叠样式表)是种格式化网页的标准方式, 用于控制设置网页的样式,并且允许CSS样式信息与网页内容(由HTML语言定义)分离的一种技术。_css

Android 百度地图SDK 自动定位、标记定位_安卓开发地图获取定位-程序员宅基地

文章浏览阅读1.2w次,点赞98次,收藏201次。先看效果图,如果不是你想要的,也就不浪费你时间了,这样对大家都好。如果是你满意的那样,我们就可以开始写了,首先创建一个名为MapDemo的项目。打开AndroidManifest.xml,复制你的包名然后进入百度地图开放平台,没有注册的小伙伴先注册,已注册的就直接登录,登录进去之后找到控制台→我的应用→创建应用点击之后进入,填写相关资料输入了应用名称、选择了应用类型和启用的服务,输入了包名。还差开发版和发布版的SHA1了① 获取开发版SHA1鼠标点击右侧边栏的Gradle→ app→Ta_安卓开发地图获取定位

java特殊字符转html_html特殊字符转换(java)-程序员宅基地

文章浏览阅读431次。/** * 把文本编码为Html代码 * @param target * @return 编码后的字符串 */ public static String htmEncode(String target) { StringBuffer stringbuffer = new StringBuffer(); int ...

尚硅谷最新版JavaScript基础全套教程完整版(p48-p65)_尚硅谷javascript新书大纲-程序员宅基地

文章浏览阅读237次。尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通)一、基本数据类型和引用数据类型1.基本数据类型-string 、 number 、 Boolean 、null 、undefined2.引用数据类型-object3.区别-JS中的变量都是保存到栈内存中的,基本数据类型的值直接在栈内存中存储,值与值之间是独立存在的,修改一个变量不会影响另外一个变量。-引用数据类型(对象)是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间,而变量保存_尚硅谷javascript新书大纲

ACM--HDOJ 2072--单词数--字符串--水_java acm单词数问题 #结束-程序员宅基地

文章浏览阅读1.2k次。HDOJ题目地址:传送门单词数Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 44934 Accepted Submission(s): 10992Problem Descr_java acm单词数问题 #结束

uniapp自定义tabbar必看_uniapp custom-tab-bar-程序员宅基地

文章浏览阅读9.5k次。方式一:实验证明,在根目录下新建custom-tab-bar目录,在目录中新建index.vue是行不通的,vue文件不会被编译方式二:将小程序四大法宝(wxss,json,wxml,js)直接搬过来,虽然tabbar有渲染在小程序上了,但是切换是没有效果的,所以还是行不通方式三(行得通)经过上面的两个尝试,还是乖乖的以vue的做法吧,用单页面的形式,通过v-show控制组件的隐藏和显示注意:v-show有时没有效果,因为v-show是通过display:none来控制的,它的权重没_uniapp custom-tab-bar

推荐文章

热门文章

相关标签