kaiyun官方注册
您所在的位置: 首页> 可编程逻辑> 设计应用> 基于FPGA的OFDM信道调制解调设计
基于FPGA的OFDM信道调制解调设计
摘要:OFDM利用离散傅立叶反变换/离散傅立叶变换(IDFT/DFT)代替多载波调制和解调,调制解调的核心是快速傅立叶运算单元,在进行蝴蝶运算时,不可避免的要进行大量的乘法运算。由于FPGA具有强大的并行处理和计算能力,以及丰富的存储资源和逻辑运算资源,因此在FPGA器件上实现OFDM调制解调结构,具有很好的通用性和灵活性。
关键词: FPGA OFDM Matlab
Abstract:
Key words :

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为正整数)时,作如下定义:

采用16位定点算法,这便意味着要考虑溢出问题。对于基-2 FFT,为了防止溢出,可以采用以下办法:将每一个蝶算后的数据右移1bit,即相当于将该数做除2处理。这样,加入总衰减比例因子,将比例因子分散到各步计算中。这种情况下,输出不是原来定义的离散傅里叶变换,而是它的。而对于基-2 IFFT,这个比例因子正是公式中需要的,所以FPGA实现的IFFT便是最终结果。

图3和图4分别是信道h(n)的FFT值(倒数)和第二帧输入数据(迭代次数10)。

调制过程中Matlab的IFFT结果同FPGA结果比较如表1所示。

表1 IFFT结果比较

经过FPGA的IFFT在非主频率点上有一些小的误差。这是因为在计算IFFT的时候,同样因为舍入问题,在本该为零的点产生一些极小的数值,从而在信号显示时出现这些毛刺。

对于表1,FFT峰值结果的误差,是因为FPGA采用的是16bit定点算法,在程序中有很多舍位处理带来的误差。至于Sine信号峰值的不同,那是因为将FPGA实现的IFFT结果再进行Matlab的fft()计算,而IFFT的那些毛刺,必然在时域上产生影响。

在FPGA实现时,一般是在完成IFFT以后将结果暂时存放在RAM中,然后在从RAM里读出数据时,采取部分重复读取的方式,将一部分数据重复复制,从而形成循环前缀。这样可以对连续的数据流进行变换处理,满足系统的实时性要求。

解调过程中Matlab的FFT结果同FPGA结果比较如表2所示。

表2 FFT结果比较

从表2可以看出,FPGA的结果同Matlab的结果基本相同,只是FFT峰值有些不同。这也因为FPGA采用的是16bit定点算法,在程序中有很多舍位处理。但 FPGA的结果是将原小数信号变成整数后再进行处理的,当最后再转换成小数后,结果将是一致的。

结语

OFDM信道调制解调的关键是一对离散傅里叶变换。程序可以由Verilog HDL模块进行设计,用相应的模块仿真程序TESTBENCH进行功能仿真,经过波形仿真和结果验证后,将程序下载到FPGA中实现。同时,Verilog HDL仿真结果与MATLAB中函数fft()以及ifft()的输出结果进行比较(采用的是浮点运算),得出图形和数据的比较结果。

结果表明,用FPGA实现OFDM信道调制解调与MATLAB仿真结果基本一致,具有良好的性能和较高的效率。

此内容为AET网站原创,未经授权禁止转载。
Baidu
map