OFDM通信系统的实现

OFDM通信系统的实现
OFDM通信系统的实现

OFDM通信系统的实现

摘要

正交频分复用技术(Orthogonal Frequency Division Multiplexing)是第四代移动通信技术的核心技术。本文介绍了OFDM系统的基本原理及其优势,在理论分析的基础上,用MATLAB仿真实现了OFDM通信系统,着重讨论了OFDM系统在加性白高斯信道和多径干扰两种不同信道环境下系统的误码性能,并就多径干扰下有保护间隔与无保护间隔的误码性能进行分析比较。

关键字 : 正交频分复用(OFDM);信道估计;离散傅立叶变换;多径干扰;保护间隔。

Implementation of OFDM Communication System

Abstract

Orthogonal Frequency Division Multiplexing is the key technology of 4G in the field of mobile communication.This article briefly introduced OFDM basic principle and its advantage. On the basis of theoretical analysis, the OFDM communication system has been realized in MATLAB. In this paper, it mainly discusses the Binary Error Rate of the OFDM system under two different channels: the AWGN channel and the AWGN channel with Rayleigh fading. It also compares the BER in two different system realizations: one with Guarded Intervals (GI), and the other without (GI).

Key words: OFDM; Channel estimation; DFT; Rayleigh fading; Guarded Intervals.

目录

第一章绪论 (1)

1.1 OFDM的发展及其现状 (1)

1.2 OFDM的优缺点 (2)

1.3 OFDM的应用 (3)

第二章OFDM系统的基本原理 (4)

2.1 OFDM系统的组成 (4)

2.2 编码与交织 (4)

2.2.1 信道编码 (4)

2.2.2 交织码 (5)

2.3 子载波调制与解调 (6)

2.3.1 调制 (6)

2.3.2 解调 (6)

2.4 正交调制解调 (6)

2.5 保护间隔的选择 (8)

2.6 OFDM的关键技术 (9)

2.6.1 频域和时域的同步 (9)

2.6.2 信道估计 (10)

2.6.3 降低峰值平均功率比 (10)

第三章OFDM系统的仿真实现 (11)

3.1 OFDM系统收发机 (11)

3.2 串行数据的产生 (12)

3.3 串并转换 (12)

3.4 16QAM的调制函数 (12)

3.5 IFFT/FFT运算 (13)

3.6 16QAM的解调函数 (13)

3.7 加窗函数 (13)

3.8 OFDM主程序 (14)

3.9 仿真结果 (18)

参考文献 (22)

第一章绪论

随着移动通信和无线网络需求的不断增长,高速无线系统设计在日益增长。一个最直接的挑战是克服无线信道中严重的频率选择性衰落。正交频分复用(OFDM)技术可以克服无线信道的频率选择性衰落,OFDM技术由于其简单高效,已成为未来高速无线通信系统的核心技术之一。

现代移动通信的发展,到目前为止,已经经历了三代,而后续的3G技术也在加速研究。目前,国际标准化组织是从2Mb/s的传输速率向100Mb/s及1000Mb/s的传输速率作为促进无线传输技术的发展目标。而在此过程中,4G的定义也逐渐清晰起来,基本上可以确定,像OFDM、OFDMA,MIMO智能天线技术将成为4G的主流技术。在OFDM相关的技术中,其实际应用是非常复杂的。因此,无论是为了理解OFDM技术的理论或后续OFDM与其他技术相结合,为自己的研究方向建立OFDM系统模型具有十分重要的意义。

在20世纪60年代中期,多载波调制的原理是由Collins kinep lex首次提出。在上世纪70年代,主要为美国军方高频无线通信系统使用;20世纪80年代,OFDM通信技术的研究主要是用在高密度磁带,数字移动通信和高速调制解调器;

OFDM是一种特殊的多载波调制技术,通过利用子载波间的正交性,以进一步提高频谱利用率,并能抗多径衰落和窄带干扰。OFDM技术主要是用在无线局域网(WLAN),数字视频广播(DVB),和ETSI标准数字音频广播(DAB),高清晰度电视(HDTV),非对称数字用户线(ADSL)中。并且OFDM技术和CDMA技术有两种不同形式的组合,一种形式是MC-CDMA,另一种形式是MC-DS-CDMA。前者是频域扩频和多载波调制技术相结合的产物,而后面是具有时域和多载波调制技术相结合的产物。

1.1 OFDM的发展及其现状

OFDM是一种特殊的多载波频分复用(FDM)技术。在传统的多载波频分复用系统当中,每个子信道具有不同的载波并行传输数据,子载波间的间隔具有足够远的距离,用隔离带防止频谱使用重叠,因此频谱效率很低。在均衡器没被使用前,它是用多载波方案在时间色散信道中进行高速通信。

1966,R.W.Chang分析了带限多载波通信系统中的载波滤波后是如何实现和保持正交性。此后不久B.R.Saltzberg给出一篇关于性能分析文章,他指出,一个有效的并行传输系统的设计,应多集中在减少相邻信道的串扰,而不是单个信道更好地

