摘要:文章介绍了一种基于TI公司的TMS320VC5402来构造指纹识别系统的方法。详细论述了系统的各个组成部分以及指纹识别算法的实现流程,结合VC5402的指令集和自身结构特点,讨论了如何高效的设计应用程序的方法。文章对如何将DSP的主机接口(HPI)改造成通用输入输出口(GPIO)、将多通道缓冲串行口(McBSP)设置成SPI接口进行了详细的说明,对数据图像处理需要较大空间而DSP可寻址的数据空间又过小的矛盾,提出了切实可行的解决办法。
关键词:指纹识别;DSP;混合语言编程
指纹识别技术是以数字图像处理技术为基础,而逐步发展起来的。相对于密码、各种证件等传统身份认证技术和诸如语音、虹膜等其它生物认证技术而言,指纹识别是一种更为理想的身份认证技术。使用指纹识别具有许多优点,例如:每个人的指纹都不相同,极难进行复制或被盗用;指纹比较固定,不会随着年龄的增长或健康程度的变化而变化;最重要的在于指纹图像便于获取,易于开发识别系统,具有很高的实用性和可行性。
1 指纹识别系统的架构
本课题设计了一个嵌入式系统,通过DSP来完成指纹图像的采集和指纹识别的算法。另外为使系统有更广阔的应用领域,在设计上还采用异步串行通讯方式实现了DSP和PC之间的数据交互。据此,系统由指纹传感芯片、复杂可编程逻辑器件、闪烁存储器和UART等硬件组成。系统的结构框图和主要程序流程图如图1和图2所示:
2 系统各部分设计要点
2.1 DSP的选择和存储空间的设计
TMS320VC5402具有很高的性价比,可以访问1M的程序空间和64K的数据空间。内部自带的16K 双寻址RAM,可以在一个指令周期内完成两次读操作或一次读和一次写操作。锁相环电路则可提供高达100MHz的工作频率,从而使VC5402完全有能力在较短的时间内完成指纹的识别操作。
由于指纹图像具有数据量大特点,因此程序的设计不可避免的需要较大的存储空间。系统中所采集到的8bits灰度图像大小为300×256,则存储一幅图像就需要75K的空间,而VC5402可寻址的数据空间范围总共才有64K。为此,可以参照VC5402空间分配结构图,通过程序空间页扩展功能来解决图像的存储和运算问题,运用RPT、READA和WRITA指令完成图像数据在程序空间和数据空间的搬移操作。
图1 系统结构框图
图2 系统主要程序流程图
2.2 指纹采集电路的设计
指纹传感芯片选用Fujitsu公司的MBF200。它由256列×300行电容阵列组成,芯片内设计有两套采样保持电路用于指纹图像的采集。图像传输速度最大可达30帧/秒,能够满足连续指纹图像的采集和比对。MBF200具有手指自动检测电路(AFD),它允许DSP在没有指纹时处在低功耗待命模式,当有手指时才通过中断唤醒它进行相应的处理。然而实验证明,AFD功能的可靠性较差,不能满足设计要求。为此,在设计上采用了手动开关加软件查询方式来判断是否进行指纹的采集。当主机接口(HPI)中的HPIENA管脚通过电阻接地,则系统复位上电后,HPI接口将作为通用输入输出口(GPIO)来使用。将手动开关的输出信号线和GPIO的一个指定的输入口相连接,当要进行指纹采集时,通过开关产生一个输出信号;而系统初始化后DSP不断的查询GPIO中指定的输入口状态,一旦发现状态发生变化,就进行指纹图像的采集。实验证明,这种方式很好的解决了图像采集的问题,提升了系统的可靠性。除此之外,GPIO中其它的管脚可作为输出管脚来使用,用于控制声光报警电路。
2.3 DSP与PC接口的设计
为了充分利用VC5402的片上资源,降低成本。系统中使用MAXIM公司的通用异步串行收发器MAX3111E实现DSP和PC的通信。MAX3111E应用SPI接口与主控制器进行通信,它具有四个RS-232电平转换器,这样无需再接入MAX232进行电平转换,从而应用一个芯片就实现了具有SPI接口的主控器与PC进行异步数据传输的功能。
VC5402的时钟停止模式兼容SPI通信协议。当McBSP被设置成时钟停止模式时,可将发送帧同步信号(FSX)用作SPI协议中/SS,将发送时钟(CLKX)用作SPI协议中SCK;接收串行数据(DR)和发送串行数据(DX)分别作为协议中的MISO和MOSI。由于发送器与接收器在芯片内部实现了同步,所以接收时钟(CLKR)和接收帧同步信号(FSR)不用于SPI模式中。当将VC5402配置为主器件,MAX3111E配置为从器件时,系统中McBSP各个寄存器参数的设置如表1所示:
表1 DSP作为SPI协议主器件时,McBSP的配置信息
需要设置的位 |
所在寄存器 |
功能描述 |
系统所采用的值 |
CLKSTP |
SPCR1 |
禁止或使能SPI模式 |
11b |
CLKXP |
PCR |
控制BCLKX信号的极性 |
0b |
CLKXM |
PCR |
控制BCLKX信号的方向 |
1b |
CLKSM |
SRGR2 |
采样率时钟从CPU时钟中取得 |
1b |
CLKGDV |
SRGR1 |
设定采样率分频系数 |
29 |
FSXM |
PCR |
控制BFSX信号的方向 |
1b |
FSGM |
SRGR2 |
BFSX在每次数据传输时有效 |
0b |
FSXP |
PCR |
控制BFSX信号极性 |
1b |
XDATDLY |
XCR2 |
给BFSX信号提供正确的建立时间 |
01b |
RDATDLY |
RCR2 |
给BFSX信号提供正确的建立时间 |
01b |
RWDLEN1 |
RCR1 |
控制接受数据包长度 |
010b |
XWDLEN1 |
XCR1 |
控制发送数据包长度 |
010b |
2.4 握手信号与程序加载的设计
系统中使用EPM7128SLC84作为全局逻辑控制器件。FLASH用于存储系统的应用程序,当系统复位后,通过Bootloader完成程序的搬移。设计上将FLASH映射到数据空间的后32K处,选用XF来区分是对SRAM寻址还是对FLASH寻址。当系统上电复位后,XF引脚输出高电平,这时FLASH将映射到数据空间中;当程序加载结束后,在系统初始化期间拉低XF信号屏蔽FLASH,从而使SRAM占据数据空间。另外,将MBF200映射到I/O空间的前32K处,使用A15和/IS作为片选信号。在设计上采用原理图形式编写CPLD程序,部分程序代码如图3所示:
图3 CPLD原理图程序
3 指纹识别算法设计概述
原始指纹图像通常含有较多噪声,因此需要进行预处理来改善图像的质量,以便进行特征提取和比对。预处理包括方向图计算、图像增强、二值化及去噪、图像细化及去噪。
由于指纹的纹线具有缓慢变化的特点,在局部通常具有明确的方向性,所以可以利用方向图对图像进行平滑和锐化处理。沿纹线的切线方向对图像进行平滑,以起到连接不应有的间断的作用:沿纹线的法线方向对图像进行锐化,以突出纹线的边缘信息。二值化就是把8灰度的指纹图像变成0和255的二值图像。二值化后的图像通常在脊线上会有白色的斑点,程序上使用种子填充法把斑点去掉。为了进一步压缩数据,需要对二值化图像进行细化处理。细化时应保持纹线的连接性、方向性不变,还应保持纹线的中心基本不变。细化后的纹线会出现搭桥及豁口,因此必须进行细化后的去噪工作。预处理中各步骤的图像如图4所示。
设计中使用纹线端点和分叉点作为指纹特征点,这不仅是因为这两类特征点出现的几率最高且容易检测,更重要的是它们足以描述指纹的唯一性。程序中使用纹线跟踪方法提取特征点,其中纹线端点的属性由横纵坐标和纹线角度来表示;分叉点的属性由横纵坐标,纹线角度和三个分支间的夹角(从大到小)来表示。在提取出指纹特征点后,便会得到一组矢量点,同样在指纹模板库中保存的指纹模板也是一组矢量点,要判断两个指纹是否相同的问题也就转化成判断两组矢量点是否相同的点模式匹配问题。
4 识别算法在DSP上的实现
程序设计上使用混合语言编程,用C语言设计程序中对运行时间影响不大的模块,而用汇编语言设计严格要求实时性的核心算法。为达到最佳利用DSP资源的目的,在程序的设计中要注意以下几个方面:
(1)VC5402指令集中提供了一些零开销的循环指令,如RPT和RPTB等。为进一步提高效率,在执行循环指令时,应充分利用辅助寄存器和累加器。数组尽量用寄存器间接寻址,中间变量尽量存放于累加器中,以尽可能地减少中间变量存放所消耗的时间。
(2)VC5402采用流水线结构,允许多条指令同时访问CPU资源,从而提高系统的执行速度。但当CPU的某一资源同时被流水线的几个阶段访问时,就会发生流水线冲突。因此,必须通过合理的调整汇编程序的代码顺序或加入适当的NOP指令来解决这一问题。
(3)识别算法中涉及到了卷积和乘累加操作,这可以通过使用循环寻址功能和乘累加指令来实现。另外,VC5402提供了可延迟的转移、调用和返回指令。这些指令的执行时间比它们对应的非延迟指令要少2个周期,需要注意的是有时要在延迟指令后插入NOP指令,以保证适当的操作顺序。
(4)在涉及数字信号处理算法时应尽可能地使用DSPLIB库中的函数,因为这些函数均用汇编语言编写,优化程度很高。另外,在C程序中尽可能地采用内联(inline)函数,以便提高代码的集成度。由于采用混合编程方法,因此在程序设计上要严格遵循函数调用规则和寄存器的使用约定。
5 结束语
本系统采用TMS320VC5402完成了从指纹图像的采集到特征匹配的功能,并结合DSP的结构特点和相应的指令详细的阐述了系统硬件设计和程序的优化。实践证明本系统工作稳定、实时性好,具有很强的实用性和指导性。