m多载波MC-CDMA系统单用户检测方法的研究,对比EGC,MRC,ORC以及MMSE

news2024/12/27 10:55:17

目录

1.算法概述

2.仿真效果预览

3.MATLAB部分代码预览

4.完整MATLAB程序


1.算法概述

       传统CDMA技术在码间串扰和多址干扰等方面存在的问题使其总体性能受到限制,随着OFDM技术的发展,出现了OFDM结合CDMA的信技术,即多载波CDMA技术,其结合了OFDM和CDMA的技术优势。首先分别介绍了OFDM和CDMA理论知识,并分别使用Matlab进行了仿真分析,然后介绍了多载波CDMA技术的理论知识,并给出了多载波CDMA系统的数学模块,并对该系统进行了详细的探讨。然后在本文的第三章,就多载波系统,针对单用户检测技术进行了研究。作为本课题的主要研究内容,本文分别对单用户检测的几个关键技术做了研究,主要有等比合并EGC,最大比合并MRC,正交恢复合并ORC以及最小均方误差合并MMSE。对该四种方法进行了误码率仿真分析,并对其中性能较好的MMSE做了重点实现与研究,从而给出了一个完整的单用户检测系统的设计方法。

       多载波调制在DAB、DV等广播中的成功应用,使得研究人员开始研究其在移动通信中是否也能获得成功。相关研究从1993年开始,其多址技术一般采用DS-DMA。OFDM多载波调制技术和CDMA码分多址技术的结合具体有三种方式:多载波CDMA,多载波直接序列扩频CDMA和多音CDMA)。本课题将重点研究多载波CDMA系统。

       多载波系统在结构上首先是将直接序列进行扩频,然后将多载波调制串行级联。其具体过程为:第一,将符号经长度为m的扩频码扩频得到m个扩频码片,这m个扩频码片再由m个子载波并行传输。若取m小于,则可引入频率交织等技术,若子载波数目等于扩频码的长度m,则多载波系统所需要的带宽和普通系统所需带宽相同。对于多载波系统,单用户的数据如下所示:

       本课题将重点检测多载波系统下的单用户检测技术。单用户检测其具体含义指的是在检测用户的时候,不考虑其他用户的信息,将他们作为噪声处理。通过均衡对信号幅值和信道畸变恢复出用户信号间的正交性,从而减小衰落和多址干扰影响。通常可以用每个子载波上的单抽头均衡来补偿此子载波上的平衰落影响,然后再进行解扩处理。主要的单用户检测方法有:正交恢复合并(ORC)、等增益合并(EGC)、最大比合并(MRC)和最小均方误差合并(MMSE)。

1.正交恢复合并(ORC)

正交恢复合并的原则是在接收机端纠正信道的相位和幅度衰落,恢复不同扩频序列的正交性。

2.等增益合并(EGC)

 3.最大比合并(MRC)

4.最小均方误差合并(MMSE)

       最小均方差合并可以有效的控制噪声和用户之间的干扰。它所使用的准则是使合并模块期望输出值和实际输出值之间的均方误差最小化。

2.仿真效果预览

matlab2022a仿真

 

 

 

 

 

 

3.MATLAB部分代码预览

Main01.m
clc;
clear;
close all;
N=8
T=1e-3;
Ts=T+1/4*T;
f=(-N:N)/T;
color = ['r','g','b','k','y','m','c','r'];
for k=1:7
y(k,:)     = sinc((f - (k-N/2)/T)*Ts);
plot(f/1000,y(k,:),color(k));
hold on;
end
title('7个载波的OFDM信号的频谱');
Main02.m
clc;
close all;
clear;
N = 10;
for i =2:N
y1(i) = i*i;
y2(i) = (i/2)*log2(i);
end
figure;
plot(y1,'r-*');hold on;
plot(y2,'b-*');hold off;
title('IFFT和IDFT的计算量对比');
grid on;
legend('IDFT运行次数','IFFT运行次数');
Main03.m
clc;
clear;
close all;
tic;
num_data=64000;%仿真数据长度
num_user=1;    %用户个数
snr=[0 1 2 3 4 5 6 7];%SNR
for t=1:length(snr)
    ber(t) = mc_cdma(snr(t),num_user,num_data);