工作,因为信道串扰是引起信号失真的主要因素。1971,S.B.Weinstein和P.M.Ebert 使用傅里叶变换解调(DFT)进行基带OFDM调制。经过DFT的OFDM基带调制解调,避免产生多个副载波和多个窄带带通滤波器,使系统成为一个模拟前端,由于多个DFT可用FFT在同一时间来快速地实现,这进一步降低了系统实现复杂度。为有效抵制符号间干扰和载波间干扰,他们要求插入一个空白的时隙作为信号之间的保护间隔。他们的系统虽然是无法较好获得的相互正交的子载波,但仍然是一个很大的贡献。另一个做出重要的贡献是A.Peled和A.Rmz,他提出了解决色散信道的子载波之间的正交性的问题,这就是循环前缀。当信道响应的长度小于循环扩张的时候,循环前缀的存在使信号和信道间的响应的线性卷积成为循环卷积,使分散OFDM信号可以通过频域单点均衡去进行关联。当然,由于引入了循环扩展,这就会导致少量的信噪比损失。并且由于在无线信道中的具有多径传播的特点,这就会在每个子信道中导致不同的信噪比,也将使宽带OFDM信号产生频率选择性衰落。所以,在实际的OFDM通信系统中,交织是与纠错编码在一起结合使用的,这就会形成正交频分复用(COFDM)。交织与编码的结合使用就可以使OFDM通信系统获得不错的时间二维分集和一个比较好的频率。[1]

1.2 OFDM的优缺点

近年来,OFDM技术已被关注,原因是OFDM技术具有以下优点:

(1)传统的频分复用方法,频带划分为多个不相交的子频带用来传输并行数据流,并在子信道之间保持足够的保护频带。但是OFDM系统中由于各子载波之间的正交性,允许子信道的频谱互相重叠,与传统的频分复用系统相比,OFDM系统可以最大限度地利用频谱资源。当有一个大数目的子载波,此时系统的频谱效率趋于2波特/Hz。

(2)无线数据服务,通常具有非对称性,也就是下行链路中传输的数据量是大于上行链路中数据传输量,这就需要物理层支持高速非对称数据传输率。系统利用子信道的数目不同,可以实现对上行链路和下行链路传输率不同。

(3)OFDM可以很容易地用在与其他多址方法相结合,构成了OFDMA系统,包括多载波码分多址MC-CDMA,跳频OFDM和OFDM-TDMA等,使多个用户可以同时利用OFDM技术用于信息传输。

(4)高速数据流通过串并转换,使每个子载波的数据符号持续长度相对增加,从而有效减少信道的时间色散所产生的码间串扰,降低接收机均衡器的复杂性,有时甚至可以不使用均衡器,而是通过插入循环前缀来消除ISI。

(5)在每个子信道采用IDFT和DFT方法来实现,实现方法简单。当通信系统中子载波的数目N很大时,实现正交调制可以利用快速傅里叶变换(FFT)。随着大规模超大规模集成电路技术和DSP技术,IFFT和FFT的都是很容易实现而且也比较很简

单。

然而,因为OFDM通信系统存在多个相互正交的子载波,那么它的输出信号也是由多个信道的信号相互叠加,在与单载波系统相互比较可以发现OFDM技术具有以下的主要缺点:

(1)OFDM的一个缺点是容易受到频率偏差的相互影响。因为每个子信道频谱是相互间重叠的,所以它们之间的正交性是要有严格的要求。又因为在传输过程中无线电信号的时变特性使得信号会出现频谱偏移差,这样都会对OFDM系统子载波之间的正交性产生破坏,以及产生子信道信号的相互干扰(ICI),对频率偏差敏感的OFDM系统的主要缺点。

(2)OFDM的另一个缺点是具有较高的峰值平均功率比。由于OFDM系统的输出信号是由很多个子信道的信号相互叠加的,因此如果当各个子信道的信号相位同相时,输出得到的信号的瞬时功率就会远远高于输入信号的平均功率,从而会导致较高的峰值平均功率比(PAPR:Peak-to-Average power Ratio),所以会对通信发射机内线性放大器提出了非常高的要求。而高峰值平均功率比的信号会使信号的频谱发生变化和信号畸变,从而导致每个子信道信号之间的正交性产生破坏,造成干扰,使通信系统的传输性能变差。[2]

1.3 OFDM的应用

最初无线OFDM通信系统主要是用在军用高频无线电通信链路当中,随着大规模及超大规模集成电路(VLSI)技术和数字信号处理(DSP)技术的迅速发展,OFDM通信技术获得了迅速的发展,同时也广泛应用于社会生活当中。而其主要应用在以下几个方面:

(1)IEEE802.16a无线城域网中的标准;

(2)非对称数字用户链路(ADSL);

(3)4G蜂窝系统;

