m基于多D2D通信对和多蜂窝用户的LTE预编码技术matlab仿真

简介: m基于多D2D通信对和多蜂窝用户的LTE预编码技术matlab仿真

1.算法描述

LTE网络中采用MIMO技术增加系统容量,提升吞吐率,从理论上来看,多天线的空分复用能成倍增加系统容量。但实际上并非如此,如,22MIMO的容量C(容量)=22MIMO 小于两倍的SISO容量C(容量)=2SISO,这是因为容量增加了,干扰增大了,干扰主要是由于信道矩阵中信道的相关性造成的,为了消除信道相关性造成影响,需要在接收端对H进行评估,并做线性均衡,最大化MIMO信道矩阵H的容量。

    为了获取更高的MIMO容量,接收机侧需要对MIMO的发射矩阵H中的每个信道都进行均衡处理,消除信道间的影响,这样增加接收机的实现复杂度。如SISO模式,接收机需要线性均衡处理一个信道,而对于一个2*2MIMO模式,接收机需要处理评估4个信道;其次,接收端若将H矩阵中的多个信道相关性评估结果反馈给发射机,这会增加系统开销。另一个是,若通过增加天线空间来消除信道间的影响,但天线近处的杂散环境使实现难度增加。于是提出了通过技术改进解决,这个方法就是预编码(Precoding)。
    因此,预编码(Precoding)的目的是降低接收机消除信道间影响实现的复杂度,同时减少系统开销,最大提升MIMO的系统容量。当然,消除MIMO信道间的影响,可以在接收机侧实现,也可以通过改变发射机的发射方式,对发射信号进行预处理,辅助接收机消除信道间的影响,这种发射方式的改变就是通过预编码实现的。
   为了识别MIMO矩阵H中有用的通道,需要把多个通道(如22MIMO H11\H12\H21\H22)转化成类似于SISO的一对一模式,实现发送信号S1对应接收信号R1,S2对应接收信号R2,也就是将多个MIMO交叉通道转换成多个平行的一对一信道。这个过程通过信道矩阵SVD(奇异值分解)实现。如r=Hs+n,变换为r=UΣ(V*)Ts+n,经过接收端的处理=Σ(V)T*s+UHn,从结果可以发现发射端不再需要知道MIMO信道矩阵H,而知道V(共轭转置矩阵,又叫酉矩阵)即可,此处的V即码本(Codebook),3GPP定义了一系列V矩阵,eNodeB和ue侧均可获得,应用时根据PMI选择一个可以使信道矩阵H容量最大的V。到这里,预编码就很好理解了,实际上就是在发射端对发射信号S乘以V,与后面SVD过程匹配,这样在接收端需要处理的复杂性与开销大大减少了。

   考虑下行链路的蜂窝网络中存在多个D2D通信对和多个蜂窝用户,它们共享相同的频率资源并且蜂窝用户为主用户。

image.png

1)传统波束赋形算法1

   该算法是一种最简单传统的波束赋形策略,其原理是对于第k个蜂窝用户,赋形矢量wk,conv是自身方向上的信道增益矢量,公式定义如下:

image.png

                                    

   因此,在这个赋形策略中,基站主要针对蜂窝用户进行赋形,并没有对其关联的D2D通信对做干扰消除。

2)ZF波束赋形算法1

  在ZF波束赋形算法1中,消除了蜂窝用户之间内部的干扰,第k个蜂窝用户传输在其他所有用户信道的零空间。特别是赋形矢量 ,对于第 个用户将会正交其他所有蜂窝用户的信道矢量。公式如(6)所示:

image.png

3)ZF波束赋形算法2

 在ZF波束赋形算法中,消除了基站到D2D通信的干扰,第k个蜂窝用户数据传输在所有D2D通信信道的零空间。特别是,第k个蜂窝用户波束赋形矢量 将会正交所有基站到D2D通信对信道矢量。

image.png