end
% EbNo = 0:5:20;
figure;
semilogy(snr,ber,'b-*');
xlabel('Eb/N0');
ylabel('BER');
title('Performance of MC-CDMA ')
grid on
toc;
mc_cdma.m
function ber = mc_cdma(snr,num_user,num_data)
N = 512;           % number of symbols in a single OFDM symbol
GI = 80;           % guard interval
Mt = 1;             % number of Tx antennas
Mr = 1;             % number of Rx antennas
M = 8;              % max constellation bit number
num_subc = 8;        % number of subcarriers
mod_level = 2;
spreadLength=8;
% snr=0;
en = 10^(snr/10);
sigma = 1/sqrt(2*en);
cSpread=[1 1 1 1 1 1 1 1;1 -1 1 -1 1 -1 1 -1;...
        1 1 -1 -1 1 1 -1 -1;1 -1 -1 1 1 -1 -1 1;...
        1 1 1 1 -1 -1 -1 -1;1 -1 1 -1 -1 1 -1 1;...
        1 1 -1 -1 -1 -1 1 1;1 -1 -1 1 -1 1 1 -1];
multipath = [sqrt(0.1897)  0  sqrt(0.3785) 0 0 sqrt(0.2388) 0 0 0  0 sqrt(0.0951) 0 0 0 0 sqrt(0.06) 0 0 0 0 0 0 sqrt(0.0379)]; %% power
multipath_channel0 = zeros(1,length(multipath));
signal_tx = zeros(num_data*spreadLength/N,N + GI);
for loop_user=1:num_user
    msg    = randint(num_data,1);
    code1  = [];
    trel   = poly2trellis(6,[53 75]);
    code1  = [code1 convenc(msg,trel)];
    code   = code1';
    if loop_user == 1
        msg_user1 = msg;
        code_user1 = code1;
    end
    num_data1   = 2*num_data;
    [iout,qout] = qpsk(code,1,num_data1,mod_level);
    inputData   = iout+i*qout;    %???
    [S]         = mc_spreading(inputData,1,num_data,cSpread(loop_user,:),spreadLength);
    for m=1:num_data*spreadLength/N
        ofdm_symbol((m-1)*(N+GI)+1:m*(N+GI)) = ifft_cp_tx_blk(S((m-1)*N+1:m*N),N,GI)*sqrt(N);
    end
    for p = 1:(num_data*spreadLength/N)  
        multipath_channel(p,:) = multipath.*(randn(1,length(multipath_channel0))+j*randn(1,length(multipath_channel0)))*sqrt(0.5);
        if loop_user==1
            multipath_channel_user1(p,:) = multipath_channel(p,:);
        end
        signal_tx_p         = filter(multipath_channel(p,:),[1],ofdm_symbol((N+GI)*(p-1)+1:(N+GI)*p));% passing through the multipath channel
        signal_tx_loop(p,:) = signal_tx_p;
    end
    signal_tx           = signal_tx + signal_tx_loop;
end
noise     = sigma*(randn(num_data*spreadLength/N,N+GI) + j*randn(num_data*spreadLength/N,N+GI));
signal_rx = signal_tx + noise; 
y2 = [];
for q =1:(num_data*spreadLength/N)
    rec_symbol   = [];
    rec_symbol   = [rec_symbol; fft_cp_rx_blk(signal_rx(q,:),N,GI)/sqrt(N)];
    rec_symbol2  = reshape(rec_symbol,Mt*N,1);
    h   = [multipath_channel_user1(q,:),zeros(1,N+GI-length(multipath))];
    Hf1 = fft(h,N);
    for n = 1:N/spreadLength
        y1=0;
        for m = 1:spreadLength
            y1 = y1 + cSpread(1,m)*conj(Hf1((n-1)*spreadLength+m))*rec_symbol2((n-1)*spreadLength+m);
        end
        temp(n) = y1;
    end
    y2 = [y2,temp];
end
y          =  reshape(y2,1,num_data);
idata      =  real(y);
qdata      =  imag(y);
y_demod    =  deqpsk(idata,qdata,1,num_data,mod_level);
y_demod    =  y_demod';
tblen      =  10;
decoded1   =  vitdec(y_demod,trel,tblen,'cont','hard');
[n1,r1]    =  biterr(decoded1(tblen+1:end),msg_user1(1:end-tblen,1));
ber        =  r1;
01-034m

