曾 骏,何剑锋,李卫东,谷 伟,吴昌成,杜志恒
(1.东华理工大学信息工程学院,江西南昌 330013;2.江西省核地学数据科学与系统工程技术研究中心,江西南昌 330013;3.江西省放射性地学大数据技术工程实验室,江西南昌 330013)
随着油田开采、矿洞挖掘、核工业及地质探测等的日益发展,核辐射造成的威胁也在剧增,核辐射的监测与分析是一项重要技术。通过对γ能谱测量并分析可知放射性元素信息[1]。γ能谱仪作为常用的核辐射测量仪器,在核辐射相关工业中发挥重要作用。传统γ能谱仪一般由探头、多道脉冲幅度分析器、记录显示电路3部分组成,记录显示多为PC端与多道脉冲幅度分析器通过串口进行数据交换,体积大且非一体化,不便于携带[2]。随着核科学的发展,越来越多的场合需要可手持的便携式一体化γ能谱仪,如矿洞探测、野外探测等[3],而且,传统γ能谱仪难以满足用户对能谱仪的功耗与续航的需求[4]。ARM嵌入式系统具有高性能、低成本、低功耗及开发方便等优点,QT作为一个跨平台图形界面应用程序开发框架,其具有重用性好、开发方便、API丰富等优点,是嵌入式人机交互开发中的首选。因此,本文设计了一款基于imx6ull/QT的便携式智能γ能谱仪,该能谱仪将数字化多道脉冲幅度分析器与能谱数据处理、记录显示功能均通过一块Cortex-A7内核处理器完成,NaI探头与整机在结构上固定在一起,整个设备具有低功耗、便携性以及人机交互友好等特点,适用于多种复杂环境下核辐射探测。
由于γ射线不能通过肉眼直接观察,要探测只能借助物质与其发生作用产生可采集的信号[5]。
探测器在γ射线的激发下,产生光子,经过光电转换和信号调理后,经ADC采样,可产生具有统计特性的放射性粒子。具体统计特性如下:
具有N0个放射性原子核的放射源在t时间内的衰变总数,服从二项式分布。原子衰变指数规律:
N(t)=N0e-λt
(1)
在0~t时间内,发生衰变的原子核数为
ΔN(t)=N0-N(t)=N0(1-e-λt)
(2)
1个原子核在0~t时间内发生衰变的概率为
(3)
不发生衰变的概率为
q=1-P=e-λt
(4)
在N0很大、P很小的情况下,服从二项式分布的随机变量近似服从泊松分布,其概率函数为
(5)
当m>>1时,泊松分布近似为高斯分布,此时核辐射数据近似看作如下函数的连续性随机变量:
(6)
对统计特性的放射性粒子采集并做记录与显示,持续一段时间后,可得到含有近似高斯分布的谱峰的能谱图,对能谱图进行处理与分析,即可测量核辐射的相关数据。
γ能谱仪的系统设计如图1所示,该能谱仪分为探头部分和ARM嵌入式系统部分。探头部分采用NaI闪烁体探测器,探测器的晶体与辐射相互作用产生微弱的光脉冲信号,经过PMT转换为电脉冲信号,再通过信号调理电路等一系列处理后形成近似指数衰减的脉冲信号供ADC采集,高速ADC与FIFO缓存器相接,FIFO与IO口相接。ARM嵌入式系统部分由imx6ull处理器及外设组成,imx6ull是基于Cortex-A7内核的处理器,性能强且功耗低,该CPU用于实现数字化多道脉冲幅度分析与记录显示等功能。整个系统可用于野外、矿洞等复杂环境下的核辐射探测。
图1 系统总体架构
作为数字化能谱仪,其硬件设计远比基于模拟电路设计的能谱仪简单。本系统的功能基本在imx6ull处理器片内完成,主要功能设计通过软件算法实现。所以片外的硬件非常简单,基本只有引出的I/O、高速ADC、FIFO存储器、LCD屏以及一些电源电路以及信号调理电路。其中,ADC用于核脉冲信号采集,FIFO存储器作为ADC与IO口之间的桥梁,用于协调高速ADC与速率较低IO口间的数据传输,以实现ARM高速采集接口满足数字化多道采样速率要求。LCD屏用于人机交互。
能谱仪基于ARM-Linux系统在ubuntu14.0下进行软件开发,开发方式为交叉编译。
由于系统启动时需要通过Bootloader来完成,即先在uboot官网下载源文件后进行修改、配置、编译等操作后得到u-boot.bin文件,通过烧写软件将bin文件烧写到EMMC的指定地址[6]。
接下来的步骤为Linux内核移植,将NXP的内核源码下载后根据实验平台进行配置、修改、裁剪,通过make编译生成zImage内核映像文件,将映像文件烧录到EMMC指定位置。
根文件系统采用busybox构建,开发阶段采用NFS挂载根文件系统,根文件系统构建后就有一个可以运行的最小系统。实验程序编译成模块的形式放置根文件系统的目录内,采用装载和卸载.ko文件的方式实验,不用重新编译内核,方便修改和测试。
通过前面的配置搭建了一个最小可运行系统,但是一个完整的嵌入式系统还需要可视化人机交互界面。QT作为一个跨平台的C++开发库,应用在可交互人机界面开发中,最后的环境搭建工作是QT5.12的移植,此项目对QT5.12源码修改、配置后编译并移植到根文件系统中,完成项目开发环境的搭建。
2.3.1 ADC驱动
ADC作为一种常见的字符设备,其开发严格遵循字符设备驱动框架。驱动程序作用是获取硬件数据及与应用层互传数据,设计一个驱动程序同时需要设计一个应用程序,应用程序通过API接口经系统调用进入内核,访问驱动程序以控制硬件,具体过程如图2所示。本设计严格按驱动框架编写ADC的驱动入口出口函数以及file_operations结构体里面的驱动层程序。驱动程序设计完成通过编写Makefile文件生成ADC.ko驱动文件。由于Linux以文件的形式存储及管理,通过modprobe加载驱动后驱动设备的表现就是生成/dev/目录下的相应文件,应用层通过操作文件就能获取数据。与ADC相接的FIFO存储器视为特殊文字符设备,其驱动方式与ADC类似。
图2 Linux内核工作流程
2.3.2 触摸屏驱动
Linux系统通过帧缓冲接口对显示缓冲区进行读写,即应用程序通过访问/dev/fbX设备就可以访问LCD。由于NXP在Linux内核中已经写好了驱动程序,所以触摸屏驱动方式为配置好内核和设备树使/dev/目录下生成/dev/fb0文件,并移植tslib等数据库,不需要编写驱动程序,只需编写应用层程序即可控制LCD屏。
应用层基于QT平台并以C++语言进行开发,先初始化Ui及数据库,完成一些布局工作及核数据库的建立。再设置测量时间,设置完成后通过触摸按钮开始测量,当测量时间到自动停止测量。应用程序采用多线程技术开发。子线程每s读取一定的ADC数据并保存至内存中,进程实时读取内存中1 s内ADC采集到的指数衰减脉冲信号,并做梯形成形、基线估计、堆积判弃、幅值提取、谱数据存储等处理,Ui界面实时显示当前时间并道后每道对应的计数,并清空内存中的ADC数据继续接收下1 s内ADC采集的脉冲,当测量时间到达,停止测量并退出子线程,以及得到了相应的能谱。接下来可以依次对能谱进行平滑、去本底、寻峰、能量刻度、核素识别等操作。应用程序的工作流程如图3所示[7]。
图3 应用程序架构
3.1.1 梯形成形算法
为了提高信噪比以及方便幅值提取等,需对脉冲信号梯形成形,具体算法如下:
探测器输出的核脉冲信号经过光电转换、信号调理后,可近似看作单指数衰减信号[8],它的表达式为
Vi(t)=Vmaxe-t/τu(t)
(7)
式中:Vmax为核脉冲信号的最大幅值;τ为信号衰减时间常数;u(t)为单位阶跃函数。
令t=nT,其中T为采样周期,得脉冲序列表达式为
Vi(t)=Vmaxe-nT/τu(t)
(8)
令e-nT/τ=d,对式(7)进行Z变换得:
(9)
文献[9]对梯形成形算法做了详细推导。理想梯形函数的分段函数表示如下:
(10)
令ta=naTs、tb=nbTs、tc=ncTs,对式(10)进行Z变换得:
(11)
从而得整个算法的系统传递函数:
(12)
对H(z)做逆Z变换得:
vo[n]=2vo[n-1]-vo[n-2]+{vi[n-1]-vi[n-na-
1]-vi[n-nb-1]+vi[n-nc-1]-d[vi[n-2]-
(13)
式中:vi为输入的指数衰减信号;vo为算法处理后输出的梯形信号;na、nb、nc参数调节可以改变梯形形状。
在Matlab下对以上成形算法进行仿真,结果如图4所示,最后将此算法用C++编写并在嵌入式平台运行用于处理ADC采集的核脉冲信号。
图4 梯形成形算法仿真
3.1.2 基线估计
由于核脉冲信号的值叠加了一定的基线值,造成能谱基线漂移[10]。基线估计是为了得到基线值并扣除以获取更精确的脉冲信号。本文采用的基线估计方法是在梯形上升沿来临前随机取若干个点,取这些点的平均值作为基线值。
3.1.3 堆积判弃
核脉冲信号的触发具有随机性且核脉冲信号在时域上具有一定的时间宽度,当核脉冲信号速率足够快时,堆积脉冲将会越来越多[11]。当脉冲堆积发生时,信号的幅值发生变化,幅值的变化必然使对应道址计数发生变化,当脉冲堆积过多,能谱图将发生明显改变,导致能谱测量效果极差,因此需要对堆积脉冲进行判弃。本文采用的堆积脉冲的处理方法是对梯形成形后的信号改变na、nb、nc的值调节成三角成形,三角形的上顶点即为峰值,对峰值间的时间进行测量和判断,如果小于某个阈值判定此脉冲发生堆积,即舍弃这个脉冲,这样虽然使脉冲总计数值变少,但是由于脉冲发生堆积是均匀随机分布的,能谱峰型特征整体上不会发生明显变化,对于计数值的减少进行一定的计数补偿即可。
3.1.4 幅值提取
由于梯形成形后的信号平顶的值不是水平的直线,而是上下抖动的直线与噪声混合的信号,所以不能随机采样单个点的值视为该脉冲信号的幅值。幅值提取方法采用对每个梯形平顶依次采样多个点的值并取平均值,这个值就认定为成形后的脉冲峰值。由于峰值是叠加了一定的基线,将此峰值减去估计的基线值即为提取到的脉冲幅值。
3.1.5 谱数据存储
谱数据存储采用sqlite数据库的方式存储,由于显示界面是512道,12位ADC共4 096道,所以对幅值提取的数据先进行并道处理,再按并道后道址对应计数依次存储在sqlite数据库中。系统数据库中的表格以行与列形式存储,表格的对应存储格式如图5所示。
图5 数据存储格式
3.2.1 能谱平滑
由于测得的能谱带有噪声,为了提高信噪比,需要对能谱平滑处理。采用五点三次平滑法,方法基于最小二乘法的思路[12]。数学公式如下:
(14)
式中:m为道址;Ym为光滑处理后m道址计数;ym为原始道址计数。
3.2.2 能谱寻峰
能谱寻峰方法是根据特定条件选择最适合的寻峰方法。本文针对便携式设备,寻峰方法一般要求计算简单和速度快,采用二阶导数法寻峰,并加入幅度阈值和斜率阈值对峰进行筛选,以更精准寻峰。
3.2.3 本底扣除
对核素进行定量分析时,存在天然本底计数和宇宙射线等干扰因素,需对能谱进行本底扣除。由于实验所用探测器及周围环境本底很高,扣除本底前难以寻找弱峰,在寻峰之前进行本底扣除。考虑便携式设备性能及应用场合等情况,采用全谱直接本底扣除法,先直接测量自然环境下的本底数据并保存,测量含放射性的能谱数据时将测量数据减去本底数据[13]。
3.2.4 能量刻度
能量刻度是用函数关系式来拟合峰位能量与所测道址,为了更精确的能量刻度,采用优于线性拟合的二次多项式进行拟合:
E=ax2+bx+c
(15)
式中:E为能量;x为道址;a、b、c为系数。
3.2.5 核素识别
核素识别指对能谱进行定性分析,即核素种类的分析。核素识别的方法中,有的方法识别准确,有的方法速度快、效率高。由于文中以低功耗、便携性为原则,采取的方法在保证准确度的前提下尽可能的简单高效,通过参考大量文献的核素识别方法并结合设备具体情况,决定采用能窗法作为核素识别方法。具体步骤如下:
先将峰位的道址转换为能量刻度后对应能量:
EP=ax2+bx+c
(16)
式中EP为峰位能量。
再将每个峰对应能量依次与核素库中的能量Eγ进行遍历对比,若满足|EP-Eγ|≤WE,就视为可能存在Eγ对应的核素。WE为能窗宽,能窗宽随能量值变化,能窗宽设定公式为
WE=A+BEP
(17)
式中:A、B为系数,根据实际探测器决定,通常A=6.000,B=0.025[14]。
图6为测量Eu-152、Cs-137、Co-60混合放射源并进行并道处理至512道后所得到的γ射线能谱图,能谱显示清晰,界面友好,y轴对应计数刻度随测量时间自动增长。
图6 能谱测量与显示
通过测量峰位及对应道址并做记录,如表1所示。
表1 部分峰位能量及道址
采用二次多项式最小二乘法拟合处理表中的数据,得到能量与道址的函数关系式:
E=0.000 874 469X2+5.697 89X-0.025 434 1
(18)
函数关系式对应的拟合曲线如图7所示。
图7 能量刻度拟合曲线
再通过计算刻度偏差对能量刻度的效果做评估,刻度偏差计算公式为
(19)
式中:δ为刻度偏差;EX为X道址对应的能量;E为刻度公式计算的能量。
通过已知峰位能量计算刻度偏差,见表2。由表2可以看出,刻度效果良好。
表2 刻度偏差
在核素识别过程中,先测得空本底数据在能谱测量区间的分布并保存至RAM中,测得的Eu-152、Cs-137、Co-60混合放射源数据采用全谱本底扣除法逐道减去本底数据,得到去本底后的能谱,然后进行寻峰得到如图8所示结果。接着对寻峰后的能谱图进行能量刻度并以表格的形式在LCD屏上显示,如图9所示。然后将刻度能量与核素库中的能量进行一定窗口大小的匹配,对匹配结果以QTableView显示,得到图10所示结果。从图6~图8可以看出,38道、58道、60道存在平滑效果局限性和能量刻度误差及去本底误差等因素造成的假峰及核素误识,Cs-137的单强峰和Co-60的双弱峰均被找出,Eu-152也有峰被找出。
图8 寻峰效果显示
图9 能量刻度结果
图10 核素识别结果
本文开发了基于imx6ull的智能γ能谱仪,仪器设计新颖、使用方便、体积小、功耗低且便于携带,可应用于野外等恶劣环境的核辐射探测。在使用性能上,对单源、混合源、强峰、弱峰都有很好的识别效果,且有基于QT开发的友好人机交互界面,同时移植了Linux操作系统良好的管理任务及资源,满足了便携式γ能谱仪的要求。