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

2024-04-09 18:58

本文主要是介绍matlab实现扩频通信系统的多用户数据传输,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一、仿真要求
    • 二、设计方案
        • 1.系统的总体框图
        • 2.发射机原理图及设计
        • 3.接收机原理图
        • 4.主程序流程图
        • 5.扩频码的产生
        • 6.扩频
        • 7.接收端解扩
        • 8.调制与解调
    • 三、程序代码
        • 1.产生m序列代码:
        • 2.扩频代码:
        • 3.多径信道的仿真
        • 4.解扩代码:
        • 5.发送随机序列
        • 6.调制代码
        • 7.解调代码
        • 8.主程序代码:
    • 四、仿真结果

一、仿真要求

要求一:扩频通信系统的多用户数据传输
①传输的数据随机产生,要求采用频带传输(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-1c1=rem(sum(D.*A),2);c=[c,D(N)];D=[c1,D(1:N-1)];endc=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==2multiS=modusignal+r1;
else if k==3multiS=modusignal+r1+r2;
else if k==4multiS=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)c1=[c1,c(i)*ones(1,L)];enddessignal=[];for i=1:length(c1):length(receiveSignal)dessignal=[dessignal,receiveSignal(i:i+length(c1)-1).*c1];end
end
5.发送随机序列
function signal=information(N)%发送随机序列
signal=rand(1,N)>=0.5;
signal=signal*2-1;
end
6.调制代码
function modusignal=modu(signal,dataRate,fc,fs)%采用BPSK调制方式
t=linspace(0,1/dataRate,fs/dataRate);%在0-Tc之间采样fs点
carrier=cos(2*pi*fc*t);%频率为fs载波
modusignal=[];%初始化接收调制矩阵
for i=1:length(signal)modusignal=[modusignal,carrier*signal(i)];
end
end
7.解调代码
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:Lsdesignal=[designal,carrier.*Resignal(i:i+Lc-1)];
end
demoSignal=[];
for i=1:Lc:Lsthreshold=sum(designal(i:i+Lc-1));if threshold>0tt=1;elsett=-1;enddemoSignal=[demoSignal,tt];
end
end
8.主程序代码:
%主函数
clear all;
clc;
dataRate=1000;
chipRate=31*dataRate;
fc=chipRate*2;
fs=fc*8;
N=1000;
c=31;
b1=[1,0,0,1,0,1];
b2=[1,1,0,1,1,1];
b3=[1,1,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);%扩频后的信号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);%衰落路径为2%c1解扩dedssignal1=dedsss(receivesignal1,c1,chipRate,fs);%积分器解调demoSignal1=demodu(dedssignal1,dataRate,fc,fs);dedssignal2=dedsss(receivesignal1,c2,chipRate,fs);demoSignal2=demodu(dedssignal2,dataRate,fc,fs);dedssignal3=dedsss(receivesignal1,c3,chipRate,fs);demoSignal3=demodu(dedssignal3,dataRate,fc,fs);%误比特率计算err_bit11(i)=sum(demoSignal1~=signal1)/N;err_bit12(i)=sum(demoSignal2~=signal2)/N;err_bit13(i)=sum(demoSignal3~=signal3)/N;%衰落路径为3%信号C1解扩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;%衰落路径为4%信号C1解扩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;
%不进行扩频的BERmodusignal1=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_bit21(i)=sum(demosignal21~=signal1)/N;err_bit22(i)=sum(demosignal22~=signal2)/N;err_bit23(i)=sum(demosignal23~=signal3)/N;end
figure(1)
semilogy(snr,err_bit11,'-s',snr,err_bit12,'-h',snr,err_bit13,'-*');
legend('用户1','用户2','用户3');
title('多径衰落路径2')
xlabel('信噪比');
ylabel('误比特率');figure(2)
semilogy(snr,err_bit21,'-s',snr,err_bit22,'-h',snr,err_bit23,'-*');
legend('用户1','用户2','用户3');
title('多径衰落路径3')
xlabel('信噪比');
ylabel('误比特率');figure(3)
semilogy(snr,err_bit31,'-s',snr,err_bit32,'-h',snr,err_bit33,'-*');
legend('用户1','用户2','用户3');
title('多径衰落路径4')
xlabel('信噪比');
ylabel('误比特率');figure(5)
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(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 100 -1.1 1.1]);

四、仿真结果

在这里插入图片描述
三组信号经过解扩,解调,采样判决后的信号对比
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由上图可得,通过直接扩频得到的BER曲线较为平滑,这种结论与理论上相符,因为扩频技术可以将噪声信号进行展宽,在通过低通滤波器就可以滤掉大量的噪声信号。

这篇关于matlab实现扩频通信系统的多用户数据传输的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/888960

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo