1、数字匹配滤波器的优化设计与 FPGA 实现 作者:王光 田斌 吴勉 易克初 田红心 摘要:介绍在直接序列扩频通信中应用数字匹配滤波器实现 m 序列同步,分析其具体结构,详细讨论了其基于 FPGA(现场可编程门阵列 )的性能优化。结果表明,数字匹配滤波器用FPGA 实现时,能够大大减少资源占用,并提高工作效率。 关键词: FPGA,数字匹配滤波器 1 引言 在通信系统中,匹配滤波器的应用十分广泛,尤其在扩频通信如在 CDMA 系统中,用于伪随机序列 (通常是 m 序列 )的同步捕获。匹配滤波器是扩频通信中的关键部件,它的性能直接影响到通信的质量。本文从数字匹配滤波器的理论及结构出发,讨论了它在数
2、字通信直扩系统中的应用,并对其基于 FPGA 的具体实现进行了优化。 2 数字匹配滤波捕获技术 在直接序列扩频解扩系统中,数字匹配滤波器的捕获是以接收端扩频码序列作为数字 FIR滤波器的抽头系数,对接收到的信号进行相关滤波,滤波输出结果进入门限判决器进行门限判决,如果超过设定门限,表明此刻本地序列码的相位与接收扩频序列码的相位达到同步。如果并未超过设定门限,则表明此刻本地序列码的相位与接收到的扩频序列码的相位不同步,需要再次重复相关运算,直到同步为止,如图 l 所示。 数字匹配滤波器由移位寄存器、乘法器和累加器组成,这只是 FIR 滤波器的结构形式,只不过伪码寄存器中的系数为 -1 或 +1,
3、实际并不是真正意义上的乘法。伪码寄存器中的数据可以由一种伪随机序列发生器产生。 数字匹配滤波器的表达式为: 其中, x(n)为输入信号; h(-i)为滤波系数,由接收端扩频码决定,取值 -1 或 +1, m 序列码元为 1,取值为 +l, m 序列码元为 O,取值为 -1。匹配滤波器的长度 N 等于扩频比 ,也就是对于每一信息符号的扩频码元数,即 Tb/Tc。当输入信号 x(n)与本地扩频码 h(-i)匹配时 ,时输出 Z 达到最大,超出预先设定的门限,表示捕获成功。 很显然,数字匹配滤波器中的关键部件是乘法器和累加器,而移位寄存器可以由信号的相互移位来实现,例如要实现 8 bit 串行数据的
4、移位。假设输入数据序列为 din,移位寄存器中的信号为 dO, d1, d2, d3, d4, d5, d6, d7,用 VHDL 语言中的进程语句实现程序为: 每来一个时钟信号,信号同时改变 1 次,这就实现了和移位寄存器相同的功能。这样的进程实现并不需要太多的逻辑单元。所以影响资源占用和工作效率的主要是乘法器和累加器。下面讨论就乘法器和累加器分别加以讨论,研究其对资源和效率的影响。 3 乘法器 由于此处采用的是 0, 1 的二进制系统,所以将逻辑 0 映射为实际电平 -l,逻辑 l 映射为实际电平 +1也就是伪码寄存器中的系数。移位寄存器抽头输出为有符号二进制补码,采用乘法器实现相乘运算时
5、,如果伪码较长,则需要耗费太多的逻辑单元且运行速度过慢。已经知道,一个数乘以 l 不改变原值,而乘以 -l 则改变符号,因为移位寄存器抽头系数只能是 1 和-1,可以考虑用二进制的补码运算来代替相乘 1 和 -1 运算,这就避免了相乘运算对资源的大量耗费,并能提高运算速度。可以看到,伪码寄存器中的系数为 +1 或 -l,如对移位抽头输出进行乘 1 运算,相当于不改变原补码值,而对移位抽头输出进行乘 -1 运算,则相当于对原补码数值改变符号,并对低位二进制码元求其补码值。下面证明上述结论。 假设二进制补码数为 最高位 xn-1 为符号位,其取值为 0 或 1, 0 代表正数, 1 代表负数。 不
6、失一般性,设 xn-2, xn-3, x1, x0 均为 l, x2 到 xn-4 均设为 0,则二进制补码数 x 的后n-1 位代表的真值为 : 2n-2+2n- 3+21+20 当最高位 xn-1=O 时,若移位抽头输出系数为 1,则 x 代表的正数乘 1 后仍然是xn-2+2n-3+21+20,正数的补码表示还是 x。 若移位抽头输出系数为 -1 x 代表的正数和 -1 相乘后变为负数,取 x 的后 n-1 位的朴码值,可以表示为 2n-4+2n-3+23+20,改变 x 最高位的符号位为 1取 2n-4+2n-3+23+20 的二进制表示作为 x 的后 (n-1)位,即为 x 与 -l
7、 相乘的补码表示; 当最高位 xn-1=1 时,若移位抽头输出系数为 1,则 x 代表的负数乘 l 后的真值仍然是 x 的后n-l 位的补码值 2n-4+2n-3+23+20,负数的补码表示还是 x。 若移位抽头输出系数为 -1, x 代表的负数和 -l 相乘后变为正数,取 x 的后 n-l 位的补码值,可以表示为 2n-4+2n-3+23+20,改变 x 最高位的符号位为 0,取 2n-4+2n-3+23+20 的二进制表示作为 x 的后 (n-1)位,即为 x 与 -1 相乘的补码表示。 结论成立,二进制求补运算代替乘法器的处理框图为如图 2 所示。 综上所述,在数字匹配滤波器中,因为滤波
8、系数即移位抽头系数取值只能为 1 或 -1,所以将有符号数的二进制补码的乘法运算变为求补码运算是完全可行的, 这就避免了乘法运算对于资源的大量需求,运算速度也可大大提高。 在补码运算中,对每个移位抽头输出同时并行运算,并在后两个时钟得到并行求补码运算输出数据。 传统设计乘法器时,输入 n1, n2 位的 2 路有符号补码,结果输出为 nl+n2 位二进制补码数据。 随着移位寄存器输入有符号二进制补码矢量数据,时钟改变一次,移位寄存器每个抽头输出均和相应的抽头系数做一次相乘运算。 求补码运算代替乘法器时, 不同于传统的乘法器设计, 寄存器中每一数据只需求其补码即可,省略了相乘运算。从根本上说用求
9、补代替相乘运算只是功能相同,但可以大大减少资源浪费并提高运算速度,所以有很大的应用优势。 4 累加器 数字匹配滤波器的移位寄存器每一级抽头进行 1 次乘法运算,结果输出到累加器进行累加,当运算到最后一级时,输出累加结果,送入门限判决器进行判决。 当对 2 个二进制补码相加时,若 2 个加数都为 B bit,考虑到数据可能溢出,则加法器的输出只需要 (B+1)bit;而当 3 个 bit 二进制补码相加时,输出则需要 (B+2)bit。通过观察可以发现: 2N 个 B bit 二进制补码的值可以用 (B+N)bit 二进制表示。 4.1 传统的累加器设计 考虑到传统累加器数据可能溢出,故将数据位
10、展宽,比如在本仿真中, 63 个 4 位有符号补码求和,最后结果最多为 4+6 位,其中 4 为每一加数的位数,因为 2664,故扩展位为 6 位。所以计算,如果数据位不足 10 位,正数在数据前加 O,负数在数据前加 1,这样每一数据都是 10 位 (包括符号位 ),不用考虑溢出问题,完全用 62 个 10 位加法器可以实现。 4.2 较优的累加器设计 随着移位级数的增加,加法器的位数当然也要相应增加,第 1 级加法器用 (B+1)位,第 2、 3级用 (B+2)位,第 4 级到第 7 级用 (B+3)位,后面依次类推。这样设计,每一级并没有用考虑溢出结果的最多位的加法器,而是递推增加,可以
11、减少资源浪费。 4.3 优化的累加器设计 将匹配滤波器的乘法器输出数据进行分组,并执行加法运算,第一级的加法器用 (B+1)位,第二级用位,第三级用 (B+3)位,后面依次类推。每一级的加法器数量是前面的大约一半,依几何级数递减,这样的设计在低位相加时用了较多的加法器并以几何级数递减,也就避免了高位相加的资源浪费。 以 63 位 m 序列为例,设有符号补码数为 B 位: 将前 62 位输入分为 2 组, 每一组输入和另一组中相应输入作相加运算, 总共用到 31 个 (B+1)位加法器; 余 l 位输入和 31 个 (B+1)位加法器输出再次分组,用到 16 个 (B+2)位加法器; 16 个
12、(B+2)位加法器输出再次分组,用到 8 个 (B+3)位加法器; 16 个 (B+2)位加法器输出再次分组,用到 8 个 (B+3)位加法器; 8 个 (B+2)位加法器输出再次分组,用到 4 个 (B+4)位加法器; 4 个 (B+4)位加法器输出再次分组,用到 2 个 (B+5)位加法器; 2 个 (B+5)位加法器输出再次分组,用到 1 个 (B+6)位加法器。 63 位累加器占用加法器的比较如表 1 所示。 较优累加器的运算形式是串行,而优化累加器的运算形式是并行。 可以很明显看出, 优化的累加器比较优的累加器更能减少资源占用, 运行效率也可大大提高。 4.4 Quatus 模块化设
13、计法 Quatus 仿真软件的 MegaWizard Plug-In Manag-er 中提供了 parallel_add 模块,用户可以自由设计输入数据位宽,累加数据个数,定义累加输入数据类型,模块最终自动生成适当位宽的数据输出 (考虑了所有的数据溢出 )。 与上面的累加器设计比较,这样的设计很方便,可读性强,程序简练。实际中逻辑单元占用也不是很多,只比上面多出 10左右。所以,如果不是特别关注资源占用问题,这样的设计也不失为一种好方法。 5 仿真实验 笔者通过 Quatus 仿真实验验证了优化数字匹配滤波器的性能。 仿真中采用 Altera 公司的 FPGA,利用 6 级线性移位反馈寄存器
14、生成长度为 63 的 m 序列。 图 3 是数字匹配滤波器的 2 个周期的相关同步过程,图 4 是放大后的相关同步。 在本次仿真中, clk 为时钟信号, address 为地址信号,输入信号为 din,数字匹配滤波器抽头信号为 m。为了方便起见,做了 2 个只读存储器 din_rom 和 m_rom。 din_rom 中存储了 63 bit 的 m 序列的二进制补码表示作为输入,其中 0 表示 11, l 表示 Ol, 16 进制表示分别为 3和 l。 m_rom 中存储了 63 bit m 序列的二进制码元,作为数字匹配滤波器的抽头同步模块的输入。 result 为计算出的相关值, ton
15、gbu 为同步信号。 每来一个时钟脉冲,地址加 1,依次读取 din_rom 中的数据,图 4 中的地址为 10 进制表示。m_rom 地址始终置 “0”,图 3 和图 4 中是 m_rom 中二进制数据的 16 进制表示。 63 级移位滤波器同时做补码运算,当 m_rom 输出的二进制矢量位为 1 时,不改变相应位原补码值,矢量位为 0 时,求其相反数 (-1 的相反数为 1, 1 的相反数为 -1)的补码值。将相关门限设为 63, 当同步未完成时, 相关值信号 result 的 16 进制表示为 FF, 二进制即为 1111lll(1表示正数 );当同步完成时,相关值信号 result 的 16 进制表示为 3F,二进制即为 0111111(0表示正数 )。 每个时钟脉冲,计算 1 次相关系数,并和判决门限比较,高于门限表示完成同步捕获,否则表示没有同步,继续运算,直到达到同步为止。 6 结束语 本文从理论和实践方面分别讨论了数字匹配滤波器在设计中遇到的问题, 仿真实验证明该设计在节省硬件资源和提高工作效率方面都有其突出的优点。 来源:嵌入式在线