认识LTE(八):LTE中的反馈:闭环空分复用(TM4)

article/2025/9/28 9:37:26

认识LTE(八):LTE中的反馈:闭环空分复用(TM4)

文章目录

  • 认识LTE(八):LTE中的反馈:闭环空分复用(TM4)
  • 零.代码地址
  • 一.TM4到底反馈了什么?
  • 二.CQI反馈
    • 二.PMI
  • 三.RI
  • 四.总结

零.代码地址

https://github.com/liu-zongxi/LTE_simulation

请大家看完觉得有用别忘了点赞收藏,github项目给star哦

一.TM4到底反馈了什么?

这其实是很容易反馈的一个问题,反馈的就是CSI,CSI中包含三个东西CQI,PMI以及RI

这其中,CQI和RI是类似的东西,他反馈的本质上是SINR,CQI是根据SINR映射了MCS,这包括调制方式以及码率;RI就是根据SINR反馈了层数,信道条件不是很好就层数少一点。

PMI是比较特殊的,他反馈的是预编码矩阵,在MIMO中预编码矩阵的作用就是使得每个数据流之前的分别大一些,在TM3中,这使用的是CDD技术,它本质上是根据经验蒙的预编码矩阵,有了PMI,我们就可以根据信道反馈应该使用码本中的哪个矩阵。

二.CQI反馈

书中SINR的计算很暴力,跑起来会有突变,我也不知道咋解决。。。希望有大神能指点一二

image-20220819182214321

image-20220819182255461

image-20220819182312072

function sinr=CQIselection(bits, equalized,  nS, prmLTEDLSCH, prmLTEPDSCH)
%#codegen
% 这是在接收机的操作
% 首先把原数据恢复到调制完成后的状态
tbCrcOut1 =CRCgenerator(bits);
% Channel coding includes - CB segmentation, turbo coding, rate matching,
% bit selection, CB concatenation - per codeword
data = lteTbChannelCoding(tbCrcOut1, nS, prmLTEDLSCH, prmLTEPDSCH);
%Scramble codeword
scramOut = lteScramble(data, nS, 0, prmLTEPDSCH.maxG);
% Modulate
modOut = Modulator(scramOut, prmLTEPDSCH.modType);
% Map modulated symbols  to layers
LayerMapOut = LayerMapper(modOut, [], prmLTEPDSCH);
% Compute post-detection error
error=LayerMapOut-equalized;
% SINR,这是一个近似,并不是真正的信干燥比
sinr=10*log10(var(modOut(:))./var(error(:)));
function [Ms, Cr]=CQI2indexMCS(sinr)
%#codegen
% Table of SINR threshold values, 15 boundary points for an unbounded quantizer
% SINR的标准点,也就是说LTE给出了这些SINR下的码率和调制方式
thresh=[-6.7,-4.7,-2.3,0.2,2.4,4.3,5.9,8.1,10.3,11.7,14.1,16.3,18.7,21,22.7];
% Table of coding rate (16 value)
Map2CodingRate=[0.076, 0.076, 0.117, 0.188, 0.301, 0.438, 0.588, 0.369, 0.479,...
0.602, 0.455, 0.554, 0.650, 0.754, 0.853, 0.926];
% Table of modulation type (1=QPSK, 2=QAM16, 3=QAM64)
Map2Modulator=[1*ones(7,1);2*ones(3,1);3*ones(6,1)];
persistent hQ
if isempty(hQ)hQ=dsp.ScalarQuantizerEncoder(...'Partitioning', 'Unbounded',...'BoundaryPoints',  thresh,...'OutputIndexDataType','uint8');
end
indexCQI=step(hQ, sinr);
index1=indexCQI+1;                   % 1-based indexing
% Map CQI index to modulation type
Ms = Map2Modulator (index1);
% Map CQI index to coding rate
Cr = Map2CodingRate (index1);
if Cr < 1/3, Cr=1/3;end

二.PMI

我个人认为本书中的PMI反馈是存在严重错误的!但是我并没能成功的修正他,本书PMI反馈主要参考的是ICC这篇Link Adaptation in Linearly Precoded Closed-Loop MIMO-OFDM Systems with Linear Receivers,其中SINR是这样计算的

image-20220819182724676

首先这个公式就让我匪夷所思,矩阵怎么做除法呢?

matlab中的实现更是让人匪夷所思