4.完整MATLAB程序

matlab源码说明_我爱C编程的博客-CSDN博客

V

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/22016.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

服务器linux下springboot项目启动、停止、重启脚本+配置jdk+配置maven+批量启动jar包脚本

部署springboot项目配置启动、停止、重启脚本 一.在Linux环境下部署springboot项目 1、把springboot项目打成jar包&#xff0c;使用maven插件实现 1.1、引入maven插件 <build><plugins><plugin><groupId>org.springframework.boot</groupId>…

【自用】Linux-CentOS7安装配置jdk1.8

一、准备工作 步骤1.创建目录 /usr/java 并进入该目录 # 进入/usr/目录 cd /usr/# 创建java目录 mkdir java# 进入java目录 cd java步骤2.下载 jdk-8u351-linux-x64.rpm 链接&#xff1a;https://pan.baidu.com/s/1IWDf70ddcy-u_mDofBklCQ?pwdxrfy 提取码&#xff1a;xrfy …

14.PyQt5应用程序主窗口QmainWindow详解

PyQt5 应用程序主窗口 对于日常见到的应用程序而言&#xff0c;许多都是基于主窗口的&#xff0c;主窗口包含了菜单栏、工具栏、状态栏和中心区域等。 QT/PyQt中提供了以QmainWindow类为核心的主窗口框架&#xff0c;它包含了众多相关的类&#xff0c;它们的继承关系如下图所…

pygame入门之环境配置

14天学习训练营导师课程&#xff1a; 李宁《Python Pygame游戏开发入门与实战》 李宁《计算机视觉OpenCV Python项目实战》1 李宁《计算机视觉OpenCV Python项目实战》2 李宁《计算机视觉OpenCV Python项目实战》3 前两节和大家一起了解了python的基础&#xff0c;今天我们就来…

互联网电商大厂库存系统设计案例讲解

1 库存扣减 多人同时买一件商品时&#xff08;假设库存充足&#xff09;&#xff0c;每个人几乎同时下单成功&#xff0c;给人一种并行感觉。但真实情况&#xff0c; 库存只是一个数值&#xff0c;无论是存在mysql数据库还是redis缓存&#xff0c;减值时都要控制顺序&#xff0…

Go 协程与Channel管道

风离不摆烂学习日志 Day2 GO 协程 结论&#xff1a; 主线程是一个物理线程&#xff0c;直接作用在cpu上。是重量级的&#xff0c;非常耗费cpu资源。 协程是从主线程开启的&#xff0c;是轻量级的线程&#xff0c;是逻辑态。对资源消耗相对小。 Golang的协程机制是重要的特点&…

OpenStreetMap:对抗谷歌帝国的共享开源地图

OpenStreetMap&#xff1a;对抗谷歌帝国的共享免费地图 讲在前面 在步入自动驾驶的学习之后&#xff0c;不可避免地我需要去了解在驾驶领域中选择的地图格式&#xff0c;而随着研究的进一步深入&#xff0c;我逐步了解到两种较为主流的自动驾驶地图格式&#xff0c;分别是Open…

[附源码]计算机毕业设计JAVA基于JSP的美妆购买网站

[附源码]计算机毕业设计JAVA基于JSP的美妆购买网站 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM m…

虚拟机的安装搭建centos7.9.2009

这里写目录标题虚拟机的安装搭建1. 虚拟机镜像版本下载 centos7.9.20092. 虚拟机 vmware 17pro&#xff08;专业版&#xff09; 版本下载及安装配置1.2.1 虚拟机 vmware 17pro下载1.2.2 虚拟机 vmware 17pro 安装1.2.3 虚拟机 vmware 17pro 配置1.2.4 安装配置centos7操作系统&…

Arthas的使用与进阶

Arthas的使用与进阶Arthas使用与进阶一、概述二、快速安装windows下安装arthasLinux下安装arthas卸载在Linux/Unix/Mac平台Windows平台三、快速入门&#xff1a;attach一个进程1、准备2、启动arthas四、快速入门&#xff1a;常用命令接触命令介绍1、dashboard仪表板2、通过Thre…

Servlet小项目 | 基于纯Servlet手写一个单表的CRUD操作

