首页 > MMSE(Minimum Mean Square Error)

MMSE(Minimum Mean Square Error)

MMSE是一种最小化接收数据的MSE(均方误差)的模型。关于这句话,你的脑海里就会出现很多问题:

什么是均方误差?

“最小化MSE”的物理意义是什么?

让我们从一个我们现在非常熟悉的信道模型开始.

y= Hx +n

MMSE作为一种均衡器,是一种后处理算法,它帮助我们找出接收到的数据与原始数据(传输数据)尽可能接近的数据。简而言之,在MMSE中最重要的步骤是在下面的例子中找到一个矩阵G。如果我们假设没有噪声,这个[G]矩阵可以是信道矩阵的逆H^{-1}。但是当有噪声时,我们需要使用一些能够反映噪声的模型。MMSE就是这些算法之一。

现在我们设定一个目标,也就是我们要解决的目标函数。然后,我们需要找出如何求解目标函数。有几种不同的方法可以达到这个解决方案。我的方法是解下面这个方程。当我第一次学习这个方程时,我的第一个问题是这个方程的意义是什么。如果您更仔细地观察它,您会发现这些方程表示一个特定的条件,即接收的数据向量和错误向量之间没有相关性。

E{y.e^H} = 0           OR         E{e.y^H} = 0

sharetechnote

我的下一个问题是“这个特定的条件如何成为最小化误差的最小最小误差的条件?”,简而言之,“这如何成为MMSE的条件?”

以下是一个FPGA工程师的评论,他教我在物理层的各种主题。一开始可能听起来不那么清楚,但是多想想就会明白了。

在MMSE中,矩阵G应该是这样一个矩阵,即利用接收信号的统计特性使MSE最小化。如果“y”和“e”之间仍然存在一定的相关性,那么应该可以利用这种相关性来降低“e”的范数。所以,在最优点,y和e之间应该没有相关性。(如果不是,我们应该能够利用相关性进一步降低“e”的范数。)

这就是为什么我们可以通过使用声称接收信号“y”与误差“e”之间的相关性为零的准则来推导出MMSE最优矩阵G的原因。

一旦你得到了要解的对象方程并理解了它的物理(或统计)意义,剩下的步骤就是高中数学了。我给你的一个建议是,在你找到最终的解决方案之前,不要过多地考虑解决方案的物理意义。大多数中间步骤是纯粹的数学操作,在大多数情况下没有具体的物理意义。当然,在某些情况下,我们需要考虑物理意义,例如在解决方案过程中删除某些术语时。但在大多数情况下,这个求解过程只是数学操作。

首先,您可以展开如下过程中给出的对象方程。不要害怕,拿出一张纸和一支笔,用手写下每一步。你会发现这是真正的高中数学。

现在我们有了用两个E{}块表示的矩阵[G]。让我们进一步扩展这些块。

然后你可能会问为什么要做更多的扩展?为什么我们不能使用这个结果作为解决方案?

要使用它作为一个解,你需要知道方程中的所有值。

让我们看看这一行(上面的最后一行)中的每一项,并检查我们是否知道所有的值。

我们能知道[y]向量吗?是的,因为它是接收方首先实际检测/测量的值。

那么[x]向量呢?它是传输数据。如果这个传输的数据是一个参考信号,我们可以说我们知道这个值,但是如果它是用户数据,我们就不知道这个值。

现在让我们逐个展开每个E{}块。让我先试试第二个E{}块。(我先扩展第二个block并没有什么特别的原因。我只是做了:)。在这个过程中,您可以看到一些术语(用颜色标记)被删除,并被其他更简单的形式所取代。这是基于术语的物理性质。对于如何删除或替换这些术语,没有纯粹的数学上的原因。

现在我们有了由已知值组成的表达式。[H]为信道矩阵。我们假设在信道估计过程中我们已经求出了这个矩阵。我们知道P,因为我们决定了传输功率。那么“噪声方差”呢?我们不可能确切地知道每个接收到的数据的噪声值,但是我们可以计算出噪声的长期统计特性。噪声方差是噪声的一种长期统计性质。

接下来,让我们展开第一个E{}块。它可以如下所示展开。在这个过程中,您也会看到一些术语(用颜色标记)被删除,并被其他更简单的形式所取代。这是基于术语的物理性质。

现在我们有了两个E{}块的展开形式,让我们用展开的表达式重写[G]矩阵,它变成如下形式。

G = E{xy^H}E{yy^H}^{-1}

= (P.I)H^H (H(P.I)H^H+sigma ^2.I)^{-1}

=P.H^H(PHH^H+sigma^2.I)^{-1}

=H^H(HH^H+frac{sigma^2}{P}.I)^{-1}

现在你看到整个[G]矩阵本身是用所有已知的值表示的。在实际的DSP或FPGA中要解决这个表达式,可能需要进一步的操作(比如:矩阵分解),但只是为了理解MMSE的概念,这就足够了。



即使你通过这个漫长而乏味的数学过程,我们还面临另一个大的问题:为了推导G,我们需要知道的信道矩阵H,我们怎么知道它?'。这是你需要学习的另一个复杂和无聊的话题叫做“信道估计”。

注:以上方程中H的解释因系统的实现而略有不同。如果我们假设一个系统不做任何放大或预编码,H只表示空气信道的特性,如图所示。但如果我们假设一个更现实的实现,执行一些预编码和扩增,H表示一个矩阵,其中包括预编码和扩增的性质。在数学上,这里的H可以表示为'Amp * H * P',其中Amp为放大器,H为空气中的信道矩阵,P为预编码矩阵。

 