function Gamma = Sinr_MMSE(chEst, nVar, Wn)
%#codegen
% SINR computation:
%   Based on received channel estimates
% Per layer noise variance 
% Precoder matrix 
% Uses the MMSE detector.
% Get params
% persistent Gmean
% if isempty(Gmean), Gmean=dsp.Mean('RunningMean', true);end
persistent Gmean;
if isempty(Gmean), Gmean = dsp.MovingAverage;end
% noisFac = diag(nVar);
noisFac = diag(nVar);
numData = size(chEst, 1);
numLayers = size(Wn,1);
F = inv(Wn);
%% MMSE receiver
for n = 1:numDatah = chEst(n, :, :);                         % numTx x numRxh = reshape(h(:), numLayers, numLayers).';  % numRx x numTxHt= inv((F'*(h'*h)*F) + noisFac);% Post-detection SINR% g=real((1./(diag(Ht).*(nVar.')))-1);g=real((1./(diag(Ht).*(nVar.')))-1);% Gamma = mean(g)% Gamma=step(Gmean,g);Gamma = step(Gmean,g);
end
reset(Gmean);

这明显是不对的!我自己尝试修改也没能解决这个问题,BER完全没有下降,所以这里就不献丑了。。。希望有大神指点!

三.RI

image-20220819183028111

本书中RI是用cond估计了信道状况,然后平均下来和阈值进行比较,非常简单就不详述了

function y = RIestimate(Q)
%#codegen
y=cond(Q);
% x=abs(eig(Q));
% y=max(x)/min(x);
function y=RIselection(Ri, threshold)
% RI estimation
if Ri > thresholdy = 4;
elsey=2;
end
function [y, ri] = MIMOReceiver_ZF_ri(in, chEst, Wn)
%#codegen
% MIMO Receiver:
%   Based on received channel estimates, process the data elements
%   to equalize the MIMO channel. Uses the ZF detector.
% Get params
numData = size(in, 1);
y = complex(zeros(size(in)));
ri=zeros(numData,1);
iWn = inv(Wn);
%% ZF receiver
for n = 1:numDatah = squeeze(chEst(n, :, :)); % numTx x numRxh = h.';                     % numRx x numTxri(n) = RIestimate(h);Q = inv(h);x = Q * in(n, :).';%#oktmp = iWn * x; %#oky(n, :) = tmp.';
end

四.总结

总的来说,这张的仿真是非常失败的。。。。跑出来的结果都不对,后面用到别的仿真系统再做尝试吧。。。


http://chatgpt.dhexx.cn/article/Y9UFRkYC.shtml

相关文章

图解通信原理与案例分析-21:4G LTE多天线技术--天线端口、码流、分集Diveristy、波束赋形BF、空分复用MIMO、空分多址

目录 前言&#xff1a; 第1章 MIMO多天线技术概述 1.1 三大目的 1.2 六大分类 第2章 单天线SISO&#xff08;单输入单输出&#xff09; 2.1 概述 2.2 实现原理--多路“异频”《发送接收》对 第3章 接收分集MISO&#xff08;多输入单输出&#xff09;&#xff1a;冗余接…

[4G5G专题-28]:架构-什么是多天线技术与5G大规模天线阵列、波束赋形、高阶空分复用?

目录 第1章 多天线技术概述 1.1 LTE的多天线技术回顾 1.2 5G大规模天线阵列、波束赋形以及其动机 第2章 什么是波束赋形 2.1 波束赋形与大规模天线阵列的关系 2.2 波束赋形的定义 2.3 波束赋形要回答和解决的两个问题 2.4 常见的波束赋形相关的专业术语 第3章 Active …

复用,多址的区分以及其涉及的相关数据速率

复用技术 为了让尽可能多的手机使用同一个频段&#xff0c;无线通信设计了多址复用技术&#xff1a; 时分多路复用&#xff08;Time Division Multiplexing&#xff0c;TDM)要求各个子通道按时间片轮流地占用整个带宽。时间片的大小可以按一次传送一位、一个字节或一个固定大…

王道 —— 操作系统的四个特征

1、知识总览 操作系统有并发、共享、虚拟、异步四个基本特征&#xff0c;并发和共享是两个最基本的特征&#xff0c;二者互为存在条件&#xff1b; 2、操作系统的特征 —— 并发 并发&#xff1a;指两个或者多个时间在同一时间间隔内发生。这些事件宏观上是同时发生的&#x…

操作系统学习笔记——总体总结

看书太慢容易抓不住重点&#xff0c;所以在此按照操作系统的主要内容分别查网上博客资料进行学习。 一、引论 操作系统基本特性&#xff1a; 并发&#xff1a; 1.并行与并发&#xff1a;并行性是指两个或多个时间在同一时刻发送&#xff1b;并发性是指两个或多是事件在同一…

数据库脏读、不可重复读、幻读

1. 脏读 &#xff1a;脏读就是指当一个事务正在访问数据&#xff0c;并且对数据进行了修改&#xff0c;而这种修改还没有提交到数据库中&#xff0c;这时&#xff0c;另外一个事务也访问这个数据&#xff0c;然后使用了这个数据。 2. 不可重复读 &#xff1a;是指在一个事务内&…

关于可重复读和幻读

最近看到MySQL隔离性的知识&#xff0c;发现网上很多人说可重复读所针对的操作是update&#xff0c;然后亲自试验了一把&#xff0c;见下文。 首先我们知道在读提交隔离级别下&#xff0c;同一事物A中以相同的查询语句可能得到的结果不一致的情况&#xff0c;即不可重复读。这是…

可重复读如何解决幻读

学习之前的疑问&#xff1a; 可重复读的概念 与 不可重复读的概念 行锁gap锁(间隙锁) 快照读 与 当前读区别 快照读中的MVCC 当前读中的gap锁 和 行锁 前几天面试时被问到了mysql可重复读如何解决幻读的问题&#xff0c;之前脑子中的概念只有增加了共享锁和排他锁进行避免&…

MySQL(四)—MVCC实现可重复读的原理

文章目录 一、MVCC概况二、MVCC实现原理1.两或三个隐藏字段。2.undo log3.一个数组4.ReadView 三、举例验证MVCC原理参考文献 一、MVCC概况 MVCC是什么&#xff1f;MVCC即多版本控制协议&#xff0c;InnoDB实现了MVCC作版本控制&#xff0c;防止不该被当前事务看到的数据看到。…

可重复读

《循序渐进DB2-系统管理、运行维护与应用案例》第10章锁和并发&#xff0c;本章首先介绍了通用的事务概念&#xff0c;并指出DB2在用户读取、写入数据时的加锁策略、锁模式、兼容性等。本章还介绍了在并发控制中常碰到的4种数据异常现象&#xff0c;同时讲述了DB2如何使用锁克服…

mysql不可重复读和重复读_脏读、幻读、不可重复读的区别是什么

脏读、幻读、不可重复读的区别&#xff1a;1、脏读就是指当一个事务正在访问数据&#xff0c;并且对数据进行了修改&#xff1b;2、不可重复读是指在一个事务内&#xff0c;多次读同一数据&#xff1b;3、幻读是指当事务不是独立执行时发生的一种现象。 【相关学习推荐&#xf…

Mysql如何实现可重复读

首先对于mysql来说相信也并不陌生&#xff0c;mysql默认的事务的隔离级别是3&#xff0c;即可以实现可重复读&#xff0c;那mysql又是怎样实现可重复读的呢&#xff1f; 下边进行简单的介绍 这里就要提到了mvcc&#xff0c;即多版本并发控制 首先先来看一个事务的执行图 此时…

MySQL 可重复读隔离级别,完全解决幻读了吗?

我在上一篇文章中提到&#xff0c;MySQL InnoDB 引擎的默认隔离级别虽然是「可重复读」&#xff0c;但是它很大程度上避免幻读现象&#xff08;并不是完全解决了&#xff09;&#xff0c;解决的方案有两种&#xff1a; 针对快照读&#xff08;普通 select 语句&#xff09;&am…

MySQL可重复读-问题实践

MySQL可重复读之幻读问题 MySQL事务存储引擎InnoDB的默认隔离级别为可重复读&#xff0c;在该隔离级别下&#xff0c;可以很大程度上避免幻读的问题&#xff0c;完全避免脏读和不可重复读问题&#xff0c;接下来通过实际的测试看看这些场景是否真的能够被完全避免 模拟均基于…

可重复读下的幻读

在事务执行过程中&#xff0c;另一个事务将新记录添加到正在读取的事务中时&#xff0c;会发生幻读&#xff08;事务隔离级别为可重复读REPEATABLE-READ&#xff09;。当执行SELECT … WHERE语句时未对where范围锁定&#xff0c;则可能会发生幻读。幻读是不可重复读的一种特殊情…

MySQL可重复读应用场景_mysql-repeatable read 可重复读隔离级别-幻读实例场景

本文详解 repeatable read 可重复读 隔离级别产生的影响(幻读) -- SERIALIZABLE serializable 序列化 &#xff1b;一个个事务排成序列的形式。事务一个挨一个执行&#xff0c;等待前一个事务执行完&#xff0c;后面的事务才可以顺序执行 -- REPEATEABLE READ repeatable read …

MySQL可重复读级别能够解决幻读吗

引言 之前在深入了解数据库理论的时候&#xff0c;了解到事物的不同隔离级别可能存在的问题。为了更好的理解所以在MySQL数据库中测试复现这些问题。关于脏读和不可重复读在相应的隔离级别下都很容易的复现了。但是对于幻读&#xff0c;我发现在可重复读的隔离级别下没有出现&…

mysql不可重复读和重复读_MySql隔离级别:RU / RC / RR / S + 脏读 / 不可重复读 / 幻读 / 可重复读...

MySQL 事务 本文所说的 MySQL 事务都是指在 InnoDB 引擎下&#xff0c;MyISAM 引擎是不支持事务的。 数据库事务指的是一组数据操作&#xff0c;事务内的操作要么就是全部成功&#xff0c;要么就是全部失败&#xff0c;什么都不做&#xff0c;其实不是没做&#xff0c;是可能做…

mysql可重复读 加锁_mysql可重复读隔离级别加锁分析

问题 myql可重复读隔离级别下可能会导致插入阻塞&#xff0c;问题复现如下 表中有3列都是int类型 其索引情况如下&#xff1a; id为主索引&#xff0c;c,d为普通索引 现在开始制作问题&#xff1a; 在这里我分别开启两个事务&#xff1a;第一个事务中执行一个update 语句更新一…

可重复读实现原理

不可重复读&#xff1a;事务A多次读取同一个数据&#xff0c;事务B在事务A多次读取的过程中&#xff0c;对数据作了更新&#xff0c;导致事务A多次读取同一个数据时&#xff0c;结果不一致。&#xff08;比如修改行数据&#xff09; 幻读&#xff1a;事务A 按照一定条件进行数据…