OFDM调制解调及FPGA实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OFDM(正交频分复用)是一种高效的多载波调制技术,其最大的特点是传输速率高,具有很强的抗码间干扰和信道选择性衰落能力。
OFDM最初用于高速MODEM、数字移动通信和无线调频信道上的宽带数据传输,随着IEEE802.11a 协议、BRAN(Broadband Radio Access Network)和多媒体的发展,数字音频广播(DAB)、地面数字视频广播((DVB-T)和高清晰度电视((HDTV)都应用了OFDM技术。
OFDM利用离散傅立叶反变换/离散傅立叶变换(IDFT/DFT)代替多载波调制和解调,调制解调的核心是快速傅立叶运算单元,在进行蝴蝶运算时,不可避免的要进行大量的乘法运
算。由于FPGA具有强大的并行处理和计算能力,以及丰富的存储资源和逻辑运算资源,因此在FPGA器件上实现OFDM调制解调结构,具有很好的通用性和灵活性。
OFDM与系统框图
OFDM的多个载波相互正交,一个信号内包含整数个载波周期,每个载波的频点和相邻载波零点重叠,这种载波间的部分重叠提高了频带利用率。OFDM每个子信道的频谱均
为sinx/x形,各子信道频谱相互交叠,但在每个子信道载频的位置来自其他子信道的干扰为零,如图1所示。
A图2QFDM ,系统堰图
OFDM系统如图2所示,OFDM系统的调制和解调分别由IFFT和FFT完成。首先将串
行输入数据d0, d1..., d(N-1)变换成并行数据,接下来进行编码和星座图映射,得到频域数据。经过IFFT后相当于调制到正交的N个f0, f1,…,fN-1子载波,完成正交频分复用。接下来加入循环前缀,进行并 /串转换,数/模转换,再调制到高频载波上发送。如果是基带传输,则不需要进行载波调制。
在接收端进行相反的操作,使用N个相同的子载波进行N路解调,再将这N路解调信
号并串输出,复现发送的原始信号。经过FFT变换后的数据相当于将时域数据再转换成频
域数据,即完成了OFDM信号的解调。
OFDM调制原理虽然是用N个正交的载波分别调制N路子信道码元序列,但实际中很难独立产生N个正交的载波。所以OFDM多采用VLSI技术,用FFT代替多载波调制和解调。当子信道数目比较多的时候,采用FFT可以大大减少系统的复杂度。而FPGA的并行
乘法器和加法器结构容易硬件实现OFDM的核心运算,有效地提高了OFDM调制解调速度。
软件仿真与设计
随着FPGA和VLSI的发展,大量的EAB(嵌入式阵列块)、LE(逻辑单元)、内嵌乘法器和高速FIFO存储器带来了OFDM/COFDM 的实用化,为OFDM提供了硬件支持。软件上可以采用MATLAB、硬件描述语言VHDL、Quartusn等软件进行仿真与设计。
仿真过程中采用了随机信号作为输入信号,经过4QAM编码映射后进行再IFFT调制,
然后进入信道进行数据传输,每帧信号为512点;同时采用简单的11点数字离散信道,其值为:[0.05 -0.063 0.088 -0.126 -0.25 0.9047 0.25 0 0.126 0.038 0.088]。
在一般OFDM系统中为使IFFT和FFT前后的信号功率保持不变,当N=2m(m为正整数)时,作如下定义:
I IV-I FFT■=y ) (1)
EM N
IFFT: AHI>= 广电 i V-l ⑵
-N M N
采用16位定点算法,这便意味着要考虑溢出问题。对于基-2 FFT,为了防止溢出,可以采用以下办法:将每一个蝶算后的数据右移1bit,即相当于将该数做除2处理。这样,
加入总衰减比例因子,将比例因子分散到各步计算中。这种情况下,输出不是原来定义的离
散傅里叶变换,而是它的。而对于基-2 IFFT,这个比例因子正是公式中需要的,所以FPGA 实现的IFFT便是最终结果。
图3和图4分别是信道h(n)的FFT值(倒数)和第二帧输入数据(迭代次数10)。
■图3信道h回的5技A图」第二械雄人教
点FFF值(倒我)据(迷伐次股为10)
妇IFFB国娥
s梆就n FFT络剿
酒
Mitlab177.14
FPGA17685
调制过程中Matlab的IFFT结果同FPGA结果比较如表1所示。
1FFT结果比较
She信号衅值FF 丁结果干值
Muthb礼6417734
FPGA35 M I76SS
表1 IFFT结果比较
经过FPGA的IFFT在非主频率点上有一些小的误差。这是因为在计算IFFT的时候,同样因为舍入问题,在本该为零的点产生一些极小的数值,从而在信号显示时出现这些毛刺。
对于表1, FFT峰值结果的误差,是因为FPGA采用的是16bit定点算法,在程序中有很
多舍位处理带来的误差。至于Sine信号峰值的不同,那是因为将FPGA实现的IFFT结果再
进行Matlab的fft()计算,而IFFT的那些毛刺,必然在时域上产生影响。
在FPGA实现时,一般是在完成IFFT以后将结果暂时存放在RAM中,然后在从RAM 里读出数据时,采取部分重复读取的方式,将一部分数据重复复制,从而形成循环前缀。这样可以对连续的数据流进行变换处理,满足系统的实时性要求。
& 2FFT拎果比较
Sine信号峰值FFT结果峰值
16X必
FPGA168188
解调过程中Matlab的FFT结果同FPGA结果比较如表2所示。
表2 FFT结果比较
从表2可以看出,FPGA的结果同Matlab的结果基本相同,只是FFT峰值有些不同。这也因为FPGA采用的是16bit定点算法,在程序中有很多舍位处理。但FPGA的结果是将原
小数信号变成整数后再进行处理的,当最后再转换成小数后,结果将是一致的。