使用纯粹的Servlet完成单表【对部门的】的增删改查操作。&#xff08;B/S结构的&#xff09; 目录 一&#xff1a;设计数据库表及原型 二&#xff1a;动态实现部门列表及详情页 三&#xff1a;实现部门删除功能 四&#xff1a;实现部门新增功能 五&#xff1a;实现部门修…

NJUPT算法分析与设计期末考试2021.11.24

NJUPT算法分析与设计期末考试2021.11.24判断简答1.算法是什么&#xff1f;算法的时间复杂度是什么&#xff1f;衡量的原则&#xff0c;标准&#xff0c;工具2.分支限界法扩展活节点的方式有哪两种&#xff0c;有什么差别&#xff1f;3.回溯法搜索子集树&#xff0c;排列树的算法…

PostgreSQL下载和安装教程

PostgreSQL下载和安装嘚吧嘚下载安装配置pgAdmin设置中文安装中遇到的问题The database cluster initialisation failed.问题描述解决方法嘚吧嘚 公司在用PostgreSQL数据库&#xff0c;和MySQL一样是免费试用的。虽然不知道公司出于什么考虑没有选择MySQL&#xff0c;而是选用…

【户外】东莞-银瓶山-常规路线-登山游记+攻略

不想看流水的请直接看最后攻略 此次路线&#xff1a;北上南下。累计行走约11.57km. 2022/11/20 周日 东莞最近YQ严重&#xff0c;不是拉去Jiankang驿站&#xff0c;就是居家GeLi&#xff0c;加上工作也郁闷&#xff0c;出去走走。 昨晚两点睡觉&#xff0c;在给各种设备补电量…

qq录屏快捷键是什么?qq录屏声音设置

我们日常生活中&#xff0c;有时会突然遇到需要用电脑录制屏幕的情况&#xff0c;这个时候我们可以通过按下qq录屏的快捷键进行录屏。有些小伙伴就有疑问了&#xff0c;电脑qq录屏快捷键是什么&#xff1f; qq录屏声音如何设置&#xff1f;别急&#xff0c;接下来小编给大家详细…

SpringMVC跳转

转发&#xff1a; 1&#xff1a;添加成功跳转到成功页面&#xff0c;给出提示&#xff0c;失败跳转到失败页面 ---- jsp 2&#xff1a;添加成功后&#xff0c;跳转到查询的controller中 -- 另外一个程序&#xff0c;添加完成之后&#xff0c;执行查询所有的操作&#xff0c…

Linux环境基础开发工具使用

Linux环境基础开发工具使用 文章目录Linux环境基础开发工具使用1.Linux软件包管理器 yum1.1 什么是软件包1.2 了解rzsz(文件传输工具)1.3 查看软件包1.4 安装与卸载软件指令1.5 更新yum源2.Linux开发工具介绍2.1 vi/vim开发工具介绍2.2 vi/vim的按键图解3.Linux编辑器---vim的使…

数字信号处理 | 实验二 MATLAB z换和z逆变换分析+求解差分方程+求解单位冲击响应+求解幅频相频特性曲线+求解零极点

1.实验目的 (1)掌握离散时间信号的z变换和z逆变换分析 (2)掌握MATLAB中利用filter函数求解差分方程&#xff1b; (3)掌握MATLAB中利用impz函数求解单位冲击响应h(n); (4)掌握MATLAB中利用freqz函数求解幅频特性曲线和相频特性曲线&#xff1b; (5)掌握MATLAB中利用zplane函…

Spring事务管理 | 数据库连接池流程原理分析

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 文章目录▌Spring事务管理环境搭建标准配置声明式事务总结▌SqlSessionFactoryXML 中构建 SqlSessionFactory获得 SqlSession 的实例代码实现▌作用域&#xff08;Sco…

2022.11.20 学习周报

文章目录摘要论文阅读1.题目2.摘要3.网络结构3.1 网络示意图3.2 网络特点4.问题的提出5.正则化带有LSTM单元的RNNs5.1 LSTM单元5.2 具有 Dropout 的正则化6.实验6.1 语音建模6.2 语音识别6.3 机器翻译6.4 图像字幕生成7.结论深度学习Pytorch实现简单的RNN总结摘要 This week, …