仿真结果与传统波束赋形方法、ZF波束赋形算法1及ZF波束赋形算法2解析结果对比与分析。仿真模型由单个蜂窝小区下,T=4为基站天线数目,K=4为蜂窝用户数量为4,D=4为D2D通信对数量。在仿真场景中,D2D通信对和蜂窝用户到基站的距离固定且采用简单的路径损耗模型。

2.仿真效果预览
matlab2022a仿真结果如下:

5.png
6.png
7.png

3.MATLAB核心程序

clear;
close all;
warning off;
addpath 'func\'
addpath 'func\modulation\'
addpath 'func\estmation\'
addpath 'func\cp\'
addpath 'func\LTEC\'
addpath 'func\precodeing\'
 
 
SNRS      = [0:4:16];
 
for jj = 1:length(SNRS);
    
    Tx_n      = 4;   
    Rx_n      = 4;   
    %整体信噪比
    SNR       = SNRS(jj);  
    Nfft      = 1024;
    Nid       = 17; 
    Sym_Len   = 7;
    CP_length = 144;
    CPNfft    = Nfft+CP_length;
 
    for y=1:100
        y
        SNRS(jj)
        noise     = SNR;
        N0        = 10^(-noise/10);
        %产生信道估计所用的测试信号,功能类似导频
        [subframe,data_v,data_v0,data_v1,data_v2,data_v3] = func_data_gen(Tx_n,Rx_n,Sym_Len,Nid);
        number_length                                     = length(find(subframe == 0));
        %IFFT
        data_ifft1 = zeros(Nfft,2*Sym_Len);
        data_ifft2 = zeros(Nfft,2*Sym_Len);
        data_ifft3 = zeros(Nfft,2*Sym_Len);
        data_ifft4 = zeros(Nfft,2*Sym_Len);
        for i=1:2*Sym_Len
            data_ifft1(:,i) = ifft(data_v0(:,i),Nfft);
            data_ifft2(:,i) = ifft(data_v1(:,i),Nfft);
            data_ifft3(:,i) = ifft(data_v2(:,i),Nfft);
            data_ifft4(:,i) = ifft(data_v3(:,i),Nfft);
        end
        %插入CP
        WithCP_sequence1 = zeros(CPNfft,2*Sym_Len);
        WithCP_sequence2 = zeros(CPNfft,2*Sym_Len);
        WithCP_sequence3 = zeros(CPNfft,2*Sym_Len);
        WithCP_sequence4 = zeros(CPNfft,2*Sym_Len);
 
        for i=1:2*Sym_Len
            WithCP_sequence1(:,i) = func_CP_In(data_ifft1(:,i).',CP_length);
            WithCP_sequence2(:,i) = func_CP_In(data_ifft2(:,i).',CP_length);
            WithCP_sequence3(:,i) = func_CP_In(data_ifft3(:,i).',CP_length);
            WithCP_sequence4(:,i) = func_CP_In(data_ifft4(:,i).',CP_length);
        end
        T1=reshape(WithCP_sequence1,1,CPNfft*2*Sym_Len);
        T2=reshape(WithCP_sequence2,1,CPNfft*2*Sym_Len);
        T3=reshape(WithCP_sequence3,1,CPNfft*2*Sym_Len);
        T4=reshape(WithCP_sequence4,1,CPNfft*2*Sym_Len);
 
        [r1,channel_impulse1,delay_number1,tap_delay1]=func_LTEChan(T1,'EPA');
        [r2,channel_impulse2,delay_number2,tap_delay2]=func_LTEChan(T2,'EPA');
        [r3,channel_impulse3,delay_number3,tap_delay3]=func_LTEChan(T3,'EPA');
        [r4,channel_impulse4,delay_number4,tap_delay4]=func_LTEChan(T4,'EPA');
        [r5,channel_impulse5,delay_number5,tap_delay5]=func_LTEChan(T1,'EPA');
        [r6,channel_impulse6,delay_number6,tap_delay6]=func_LTEChan(T2,'EPA');
        [r7,channel_impulse7,delay_number7,tap_delay7]=func_LTEChan(T3,'EPA');
        [r8,channel_impulse8,delay_number8,tap_delay8]=func_LTEChan(T4,'EPA');
        R1     = (r1+r2+r3+r4);
        R2     = (r5+r6+r7+r8);
        a      = awgn(R1*sqrt(Nfft),noise,'measured');
        b      = awgn(R2*sqrt(Nfft),noise,'measured');
 
        noise1 = a/sqrt(Nfft)-R1;
        noise2 = b/sqrt(Nfft)-R2;
        R1     = a/sqrt(Nfft);
        R2     = b/sqrt(Nfft);
 
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        %去CP
        WithCP_sequence_1 = reshape(R1,CPNfft,2*Sym_Len);
        WithCP_sequence_2 = reshape(R2,CPNfft,2*Sym_Len);
        NoCP_sequence1    = zeros(2*Sym_Len,Nfft);
        NoCP_sequence2    = zeros(2*Sym_Len,Nfft);
        for i=1:2*Sym_Len
            NoCP_sequence1(i,:) = func_CP_del(WithCP_sequence_1(:,i),CP_length); 
            NoCP_sequence2(i,:) = func_CP_del(WithCP_sequence_2(:,i),CP_length); 
        end
        NoCP_sequence1=NoCP_sequence1.';
        NoCP_sequence2=NoCP_sequence2.';
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        %FFT
        FFTed1=zeros(Nfft,2*Sym_Len);
        FFTed2=zeros(Nfft,2*Sym_Len);
        for i=1:2*Sym_Len
            FFTed1(:,i)=fft(NoCP_sequence1(:,i));
            FFTed2(:,i)=fft(NoCP_sequence2(:,i));
        end
        %信道估计
        [MH10,MH11,MH12,MH13] = func_channel_estmation(FFTed1,0,Nid,1,Tx_n,Sym_Len,Rx_n);
        [MH20,MH21,MH22,MH23] = func_channel_estmation(FFTed2,0,Nid,1,Tx_n,Sym_Len,Rx_n);
相关文章
|
3天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于yolov4深度学习网络的公共场所人流密度检测系统matlab仿真,带GUI界面
本项目使用 MATLAB 2022a 进行 YOLOv4 算法仿真,实现公共场所人流密度检测。通过卷积神经网络提取图像特征,将图像划分为多个网格进行目标检测和识别,最终计算人流密度。核心程序包括图像和视频读取、处理和显示功能。仿真结果展示了算法的有效性和准确性。
49 31
|
3天前
|
算法
基于Adaboost模型的数据预测和分类matlab仿真
AdaBoost(Adaptive Boosting)是一种由Yoav Freund和Robert Schapire于1995年提出的集成学习方法,旨在通过迭代训练多个弱分类器并赋予分类效果好的弱分类器更高权重,最终构建一个强分类器。该方法通过逐步调整样本权重,使算法更关注前一轮中被误分类的样本,从而逐步优化模型。示例代码在MATLAB 2022A版本中运行,展示了随着弱分类器数量增加,分类错误率的变化及测试数据的分类结果。
|
2天前
|
供应链 算法 调度
排队算法的matlab仿真,带GUI界面
该程序使用MATLAB 2022A版本实现排队算法的仿真,并带有GUI界面。程序支持单队列单服务台、单队列多服务台和多队列多服务台三种排队方式。核心函数`func_mms2`通过模拟到达时间和服务时间,计算阻塞率和利用率。排队论研究系统中顾客和服务台的交互行为,广泛应用于通信网络、生产调度和服务行业等领域,旨在优化系统性能,减少等待时间,提高资源利用率。
|
10天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如"How are you"、"I am fine"、"I love you"等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
4月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
224 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
4月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
140 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
4月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
107 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
7月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
7月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)

热门文章

最新文章

下一篇
DataWorks