当前位置: 首页 > 编程日记 > 正文

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例子。

相关文章:

java控制台两个字符串_java控制台输入字符串

实验要求: 1/7 1.掌握 JDK 的安装及参数配置方法,能在控制台界面使用 Java 命令进行 Java 程序的编译及运行。 2.掌握 Eclipse 软件安装方法。3.掌握在 ......习题1. 数据类型转换应用【案例简介】下例说明了整型、浮点型、字符串型之间的相互转换。 【案例目的】掌握 Java 中两…

lua单链表实现

List {}--创建一个节点function List.new(val)return {pnext nil, value val}end--往一个节点后添加一个节点function List.addNode(nodeParent, nodeChild)nodeChild.pnext nodeParent.pnextnodeParent.pnext nodeChildreturn nodeChildend--输出链表function List.print…

Java语言的基础知识9

第十一章(线程)1、通过String nameThread.currentThread().getName();来获取当前线程的名称。2、多次启动一个线程或者启动一个已经运行的线程是非法的,会抛出IllegalThreadStateException异常对象。Thread.sleep((int)Math.random()*10000);3、java提供了Runnable接口使继承了…

Android Parcelable的介绍与使用

Parcelable使用的一个地方就是在进程间传递一个自定义的较为复杂的对象,对Parcelable学习了一下写下自己的观点。 将一个对象比如说一个名字为Cartoon的自定义类,由一个activity传递到另外一个activity去,这个时候就要用到Parcelable了。首先…

LTE PUCCH F2 TX/RX汇总

TX TX端的公式如下(下图来自sharetechnote): 发送端在36.212/36.211中有详细的描述,就是一系列的数学运算,过程概括如下: 编码、加扰、调制的过程暂不介绍,主要介绍下上图中乘以r_uv的过程,公式如下&#…

面试题:查询连续出现的数字

难度:中等 写一段SQL查询至少连续出现3次的数字。 --------- | Id | Num | --------- | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | --------- 例如:上图表 Logs, 1 是唯一一个连续出现3次的…

php的数组排序方法,PHP数组排序函数

在使用 PHP 进行编程时,有时需要对数组进行排序,通常我们使用的对数组进行排序的方法有冒泡排序、快速排序等等。我们除了可以自定义一些数组排序的函数外,PHP 还内置了多种对数组进行排序的函数,这些函数允许用户在数组内部对元素…

介绍并扩展Fitnesse的测试模块化机制:Scenario

2019独角兽企业重金招聘Python工程师标准>>> 首先普及一下概念,什么是Fitnesse,听一听.NET版Cucumber的创始人Aslak Hellesy谈Fitnesse与Cucumber对比: FIT/Fitnesse和Cucumber都执行高级语言编写的验收测试。FIT仅识别HTML&#…

cmake, This may result in binaries being created in the wrong place

现象: CMake Error: The current CMakeCache.txt directory /home/etouch/minigui-64/minigui/libmgeff-1.0.0/CMakeCache.txt is different than the directory /home/weiym/devel/minigui/rel-3-0/libmgeff-1.0 where CMakeCache.txt was created. This may resul…

GDB调试技巧

1. GDB 调试程序 1.Run a program without any argument. gdb program 2. Run a program with arguments gdb --args program arg1 arg2 ... argN or gdb program (gdb) r arg1 arg2 ... argN 3. start with both an executable program and a core file specified gdb…

php 进程管理,php如何管理进程

进程管理-防止进程成为僵尸进程创建好了进程,那么怎么对子进程进行管理呢?使用信号,对子进程的管理,一般有两种情况:(推荐学习:PHP编程从入门到精通)posix_kill():此函数并不能顾名思义&#xf…

Linux分区的认识

有时候为了便于管理硬盘或允许在一块硬盘上使用多个文件系统或操作系统,需要对硬盘进行分区操作。硬盘的分区分为3种:主分区、扩展分区、逻辑分区。通常因为计算机BIOS和MBR的限制,一块硬盘最多只能有4个分区,其中一个主分区可用扩…

求小数的小数点的第n位是什么

链接:https://ac.nowcoder.com/acm/contest/548/B来源:牛客网 时间限制:C/C 1秒,其他语言2秒空间限制:C/C 262144K,其他语言524288K64bit IO Format: %lld题目描述 立华奏在学习初中数学的时候遇到了这样一…

Git 简介1-常用术语

常用术语 1. origin origin是对项目最初克隆(clone)的远程仓库的缩写。 更准确地说,origin 是用来代替原始(original)远程仓库的URL, 从而使在git 命令中使用原始仓库更加容易。 2. master master 是分支的命名约定。 从远程服务器克隆后,生成的本…

要过一遍的博客列表

面向GC的Java编程 (finish) java程序员也应该知道的系统知识系列 (finish) 一致性哈希算法及其在分布式系统中的应用(finish) NoSQL数据库的分布式算法 深入理解java内存模型系列文章 转载于:https://www.cnblogs.com/dongxiao-yang/p/4767179.html

b站弹幕 xml php 乱码,B站弹幕Python爬行XML响应中的代码转换问题,python,之,取,b,xml,时,转码...