(4)音频和视频信号的传输,像日本的综合业务数字广播(ISDB)以及欧洲数字音频广播18J(DAB)、数字视频广播(DVB)等等;

(5)IEEE802.1la无线局域网中的标准;

(6)欧洲电信标准协会(ETSI)推出的局域网标准Hyperlan2;

第二章OFDM系统的基本原理

2.1 OFDM系统的组成

OFDM系统组成框图如图2.1所示。其中,上半部分是发射机链路,下半部分是接收机链路,整个通信系统包含信道编、数字调制、串并转换、IFFT、插入保护间隔、数字上变频、数字下变频、去保护间隔、FFT、数字解调、解码。

编码数字

调制

d(i)串

/

并. . .

IFFT

. . .

/

插保

护间隔

数字

上变频

信道

解码数字

解调

/

串. . .

FFT

. . .

/

去掉保

护间隔

数字

下变频图2.1 OFDM系统组成框图

输入二进制比特序列在完成信道编码后,根据相应采用的数字调制方式完成调制映射产生相应的调制序列{})(n

X,然后对调制序列{})(n

X进行串并转换和IFFT变换,将信号的频谱变换到相应的时域上,得到已调信号在时域中的抽样序列,然后通过加入保护间隔及进行数字上变频处理得到已调信号频带在时域上的波形。经过信道的传输在接收端进行数字下变频处理以及去保护间隔处理,将会得OFDM已调信号在时域上的抽样序列,最后对该序列做FFT得到调制信息序列{})(n

X。

2.2编码与交织

2.2.1信道编码

为了提高数字通信系统性能,信道编码是一种常用的方法。由于OFDM通信系统本身是具有一定的利用信道进行分集能力,所以在OFDM通信系统中,当信道衰落不是太严重,均衡是无法用来改善系统的通信性能的。然而,OFDM通信系统的结构能够使各个子载波相互间进行编码,从而形成前置编码OFDM简称COFDM。

分组码(Block Coding)和卷积码(Convolutional Coding)是信道编码的两种主要形式。

分组码就是由一组长度固定的码字矢量组成,它的特点是一次处理相当规模的信息块。分组码的码字长度就等效于矢量元素在信号中的个数,用q 来表示码字长度。设码字中元素个数来自具有q 个元素的字符集。若矢量元素q>2,则被称作非二进制的分组码;若矢量元素q=2,就被称作二进制的分组码。当分组码的长度为n 时,就能组成n q 个可能组成的码字。然后从其中选取一些包含k M 2=个码字的子集一起构成一种码,最后可以把一个k 比特的信息分组映射到所选择子集中的一个长度为n 的码字。这样得到的分组码称为(n,k)码。

卷积码则是处理串行的信息比特流。卷积码将发送的信息序列通过一个线性的,有限状态的移位寄存器从而产生编码。一般卷积编码器是由n 个线性代数函数发生器(这里是模2加法器)和K 级(每级K 比特)的移位寄存器组成,如图2.2所示。 每输入编码输出每次输入

k 比特k 1…1k …1…k 1k …………1……Nk k 2k 3k ………………………12n 移存器

n Nk 级

个模2

加法器

k 比特旋转1周

图2.2 卷积码编码器

当要进行编码的二进制信号串行的输入到移位寄存器时,每次移入K 比特的数据。然而每个K 比特输入信号序列将会与一个n 比特输出信号序列相对应。所以卷积编码效率就被定义为n k R c /=。参数K 称为卷积码约束长度,K 表示为当前的n 比特输出信号序列和多少个K 比特输入信号序列有关系,也同时是一个决定编码复杂度的重要参数。[3]

2.2.2 交织码

对信号编码后的数据进行交织处理是防止信道产生的突发错误的一种有效的方法,交织就是把突发性的错误信道通过人工方式转换为统计独立式错误信道。在发送端,信号编码后经交织器进行重新排序然后在信道上进行传输。信号在接收端经解调后经过解交织器后将信号恢复到原来的状态然后顺序送入解调译码器。通过交织与解交织的处理,这会将信道中对信号产生突发性错误在信号的时间上进行分散。

交织的处理方式有两种,一种是块交织(Block Interleaving),另一种是卷积交织(Convolutional Interleaving)。

块交织的处理过程是,在信号发送端首先阶交织器将编码后的信号按行的方向

排列成m行n列的矩阵形式,然后按列的方向依次读出数据,通过这种方式完成信号的交织处理。在信号接收端,收到的解调后的信号经解交织器后,信号按列的方向排成m行n列的矩阵形式,然后按行的方向依次读出数据,完成数据的解交织处理过程。

2.3 子载波调制与解调

传输的通信信号经过信道编码处理后,要对信号进行子载波数字调制将其转换成载波幅度和相位的映射,而一般的子载波调制方式通常有QAM或MPSK两种方式,每个子载波间不需要采用一样的进制数,有的也甚至不需要采用一样的调制方式。这就会使得OFDM系统支持的信号传输速率能够在一个比较大的范围内波动,并且能够根据子信道的干扰情况,在各个子信道上采用不同进制数的调制,甚至也可以采用不同的调制方式,而调制信号星座图将会在IFFT之前根据信号的调制模式形成。[4]

2.3.1调制

OFDM系统一般采取以下四种调制方式,分别为QPSK、BPSK、64QAM和16QAM。信号的调制方式选择可以根据SIGNAL中的速率来决定。像6Mbits以及9Mbits可以用BPSK进行调制, 12Mbits以及18Mbits可以用QPSK进行调制, 24Mbits 以及36Mbits可以用16QAM进行调制, 48Mbits和54Mbits可以用64QAM进行调制。而调制步骤如下:[4]

首先,把输入信号二进制序列分别划为长度n=1,2,4,6的组,与之对应的调制方式是BPSK, QPSK,16QAM和64QAM。接下来,用复数分别把这些二进制序列组映射到对应的星座图当中的每个点,其实它的本质就是一种查表方法。要使所有的映射点具有一样的平均功率,就要使输出进行归一化,所以要分别分别乘以归一化系数1,2

1以及采用相应的BPSK、QPSK、16QAM和64QAM,.

1, 10

1, 42

输出的复数序列即为映射后的调制结果。

2.3.2解调

由于在通信系统中存在噪声等干扰的影响,故信息在传输过程中会产生失真,解调接收就要求最大可能的减少误差。解调中首先,求出接收端信号值(复数形式表示)与星座图中各点的距离,接下来求出所有距离中的最小值,则将星座图中该点所对应的二进制值作为解调的结果输出。与调制相对应,要除以归一化系数。[4]

2.4 正交调制解调

对于OFDM这种多载波调制技术,其原理就是用N个子载波把整个信道分割成N个子信道,即将在频率上具有等间隔的N个子载波信号进行调制并相加后发送,

实现N 个子信道并行传输信息。这样每个信号的频谱就只是占用信道带宽当中的1/N ,且使各子载波在OFDM 符号的周期T 内保持频谱的正交性。即在一个OFDM 的符号周期之内都会包含信号的整数倍个周期,而且每个相邻的子载波间都会相差1个周期。其中各子载波满足:[5]

{m n m n T

t jw t jw dt e e T =≠-=??,1,00001 (2.1)

从式2.1可以看出,子载波之间的正交性也能够从频域这个角度来解释,当一个子载波频率处于最大值时,其他所有子信道的信号频谱值也恰好为零。因为接收端对OFDM 信号进行解调的处理的过程中,需计算这些点上对应的各个子载波的频率最大值,因此能够从多个互相重叠的子信道信号当中取出每个子信道信号,从而就不会受到其他的子信道干扰。

在信号发送端,串行码元序列通过数字基带调制及串并转换后,然后将整个信道分为N 个子信道。分别将N 个子信道的码元调制到N 个子载波频率为110,,,,,-??????N n f f f f 上,通过设c f 为信号的最低频率,那么相邻信号的频率将会相差1/N ,所以T n f f c n +=,1,,2,1,0-???=N n ,角频率为n n f w π2=,1,,2,1,0-???=N n 。

发送端待发送的OFDM 通信信号为:

[]T t e n X t f e n X t f e n X t D N n T t n j c N n T t n j c N n t jw ,0,)(Im 2sin )(Re 2cos )(Re )(102102100∈??

? ????-??? ????=??? ???=∑∑∑-=-=-=ππππ (2.2) 接收端对收到的通信信号进行下面这种方式的解调:

[]T t dt e e T n X dt e e n X T dt e t D T

m X T t jw t jw N n T N n t jw t jw T t f j m m m m m ,0,1)()(1)(1)(01001002∈??=??=?='?∑?∑?--=-=--π (2.3)

因为OFDM 信号的周期T 内,每个子载波都是正交的。所以当n=m 时,调制载波n w 就同解调载波为同频载波,当满足相干解调1,2,1,0),()(-???=='N m m X m X 条件时就恢复出原始信号;当m n ≠时,接收到不同子载波间互不干扰,这样就不能解调出信号。所以在接收端完成了通信信号的提取,实现了通信信号的传输。[5]

在实际应用中IDFT 运算是可以完成OFDM 基带信号的调制。而它的解调能够通过离散傅里叶变换(DFT)来实现。所以,OFDM 通信系统的调制与解调就能够等效于IDFT 和DFT 。因为IFFT/FFT 变换同IDFT/DFT 变换具有相同的作用,所以一般用IFFT/FFT 代替IDFT/DFT ,并且这种方式具有更高的计算效率。

2.5保护间隔的选择

应用OFDM 系统的一个十分重要原因是它可以有效的对抗多径时延扩展的影响。通信系统通过把输入数据流串并变换到N 个并行的子信道中,这就使得各个调制信号子载波的数据周期扩大,变为原始数据周期的N 倍。所以符号周期与时延扩展的数值比也同比下降N 倍。为了尽可能的消除码间串扰,同时还可以在每个OFDM 信号间插入保护间隔(Guard Interval),并且保护间隔长度g T 通常要大于无线信道中的最大的时延扩展,这样一个符号的多径分量就不会对下一个符号造成干扰。在这段保护间隔内可以不插任何信号,即是一段空白的传输时段。然而在这种情况下,由于多径传播的影响,则会产生载波间干扰(ICI), 即子载波之间的正交性遭到破坏,不同的子载波之间的产生干扰。由于各个OFDM 信号当中都包含所有非零子载波信号,并且也能够同时出现该OFDM 信号的时延信号,图2.3可以看到第一子载波与第二子载波相互间具有时延信号。而从下图中的信号可以看到,在FFT 运算的时间长度之内,两个子载波间的周期数之差不是整数,所以当接收机对第一个子载波进行解调的时候,第二子载波就会对第一子载波造成相干干扰。一样的道理,当接收机对第二子载波进行解调时,也会存在来自第一子载波的相干干扰。[6]

保护时间

FFT 积分时间子载波1

延迟的子载波2

OFDM 符号周期子载波2对子载波1的

干扰部分

图2.3 多径情况下空闲保护间隔在子载波间造成的干扰

当通信系统中的数据速率和信道带宽是给定的,则OFDM 信号的传输率将远低于在单一的载波形式下的传输率。当使用BPSK 调制时,传输比特率就对应相应的信号速率,然而在OFDM 系统中,系统的带宽是由N 个子载波所占用的,所以信号的传输速率将会低于单载波传输速率的N 倍。正是由于这种低符号率,使的OFDM 通信系统能够抗多径传播造成的码间串扰(ISI),与此同时人为的在每个信号的起始点增加保护间隔,也可以进一步的抗码间干扰(ISI)并且减少在接收端的信号的偏移误差。添加保护间隔是一个循环复制过程,它增加的符号波形的长度。如图2.4是保护间隔增加。

保护

间隔保护间隔IFFT 输出IFFT IFFT

时间

复制

T g

T FFT

T s

符号N 符号N -1符号N +1

图2.4 添加保护间隔时OFDM 符号

由上图可知OFDM 信号总长度是s T =g T +FFT T 其中FFT T 为FFT 变换产生的无保护间隔的OFDM 符号长度,g T 为采样保护间隔的长度,s T 是OFDM 信号的总长度,所以接收端在采样开始时刻T x 满足下式:g x T T <

当在OFDM 系统中加入保护间隔后,就会产生信息速率和功率的损失,功率的损失可以按以下定义:

)1(log 1010+=FFT

G guard T T v (2.4) 从式(2-4)能够看到,当保护间隔占到20%的时候,功率的损失也不会到1dB 。然而信息速率损失却达20%。而在传统的单载波系统中,由于升余弦滤波也会带来信息速率(带宽)的损失,这个损失与滚降系数有关。但由于插入保护间隔可以消除ISI 和多径所造成的ICI 的影响,因此这个代价是值得的。

2.6 OFDM 的关键技术

2.6.1 频域和时域的同步

在实际应用中OFDM 系统与 FDMA 、TDMA 和CDMA 等多址方式结合使用时,OFDM 系统对定时和频率偏移特别敏感,所以时域和频率同步十分重要。与大多数字通信系统一样,频率同步分为捕获与跟踪这两个阶段。在下行链路当中,基站向各个移动终端采用广播方式发送同步信号,所以下行链路的频率同步的处理也就相对简单而且也比较容易实现。而在上行链路当中,来自各个移动终端的通信信号必须要同步得到达基站之后才能保证各子载波之间的相互正交性。移动基站将根据个

人移动终端发送的子载波中所携带信号信息进行时域与频域同步信息处理,再将信号从基站发送返回给移动终端,这种处理方式便于与移动终端同步。同步方式有时域同步和频域同步,也可同时将时域和频域进行同步。

2.6.2 信道估计

在OFDM系统的设计中信道估计的设计要注意以下两个问题。第一个问题是选择合适的导频信息。由于通信信道常常是衰落的,需要对信道不断的进行跟踪,所以导频信号也要经常发送[8]。第二个问题是设计信道复杂度低与导频跟踪力好的估计器。在实际的设计中,因为估计器的功能与导频信号的传输方式具有一定的关系,所以最佳的估计器设计与导频信号选择通常又是互相关联的。

2.6.3 降低峰值平均功率比

由于OFDM信号在时域中的表现形式为N 个相互正交子载波信号叠加,所以当N个信号均在峰值叠加时,OFDM信号将产生一个最大峰值,该信号的峰值功率是所有信号的平均功率的N倍。然而尽管出现信号峰值功率的概率十分低,但为了不失真地在通信系统中传输这些高PAPR的OFDM通信信号,所以系统的发送端会要求很高的高功率放大器(HPA)的线性度,这就会导致信号的发送效率极其低下,并且接收端也会要求很高的前端放大器和A/D变换器的线性度[9]。因此,高PAPR使得OFDM系统的性能大大下降甚至直接影响实际应用。

第三章OFDM系统的仿真实现3.1 OFDM系统收发机

交织编码数字

调制

插入

导频

串并

变换

解码解交

数字

解调

信道

校正

并串

变换

IFFT

FFT

并/串

串/并

插入循

环前缀

和加窗

去除循

环前缀

RF TX DAC

RF RX ADC

定时

和频

率同

图3.1 OFDM收发机框图

OFDM系统的收发机的典型框图如图3.1所示。在发送端中,首先主要是产生用于仿真通信系统的二进制随机数据,编码模块的作用是为了提高通信系统的稳定性和可靠性以及降低接收端信号的误码率。而交织模块是为了防止突发错误,从而导致连续性的一大段数据产生错误以至于无法进行纠错,利用交织将数据次序打乱,从而使突发错误分散到不同的地方,便于纠错。数字调制模块可以提高信道的频谱利用率。插入导频模块用于定时和信道估计;串并转换模块有利于降低数据流的速率;IFFT模块是数据变换形成信道上传输的多载波信号;然后将N路子载波信号通过叠加,即并串转换;加入循环前缀和保护间隔会进一步减少ICI的影响,从而完成了整个通信信号发送端的基带处理。[10]

通信系统接收端部分是发送端是部分的逆过程,它将接收到的传输信号变换为基带后,通过移除信号的保护间隔,这样也就可以去除符号间的干扰;经过FFT变换后,提取出信道估计当中的数据,利用信道的特性再对接收的信号进行补偿;再经并串转换,将并行数据变为串行数据,然后进行信道校正,解调以及译码等工作后就得到所要的二进制信号的输出。

图中上面是发射机链路,下面是接收机链路。IFFT变换与IDFT变换的作用相同,只是具有更高的计算效率。由于FFT和IFFT具有相似的操作过程,所以发射机与接收机就能够使用相同的硬件。[10]在接收端部分进行的是与发送端相逆的操作,将射频(RF)信号和基带信号相互间通过混频处理,再利用FFT变换进行分解频域中的信号,信道中子载波中的幅度与相位将会被提取出来并通过转换变为数字信号。因为IFFT 和FFT互为反变换,所以要选择适当的变换将信号接受或发送。

3.2 串行数据的产生

使用个随机数产生器产生二进制数据,每次产生的数据个数为carrier_count * symbols_per_carrier * bits_per_symbol。

3.3 串并转换

OFDM系统是多载波传输的一种特殊方式,而发送端产生的数据为串行的,因此需要进行串并转换。OFDM将高速输入的串行数据比特流转换成并行传输的低速数据流,而且串并转换之后会提高系统的抗干扰能力。串并转换的实现方法很多,在matlab里,reshape用来把指定的矩阵改变形状,但是元素个数不变。

3.4 16QAM的调制函数

function [complex_qam_data]=qam16(bitdata)

%modulation of 16QAM,modulate bitdata to 16QAM complex signal

X1=reshape(bitdata,4,length(bitdata)/4)';

d=1;%min distance of symble

for i=1:length(bitdata)/4;

for j=1:4

X1(i,j)=X1(i,j)*(2^(4-j));

end

source(i,1)=1+sum(X1(i,:));%convert to the number 1 to 16

end

mapping=[-3*d 3*d;-d 3*d;d 3*d;3*d 3*d;

-3*d d;-d d;d d; 3*d d;

-3*d -d; -d -d; d -d;3*d -d;

-3*d -3*d; -d -3*d;d -3*d;3*d -3*d];

for i=1:length(bitdata)/4

qam_data(i,:)=mapping(source(i),:);%data mapping

end

complex_qam_data=complex(qam_data(:,1),qam_data(:,2));

3.5 IFFT/FFT运算

傅立叶变换将时域和频域相互间联系在一起,大多数数字信号处理使用DFT,对于N比较大的系统来说,OFDM等效基带信号可以使用离散傅立叶变换的方法来实现,因此,OFDM通信系统的调制与解调过程可以分别使用IDFT和DFT代替。通过N点的IDFT运算,可以把频域中数据信号变为时域中数据信号,经调制后传送到信道当中去。实际应用当中,一般采用FFT/IFFT运算,因为它可以显著的降低运算的复杂度。在Matlab软件里可以使用函数fft()和ifft()来对数据进行FFT/IFFT 运算,可以省去很多复杂的运算。

3.6 16QAM的解调函数

function [demodu_bit_symble]=demoduqam16(Rx_serial_complex_symbols)

%将得到的串行16QAM数据解调成二进制比特流

complex_symbols=reshape(Rx_serial_complex_symbols,length(Rx_serial_complex_symb ols),1);

d=1;

mapping=[-3*d 3*d;-d 3*d;d 3*d;3*d 3*d;

-3*d d; -d d;d d;3*d d;

-3*d -d; -d -d; d -d;3*d -d;

-3*d -3*d; -d -3*d;d -3*d;3*d -3*d];

complex_mapping=complex(mapping(:,1),mapping(:,2));

for i=1:length(Rx_serial_complex_symbols);

for j=1:16;

metrics(j)=abs(complex_symbols(i,1)-complex_mapping(j,1));

end

[min_metric decode_symble(i)]= min(metrics) ; %将离某星座点最近的值赋给decode_symble(i)

end

decode_bit_symble=de2bi((decode_symble-1)','left-msb');

demodu_bit_symble=reshape(decode_bit_symble',1,length(Rx_serial_complex_symbols)* 4);

3.7加窗函数

function [rcosw]=rcoswindow(beta, Ts)%定义升余弦窗,其中beta为滚降系数,Ts为包含循环前缀的OFDM符号的长度,Ts为正偶数

t=0:(1+beta)*Ts;

rcosw=zeros(1,(1+beta)*Ts);

for i=1:beta*Ts;

rcosw(i)=0.5+0.5*cos(pi+ t(i)*pi/(beta*Ts));

end

rcosw(beta*Ts+1:Ts)=1;

for j=Ts+1:(1+beta)*Ts+1;

rcosw(j-1)=0.5+0.5*cos((t(j)-Ts)*pi/(beta*Ts));

end

rcosw=rcosw';%变换为列向量

3.8 OFDM主程序

clear all;

close all;

carrier_count=200;%子载波数

symbols_per_carrier=12;%每子载波含符号数

bits_per_symbol=4;%每符号含比特数,16QAM调制

IFFT_bin_length=512;

PrefixRatio=1/4;

GI=PrefixRatio*IFFT_bin_length ;

beta=1/32;

GIP=beta*(IFFT_bin_length+GI);

SNR=15;

%================信号产生===========================

baseband_out_length = carrier_count * symbols_per_carrier * bits_per_symbol; carriers = (1:carrier_count) + (floor(IFFT_bin_length/4) - floor(carrier_count/2)); conjugate_carriers = IFFT_bin_length - carriers + 2;

baseband_out=round(rand(1,baseband_out_length));

%==============16QAM调制===========================

complex_carrier_matrix=qam16(baseband_out);%列向量

complex_carrier_matrix=reshape(complex_carrier_matrix',carrier_count,symbols_per_car rier)';%symbols_per_carrier*carrier_count 矩阵

figure(1);

plot(complex_carrier_matrix,'*r');%16QAM调制后星座图

title('16QAM调制后星座图')

axis([-4, 4, -4, 4]);

grid on

%=================IFFT===============================

IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);

%添0组成IFFT_bin_length IFFT 运算

IFFT_modulation(:,carriers ) = complex_carrier_matrix ;%未添加导频信号,子载波映射IFFT_modulation(:,conjugate_carriers ) = conj(complex_carrier_matrix);%共轭复数映射signal_after_IFFT=ifft(IFFT_modulation,IFFT_bin_length,2);%OFDM调制即IFFT变换time_wave_matrix =signal_after_IFFT;

%====================添加循环前缀与后缀===================

XX=zeros(symbols_per_carrier,IFFT_bin_length+GI+GIP);

for k=1:symbols_per_carrier;

for i=1:IFFT_bin_length;

XX(k,i+GI)=signal_after_IFFT(k,i);

end

for i=1:GI;

XX(k,i)=signal_after_IFFT(k,i+IFFT_bin_length-GI);%添加循环前缀end

for j=1:GIP;

XX(k,IFFT_bin_length+GI+j)=signal_after_IFFT(k,j);%添加循环后缀end

end

time_wave_matrix_cp=XX;

%==============OFDM符号加窗============================= windowed_time_wave_matrix_cp=zeros(1,IFFT_bin_length+GI+GIP);

for i = 1:symbols_per_carrier

windowed_time_wave_matrix_cp(i,:)=real(time_wave_matrix_cp(i,:)).*rcoswindow(beta, IFFT_bin_length+GI)';%加窗升余弦窗

end

%========================生成发送信号,并串变换============ windowed_Tx_data=zeros(1,symbols_per_carrier*(IFFT_bin_length+GI)+GIP); windowed_Tx_data(1:IFFT_bin_length+GI+GIP)=windowed_time_wave_matrix_cp(1,:); for i = 1:symbols_per_carrier-1 ;

windowed_Tx_data((IFFT_bin_length+GI)*i+1:(IFFT_bin_length+GI)*(i+1)+GIP)=wind owed_time_wave_matrix_cp(i+1,:);%并串转换,循环后缀与循环前缀相叠加

end

Tx_data=reshape(windowed_time_wave_matrix_cp',(symbols_per_carrier)*(IFFT_bin_le ngth+GI+GIP),1)';%加窗后循环前缀与后缀不叠加的串行信号

temp_time1 = (symbols_per_carrier)*(IFFT_bin_length+GI+GIP);%加窗后循环前缀与后缀不叠加发送总位数

figure (2)

subplot(2,1,1);

plot(0:temp_time1-1,Tx_data );%循环前缀与后缀不叠加发送的信号波形

grid on

ylabel('Amplitude (volts)')

xlabel('Time (samples)')

title('循环前后缀不叠加的OFDM Time Signal')

temp_time2 =symbols_per_carrier*(IFFT_bin_length+GI)+GIP;

subplot(2,1,2);

plot(0:temp_time2-1,windowed_Tx_data);%循环后缀与循环前缀相叠加发送信号波形grid on

ylabel('Amplitude (volts)')

xlabel('Time (samples)')

title('循环前后缀叠加的OFDM Time Signal')

%===============加窗的发送信号频谱============================= symbols_per_average = ceil(symbols_per_carrier/5);%符号数的1/5,10行

avg_temp_time = (IFFT_bin_length+GI+GIP)*symbols_per_average;%点数,10行数据,10个符号

averages = floor(temp_time1/avg_temp_time);

average_fft(1:avg_temp_time) = 0;%分成5段

for a = 0:(averages-1)

subset_ofdm = Tx_data(((a*avg_temp_time)+1):((a+1)*avg_temp_time));%利用循环前缀后缀未叠加的串行加窗信号计算频谱

subset_ofdm_f = abs(fft(subset_ofdm));%分段求频谱

average_fft = average_fft + (subset_ofdm_f/averages);%总共的数据分为5段,分段进行FFT,平均相加

end

average_fft_log = 20*log10(average_fft);

figure (3)

subplot(2,1,2)

plot((0:(avg_temp_time-1))/avg_temp_time, average_fft_log)

hold on

plot(0:1/IFFT_bin_length:1, -35, 'rd')

grid on

axis([0 0.5 -40 max(average_fft_log)])

ylabel('Magnitude (dB)')

xlabel('Normalized Frequency (0.5 = fs/2)')

title('加窗的发送信号频谱')

%====================添加噪声===============================

Tx_signal_power = var(windowed_Tx_data);%发送信号功率

linear_SNR=10^(SNR/10);%线性信噪比

noise_sigma=Tx_signal_power/linear_SNR;

noise_scale_factor = sqrt(noise_sigma);%标准差sigma

noise=randn(1,((symbols_per_carrier)*(IFFT_bin_length+GI))+GIP)*noise_scale_factor; %产生正态分布噪声序列

Rx_data=windowed_Tx_data +noise;%接收到的信号加噪声

%=====================接收信号串/并变换去除前缀与后缀=========

Rx_data_matrix=zeros(symbols_per_carrier,IFFT_bin_length+GI+GIP);

for i=1:symbols_per_carrier;

Rx_data_matrix(i,:)=Rx_data(1,(i-1)*(IFFT_bin_length+GI)+1:i*(IFFT_bin_length+GI)+ GIP);%串并变换

end

Rx_data_complex_matrix=Rx_data_matrix(:,GI+1:IFFT_bin_length+GI);

%=================FFT变换====================================

Y1=fft(Rx_data_complex_matrix,IFFT_bin_length,2);

Rx_carriers=Y1(:,carriers);

Rx_phase =angle(Rx_carriers);

Rx_mag = abs(Rx_carriers);

figure(4);

polar(Rx_phase, Rx_mag,'bd');

title('极坐标下的接收信号的星座图')

[M, N]=pol2cart(Rx_phase, Rx_mag);

Rx_complex_carrier_matrix = complex(M, N);

figure(5);

plot(Rx_complex_carrier_matrix,'*r');

title('XY坐标接收信号的星座图')

axis([-4, 4, -4, 4]);

grid on

%====================16qam解调================================ Rx_serial_complex_symbols=reshape(Rx_complex_carrier_matrix',size(Rx_complex_carr ier_matrix, 1)*size(Rx_complex_carrier_matrix,2),1)' ;

Rx_decoded_binary_symbols=demoduqam16(Rx_serial_complex_symbols); baseband_in = Rx_decoded_binary_symbols;

figure(6);

subplot(2,1,1);

stem(baseband_out(1:100));

title('输出待调制的二进制比特流')

subplot(2,1,2);

stem(baseband_in(1:100));

title('接收解调后的二进制比特流')

%================误码率计算===================================== bit_errors=find(baseband_in ~=baseband_out);

bit_error_count = size(bit_errors, 2)

ber=bit_error_count/baseband_out_length

3.9仿真结果

星座图将每个子信道上的数据,映射到星座图点的复数表示,转换为同相Ich 和正交分量Qch 。

-4-3-2-101234

-4-3

-2

-1

1

2

3

4

16QAM 调制后星座图

图 3.2 16QAM 调制后的星座图

相关主题
相关文档
最新文档