作者:王卫兵, 朱秋萍 , 徐心毅, 戴加良, 刘克刚
(武汉大学电子信息学院, 湖北武汉430072)
摘 要: 针对Goertzel 算法的计算结构硬件实现效率低等问题,提出了利用两个FIR 滤波器实现Goerztel 算
法,并且将改进后的计算结构由原来的AR(2) 过程推广到一般的AR( p) 过程. 改进后的计算结构避免了递推运算,
能够预确定数据的动态范围进行定标,充分利用了DSP 等信号处理器的硬件结构,适合定点处理器的编程. 通过在
定点DSP 处理器TMS320C5510 上进行软件仿真,测试结果表明改进计算结构后算法的效率是改进前算法效率的
3. 7 倍.
引言:
在双音多频( dual tone multi f requency ,DT2MF) 等应用场合,只关心信号中的为数不多频点信
息,Goertzel 算法是一个经常被采用的高效算法. 该算法一次只计算一个频点的傅里叶分量,当系统只
关心频带内部分频率的信号时,相对于FF T 等算法,使用Goertzel 算法可以取得更高的计算效率[1 ] .
经典的Goertzel 算法在实际应用中存在着3 个缺陷[ 2 ,3 ] .
①由于该算法存在着输出对输入的直接
反馈,因此不能够直接计算给定输入时输出数据的动态范围. 使用定点处理器实现算法时要先通过理
论的方法或统计的方法确定输出的范围,以保证算法的结果不会溢出. ② Goertzel 算法的结构实际上
是一个IIR 滤波器,它的递推运算结构不能充分利用已有的硬件资源. 现代高速数字信号处理器内部
都集成了常用算法的运算结构单元,比如乘法累加单元,它可以有效的实现FIR 型的滤波器运算. ③
Goertzel 算法的计算结构不能使用块处理算法或流水线等技术在FPGA 上的硬件实现.
目前,Goertzel 算法在DTMF 等需要解调有限频率点的应用场合得到了广泛的应用[4 ,5
] ,但是他们
都是利用Goertzel 算法的直接实现结构[6 ] ,存在实现效率不高的问题,限制了高速应用[7 ] . 该算法存在
的问题是使用了递推计算结构,本文提出的Goert2zel 算法的改进计算结构避免了递推运算,提高了算
法的效率,可以充分利用各种信号处理器的硬件结构,更适合于工程应用.
实验结果和分析:
在一水声通信系统中,采样频率f s = 100 kHz
,系统前端带通滤波器带宽15~19. 5 kHz ,计算时使
用10 ms 内的采样样本即1000 点样本. 使用Matlab计算出am的值域,记为A ,如图4 所示. 从图3 中可
以推导出在所给系统参数下am 的范围在( - 2 ,2) ....
结 论
本文提出的计算结构改进了经典Goertzel 算法的计算结构,大大提高了计算效率. 通过上面的分析
可以得出下面的结论:
①算法是以存储空间来换取计算效率的提高.这是时间关键而存储空间不是瓶颈的应用场合常用
的一种提高计算效率的方法.
②算法通过数据的重新组织大大简化了计算结构. Goertzel 算法中含有加、减、乘和复数运算,改
进后的算法只包含有加法和乘法的运算,便于使用硬件实现. 这实际上仍是以存储空间的代价换取的.
③核心算法的优化在实时系统开发中占有重要地位. 定点处理器一般都要求核心算法采用定点
运算,并采用最适合于硬件的计算结构. 另外对本算法继续使用汇编进行优化,进一步减小运算时间.