在动笔之前,笔者百度了一下OFDM的定义。在百度百科中,找到了如下描述:
“OFDM(Orthogonal Frequency Division Multiplexing)即正交频分复用技术,其主要思想是:将信道分成若干正交子信道,将高速数据信号转换成并行的低速子数据流,调制到在每个子信道上进行传输。正交信号可以通过在接收端采用相关技术来分开,这样可以减少子信道之间的相互干扰 ICI 。每个子信道上的信号带宽小于信道的相关带宽,因此每个子信道上的可以看成平坦性衰落,从而可以消除符号间干扰。而且由于每个子信道的带宽仅仅是原信道带宽的一小部分,信道均衡变得相对容易。”
嗯,这个定义写的很全面,这么好的材料,不放到毕设论文的背景介绍中,实在是太可惜了。其实OFDM的原理就是这样,楼主的讲解就到此结束吧,谢谢大家~
哎哟,哪里丢来的臭鸡蛋?还有板砖!*&%……%¥#@@!…
呵呵,跟大家开个玩笑。其实读了上面的描述后,我们一定还有很多的疑问:什么叫“正交子信道”?怎么做才能“把高速数据信号转换成并行的低速子数据流”?为什么“子信道上的信号带宽小于信道的相关带宽时,可以消除符号间干扰”?而“相关带宽”、“符号间干扰”又是什么呢?
在接下来的几篇文章中,我们就来一起探究这些问题。今天,我们先做个“热身”。既然OFDM可以消除符号间干扰(ISI,Inter-Symbol Interference),我们就来看看什么是符号间干扰。
想象下面的场景:一个男孩和一个女孩隔山相望。男孩要向女孩表白,喊出那摄人心魄的三个字。在他们远处,有另一座大山,能够将他们的喊话形成回声。就是说,男孩喊出的话,会经过两条路径传到女孩的耳朵里,一个原声,一个回声。当女孩听到男孩喊出的“我”字的时候,“我”字的回音还在路上。然而下一时刻,当“爱”字的原音到达女孩那里时,“我”字的回音恰好也到了。两个声音同时到达,混在了一起。我们假设“我”和“爱”两个音混在一起会形成“讨”字的音(这个假设实在是太坏了)。所以这一时刻,女孩听到的是“讨”字。同样,再下一时刻,女孩会听到“你”字的原音和“爱”字的回音混叠在一起的声音,假设这次她听到的是“厌”字。最后,女孩听到 了“你”字的回音,转身就走了。
图1 “回音”的例子
好好的一句“我爱你”却因为回声的存在,被活活“翻译”成了“我讨厌你”,让相爱变成了分手。在现实无线通信中,“符号间干扰”就扮演着“回声”的角色。在发送端和接收端之间,常常存在着不止一处的反射物,发出的信号经过这些物体的反射、折射,会经过不同的路径到达接收端,也就是我们常说的“多径传播”。路径不同,传播的距离自然不同,信号到达接收端的时间也就不尽相同。如果这一时刻发出的符号因为多径,延迟到了下一时刻才到达,就会与下一时刻的符号发生混叠,造成符号无法正确解出,这就是“符号间干扰”,也叫“码间串扰”。
通过上面简单的例子,我们已经感性的了解了“回声”干扰“原声”的成因。而且也能直观的感觉到,要想避免两个声音的干扰,男孩只要放慢喊话的速度就好了,等一个字的所有回声都传递到了女孩耳朵里,再喊出第二个。这样一来,女孩听到的就是“我,我…,爱,爱…,你,你…”,无非是多听了几个重复的字而已,不会因为出现字和字之间的干扰而造成误会。但是,我们回看百科中OFDM的定义,却发现它是这么写的:“当信号带宽小于信道的相关带宽时,可以消除符号间干扰”。我们已经找到了从时间上避免符号间干扰的方法,那么,它和“信号带宽”,“相关带宽”之间又是什么关系呢?
不要忘了带宽的单位是赫兹(Hz),而赫兹代表的数学含义是秒分之一(1/s),就是一秒钟发生的次数。所以当我们说一个信号的带宽是10Hz,从离散域来看,可以理解为每秒有10个采样点,换句话说,每隔0.1秒,就会到来一个采样符号。现在我们把带宽的意义转换到时间域,再来解释码间串扰发生的条件,就好理解许多。既然每隔0.1秒就会到来一个符号,那么如果多径造成的最大时延小于这0.1秒,自然不会对下一个符号形成干扰;但如果多径时延大于了0.1秒,就会引起码间串扰。码间串扰发生的条件,就和多径时延对应上了。而这0.1秒,就是码间串扰发生的临界条件。
图2 “码间串扰”的形成条件
我们不妨假设时延恰好在符号发出0.1秒后到达,这样,时延发生的频率,也是10Hz,而“时延的频率(准确的说是最大时延的频率)”就是“相关带宽”。显而易见,当“相关带宽”等于“信号带宽”时,恰好会发生码间串扰。如果时延很短,比如0.01秒后就到达,对应的“相关带宽”是100Hz,大于“信号带宽”,码间串扰就不会发生;如果时延很长,在符号发出后0.2秒才到达,“相关带宽”是5Hz,小于“信号带宽”,码间串扰将不可避免。
图3 具有多径时延的传播环境
有了这些基本概念,我们重新考虑一下之前找到的从时域上规避码间串扰的方法。依然假设信号的带宽是10Hz,这次假设有两个反射体,分别将信号延时0.1秒和0.2秒。我们可以设计这样的发送策略,即每隔0.2秒才发出一个新符号,这样,前一个符号就不会对下一个符号造成干扰了。而且,每发出一个符号,我们可以在之后的0.1秒和0.2秒分别收到该符号的两个副本,这不就相当于利用多径做了一次“纯天然”的分集么?在“犹抱琵琶半遮面--MIMO信道中隐藏的秘密”中,我们提到过,如何充分利用各种资源,实现“变废为宝”,实乃一大学问。在这里,原本讨厌的多径又一次帮了我们的忙,“免费的”对发送符号进行了分集处理(注,多径带来的分集,从本质上讲,是一种“频率分集”)。但是别忘了,天下没有白吃的午餐,我们来仔细盘算一下享受免费“多径分集”的背后,付出的代价是什么。
图4 频率分集
为了躲避码间串扰,并且获得多径分集,我们每隔0.2秒(即每0.3秒)才发出一个符号,这不就相当于把原信号的带宽从10Hz降到了约3.33Hz(1/0.3)么。而相关带宽是5Hz(1/0.2),哦,原来这种发送策略的实质是人为的让信号带宽小于相关带宽,来避免码间串扰的发生啊。这么做虽然能获得一些分集增益,但原来每秒能传10个符号,现在只能传不到4个,牺牲了太多的系统速率,实在有些不划算。
图5 躲避“码间串扰”的代价
看来,要想在充分利用资源的条件下,还获得分集增益,码间串扰是想躲也躲不掉了。我们只有一条路可以走,那就是“干掉”码间串扰!下一回,我们就来看OFDM是怎么消除码间串扰的。
书接上回。上一篇我们说到了“码间串扰”,还留下了一个问题,那就是如何在不降低信号带宽的情况下,克服码间串扰的影响,顺便再获得点“频率分集”增益呢?今天我们就来聊聊这些话题。
图1多径传播环境
来看图1描述的传播环境,假设从发送方到接收方一共有三条传播路径,信道增益分别为h1,h2和h3。其中路径2和3分别会对信号延时1个和2个时刻。即,在第一时刻,接收方会收到经过直视径到达的信号X1(不考虑噪声) :
Y1 = h1 × X1;
第二时刻,接收方收到来自直视径的X2和经反射径1延时到达的X1:
Y2 = h1 × X2 + h2 × X1;
可以看到,码间串扰已经发生。同理,在第三时刻,接收方收到的信号是
Y3 = h1 × X3 + h2 × X2 + h3 ×X1;
以此类推。熟悉“信号系统”的朋友一眼就看出来了,这其实就是输入序列X=[X1,X2,X3…]与信道响应h=【h1 h2 h3 】做了一个卷积,Y = h * X。所以卷积是描述多径传播最漂亮的数学表达。但是卷积的表达式仍然太繁琐,我们不妨来做一个转换。
我们把上面描述的传播环境想象成一个3发1收的MISO系统,那么,上述3条多径信道响应【h1 h2 h3 】就可以看成从3根发送天线分别到接收天线间的直视信道响应,如图2所示。我们设计以下的发送策略:第一时刻,从天线1发送符号X1,这时,接收端收到的就是:
Y1 = h1 × X1;
第二时刻,从天线2发送X1,从天线1发送X2,接收信号是:
Y2 = h1 × X2 + h2 × X1;
第三时刻,从天线3发送X1,天线2发送X2,天线1发送X3,我们有:
Y3 = h1 × X3 + h2 × X2 + h3 ×X1;
以此类推。很明显,这与卷积的表达式一模一样。现在我们把具有码间串扰的多径传播环境转换成了熟悉的多天线MISO系统,形式上比较好理解,更重要的是,我们可以使用多天线的技术来处理码间串扰了。
图2将多径传播转换成MISO系统
在着手“干掉”码间串扰之前,我们先来看一个有趣的例子,帮助我们直观的理解消除码间串扰时,所采用的思想。
正月十五,笔者和爸爸妈妈去看灯展。这次灯展,有三盏最漂亮的大花灯并排放在最显眼的展台上。笔者很想去展台上和三盏灯合影,但参观的人实在是太多了,管理员不得不做出以下规定:所有人排成一排,按顺序从入口上展台,每盏灯前面只能站一人,照完相后,从出口依次离开,每出去一人,就进来一人。
于是,笔者就去排队了,爸爸妈妈在台下给笔者照相。当某一时刻,笔者走上展台,站在第一盏灯前的时候,其他灯前的游客还没有离开,笔者和三盏灯的合影就有了别人在旁边“抢镜”。同样,在后面两个时刻,有人出就有人进,笔者始终无法单独和三盏灯来一次完美的合影,甚是郁闷。
图3 笔者受到其他人干扰,无法和三盏灯合影
当然,这点小事难不倒笔者,我想,既然没有办法单独和三盏灯合影,那么与其身边站着其他人,不如和自己人一起照。于是笔者把相机交给好心人,拉着爸爸妈妈一起去排队了。这一次,虽然刚上展台的时候,有游客干扰,但是总有一个时刻,展台上只有笔者和爸爸妈妈三人,我们开开心心的来了一张合影。
此时笔者玩心大发,一张合影还不满足,笔者想分别站在三盏灯下,和爸爸妈妈来三张合影。于是笔者拉着爸爸妈妈又一次去排队了。这次,当笔者站在第3盏灯下和爸爸妈妈完成第一张合影后,迅速从出口跑出,绕回入口,紧跟着妈妈再次登上展台(可爱的管理员也不忍心阻止笔者的行动),这样,笔者就在第一盏灯下,又来了一张合影;紧接着,笔者的爸爸也迅速绕回入口,跟在笔者后面再次上了展台,就这样,我们完成了分别在三盏灯下合影三次的愿望。
图4 笔者和父母完成了合影的愿望
看完上面的例子,大家是不是已经被笔者“绕”晕了?呵呵,没关系,我们只要知道笔者是如何“挤”掉其他人,让台上只有我们三人,并且如何通过“循环”入场,获得三次合影机会的,就可以了。因为无线通信中,“干掉”码间串扰,用的也是这两招:
(1)把连续多个符号看成一组,一起进行处理,“挤”开码间串扰。这样码间串扰就只会发生在开头和最后的几个符号上,中间的都是“自己人”,不受影响。
(2)通过在这一组符号的开头或最后设置“循环前缀”,干掉码间串扰。
我们把这两招用数学语言,重新进行描述。仍然考虑开篇的传播环境,这次我们把X1,X2,X3看成一组,并在前面加上“循环前缀”X2,X3,形成【X2,X3,X1,X2,X3 】。然后与信道响应【h1 h2 h3】进行卷积,过程如下:
图5 卷积过程和“灯盏”例子的类比
图6 卷积过程的矩阵表达
我们一共能得到7个时刻的方程,但最后两个说的是本组符号对下一组符号造成的干扰,那就留给下一组符号去解决吧。我们只看前5个时刻。很明显,码间串扰发生在前两个时刻Y1,Y2(信道矩阵中0元素的位置就是干扰符号出现的位置,因为我们没有把干扰符号写进方程,所以该位置是0)。没关系,受到干扰的符号我们删掉,不要了。剩下三个时刻的方程,我们仔细一看,这不就是一个3发3收的MIMO传输方程么?我们曾经把多径传播环境转换成了MISO系统,现在又转换成了MIMO系统!
图7 得到3x3 MIMO系统的过程
说到MIMO系统,我们太熟悉了,至少,我们也花了三大篇文章详细的解释过了。还记得“知己知彼,百战不殆--信道信息的获取和应用”中我们介绍的内容么?MIMO系统的最佳传输矩阵是什么?没错,是对角阵。怎样才能获得对角阵呢?对信道矩阵H进行SVD分解,得到H=U·S·V,其中S就是对角矩阵;接下来,就是用V的共轭转置V*对发送信号进行“预编码”,接收端在收到数据后,同样乘以U*,这样一来,发送的符号就像进入了独立平行的正交子信道,互不干扰。(对这部分内容不熟悉的朋友可以在本论坛内找到“知己知彼,百战不殆--信道信息的获取和应用”。)
图8 MIMO杂谈三中提到的预编码过程
现在我们拿到了一个等效的3x3 MIMO传输系统,当然也可以按照上述过程来处理它。于是,我们对信道矩阵H进行SVD分解----此时此刻,本文最大的悬念就要揭晓了----注意矩阵H的特殊结构,因为我们对发送数据添加了循环前缀,所以H的每一行就有一个“循环位移”,拥有这种“循环位移”结构的矩阵叫做“循环矩阵(Circulant Matrix)”。循环矩阵的一个重要特性就是:对它进行SVD分解后,得到的左酉阵U是“逆傅里叶变换矩阵”(我们用W-1来表示,即U = W-1);而右酉阵V是“傅里叶变换矩阵”(V = W,注:一组数据乘以“傅里叶变换矩阵”,就相当于对该组数据进行了傅里叶变换,并且有W-1W= WW-1=I)!
图9 循环矩阵的SVD分解
这就是说,如果我们对一组数据先进行 “逆傅里叶变换”,添加“循环前缀”,再送入多径信道;接收端删除掉受干扰的“循环前缀”后,做一个“傅里叶变换”,得到的数据就好像经过了独立平行的正交子信道,彼此之间不受任何干扰。而整个这一套处理流程,不正是“OFDM”么?呵呵,我们一整篇文章好像都在说MIMO,直到最后时刻才让OFDM出场,OFDM同学一定等急了吧?
我们来梳理一下OFDM的处理流程:首先,对一组发送符号进行“逆傅里叶变换”--相当于MIMO系统中的“预编码”;然后,添加“循环前缀”--为的是让传输矩阵H变成“循环矩阵”,最后送入多径信道;接收端舍弃受到干扰的“循环前缀”--码间串扰就这样被干掉了;再做一个“傅里叶变换”--相当于MIMO中对接收信号乘以U*;得到的符号就像经过了互不干扰的正交子信道。
图10 OFDM和MIMO的对比
通过这样的类比,我们猛然发现,“原来OFDM其实也是MIMO啊”。两者的区别在于:MIMO中,对信道H进行SVD分解,需要知道H具体内容;而在OFDM中,预编码矩阵(即“逆傅里叶变换矩阵”)不依赖于H。笔者本来想把这句话写在文章的开头,害怕被拍砖,最后决定还是放在后面吧。不过读到这里,相信大家也跟笔者有了同样的感受了吧?至少,我们从另一个角度诠释了OFDM的意义。
顺便一提,在“灯展”的例子中,笔者实现了在三盏灯下分别合影的愿望,而在OFDM系统中,每个发送符号都和h1 h2 h3相乘过,就是说,我们还获得了一定的“频率分集增益”哦。
既然OFDM 与MIMO有如此深的渊源,而且本回中,并未介绍OFDM相关参数的含义,比如OFDM符号长度,子载波间距等。下一回,我们就来看看OFDM与MIMO联合使用时,会有什么效果?如果我们要设计一个OFDM系统,它的参数应该怎么选取呢?
-------------------------------------------------------------------------------
闲话:OFDM是“多载波”技术的一种,在单载波系统中,如果要消除码间串扰,就要用到著名的“维特比算法”。关于算法的具体步骤,本文不再赘述。在计算机和互联网领域,维特比算法有着更广泛的应用,比如“语音识别”,“中文输入法”等。对互联网技术感兴趣的朋友也可以阅读吴军老师的“数学之美”。