基于TMS320C6678的复数求模算法研究

2018-10-11 03:34袁子乔
火控雷达技术 2018年3期
关键词:信号处理复数向量

杨 刚 杜 力 袁子乔

(西安电子工程研究所 西安 710100)

0 引言

TMS320C6678[1](后文中简称C6678)是TI公司于2010年推出的一款具有业界领先处理能力的多核DSP处理器,其采用的是KeyStone多内核架构,片内集成了8个C66x核,每个核都具有定点和浮点运算能力,同时也集成了SRIO(Serial RapidIO),PCIe(Peripheral Component Interconnect Express)等接口,为方便数据的搬移,配置了EDMA(Enhanced Direct Memory Access)。TI公司也为开发人员提供了C6678的mathLib,dsplib等函数库。

得益于C6678强大的并行处理能力和接口的高速数据传输能力,其在信号处理领域应用极其广泛,特别是雷达信号处理领域,过去的FPGA+DSP的架构中,大部分的计算(如DPC算法[2],MTD算法[3]等)是在FPGA中完成,但FPGA调试效率极低,严重地降低了雷达信号处理机调试的效率。在C6678出现后,现在越来越多的雷达信号处理算法从FPGA迁移到了DSP中完成,极大地提升了雷达信号处理机的调试效率。然而,雷达信号处理中许多数据都是复数形式的,需要进行大量的复数求模,而传统的复数算法效率极低,严重地影响了整个信号处理机的效率,因此,对C6678中复数求模算法进行优化有着重要的意义。

本文所有内容是针对TMS320C6678进行探讨,考虑到实际情况中一般是对复数向量求模,所以本文的测试数据是一个复数向量,所讨论的每个复数对应的求模时间为复数向量的求模时间除以向量长度。所有测试中,测试数据和所求结果都在LL2中,L1D cache大小为32kB,L1P cache大小为32kB,L2 cache大小为0,编译器优化选项为-O3,测试结果以MTALAB作为“真值”进行误差分析。

1 常规的复数求模算法

1.1 第一种常规的复数向量求模算法vec_abs1

常规的复数求模公式很简单,先求实部虚部平方和,然后再调用math.h中的sqrt函数求平方根,这是最“正规”的也是效率最低的,事实上TI针对自身DSP提供的dsplib中的sqrtsp函数性能优于sqrt函数,所以用sqrtsp代替sqrt。因此得到第一种常规的复数向量求模算法的程序如图2所示。

1.2 第二种常规的复数向量求模算法vec_abs2

TI分别针对C6200,C6400,C6600等提供了许多Intrinsic操作符,这些操作符默认是内联的[4](Inlined),利用这些操作符对复数向量求模算法优化,主要是对取数和乘法进行优化可以得到第二种常规的复数向量求模算法。其中,用到的Intrinsic函数及含义如下:

1) const double & _amemd8_const (const void *ptr); 从存储器中读取8字节数据。

2)double _complex_conjugate_mpysp (double src1, double src2); 复数共轭乘法。

3) float _lof (double src); 从double中提取低位float。

4) float _hif (double src); 从double中提取高位float。

第二种常规的复数向量求模算法程序如图3所示。

1.3 第三种常规的复数向量求模算法vec_abs3

TI提供的dsplib中包括了许多向量、矩阵的处理函数,效率很高。考虑到复数向量求模需要计算很多次的实部与实部的乘法,以及虚部与虚部的乘法,所以调用dsplib中的向量乘法函数DSPF_sp_vecmul,从而得到第三种常规的复数向量求模算法,程序见图4。

经过实验对比发现,常规方法中,第三种效率最高,第一种次优,第二种最差。第三种的测试结果如表1所示。

通过表1可以看出,虽然第三种常规复数向量求模算法相对于第一种和第二种效率更高,但每个复数点平均耗时仍然约为62个时钟周期,对于信号处理来说,效率还是很低,不过,因为是最基本的实现方法,所以该方法精度很高,最差的最大绝对误差百分比为5.564378038394069e-07。

表1 第三种常规复数向量求模算法测试结果

2 RSQRSP指令vec_abs_noitr

表2 利用RSQRSP指令的复数向量求模算法测试结果

通过表2可以看出,利用RSQRSP指令进行复数向量求模,效率极高,每个复数点平均耗时为2.72119~5.3125个时钟周期,而vec_abs3中每个复数点平均耗时约62个时钟周期,所以vec_abs_noitr相对于vec_abs3效率提升11.6706~22.7841倍。

从表2中的最大绝对误差百分比可以看出该算法精度较低,仅可用于对精度要求不高的计算中。

3 利用牛顿迭代的改进

x(n+1)=x(n)[1.5-(ν/2)×x(n)×x(n)]

(1)

其中,v为原始数据。每迭代一次精度提高2-8,也即迭代一次精度为2-16,迭代两次精度为2-24。

进行一次Newton-Phapson迭代的复数矩阵求模算法vec_abs_1itr的程序如图6所示,测试结果如表3所示。

表3 一次Newton-Phapson迭代的复数矩阵求模算法测试结果

通过表3可以看出,利用Newton-Phapson迭代一次后每个点平均耗时为9.0703125~13.59375,时间较vec_abs_noitr有所增加,但相对于vec_abs3来说,效率还是提升了4.5609~6.8355倍,而最大绝对误差百分比已经达到了约1.5e-5,该精度可以满足大多数的信号处理算法。

进行二次Newton-Phapson迭代的复数矩阵求模算法vec_abs_2itr的程序如图7所示,测试结果如表4所示。

通过表4可以看出,利用Newton-Phapson迭代二次后每个点平均耗时为16.0698~20.5625,时间较vec_abs_1itr有所增加,但相对于vec_abs3来说,效率还是提升了3.0152~3.8582倍,对比表4和表1中的最大绝对误差百分比可以看出,vec_abs_2itr的精度和vec_abs3几乎一致。

4 结果分析

由前述的测试结果可以得出,常规算法中,利用sqrtsp的vec_abs3精度最高,但效率最低;而单纯利用RSQRSP指令的vec_abs_noitr效率最高,但精度最差;通过Newton-Phapson迭代一次vec_abs_1itr精度精度较差,效率较高;通过Newton-Phapson迭代二次vec_abs_2itr精度精度最高,效率较差。这四种算法的特点如表5所示。

5 结束语

本文针对TMS320C6678研究了信号处理领域经常使用到的复数求模算法,包括最基本的常规复数求模算法,利用RSQRSP指令的复数求模算法,以及利用RSQRSP指令的基础上通过Newton-Phapson迭代一次和二次的复数求模算法,并给出了各种算法的测试结果,分析了各种算法的效率和精度,测试结果对信号处理设计师有很重要的参考意义。

猜你喜欢
信号处理复数向量
专题征稿启事
——信号处理
包装过程称量信号处理方法研究
向量的分解
评析复数创新题
单数和复数
求解复数模及最值的多种方法
数系的扩充和复数的引入
聚焦“向量与三角”创新题
向量垂直在解析几何中的应用
向量五种“变身” 玩转圆锥曲线