在学习过程中,可以发现,对于xml类型的响应,了解到的方式lxml和bs解析器。frombs4importBeautifulSoup #主要使用BeautifulSoup类事实上可以认为:HTML文档和标签树,BeautifulSoup类是等价的Beautiful Soup库解析器&…

java.io包和杯子测楼

1 java.io 字符流:Reader 字节流:InputStream 2 杯子测楼 一种杯子,若在第N层被摔破,则在任何比N高的楼层均会破,若在第M层不破,则在任何比M低的楼层均不会破,给你两个这样的杯子,让…

JUnit测试类完成后事务是默认 回滚的。只能查询数据,不能增删改。

JUnit测试类完成后事务是默认 回滚的。只能查询数据,不能增删改。 在测试类或者测试方法上面加上注解 Rollback(false) 表示事物不回滚,这样数据就可以提交到数据库中了。 转载于:https://www.cnblogs.com/zhangcheng1/p/11156389.html

gcc 编译选项

下载gcc文档,第三章有详细的build options的介绍。 最近我用到2个关键的option 来定位问题,简单介绍一下: 1. -E: 只是进行预编译,不会编译和link。用于检查宏在代码中的展开是否符合预期; 2.--verbose: 开启verbos…

ionic中的后退方法

1)$ionicHistory.goBack();2)$ionicNavBarDelegate.back(); 个人感觉: 1)$ionicHistory.goBack()会按照html历史来后退 2)$ionicNavBarDelegate.back()会按照ion-nav-view的层级来跳转;但是,调用…

php 生成非对称密钥,php实现非对称加密

使用非对称加密主要是借助openssl的公钥和私钥,用公钥加密私钥解密,或者私钥加密公钥解密。1.安装openssl和PHP的openssl扩展2.生成私钥:openssl genrsa用于生成rsa私钥文件,生成是可以指定私钥长度和密码保护1. openssl genrsa -…

HDU 4951 Multiplication table(2014 Multi-University Training Contest 8)

思路 如果进制为p 那么当x<p时 &#xff08;p-1&#xff09;*&#xff08;p-x&#xff09;(p-&#xff08;x1&#xff09;) *p x 因为x<p 所以没有进位 所以高位上的数字为 p-&#xff08;x1&#xff09;。 根据上面所述。 只要我们能找出 p-1 那么我们…

H3C 静态默认路由配置

转载于:https://www.cnblogs.com/fanweisheng/p/11156783.html

malloc为什么会报错:memory corruption

最近遇到一个问题&#xff0c;很有意思&#xff0c;在此记录下&#xff0c;以备后续参考。 程序运行异常&#xff0c;报错&#xff1a;malloc: memory corruption. 用gdb 调试程序&#xff0c;bt 如下&#xff0c;程序在申请344 bytes内存时失败。 疑问&#xff1a;344bytes内…

php 静态类内存,php面向对象中static静态属性与方法的内存位置分析

本文实例分析了php面向对象中static静态属性与方法的内存位置。分享给大家供大家参考。具体如下&#xff1a;static静态属性的内存位置——>类&#xff0c;而不是对象。下面做测试来证明一下header("content-type:text/html;charsetutf-8");class Human{static pu…

Android中实现为TextView添加多个可点击的文本

这篇文章主要介绍了Android中实现为TextView添加多个可点击的文本,可实现类似Android社交软件显示点赞用户并通过用户名称进入该用户主页的功能,是非常实用的技巧,需要的朋友可以参考下。具体如下&#xff1a; 很多时候我们在使用社交软件的过程中多多少少会为别人的帖子点赞&a…

Set和存储顺序深入探讨、SortedSet排序的示例

2019独角兽企业重金招聘Python工程师标准>>> Set和存储顺序深入探讨、SortedSet排序的示例 package org.rui.collection2.set;import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; import java.util.TreeSet;//TypesForSets.java /**…

设计模式七大原则(C++描述)

前言 最近在学习一些基本的设计模式,发现很多博客都是写了六个原则,但我认为有7个原则,并且我认为在编码中思想还是挺重要,所以写下一篇博客来总结下 之后有机会会写下一些设计模式的博客(咕咕咕........ 设计模式的七大原则 1.单一职责原则 2.开放-封闭原则 3.依赖倒置原则 4.…

gdb高级调试技巧

1. 反向调试 gdb支持程序反向执行。 record 让程序开始记录反向调试所必要的信息 rn : reverse next rc: reverse continue &#xff0c;Continue program being debugged but run it in reverse record stop: 停止记录 2. 格式化&#xff08;pretty print&#xff09;打…

php代码实现关键词搜索,PHP代码实现百度统计关键词及来路推送

搜索热词勾起我搞这个的兴趣是因为有个卖软件的&#xff0c;老是向我的百度统计后台推送引流软件广告。搜索后发现早就有人做过这方面的研究&#xff0c;然而随着统计代码版本升级&#xff0c;部分功能暂时还未解决。今天这篇 PHP 代码实现提交虚假数据给百度统计就教大家&…