大多数接收机必须处理动态范围很大的信号,这需要进行增益调整,以防止过载或某级产生互调,调整解调器的工作以优化工作。在现代无线电接收装置中。可变增益放大器是电控的,并且当接收机中使用衰减器时,他们通常都是由可变电压控制的连续衰减器。控制应该是平滑的并且与输入的信号能量通常成对数关系(线性分贝)。在大多数情况下,由于衰落,AGC通常用来测量输入解调器的信号电平,并且通过反馈控制电路把信号电平控制在要求的范同内。
2 系统总体设计
在本设计中,前端TD_SCDMA的射频信号RF输入后,经过MAX2392零中频下变频解调后进行增益处理。VGA输出的信号经过ADC变换后就成为数字中频信号,经RSP(接收信号处理器)处理输出为IF数字信号。IF信号可以经过AGC控制算法处理后控制VGA的增益。AGC增益控制算法在数字部分来实现,在本设计中,AGC电路可以有效提高链路的动态范围(+25~-105 dBm),提高ADC输出的SNR,以使DSP能更容易地实现Dw-PTS同步。AGC在系统中的位置如图1虚线框所示:
3 AGC系统的FPGA实现
根据AG
3.1 数据干路模块
从RSP接口来10位二进制补码数据I1和Q1,与求指数模块传送来的预放大增益GAIN2相乘后所得出的数据(仍取10位二进制补码数据)将要传送到CIC平均模块,同时要分别与求指数模块传送来的放大增益GAIN3相乘,然后采取截短处理,取8位二进制补码数据,I1′,Q1′,输出到DSP 中。
3.2 计算下行同步码功率(SYNC_DL)模块
计算下行同步码功率(SYNC_DL)模块对应于图2中的判断部分,是AGC中最为重要算法计算。TD_SCD-MA每个帧有6 400个码片,在其一帧5 ms的时间上是不连续的,因此只能求出下行同步码(SYNC_DL)的功率值,以此为依据控制VGA的电压值。
由图3的TD_SCDMA的帧结构知道,下行同步码(SYNC_DL)在下行导频时隙(DwPTS)发射,SYNC_DL的长为64个码片,在其左边和右边各有32和96个码片的保护时隙(GP)。为此,在FPGA中共用了3种不同的方法计算其功率值。
方法一在FPGA内根据检波法的原理计算下行同步码64个码片的功率(AGC模块图2中的dcmt部分)。考虑TD的帧结构,保护时隙GP的功率很小,故从接收功率的时间分布上来看,与GP相比SYNC_DL段的功率较大。当用SYNC_DL段的64码片之和除以SYNC_DL前后个32个码片相加之和,结果大于3时,就可以判断出SYNC_DL的大致位置。因此,基于这种方法,FPGA在5 ms的周期中遍取6 400个码片,每64个码片做积分,依次向前滚动计算,同时做除法运算,最后即可计算出SYNC_DL在一帧6 400个码片中的位置和能量,以此控制VGA的电压和后续的计算。不过这种方法只有在信号质量很好,信号强度比较大的时候才计算准确。
方法二由DSP方根据传过来的数据,通过相干检测法检测出SYNC_DL的精确位置,并把这个位置参数传送给FPGA。FPGA收到这一点的位置后,立既停止使用其自身检波法求出的功率值,根据DSP传过来的SYNC_DL的位置,计算出这一点之后的64个码片的积分值,作为SYNC_DL的总功率,并以此控制 VGA的电压(AGC模块图2中的dwpts部分)。这时求出来的总能量比较精确(DSP提供的位置比FPGA自身检波法求出来的精确),但是速度比较慢。
方法三当信号的强度变得很弱,信号可能淹没在了噪声当中。这时无论是由FPGA的检波法还是DSP的相干法都计算不出SYNC_DL的位置和能量。在这种情况下,认为在5 ms时域上信号连续,能量均衡,FPGA求5ms帧的平均值,以此作为SYNC_DL的功率,并控制VGA(AGC模块图2中的CIC部分)。
3.3 求对数运算模块
在本模块,将上面得到的功率值进行求对数运算,以减少数据的运算量。用FPGA实现求对数运算时,可以先将数据归一化在1~2之间,然后通过将数据平方后推导出最高位的方法逐位求出所求数据的二进制数值。假定自变量X归一化在区间[1,2]内,用二进制数据可表示为1.X1X2…Xn,则所求的对数值在区间[0,1]内,用二进制数据可表示为0.Y1Y2…Ym,因而可用数学方法表示为20.Y1Y2…Ym=1.X1X2…Xn,问题归结为求 Y1Y2…Ym。将上式左右两边同时平方,可以得出2Y1Y2…Ym=(1.X11X21…Xn1)2,由此可推倒出Y1来。(X为已知,若等式右边数据小于2,则Y1=0;反之,若大于或等于 2,则Y1=1)求出Y1后可以导出20.Y2Y3…Ym=1.X11X21…Xn1,同理可推倒出Y2。依此类推,可求出对数值的各位。
进行FPGA设计时,可以设计出一个平方比较单元依次求出对数值,同时要注意需要耗费的系统资源。
3.4 求指数运算模块
经过求对数模块后,一路数据传送到IIR中,另一路数据则要传送到DSP中进行算法运算,因此,需要增加一个求指数模块,将对数模块运算后的结果还原成原来的数据送到DSP中。指数换底公式可知:2x=ex1n2,由双曲函数定义及特性可知:ex=sinh(x)+cosh(x),而当自变量x在 [-π/4,7c/4]范围内时,可以采用FPGA的IP CORE(CORDIC算法)实现双曲正弦函数和双曲余弦函数,因此在FPGA内部求以2为底的指数函数时,可以先将自变量归一化在[0,1]内,然后将自变量乘以常系数1n 2,由于ln 2<π/4,故可以新乘得的数据作为新的自变量,利用IPCORE求出其双曲正弦函数和双曲余弦函数后将其相加,即可得到所需要的指数函数值。
3.5 IIR反馈模块
IIR反馈模块包括3部分:IIR滤波单元、饱和反
3.6 CIC平均模块
当AGC用于WCDMA系统时,可以将图2中的判断部分全部去掉,加入这个CIC平均模块。CIC平均模块负责将预放大模块求出的I1和Q1作为自变量,通过功率算法P1′=I1*I1+Q1*Q1求出P1′,然后将6 400个工作频率为1.28 MHz的P1′平均,得出工作频率为1.28 MHz的P1。同样得出P2后再求出P1+P2。
在FPGA中对于相加运算,包括CIC实现部分的纯整数相加算法和其他部分的小数相加算法。其中CIC运算部分的运算数据是二进制10位有符号数;对于相乘运算,包括CIC实现部分的纯整数平方算法、CIC实现部分的常系数小数相乘算法。
4 结 语
以上介绍的在FPGA中实现AGC的算法,经过项目的验证测试,效果比较好,DA选用ADS的5621,VGA电压调节范围在0.3~1.8 V之间,共45个dB的调节范围,因此AGC在+10~-35之间起调节作用,信号低于-45 dBm时,VGA电压保持1.8 V最大值;高于+10 dBm时,VGA电压保持在最小0.3 V。经过测试,FPGA可在+25~-105 dBm范围内搜索到SYNC_DL的位置。
此种AGC算法,计算相对简单,运算速度快,不仅可用于TD_SCDMA信号,在计算下行同步码能量时稍加改动,只做CIC平均运算,即可应用于WCDMA信号。