如果您对获取MMSE实现的一些示例感兴趣,请参阅此页。我发布了一些MMSE均衡的Matlab例子。

 

 

 

更多相关:

  • 英语的重要性,毋庸置疑!尤其对广大职场人士,掌握英语意味着就多了一项竞争的技能。那,对于我们成人来说,时间是最宝贵的。如何短时间内在英语方面有所突破,这是我们最关心的事情。英语学习,到底有没有捷径可以走,是否可以速成?周老师在这里明确告诉大家,英语学习,没有绝对的捷径走,但是可以少走弯路。十多年的教学经验告诉我们,成功的学习方法可以借...

  • 展开全部 其实IDLE提供了一个显32313133353236313431303231363533e78988e69d8331333365663438示所有行和所有字符的功能。 我们打开IDLE shell或者IDLE编辑器,可以看到左下角有个Ln和Col,事实上,Ln是当前光标所在行,Col是当前光标所在列。 我们如果想得到文件代码...

  • 前言[1]从 Main 方法说起[2]走进 Tomcat 内部[3]总结[4]《Java 2019 超神之路》《Dubbo 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解析 —— 精品合集》《Spring MVC 实现原理与源码解析 —— 精品合集》《Spri...

  • 【本文摘要】【注】本文所述内容为学习Yjango《学习观》相关视频之后的总结,观点归Yjango所有,本文仅作为学习之用。阅读本节,会让你对英语这类运动类知识的学习豁然开朗,你会知道英语学习方面,我们的症结所在。学习英语这类运动类知识,需要把握四个原则第一,不要用主动意识。第二,关注于端对端第三,输入输出符合实际情况第四,通过多个例子...

  • 点云PCL免费知识星球,点云论文速读。文章:RGB-D SLAM with Structural Regularities作者:Yanyan Li , Raza Yunus , Nikolas Brasch , Nassir Navab and Federico Tombari编译:点云PCL代码:https://github.co...

  • 看龙书的时候发现一个矩阵在传入Shader之前都要转置一下,很好奇为什么要有一步这样的操作。行主序和列主序行主序指矩阵在内存中逐行存储,列主序指矩阵在内存中逐列存储。行主序矩阵内存布局:列主序矩阵内存布局:行向量和列向量行向量指的是把向量当成一个一行n列的矩阵,列向量指的是把向量当成一个n行一列的矩阵。左乘和右乘矩阵“左乘”:矩阵和向...

  • ORB-SLAM点云地图中相机的位姿初始化,无论算法工作在平面场景,还是非平面场景下,都能够完成初始化的工作。其中主要是使用了适用于平面场景的单应性矩阵H和适用于非平面场景的基础矩阵F,程序中通过一个评分规则来选择适合的模型,恢复相机的旋转矩阵R和平移矩阵t那么下面主要讲解关于对极几何中的基础矩阵,本质矩阵,和单应矩阵之间的区别与联...

  • 矩阵可分为稠密矩阵和稀疏矩阵,对于稀疏矩阵而言,使用同样的内存来存储这个矩阵显然是对内存的浪费,那么我们就可以想办法将矩阵中所有的o元素挥着不相关元素剔除,怎么剔除,第一种方法是通过三个一维矩阵来存储原二维矩阵中的所有非0元素,三个矩阵分别为value、column、row, value 数组存储所有的非零元素, column 数...

  • void convertTo( OutputArray m, int rtype, double alpha=1, double beta=0 ) const; m – 目标矩阵。如果m在运算前没有合适的尺寸或类型,将被重新分配。rtype – 目标矩阵的类型。因为目标矩阵的通道数与源矩阵一样,所以rtype也可以看做是目标...

  • https://blog.csdn.net/jiangdf/article/details/8460012 glMatrixMode()函数的参数,这个函数其实就是对接下来要做什么进行一下声明,也就是在要做下一步之前告诉计算机我要对“什么”进行操作了,这个“什么”在glMatrixMode的“()”里的选项(参数)有3种模式: GL...

  • 一、代码结构概览1.核心部分configs:储存各种网络的yaml配置文件datasets:存放数据集的地方detectron2:运行代码的核心组件tools:提供了运行代码的入口以及一切可视化的代码文件。2.Tutorial部分demo:显而易见就是demodocs: 同样显而易见。。tests:提供了一些测试代码projects:...

  •     我刚刚接手这个项目的时候就被一系列不知所措的文件命名给深深的震惊了,那种振聋发聩不亚于听到赌王离世的消息。 首先请看,文件本来是用于处理“请假审批”,但是文件名居然叫做“teaApprove”,不要欺负我的初中英语不好,这个teaApprove我第一个感觉就是和“喝茶、茶叶”有关的业务,可是和我们这个项目八竿子打不着...

  • 这个问题简单,不做过多描述,如题所述,如果因为这个导致错误,请安装 npm install stylus-loader css-loader style-loader -D...

  • 使用这个宏TS_VERSION_MAOR来判断,这个宏定义在编译时生成在apidefs.h,它包含在ts/ts.h中,所以请在插件这包含...

  • linux valgrind Memcheck–内存检查工具 使用方法: 注意,这里要用debug版本,如果是release的运行文件,则用debug编译出来的可执行文件替换 输出到终端: valgrind --tool=memcheck --leak-check=full ./test.out 输出到文件: valgri...