找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

[嵌入式/ARM] 基于FPGA的OFDM信道调制解调设计

[复制链接]
admin 发表于 2013-3-24 05:01:57 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
OFDM" target="_blank">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所示。
   
   
   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、QuartusⅡ等软件进行仿真与设计。
   仿真过程中采用了随机信号作为输入信号,经过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为正整数)时,作如下定义:
    2012110705102209326333.jpg
   采用16位定点算法,这便意味着要考虑溢出问题。对于基-2 FFT,为了防止溢出,可以采用以下办法:将每一个蝶算后的数据右移1bit,即相当于将该数做除2处理。这样,加入总衰减比例因子,将比例因子分散到各步计算中。这种情况下,输出不是原来定义的离散傅里叶变换,而是它的。而对于基-2 IFFT,这个比例因子正是公式中需要的,所以FPGA实现的IFFT便是最终结果。
   图3和图4分别是信道h(n)的FFT值(倒数)和第二帧输入数据(迭代次数10)。
    2012110705102210888334.jpg
   调制过程中Matlab的IFFT结果同FPGA结果比较如表1所示。
    2012110705102229638335.jpg
   表1  IFFT结果比较
   经过FPGA的IFFT在非主频率点上有一些小的误差。这是因为在计算IFFT的时候,同样因为舍入问题,在本该为零的点产生一些极小的数值,从而在信号显示时出现这些毛刺。
   对于表1,FFT峰值结果的误差,是因为FPGA采用的是16bit定点算法,在程序中有很多舍位处理带来的误差。至于Sine信号峰值的不同,那是因为将FPGA实现的IFFT结果再进行Matlab的fft()计算,而IFFT的那些毛刺,必然在时域上产生影响。
   在FPGA实现时,一般是在完成IFFT以后将结果暂时存放在RAM中,然后在从RAM里读出数据时,采取部分重复读取的方式,将一部分数据重复复制,从而形成循环前缀。这样可以对连续的数据流进行变换处理,满足系统的实时性要求。
    2012110705102232763336.jpg
   解调过程中Matlab的FFT结果同FPGA结果比较如表2所示。
   表2  FFT结果比较
   从表2可以看出,FPGA的结果同Matlab的结果基本相同,只是FFT峰值有些不同。这也因为FPGA采用的是16bit定点算法,在程序中有很多舍位处理。但 FPGA的结果是将原小数信号变成整数后再进行处理的,当最后再转换成小数后,结果将是一致的。
    2012110705102232763337.jpg
   结语
   OFDM信道调制解调的关键是一对离散傅里叶变换。程序可以由Verilog HDL模块进行设计,用相应的模块仿真程序TESTBENCH进行功能仿真,经过波形仿真和结果验证后,将程序下载到FPGA中实现。同时,Verilog HDL仿真结果与MATLAB中函数fft()以及ifft()的输出结果进行比较(采用的是浮点运算),得出图形和数据的比较结果。
   结果表明,用FPGA实现OFDM信道调制解调与MATLAB仿真结果基本一致,具有良好的性能和较高的效率。
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-25 13:27 , Processed in 0.062793 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表