基于DSP实时相关叠加器系统的的设计

本文作者:admin       点击: 2007-02-01 00:00
前言:
在可控震源地震勘探中,实时相关叠加器是必不可少的重要仪器。它的主要功用是将记录的地震信号与震源的扫描信号在采集现场进行实时相关叠加处理,从而得到可用的地震勘探资料。实时相关叠加器作为一种实时现场数据处理机有两个最重要的指标。一个是数据吞吐率,其二是使用硬件的多少,如何使用最少的硬件而获得最大的吞吐率一直是设计者追求的目标。 

随着电子技术和计算机技术的发展,目前仪器设计人员都倾向于采用数字信号处理器或专用大规模集成芯片作为相关器的核心处理器。采用这类可编程芯片来设计相关器,当核心处理器选定后,设计者的任务就是要选择一种合适的算法,在保证数据吞吐率的前提下,将算法移植到系统中去,并且不失算法的各项性能,成为该设备实际的核心问题。

本系统选用TI公司的TMS320C6713为核心处理器,配合CPLD,SRAM,FLASH等其他外围器件来实现相关叠加器的算法,C6713是一款高性能的浮点DSP芯片,它的时钟频率225MHZ,8ns的指令周期,最大处理能力能够可达到1350MFlops。

系统硬件的总体设计

实时相关叠加器的硬件设计流程见图1。
该系统主要由DSP,CPLD,SRAM,Flash及其他外围器件组成。该系统的工作原理为:采集信号输入时,CPLD作为接口和逻辑控制器件,将所采集到的数据存储在高速的SRAM中,并在采集完一道地震数据后通知DSP准备好。在数据处理阶段,DSP将SRAM中的数据分块取到其内部RAM中,作为相关识别算法的临时数据。其中所外接的Flash用于存放高达32K长的FFT的正余弦表(0~45度正余弦值)以及16~32K字的部分用于存放处理程序。C6713自带的片内RAM和ROM可用于存放经常使用的核心程序和数据。C6713通过RS232接口与上位机的通信,可通过接入一片UART芯片,完成与上位机的数据通信。


相关叠加器的算法实现

在可控震源地震勘探信号的实时相关处理中,用y(n)表示记录信号,用x(n)表示扫描信号,由于地震记录长度一般都很长,参考扫描信号相对要短的多,此时若直接采用时域相关,则需要的运算量很大。若直接采用基-2FFT算法,FFT的运算时间相对也要长的多,也不利于提高数据吞吐率。考虑到地震勘探中相关信号的特殊性,当记录长度比需要输出的相关点数要大得多时,可采用分段FFT法进行信号相关,其方法如下:

设N1为需要输出的相关长度,将长为L的扫描记录y(n)分为每段长为p的J段,则有L=Js,并使N=2k1≥N1+p,这里k1为某一正整数,将x(n),y(n)分为长为N的小段xj(n), yj (n),分法如下:

同时按照循环相关与线性相关的关系,当满足N=2k1≥N1+p时,可由计算循环相关来计算线性相关,因而可用FFT快速计算      。
结合该算法,下面给出了实现该算法的程序流程图。

程序存储空间分配    

对于在PC机上执行算法,是不用考虑存储空间的分配问题的。因为系统有足够的存储空间供使用,而目的存储空间的分配是由操作系统来完成的。但是在嵌入式系统中,虽然也有很小的嵌入式的操作系统可用,然而对于这种需要大量的数据处理的场合,存储空间很少的情况(C6713片内RAM 32K),操作系统根本无法完成存储的分配。所以所有的存储空间的分配都必须手动处理。
编译器在处理分配内存时,对于函数内部的局部变量,存储空间一般在堆栈上生成;用malloc等C函数可以在全局堆栈上动态地分配内存;但是在DSP系统中用这个函数一般避免使用malloc,因为它会把原来很大的一块连续内存区域逐渐地分割成许多非常小而且彼此又不相邻的内存块,影响程序的内存分配。所以对于原先数据空间中比较大的局部数组变量,应该手动为它们分配空间,而不是在堆栈上生成,这样可以保证空间分配的灵活性。
下面是实际的片内存储空间的简单划分:
  VECT 0X0080-0X0100         中断向量
  PROG 0X0100-0X1000         程序段
  SWAP_PROG 0X7e00-0X17FF  程序交换段
  SWAP_DATA 0X1800-0X1FFF  数据交换段
  DATA  0X2000-0X7cFF       数据段
  STACK 0X7e00-0X7FFF       堆栈段
VECT是系统引导以后重定位的中断向量表。程序段是那些必须放在片内的程序部分,主要是涉及硬件接口和c函数的一些初始化代码。相关器算法代码实际是放在片外,但是执行是在片内,这时候要用到程序交换段和数据交换段,数据交换段在仅在算法的某些部分使用到,大多数时候是空闲的。而数据段是可以自由使用的部分,主要的临时数据就是从这里分配的。堆栈段是堆栈数据区。堆栈段和数据段保持相连,这样可以扩大堆栈段的实际容量,即使堆栈超过堆栈段,只要数据段仍有空问,也不会导致真正的堆栈溢出。
  
混合编程和算法优化

现在一般的嵌入处理器都具备有高级的C语言编译器和底层的汇编编译器的功能。TI公司为自己的DSP芯片提供了集成开发环境CCS,该集成环境同时提供了C编译环境和汇编语言编译环境。高级语言编程效率高,可读性好、修改方便。用汇编语言的特点则是编程困难,但是运行速度快,可以直接和硬件设备通信。所以在移植的过程中,采用混合编程的方法。

在相关叠加器算法的实现中,主要的计算量在于对记录信号和参考扫描信号的FFT变换,这一部分可使用汇编语言来实现,具体可调用TI公司的提供的库函数,可以显著的减少算法的执行时间,而在其他部分可采用C语言编程,这样就保证了算法的性能,也降低了算法移植的难度,是一个比较好的选择。另外由于C6713是浮点DSP系列,所以尽量使用浮点数据类型,来减小定点处理的负担;在变量定义及使用方面,C语言把局部变量放在堆栈中,因此访问速度较慢,这里可将这些局部变量放在堆(heap)中,方法是:可将它们声明为全局变量或者static;在函数调用时,由于函数调用往往产生大量代码,尤其是传递结构时,代码堆栈开销很大,注意到DSP为资源有限的嵌入式系统,所以禁止传递结构,对于一些不易修改的结构,采取用常量结构指针来替代。

结束语

本文设计了一个基于DSP的实时相关叠加器系统。在地震勘探中,要对多道数据进行处理,利用该算法,在对一道N=8192点的数据进行处理时,处理时间大约为2.67ms,这样在对1000道地震数据进行处理时时间大约为2.67s,可以保证在下一炮来临之前,将数据处理完毕,这样就保证了对数据处理的实时性,实验证明该系统具有很强的应用价值。

参考文献
[1]刘益成,孙祥娥,数字信号处理. 北京:电子工业出版社,2004.3
[2]季昱等.DSP嵌入式应用系统开发典型实例.北京:中国电力出版社,2005.9
[3]刘益成.实时相关叠加器算法综述.石油物探.1993.3