基于分布式算法和FPGA实现基带信号成形的研究
摘要:提出了一种采用现场可编程门阵列(FPGA)实现基带信号成形的FIR数字滤波器硬件电路的方案。该方案基于分布式算法的思想,利用FPGA丰富的查找表资源,从时域上对基带信号直接进行成形。因为所采用的成形方法运算量小、精度高,所以适用于实时系统。所设计的电路通过硬件仿真,证明能够满足系统的要求,具有一定的理论和实际意义。
关键词:FPGA 基带信号成形 分布式算法 查找表
根据Nyquist第一准则,基带信号成形能够消除码间串扰的影响。随着超高速数字集成电路的发展,成形滤波器已经由过去的基带频域模拟成形滤波器变成现在的基带时域数字成形滤波器。与基带模拟成形滤波器相比,基带数字成形滤波器具有高精度、高可靠性和高灵活性等优点;同时还具有便于大规模集成、易于实现线性相位等特点。实现其带数字成形的方法很多,与传统算法相比,分布式算法可以极大地减少硬件电路的规模,提高电路的执行速度。本文采用基于分布式算法思想的时域成形方法来实现基带信号成形。
1 分布式算法的基本原理
一个线性时不变网络的输出可以用下式表示:
javascript:window.open(this.src);" style="cursor:pointer;"/>
其中,y(n)为第n时刻网络的输出;xk(n)为第n时刻的第k个输入变量;Ak为第k个输入变量的权值。在线性时不变系统中,对于所有n时刻,Ak都是常量。如果该网络表示为滤波器,常量Ak即为滤波器抽头系数,变量xk为单一数据源的抽样数据。仔细观察(1)式可以看出,输出单个y(n)需要将k个乘积累加,这种累加可以通过查找表来实现,大大提高了运算的效率。为了使乘法之后的数据宽度不至于展宽,先把数据源数据格式规定为浮点数2的补码形式。需要注意的是,常量Ak不一定要进行格式转换来匹配输入数据的格式,它可以根据要求的精度进行定义。变量xk可用下式表示:
javascript:window.open(this.src);" style="cursor:pointer;"/>
式中,xkb为二进制数,即取值为0或1;xk0为符号位,“1”表示数据为负,“0”表示数据为正。式中,时间参数“n”已经被省略掉,因为在以下的推导中与时间参数无关。将(2)式代入(1)式中,得:
javascript:window.open(this.src);" style="cursor:pointer;"/>
将(3)式展开,得:
javascript:window.open(this.src);" style="cursor:pointer;"/>
从(4)式可以看出,每个方括号中进行的是输入变量的某一个数据位和所有常量A1~Ak的每一位进行位相“与”然后求和,而指数部分则说明了求和结果的位加权,这种加权可以通过移位来实现。而方括号中的计算可以通过建立查找表来实现,具体的操作通过所有输入变量的同一位进行寻址来完成。通过(4)式,(1)式就可以用加法、减少和二进制除法来计算了,这样就避免了频繁地使用乘示器,从而节约了系统的资源,并且大大缩短了运算时间。
图1
2 时域成形的原理
(4)式中的查找表方法中以缩短运算的时间,但是二进制除法还是会消耗掉大量的系统时钟。因为要设计的是基带信号成形滤波器,所以可以通过直接在时域上成形的方法来完成。
如果输入为二进制双极性数据,采用升余弦滚降滤波器进行脉冲成形,其系统函数为:
javascript:window.open(this.src);" style="cursor:pointer;"/>
若取截短长度为输入信号元宽度的4倍,则当输入信号为“1111”时,系统的输出波形如图1所示。
图中,h'(t)为h(t)的截短。由图1可知,只需要求出Δ时间段的波形叠加值,依次输出,就可以得到输入信号的成形波形。若在段内抽样8点,则每个样点有2 4个可能值,共有2 4 x 8=128个数据。将这128个数据存入查找表中,用连续四个输入信号进行寻址,就可以不必计算二进制除法,从而提高系统的运算速度。其硬件原理图如图2所示。
javascript:window.open(this.src);" style="cursor:pointer;"/>
图中,SSR是一个四位移位寄存器,数据串行输入,并行输出,初始状态预置为“0000”,每一时钟信号读入一位数据,同时串行移位;计数器为8位,每次时钟从000计数至111;ROM的宽度为7位,存储2 7个数据,对应各个样点的数值,每次时钟到来时,输出8个10比特宽的数据。
3 用FPGA实现
由图2可知,系统主要由移位寄存器、计数器和查找表组成,其中查找表(ROM)对系统运算速度的影响最大。如果直接用宽度为7的查找表进行寻址的话,最长的寻址路径需要2 7个系统时钟,这样损失太大。所以考虑用寻址宽度小的查找表。假定系统输入数据的码速度为4.352Mbps,滤波器的滚降系数α=0.35,则用FPGA可实现成形滤波器。
图3
3.1 输入单元
输入单元由移位寄存器和选择网络组成。移位寄存器是由四个带异步复位端的D触发器级连而成,数据串行输入,并行输出,共用同一个时钟和异步复位信号,其作用是将输入数据读入查找表中。选择网络是为了减小查找表的寻址宽度,根据前三个输入数据的值来选择对应的查找表。选择网络的电路图如图3所示。
图中的“F_SWITCH”模块是一个开关电路,当使能端为高电平时,将输入端的数据输出,否则输出端为高阻态。根据图3的原理,当前三个输入信号为100时,选中第5个开关。这样,只要将第5个开关选通的查找表中数据依次输出,就可以得到成形信号。这时查找表的寻址宽度为3位,大大节约了寻址时间。查找表寻址方式的电路图如图4所示。
图4
在图4中,计数器的作用是在第四位数据到来时,激励查找表将其存储的8个数据依次输出。L_ROM是寻址宽度为3位的查找表。
3.2 查找表
在图1中的Δ段内抽样8点,且滤波器为升余弦滚降滤波器,则有下式成立:
javascript:window.open(this.src);" style="cursor:pointer;"/>
所以这8个样点值可由下式表示:
javascript:window.open(this.src);" style="cursor:pointer;"/>
对(7)式进行计算,列出所有可能的样点值,如表1所示。
表1 成形滤波器的样点值
信 号 | 成形滤波器的样点值 | |||||||
0000 | -1 | -0.96 | -0.93 | -0.91 | -0.91 | -0.93 | -0.96 | -1 |
0001 | -1 | -1.17 | -1.25 | -1.26 | -1.21 | -1.13 | -1.06 | -1 |
0010 | 1 | 0.97 | 0.80 | 0.50 | 0.13 | -0.27 | -0.66 | -1 |
0011 | 1 | 0.76 | 0.48 | 0.16 | -0.16 | -0.48 | -0.76 | -1 |
0100 | -1 | -0.66 | -0.27 | 0.13 | 0.50 | 0.80 | 0.97 | 1 |
0101 | -1 | -0.87 | -0.59 | -0.21 | 0.21 | 0.59 | 0.87 | 1 |
0110 | 1 | 12.7 | 1.45 | 1.55 | 1.55 | 1.45 | 1.27 | 1 |
0111 | 1 | 1.06 | 1.13 | 1.21 | 1.26 | 1.25 | 1.17 | 1 |
1000 | -1 | -1.06 | -1.13 | -1.21 | -1.26 | -1.25 | -1.17 | -1 |
1001 | -1 | -1.27 | -1.45 | -1.55 | -1.55 | -1.45 | -1.27 | -1 |
1010 | 1 | 0.87 | 0.59 | 0.21 | -0.21 | -0.59 | -0.87 | -1 |
1011 | 1 | 0.66 | 0.27 | -0.13 | -0.50 | -0.80 | -0.97 | -1 |
1100 | -1 | -0.76 | -0.48 | -0.16 | 0.16 | 0.48 | 0.76 | 1 |
1101 | -1 | -0.97 | -0.80 | -0.50 | -0.13 | 0.27 | 0.66 | 1 |
1110 | 1 | 1.17 | 1.25 | 1.26 | 1.21 | 1.13 | 1.06 | 1 |
1111 | 1 | 0.96 | 0.93 | 0.91 | 0.91 | 0.93 | 0.96 | 1 |
将表1中每一行的值转化为二进制补码形式,写入寻址宽度为3位的16位值找表中。此查找表带有使能端,当使能端为高电平时,输出端选中数据,否则输出端为高阻态。这种查找表对于时钟上升沿的延时最大为14.5ns,而输入信号的码元周期为230ns,所以能够很好地满足系统的要求。
4 设计结果
用FLEX10k30A器件实现成形滤波器,将得到的输出数据转化为十进制数,并画出相应的波形。当输入信号为“1010001”时,成形信号的时域波形如图5所示。
javascript:window.open(this.src);" style="cursor:pointer;"/>
由图5可以看出,在各个取样点码之间串扰很小,达到了基带信号成形的目的。
本设计基于分布式算法思想,在时域上对基带信号直接成形。利用FPGA丰富的查找表资源,提出了一种高效的成形算法。通过FPGA验证,证明工作正常,性能良好。