陈文艺 荣幸 杨辉
摘 要: 为了实现窄带调制信号载波频率的快速准确获取并减少硬件资源消耗,基于FPGA设计一种综合哥兹柔(Goertzel)算法和能量重心估计算法的实时载波频率检测电路。首先,确定频率检测算法实现流程,在Matlab中进行了频谱和能量重心的仿真;接着提出一种低复杂度频率检测系统的硬件实现架构,以8个哥兹柔电路并行运行获取信号频谱,通过查找峰值谱线位置初步估计出信号频率;最后,采用能量重心估计法,精确估计出载波信号的频率。实验结果表明,设计的低复杂度实时频率检测硬件电路在资源消耗上仅为传统FFT方法的[13],测频相对误差小于0.2%,2 048点频谱获取时间仅为103 μs,易于硬件实现,可用于实时准确获取载波频率。
关键词: 载波频率检测; 电路设计; FPGA; 架构规划; 频率估算; 对比分析
中图分类号: TN913.6?34; TP391 文献标识码: A 文章编号: 1004?373X(2020)04?0025?04
Design of FPGA?based circuit for real?time carrier frequency detection
CHEN Wenyi1, RONG Xing2, YANG Hui1
(1. Institute of Internet of Things and IT?based Industrialization, Xian University of Posts and Telecommunications, Xian 710061, China;
2. School of Communication and Information Engineering, Xian University of Posts and Telecommunications, Xian 710121, China)
Abstract: A real?time carrier frequency detection circuit combining Goertzel algorithm and energy barycenter estimation algorithm is designed based on the FPGA, so as to obtain the carrier frequency of narrow?band modulating signal quickly and accurately and reduce the hardware resource consumption. The realization process of frequency detection algorithm is determined, and the simulation of frequency spectrum and energy barycenter is carried out in Matlab. A hardware implementation architecture of the low?complexity frequency detection system is proposed, in which the signal frequency spectrum is obtained by running 8 Goerztel circuits in parallel, the signal frequency is estimated preliminarily by finding the position of the peak spectrum line, and the frequency of the carrier signal is estimated accurately by means of the energy barycenter estimation method. The experimental results show that the designed detection hardware circuit for low?complexity real?time frequency only has 1/3 of the resource consumption as that of the traditional FFT method, the relative error of its frequency measurement is less than 0.2%, and the frequency spectrum acquisition time of 2 048 points is only 103 μs, which is easy to implement and can be used for accurately acquiring the carrier frequency in real time.
Keywords: carrier frequency detection; circuit design; FPGA; architecture planning; frequency estimation; contrastive analysis
0 引 言
随着图像传感器和集成电子技术的发展,光学直线位置编码器中采用了图像检测技术[1]。基于图像传感器的光学直线位置编码器,也称为条码尺,编码结构简单,便于实现绝对位置编码;由于直接对编码的条码图像进行数字化,并用数字信号处理技术提取条码位置信息,极大地提高了检测精度和可靠性[2]。在条码尺定位中,实时准确地获取条码周期(载波频率)是整个条码位置信息提取过程中关键的一步,等效于窄带调制信号的载波频率检测。文献[3?4]分别提出了基于自相关函数相位和分段自相关的信号频率估计算法,在频率检测中具有很高的准确度,但算法仅限于对正弦信号的频率检测,并要求信号具有较高信噪比;文献[5]提出了一种基于自相关法和三点法的信号频率检测法,原理简单,运算量小,频率跟踪性强且不受采样频率的影响,但信号中的谐波分量会大大降低精确度,影响测量结果;文献[6]提出了一种基于结构函数算法的频率检测方法,能够很好判断信号周期,但精度的提高需要牺牲存储资源和运算速度;文献[7?8]先后提出了基于修正Rife算法和能量重心法的频率估计算法,在频率估计性能上比较稳定,但在获取信号的功率谱时,采用FFT运算会增加许多无意义的计算量;文献[9]提出了基于Goertzel算法的信号检测方法,仿真结果表明基于Goertzel算法的信号编解码具有速度快、精度高、运算量少的特点,但没有对Goertzel算法进行进一步的应用。
本文在Goertzel算法的特性基础上,设计了一种综合Goertzel算法和能量重心法的载波频率检测电路。首先介绍了频率检测原理,针对不同的信号模型进行了算法仿真分析,其次给出了频率检测系统的硬件实现架构。通过仿真和测试,表明所设计的电路消耗资源少、测量精度高和硬件执行速度快,并且可以实现资源和速度的灵活配置,符合高性能、高灵活性和低消耗的特点。
1 频率检测原理
对传感器获取的载波信号进行频率检测的算法流程如图1所示。在实际中采集的信号往往伴随着噪声,首先对信号进行灰度形态学滤波来提高信噪比,接着对信号进行自适应阈值二值化,将信号转化为二值图像,即完成了对信号的预处理工作;然后采用谱分析的方法估计出信号频率,借助Goertzel算法对信号进行频谱获取,可粗略估计出信号频率;最后采用能量重心估计算法对信号频谱进行校正,获得高精度的频率估计值。
1.1 Goertzel算法原理
在一些应用中,信号的频谱范围已知。在这种情况下,与其进行完整的傅里叶变换,不如采用Goertzel算法,后者可以极大地减少计算量[10]。首先考虑傅里叶变换的一个单独的频率成分:
[Fu=x=0N-1fxWuxN =x=0N-2fxWuxNN-x+fN-1W-uN] (1)
式(1)等效于一個迭代运算:
[Fu=Fun-1+fnW-uN] (2)
这样仍需要对每个采样点进行一次复数乘法运算,从而在z域内考察此迭代过程:
[Fuzfz=11-2cos2πuNz-1+z-2W-uN-z-1] (3)
式中,第一项可作为一个实系数二阶迭代过程来实现:
[Sun=fn+2cos2πuNSun-1-Sun-2] (4)
经过N个采样点的积累后,可从第二项计算频率项:
[Fu=SuN-1cos2πuN-SuN-2+ jSuN-1sin2πuN] (5)
此过程相当于一个IIR滤波器来处理流水化的数据,包含前馈和反馈两部分。反馈部分必须对每个采样[fn]计算一次,而前馈部分只需在[n=N]时计算一次,在输入[N]个采样点数据后开始给出频率值。当需要计算多个频点值时,可以对每个频点复制电路见图2。
1.2 能量重心估计算法原理
通过Goertzel算法得到信号的频谱,然后通过搜索信号功率谱峰值谱线的位置可实现粗略的频率估计。实际应用中,对信号的频率估计性能有更高的要求,因此在以峰值谱线粗估计的基础上,采用质心算法计算以峰值谱线为中心的区间的质心位置,并以该质心位置作为载波信号精确的频率估计值。设对信号[yn]做[N]点Goertzel变换得到离散频谱[Yk],则信号的功率谱[Gk]为:
[Gk=Yk/N2] (6)
通过逐点扫描功率谱信号[Gk],检测[Gk]中的峰值谱线位置[Pmax]。再以峰值谱线位置[Pmax]为中心,取[2M+1]条谱线作为峰值谱线区间,用质心法计算峰值谱线区间的质心位置,并以该质心位置作为图像信号频率的精确估计值[PP],其中:
[PP=k=12M+1GPmax+k-M-1?Pmax+k-M-1k=12M+1GPmax+k-M-1] (7)
1.3 信号模型与算法仿真
在算法原理基础上,按照频率检测算法的实现流程,以不同情况的条码尺作为输入信号模型,首先用FFT算法和Goertzel算法分别求出信号的频谱;然后采用质心算法,根据求得的频谱算出信号的能量重心。仿真结果如图3~图5所示。
本文结合实际,充分分析了可能出现的3种条码尺情况,包括正常的条码和异常的有缺失的条码。在仿真图中,图a)表示各种情况下的信号模型,图b)表示用FFT求解出的信号的频谱,图c)表示用Goerztel算法求解出的信号的频谱,采用质心算法求出的能量重心值power显示在图b)和图c)的右上方。通过仿真结果可以分析:Goertzel算法针对正常和异常条码都可以准确求取其频谱,在信号频谱的基础上,采用能量重心估计算法可以准确求得载波频率。
2 FPGA硬件实现
2.1 系统设计
频率检测系统的电路如图6所示,主要分为数据缓存模块、频率项计算模块、能量重心计算模块和控制状态机模块。二值图像在双口RAM中完成数据缓存后,通过并行的Goertzel电路计算出信号的频谱,再通过能量重心法求取功率谱的质心位置即可确定信号频率,得到的频率值将送到后续处理电路,整个系统的数据路径均在主控制状态机和辅控制状态机的控制下完成。
2.2 数据缓存模块
数据缓存模块采用了乒乓操作。外部输入数据流通过输入数据选择控制模块送入两个数据缓冲区中,数据缓冲模块采用双口RAM来作为存储单元。在第一个缓存周期,将输入的数据流缓存到数据缓冲区1;在第二个缓冲周期,输入的数据流在缓冲区2完成缓存的同时,输出数据选择控制模块将第一个周期缓存的数据流送到后续处理模块;在第三个缓冲周期,输入数据选择控制模块进行切换,输入的数据流缓存到数据缓冲区1,输出数据选择控制模块也进行切换,将第二个缓冲周期缓存的数据流送到后续处理模块,如此不断循环。
2.3 频率项计算模块
根据频谱计算功能需求分析,设计一套并串结合的数据处理算法,该模块以8个Goertzel硬件电路并行完成8个频点计算,重复串行计算5次,共完成40个频点的计算,相应的控制信号均由主控制状态机产生,计算所需系数被提前存放在ROM中。该模块工作流程见图7。
其基本运算思想为:
1) 上电开始后,预加载信号load拉高,完成一组实部系数加载操作;
2) 电路使能信号enable拉高,Goertzel电路开始并行工作,一次并行运算需进行2 048次迭代操作,在最后一次迭代操作时需将实部系数右移一位;
3) 电路进入暂停状态,将并行运算结果通过多路选择器存放在单口RAM中,同时加载一组虚部系数和下一组实部系数;
4) 在完成一次并行运算和结果的存储后,使电路复位,清零寄存器;
5) 电路进行下一次并行运算,处理过程重复步骤2)~步骤4)操作。单口RAM中最终存储着40个实部值和40个虚部值,进行上述完整运算流程耗费的时钟数为M=5×(2 048+16)+12=10 332。
2.4 能量重心计算模块
能量重心计算电路主要包括功率谱计算模块、峰值谱线计算模块、质心计算模块和辅控制状态机模块,电路结构框图如图8所示。
在辅控制状态机的控制下,功率谱计算模块读取存放在单口RAM中的实、虚部数据,随之计算出每个频点对应的幅度的平方值,即得到了信号的功率谱[Gk,k=1,2,…,40];峰值谱线计算模块通过查找功率谱的峰值谱线位置[Pmax],可以粗略估计出信号频率;质心计算模块是数据处理部分处理核心,首先以峰值谱线位置[Pmax]为中心,取9条(M=4)谱线作为峰值谱线区间[GPmax-n,n=-4,-3,…,4],然后依据质心公式计算出峰值谱线区间的质心位置[PP],最后以该质心位置[PP]作为最后的信号频率估计值[f0]。
3 实验结果与分析
为了评估提出的基于Goertzel算法的频率检测系统硬件架构,本文同时选用Altera自带的FFT IP核去代替Goertzel并行电路来完成频率项计算,从硬件资源消耗、2 048点频谱获取时间和频率求解精度三个方面对两种实现架构进行了对比分析。设计中FPGA采用Altera公司的Cyclone系列的EP4CE30F23C6芯片,该芯片内部资源丰富,可以满足系统需求。采用Verilog语言编程,在Quartus Ⅱ 11.0平台上进行逻辑综合和测试,对比结果如表1所示。
由表1可得:基于Goertzel算法的频率检测系统相对于FFT算法,在保证测频精度和实时性的同时,大大地减少了硬件资源消耗,在逻辑单元数量(LEs)、寄存器数量(Registers)和内部存储资源(Memory bits)三个方面均有明显的体现。同时,系统可以通过增加Goertzel硬件电路的并行数量,来进一步提高2 048点频谱获取速度,因此大大地提高了系统的灵活性。
4 结 语
本文利用流水線技术和串并结合思想,设计了一种基于Goertzel算法的载波频率检测硬件电路。经过验证和分析,相比于传统的FFT算法,在保证精度的同时,采用Goertzel算法极大地降低了硬件资源消耗,且系统达到了设计高速的要求,可适用于窄带信号频率的快速获取,具有一定的实际应用价值。
参考文献
[1] 熊金旺,贾平,刘晶红.利用图像传感器的光电轴角编码器编码研究 [J].测控技术,2009,28(12):6?9.
[2] 齐荔荔,万秋华.高分辨力面阵图像式光电编码器的测角技术[J].仪器仪表学报,2013,34(1):234?240.
[3] 黄超,索继东,于亮.基于自相关函数相位的正弦信号频率估计新算 法[J].电讯技术,2014,54(1):63?67.
[4] 张晓威,李洋洋,孟凡明.分段自相关频率估计算法研究[J].计算机应用研究,2014,31(1):92?94.
[5] 马亚男,戴尔晗,陈诚.一种利用自相关法和三点法检测信号频率的方法[J].微型机与应用,2016,35(14):74?76.
[6] 姜乃卓,陈孝桢.微弱周期信号频率检测的一种改进方法[J].实验技术与管理,2009,26(8):32?35.
[7] 王旭东,刘渝,邓振淼.基于修正Rife算法的正弦波频率估计及FPGA实现[J].系统工程与电子技术,2008,30(4):621?624.
[8] 侯盼卫,杨录.基于自相关检测法和能量重心法的正弦信号频率估计算法[J].科学技术与工程,2014,14(3):97?102.
[9] 陈系玉,张晓晰,哈晓闻.基于GOERTZEL算法的双音多频信号检测与仿真[J].科技信息,2012(28):118?119.
[10] BAILEY D,贝利,原魁,等.基于FPGA的嵌入式图像处理系统设计[M].北京:电子工业出版社,2013.