信道均衡之非线性均衡——Tomlinson-Harashima Precoding(THP)
线性均衡可以做在接收端,也可以做在发送端,而DFE只能做在接收端。对于DFE的讨论都是建立在判决器能够判决正确的情况下,但是如果每一个发送的符号含有多比特信息,比如PAM16,由于发送信号的最大能量是一定的,所以星座图之间的距离很小,这会导致判决器很容易产生错误的判决,在DFE中造成误差传播(error propagation)。每个符号含有的比特数越多,DFE判决时就越容易出错。更重要的是,DFE需要即时判决来消除ISI, 这与信道编码存在根本性的矛盾。根据香农定理,我们知道,应该把一长串符号作为一个整体来进行判决,才能达到信道的最高传输速率,即信道容量。已经有一些方法来解决DFE与信道编码不兼容的问题,但是其物理实现的复杂度增加不少,也引入了很长的延迟。
这里我们介绍一种做在发送端的预编码(precoding)技术——Tomlinson-Harashima Precoding(THP)。THP是一种非线性均衡技术,它可以与信道编码相兼容,并且不会产生误差传播现象。在10G base-T Ethernet中就使用了这种技术。
图1(a)是接收端迫零均衡,图1(b)是DFE。这里把整个通信系统离散化了,并且忽略了发送端滤波器。迫零均衡的缺点是只考虑了信道传输函数,而没有考虑信道噪声的影响。经过迫零均衡器后,信道噪声被放大了。DFE把判决器放进了环路内部,只要判决器判断正确,不仅可以消除ISI,还可以消除噪声。
图1 (a) 接收端迫零均衡 (b) DFE
既然在接收端可以将判决器放进环路内部,在发送端是否可以做类似的操作呢?
先看图2(a)的发送端迫零均衡。发送端迫零均衡不会放大信道噪声,但是却要将发送信号能量中的一部分用于补偿信道pre-cusor和post-cursor的影响。一般情况下,发送端的总能量是一定的,这导致我们需要相应地减小main-cursor的能量,最终的结果就是y(k)的SNR降低。发送端迫零均衡会减小信号能量,而接收端迫零均衡则会放大信道噪声,这两者造成的后果其实是一样的,即都是y(k)的SNR降低。如图3所示,假设m(k)是M点PAM信号,那么经过发送端迫零均衡后,我们需要加一个小于1的增益g以保证s(k)的信号幅度不会超过[-M,+M)。
图3(b)是THP,通过在反馈环路中增加一个模2M的运算,把信号s(k)限制在[-M,+M)内,因此也就不再需要减小main-cursor能量。但是,使用THP后,需要在RX做相应的解码运算,这可以通过另外一个模2M运算来实现。可以证明,THP的输出信号s(k)相互独立并且在[-M,+M)上是均匀分布的。
图2 (a) 发送端迫零均衡 (b) THP
图3 PAM信号
THP可以采用图4的方法来建模,可以推导得到,经过信道后
再经过THP解码和判决,就能恢复出m(k),其中THP解码可以用另外一个模2M运算来实现。这里有一个需要注意的地方:n(k)是白噪声,但是经过THP解码后还是白噪声吗?THP解码会不会放大噪声?一般来说,如果信道噪声不是非常大,n(k)经过THP解码后仍然可以当作是白噪声,且不会被放大。
图4 THP建模
TX端的预编码技术还有一种叫Flexible Precoding, 感兴趣的可以参考Robert F. H. Fiscber的“Precoding and Signal Shaping for Digital Transmission",这本书里面将信道均衡讲得非常清楚,而且有详细的数学推导过程,想进一步深入了解信道均衡的话这本书非常适合 。本文以及之前关于信道均衡的文章中的大部分观点都来自于这本书。
以上仅为个人的一些见解,如有错误的地方,欢迎大家指正。
作者:波波葡
信道均衡之非线性均衡——Tomlinson-Harashima Precoding(THP)的更多相关文章
- Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)
概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...
- 服务注册发现Eureka之三:Spring Cloud Ribbon实现客户端负载均衡(客户端负载均衡Ribbon之三:使用Ribbon实现客户端的均衡负载)
在使用RestTemplate来消费spring boot的Restful服务示例中,我们提到,调用spring boot服务的时候,需要将服务的URL写死或者是写在配置文件中,但这两种方式,无论哪一 ...
- DNS负载均衡 Nginx 负载均衡的种类
DNS负载均衡 当一个网站有足够多的用户的时候,假如每次请求的资源都位于同一台机器上面,那么这台机器随时可能会蹦掉.处理办法就是用DNS负载均衡技术,它的原理是在DNS服务器中为同一个主机名配置多个I ...
- Devstack配置负载均衡,负载均衡版本V2
本文为minxihou的翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou JmilkFan:minxihou的技术博文方向是 算法&Open ...
- 【转载】Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)
概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...
- Hadoop HDFS负载均衡
Hadoop HDFS负载均衡 转载请注明出处:http://www.cnblogs.com/BYRans/ Hadoop HDFS Hadoop 分布式文件系统(Hadoop Distributed ...
- Web负载均衡的几种实现方式
Web负载均衡的几种实现方式摘要:负载均衡(Load Balance)是集群技术(Cluster)的一种应用.负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力.目前最常见的负载均衡应用是 ...
- nginx入门篇----负载均衡策略
负载均衡策略 负载均衡策略:内置策略和扩展策略. 内置策略包括:轮询.加权轮询.IP hash:扩展策略包括:url hash.fair等 策略详细介绍 轮询:对前端的访问逐一分流到后端网络节点,类似 ...
- linux负载均衡总结性说明(四层负载/七层负载)
在常规运维工作中,经常会运用到负载均衡服务.负载均衡分为四层负载和七层负载,那么这两者之间有什么不同?废话不多说,详解如下: 一,什么是负载均衡1)负载均衡(Load Balance)建立在现有网络结 ...
随机推荐
- POJ1149 最大流经典建图PIG
题意: 有一个人,他有m个猪圈,每个猪圈里都有一定数量的猪,但是他没有钥匙,然后依次来了n个顾客,每个顾客都有一些钥匙,还有他要卖猪的数量,每个顾客来的时候主人用顾客的钥匙打开相应的门,可 ...
- POJ3762 时间段用k次
题意: 有n个任务,每个任务有自己的开始时间和结束时间,还有完成这个任务能获得的价值,然后每一天的同一个时刻只能执行一个任务,每个任务必须连续执行完成,最多可以工作m天,问这m天能获得的最 ...
- 仁者见仁:缓冲区栈溢出之利用 Exploit 形成完整攻击链完全攻略(含有 PayLoad)
> 前言 内存缓冲区溢出又名 Buffer OverFlow,是一种非常危险的漏洞,在各种操作系统和应用软件中广泛存在.利用缓冲区溢出进行的攻击,小则导致程序运行失败.系统宕机等后果,大则可以取 ...
- Docker用Commit给容器做快照
关于 commit 镜像是容器的基础,每次执行 docker run 的时候都会指定哪个镜像作为容器运行的基础. 镜像是多层存储,每一层是在前一层的基础上进行修改:而容器同样也是多层存储,是在以镜像为 ...
- windows-DLL注入
DLL注入 刚刚整理的代码注入(远程线程注入)现在整理这个DLL注入,DLL注入比较常用,相比远程代码注入DLL注入没有什么太多的限制,而且实现起来比较简单,当然远程线程需要注意的问题DLL很 ...
- 一行代码解决JS数字大于2^53精度错误的问题
服务端使用长整型(Int64)的数字,在浏览器端使用JS的number类型接收时,当这个实际值超过 (2^53-1)时,JS变量的值和实际值就会出现不相等的问题.常见场景比如使用雪花算法生成Id. 在 ...
- [源码解析] 并行分布式框架 Celery 之 Lamport 逻辑时钟 & Mingle
[源码解析] 并行分布式框架 Celery 之 Lamport 逻辑时钟 & Mingle 目录 [源码解析] 并行分布式框架 Celery 之 Lamport 逻辑时钟 & Ming ...
- 记一次 .NET 某外贸Web站 内存泄漏分析
一:背景 1. 讲故事 上周四有位朋友加wx咨询他的程序内存存在一定程度的泄漏,并且无法被GC回收,最终机器内存耗尽,很尴尬. 沟通下来,这位朋友能力还是很不错的,也已经做了初步的dump分析,发现了 ...
- [刷题] 454 4Sum II
要求 给出四个整型数组ABCD,寻找有多少 i j k l 的组合,使得A[i]+B[j]+C[k]+D[l]=0 ABCD元素个数均为N,0<=N<=500 示例 输入: A = [ 1 ...
- [刷题] 144 Binary Tree Preorder Traversal
要求 二叉树的前序遍历 实现 递归 栈模拟 定义结构体 Command 模拟指令,字符串s描述命令,树节点node为指令作用的节点 定义栈 Stack 存储命令 1 #include ...