线性均衡可以做在接收端,也可以做在发送端,而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",这本书里面将信道均衡讲得非常清楚,而且有详细的数学推导过程,想进一步深入了解信道均衡的话这本书非常适合 。本文以及之前关于信道均衡的文章中的大部分观点都来自于这本书。

  

以上仅为个人的一些见解,如有错误的地方,欢迎大家指正。

作者:波波葡

出处:波波葡 - 博客园 (cnblogs.com)

信道均衡之非线性均衡——Tomlinson-Harashima Precoding(THP)的更多相关文章

  1. Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)

    概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...

  2. 服务注册发现Eureka之三:Spring Cloud Ribbon实现客户端负载均衡(客户端负载均衡Ribbon之三:使用Ribbon实现客户端的均衡负载)

    在使用RestTemplate来消费spring boot的Restful服务示例中,我们提到,调用spring boot服务的时候,需要将服务的URL写死或者是写在配置文件中,但这两种方式,无论哪一 ...

  3. DNS负载均衡 Nginx 负载均衡的种类

    DNS负载均衡 当一个网站有足够多的用户的时候,假如每次请求的资源都位于同一台机器上面,那么这台机器随时可能会蹦掉.处理办法就是用DNS负载均衡技术,它的原理是在DNS服务器中为同一个主机名配置多个I ...

  4. Devstack配置负载均衡,负载均衡版本V2

    本文为minxihou的翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou JmilkFan:minxihou的技术博文方向是 算法&Open ...

  5. 【转载】Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)

    概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...

  6. Hadoop HDFS负载均衡

    Hadoop HDFS负载均衡 转载请注明出处:http://www.cnblogs.com/BYRans/ Hadoop HDFS Hadoop 分布式文件系统(Hadoop Distributed ...

  7. Web负载均衡的几种实现方式

    Web负载均衡的几种实现方式摘要:负载均衡(Load Balance)是集群技术(Cluster)的一种应用.负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力.目前最常见的负载均衡应用是 ...

  8. nginx入门篇----负载均衡策略

    负载均衡策略 负载均衡策略:内置策略和扩展策略. 内置策略包括:轮询.加权轮询.IP hash:扩展策略包括:url hash.fair等 策略详细介绍 轮询:对前端的访问逐一分流到后端网络节点,类似 ...

  9. linux负载均衡总结性说明(四层负载/七层负载)

    在常规运维工作中,经常会运用到负载均衡服务.负载均衡分为四层负载和七层负载,那么这两者之间有什么不同?废话不多说,详解如下: 一,什么是负载均衡1)负载均衡(Load Balance)建立在现有网络结 ...

随机推荐

  1. Msfvenonm生成一个后门木马

    在前一篇文章中我讲了什么是Meterpreter,并且讲解了Meterpreter的用法.传送门-->Metasploit之Meterpreter 今天我要讲的是我们用Msfvenom制作一个木 ...

  2. 逆向 stdio.h 函数库 fwrite 函数(调试版本)

    0x01 fwrite 函数 函数原型: size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) 函数功能:把 ...

  3. Python 图片转字符图

    pip install Image argparse pillow from PIL import Image import argparse #命令行输入参数处理 parser = argparse ...

  4. js中return;、return true、return false;区别

    一.返回控制与函数结果 语法为:return 表达式 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二.返回控制 无函数结果,语法为:return; 在大多数情况下,为事件处理函数返 ...

  5. 分布式事务与Seate框架(1)——分布式事务理论

    前言 虽然在实际工作中,由于公司与项目规模限制,实际上所谓的微服务分布式事务都不会涉及,更别提单独部署构建Seata集群.但是作为需要不断向前看的我,还是有必要记录下相关的分布式事务理论与Seate框 ...

  6. java随堂笔记

    JAVA 1只要是字符串,必然就是对象. 2API文档的基本使用 3如何创建字符串: a直接赋值双引号,也是一个字符串对象. b可以通过new关键字来调用String的构造方法 public Stri ...

  7. JavaWeb——JDBC连接池&JDBCTemplate

    今日内容 1. 数据库连接池 2. Spring JDBC : JDBC Template 数据库连接池 1. 概念:其实就是一个容器(集合),存放数据库连接的容器. 当系统初始化好后,容器被创建,容 ...

  8. c++通讯录管理系统

    代码拷贝 #include<iostream> #include<string> #include<stdlib.h> #define MAX 1000 using ...

  9. Camera.main

    在Unity项目的C#代码中可以看到Camera.main.transform.position.Camera.main.transform.eulerAngles.Camera.main.trans ...

  10. opencv打开摄像头获取视频程序

    // // main.cpp // opencv3 // // Created by PKU on 14-9-16. // Copyright (c) 2014年 PKU. All rights re ...