于基单片机的指纹识别系统设计大学毕设论文Word格式文档下载.docx
《于基单片机的指纹识别系统设计大学毕设论文Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《于基单片机的指纹识别系统设计大学毕设论文Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。
传统的电子密码锁等设备在高速发展的科学技术的冲击下显得力不从心,用户隐私很大程度上存在泄露的风险。
由于每个人的遗传基因不同,指纹也不相同,指纹识别技术的作用也因此越来越受到人们的重视。
指纹是人身体上的一部分,是人所固有的生理特征,不用记忆,也不存在忘带的风险,而且每个人的指纹形状终身不变。
所以指纹作为个人身份的标记是再合适不过的了。
1.2国内外研究现状
早期的指纹识别是以人工的方式进行的,由于指纹结构的复杂性以及对指纹识别要求的严格性,导致人工识别指纹工作难度大、速度慢和识别准确率受到制约,远远不能适应实际工作的需要。
计算机技术的诞生与发展,为复杂的科学计算和指纹自动识别提供了可能,20世纪70年代,美、日等发达国家开始先后研究指纹识别系统。
我国自动指纹识别系统的研究开发始于20世纪80年代,北京大学信息中心、清华大学自动化系、北京邮电大学、中科院以及长春光机所等都在此领域做了一定的工作,且取得了一定的成果,其中较为突出的是清华大学自动化系和北京大学信息中心两家[1]。
当然,与国外发达国家相比,我国在自动指纹识别技术的研究上还与之存在很大的差距。
指纹录入设备的质量不够高,自动指纹识别算法的性能还不够好。
加强这方面的研究还是很有必要的。
2指纹识别的基本原理
2.1指纹图像的采集
人的皮肤由表皮、真皮和皮下组织三部分组成。
指纹指的是表皮上突起的纹线,有斗型、弓型和箕型三种基本类型。
获得良好的指纹图像是进行指纹识别的前提,目前光获取指纹图像的方法主要有光学技术、硅技术(CMOS技术)和超声波技术。
本设计中使用的指纹传感器基于硅技术,硅技术的优点是可以在较小的面积上获得较好的指纹图像(相对于光学技术),缺点是容易受到外部条件的干扰,可靠性相对较差。
2.2指纹图像预处理
图像预处理阶段是指纹识别的第一个阶段,图像预处理阶段比较典型的过程主要有图像质量评估、分割、增强、二值化和细化。
指纹图像预处理的流程图如图2.1所示。
图2.1指纹图像预处理的流程图
图像质量评估的目的主要是完成对传感器采集到的指纹图像的总体质量评价,对于
低质量的指纹图像直接拒绝。
对于质量达到要求的指纹图像才送给之后的处理环节,从
而避免了不必要的运算。
分割的目的是将前景与背景分割开来。
分割操作中应该尽可能去除无效区域,保留有效区域。
有了分割操作,指纹图像预处理的时间可以大大缩短。
增强的目的主要是为了消除噪声的干扰,提高指纹图像纹线结构的清晰度。
Gabor滤波的方法是一种比较理想的指纹图像增强算法,Gabor滤波器可以同时在空间域和频率域上获得最佳的分辨率,具有良好的方向选择性和带通性。
二值化是将原来的灰度图变换为黑白两种灰阶的图像,二值化阶段阈值的选择相当重要,阈值的选择有双峰法、P参数法、大津法(Otsu法或最大类间方差法)、最大熵阈值法和迭代法(最佳阈值法)等。
细化阶段主要是将二值化之后指纹图像的脊线宽度降低为单个像素宽度,从而得到细化了的指纹图像。
细化算法按迭代方式的不同可以分为串行算法和并行算法。
预处理阶段的每个环节是紧密相关的,各个环节相互配合才可能获得高质量的指纹图像,从而方便之后特征点的提取,为之后指纹匹配奠定良好的基础。
正常的指纹图像如图2.2所示,二值化之后的指纹图像如图2.3所示,细化之后的指纹图像如图2.4所示。
图2.2正常的指纹图像图2.3二值化之后的指纹图像
图2.4细化之后的指纹图像
2.3指纹图像特征点的提取
特征点提取的目的在于通过预先制定的算法检测指纹图像中奇异点和细节点这两类特征点的数量以及每个特征点的类型、位置和所在区域的纹线方向。
奇异点指的是指纹图像的中心点和三角点。
细节点指的是端点(Endpoint)、叉点(Bifurcation)、孤点(Dot)、环点(Loop)、短纹(shortRidge)等。
一般的指纹图像提取的特征在10-100个之间,多数文献认为至少应该有12个特征点才可以进行匹配。
8邻域编码纹线跟踪算法是一种常用的特征点提取算法。
2.4指纹图像伪细节点的处理
伪细节点的处理一般分为两类:
一种在特征点提取之前,对预处理之后的指纹图像进行平滑、去除毛刺连接断纹等操作,之后提取特征作为真正的特征;
另一种是特征提取之后,根据特征之间的相互关系,尽可能的识别伪特征点并滤除它们。
应用以下两条真伪细节点的量化判断准则判断真伪细节点:
(1)端点不应该与其它细节点相连;
(2)分叉点不应该与其他的端点和分叉点相连。
2.5指纹特征匹配
目前,指纹匹配的相关方法主要有图像相关匹配、纹理特征匹配、纹线匹配以及细节点匹配等。
前两者匹配速度快,但由于忽略了指纹的细节特征,匹配准确性不高。
细节点匹配算法的难点在于:
(1)细节点提取过程会产生虚假特征点和丢失真实细节点;
(2)指纹图像普遍存在平移和旋转;
(3)指纹图像之间重合区域小,相同手指指纹的细节点集之间对应关系难以确定;
(4)图像采集过程中,由于非线性映射、手指按压力度不均造成了扭转。
2.6评价指纹识别系统算法性能的指标
评价指纹识别系统算法的性能指标有3个,分别为拒识率(FRR)、误识率(FAR)和正确识别率(CR)。
误识率(FAR)是指在已提取的特征点的指纹样本库中,不同指纹匹配分数大于给定阈值判断为匹配的比率。
其计算如下式:
(2.1)
拒识率(FRR)是指在已提取的特征点的指纹样本库中,相同指纹匹配分数小于给定阈值误判为不匹配的比率。
(2.2)
正确识别率(CR)计算如下式:
(2.3)
式中:
从式2.1到2.3可以看出,FRR与FAR呈现反比例关系,随着匹配阈值的降低,拒识率(FRR)相应降低,误识率(FAR)升高,反之亦然。
所以应该充分考虑系统的需要,在拒识率(FRR)与误识率(FAR)之间找到一个最佳平衡点。
3课题的内容和目标
3.1指纹识别系统的硬件设计
系统的结构框图如图3.1所示,该系统主要完成指纹的采集、处理和匹配等操。
主要有以下几个模块,指纹采集模块,K60N512单片机模块以及显示模块等。
图3.1系统的结构框图
3.2本设计所使用单片机简介
在嵌入式设备处理器的市场争夺中,ARM系列处理器凭借其小体积、低功耗、低成本和高性能,几乎垄断了该市场。
本设计所使用的飞思卡尔K60N512单片机便是基于ARMCotex-M4内核,Cotex-M4内核面向数字信号控制市场,具有高效并且易于使用的控制和信号处理能力。
Cote-M4属于ARMv7架构,该架构采用了Thumb-2技术,该项技术比纯32位代码少使用31%的内存,减少了系统开销。
同时,Cotex-M4内核具有一个单时钟周期乘法累加(MAC)单元、优化的单指令多数据(SIMD)指令、饱和运算指令和一个可选的单精度浮点运算单元(FPU)。
此外,该内核提供最佳的代码密度和一个嵌套向量中断控制器,可以出色的完成中断处理。
Cotex-M4内核框图如图3.2所示。
图3.2Cotex-M4内核框图
3.3本设计所使用的指纹模块简介
指纹模块选择了城章科技有限公司的R305F模块,该产品是该公司2011年推出的最新产品。
指纹模块采用了瑞典FingerPrintCard公司的FPC1011F3型指纹传感器,这款传感器利用了反射式探测技术,成像质量高,对干湿手指都具有良好的适应性。
FPC1011F3是一款电容式传感器,传感器分辨率为363dpi,内置8位数模转换器,它通过SPI接口与模块上面的高性能DSP芯片相连。
高性能的DSP芯片内嵌完整的指纹识别算法和协议,具有指纹采集,指纹比对,指纹搜索和存储等功能。
模块通过串口与单片机进行通讯,数据发送端接上位机的数据接收端,数据接收端接上位机的数据发送端。
本系统通过单片机与指纹模块的通信实现了自动指纹识别的功能。
首先将个人指纹信息录入指纹模块,之后指纹传感器采集指纹信息且与存储在指纹模块里面的指纹模板进行比对,若找到指纹,返回该指纹所对应的信息,送LCD显示,若未找到,提示未找到信息。
4主程序分析
4.1Cotex-M4内核寄存器简介
Cotex-M4的寄存器有:
R0~R15。
其中R0~R12是32位通用寄存器,其中R0~R7又被称为低组寄存器,R8~R12被称为高组寄存器。
32位的Thumb-2指令可以访问所有通用寄存器。
R13:
堆栈指针寄存器(SPStackPointer),它分为两部分,一个叫做进程堆栈指针PSP(ProcessStackPointer),一个叫做主堆栈指针MSP(MasterStackPointe),但在同一时刻只用到了其中的一个,配置控制寄存器(CONTROL)的CONTROL[1]位来选择是使用PSP还是MSP。
R14:
链接寄存器(LinkRegister),子程序调用、函数调用以及异常处理时,由R14存储返回地址,复位时R14里面的值为0xffffffff。
R15:
程序计数寄存器(ProgramCounter),指向当前程序的地址,修改它的值,就可以改变程序的执行流。
同时Cotex-M4还在内核水平上搭载了若干特殊功能寄存器,包括程序状态字寄存器组(PSRs或xPSR)、中断屏蔽寄存器组(PRIMASK、FAULTMASK和BASEPRI)和控制寄存器(CONTROL),且只能用MSR和MRS指令访问它们。
4.2Cotex-M4中断机制
Cotex-M4在内核水平上搭载了一个异常响应系统NVIC,支持为数众多的系统异常和外部中断。
NVIC位于内核内部,通过私有外设总线访问。
编号为0—15的对应系统异常,编号16及以上为外部中断。
与经典的ARM7TDMI,ARM926EJ-S相比较,在内核层次实现了向量中断控制器。
当发生了异常并且要响应时,Cotex-M4需要定位其服务例程的入口地址,这些入口地址存储在异常向量表中。
通常中断程序的处理流程为:
关闭系统总中断、开启外设模块并使能该外设模块中断、配置NVIC模块中的中断寄存器以及开总中断等几个过程。
NVIC会根据优先级的设置来控制抢占与嵌套行为。
因此,在某个异常正在响应时,所有优先级不高于它的异常都不能抢占之,而且它也不能自己抢占自己。
如果一个已经被挂起的中断被使能,NVIC会根据优先级来决定是否服务这个中断。
当然,一个被禁止的中断被触发挂起,无论怎样的优先级,NVIC都不会服务它。
高优先级中断可以抢占并挂起低优先级中断,同时将低优先级中断上下文保存于系统中断栈中,以便下次系统恢复时继续执行。
当一个高优先级中断执行完以后,系统会在挂起的中断中选择一个优先级最高的中断继续执行,这个过程由Cotex-M4的NVIC自动完成,由于中断只使用中断栈,每嵌套一级中断,至少需要保存32个字节(内核寄存器的内容)于堆栈空间,加之中断服程序(ISR)运行过程中也需要利用中断栈空间,系统中出现较深的嵌套中断时,系统对中断栈空间的需求较高,所以中断环境初始化时,应视最深中断深度,合理分配中断栈空间大小。
Cotex-M4从一个中断源发出中断请求信号到硬件响应中断请求的延迟时间固定位12个周期。
这12个周期内系统执行入栈和取栈等一系列操作,若中断信号连续发生,Cotex-M4可优化中断与中断间的硬件响应间隔时间至6个周期[2]。
4.3K60N512启动代码分析
启动代码用来完成对系统的初始化,它通常包含以下几部分:
中断向量表定义,地址重映射及中断向量表的复制,堆栈初始化,系统时钟频率设置,中断寄存器的初始化和进入用户程序等部分[3]。
K60N512上电时地址在0x00000000处,系统上电之后,从0x00000000处取堆栈指针到SP,之后从0x00000004处取程序指针到PC,然后跳转至PC指针所指向的地址开始执行程序。
K60N512芯片可以在RAM和Flash中执行代码,在RAM中执行速度更快,因此通常将中断向量表和数据复制到RAM空间中。
BSS段是指用于存放程序中未初始化的全局变量和静态变量的一块内存区域,数据段存放初始化后了的全局变量和静态变量。
芯片主时钟是利用MCG模块中的PLL模块,倍频50MHZ有源晶振得到的。
Kinetis芯片内部存在3种不同的时钟:
内核时钟,总线时钟和flash时钟。
其中内核时钟是基本时钟,其他时钟均从内核时钟分频得到。
MCG模块为MCU提供了多种时钟源,其内部包含一个锁频环(FLL)和一个锁相环(PLL),FLL接受内部或外部的参考时钟源,PLL接受外部参考时钟源,外部时钟参考源来自OSC模块。
该部分启动代码由飞思卡尔公司提供,完成了芯片的基本初始化。
K60N512芯片的启动程序流程图如图4.1所示。
从流程图中可以看到芯片初始化的基本过程,启动代码的最终目的是跳转到main函数,在main函数里面加载关于指纹识别的相关操作代码,可以说这段代码的存在降低了开发的难度。
图4.1启动程序流程图
4.4K60N512看门狗程序分析
本设计中采用了普通看门狗,以确保程序跑飞之后及时复位,增加了系统的可靠性。
K60N512的看门狗寄存器是只写一次寄存器,即上电后只能对其进行一次写入,若要多次写入,必须先解锁看门狗。
解锁看门狗是向看门狗的解锁寄存器(WDOG_UNLOCK)连续写入0xC520和0xD928,两次写入时间间隔不能超过20个时钟周期,否则解锁不成功。
解锁看门狗后通过配置看门狗状态控制寄存器(WDOG_STCTRLH)的WDOGEN位来关闭看门狗。
使能看门狗以后,会在溢出时间超时之后产生看门狗复位。
程序中必须在溢出超时前进行喂狗操作,喂狗之后看门狗模块重新计时,MK60N512的喂狗操作是向看门狗刷新寄存器(WDOG_REFRESH)连续写入0xB480和0xA602,两次写入时间间隔同样不能超过20个时钟周期。
看门狗的溢出时间通过设置WDOG_TOVALH和WDOG_TOVALL寄存器实现。
4.5Flash软件构件简介
Flash存储器的特点是断电后保持数据,微控制器使用Flash存储器来存储代码和数据,有时也将系统运行状态参数保存在Flash中。
K60512内部集成512K的Flash,分为256个扇区,Flash存储器的特点是只能将数据从1写为0,不能从0写为1,写入的最小单位为一个字节,擦出的最小单位一个扇区(2K)。
Flash存储器内部集成Flash控制器,控制器可以接收并执行命令。
4.6Kinetis的FlexBus模块简介
FlexBus片选地址寄存器(FB_CSARn)用来配置相应外部片选信号FB_CSn的地址范围(基地址),FB_CSn为低电平时选中相应的外设。
片选控制寄存器(FB_CSMRn)里面的FB_CSCR[PS](端口大小)与FB_CSCR[BLS](对齐方式)相配合,决定FlexBus数据总线的端口分配和大小。
引脚复用功能控制寄存器(FB_CSPMCR),配置该寄存器设置FlexBus引脚复用功能。
4.7K60N512异步接收器/发送器(UART)简介
UART接收器可以容纳8、9或10位数据字符。
UARTx_c2[RIE]位和UARTx_c2[TIE]位的设置决定是否允许接受和发送中断,若使能中断,必须首先实现中断服务程序。
设置UARTx_C2[RE]位和UARTx_C2[TE]位使能UART接收机和发送机。
UARTx_C1[M]位、UARTx_C1[PE]位和UARTx_C4[M10]位的状态决定数据字符的长度。
UARTx_S2[MSBF]位设置为1时,接收器操作使得在起始位后面接收的第一位是数据字的最高有效位。
奇偶校验位(该位禁用的情况下选择停止位)之前接收到的位被当作数据字的最低有效位,所有必要的位顺序是由模块自动处理。
UARTx_BDH寄存器与UARTx_BDL寄存器一起控制UART波特率发生器的预分频因子。
更新13位波特率设置时,首先写BDH缓冲新值的高半部分,然后写BDL。
直到BDL被写入时BDH中的值才会变。
UART初始化函数主要实现了UART数据格式,波特率,UART模块时钟使能等工作。
UART构建测试可以通过查询和中断两种方式实现。
查询方式通过不断调用接收函数,查询接收标志是否有效来判断是否成功接收数据。
中断方式通过中断服务程序实现,成功接收一个字节之后,芯片自动跳转至中断服务程序,中断服务程序中调用接收一个字节的函数来接收数据。
K60N512的UART可以稳定工作在115200bps下。
4.8指纹模块指令介绍
主程序中指纹存储程序流程图如图4.2所示,指纹搜索程序流程图如图4.3所示。
用到的指纹模块指令分列如下:
4.8.1指纹图像获取
发送获取指纹图像的指令,等待接收应答包。
指令的指令包和应答包的格式分别如表4.1和表4.2所示。
表4.1指令包格式
2bytes
4bytes
1byte
包头
模块地址
包标识
包长度
指令码
校验和
0xef01
0xffffffff
01H
03H
05H
表4.2应答包格式
确认码
07H
xxH
sum
图4..2指纹存储程序流程图
图4.3指纹搜索程序流程图
4.8.2生成特征
编程中为了提高模板质量,生成了两次特征文件,分别存于charbuffer1与charbuffer2当中,生成特征指令的指令包与应答包的格式分别如表4.3和表4.4所示。
表4.3指令包格式
缓冲区号
04H
02H
BufferID
表4.4应答包格式
确认码为00H表示生成特征成功,01H表示收包有误。
4.8.3生成模板
这一步的目的是将charbuffer1与charbuffer2中的特征文件合并生成模板,结果存于charbuffer1与charbuffer2中。
指令包和应答包格式分别如表4.5和表4.6所示。
表4.5指令包格式
09H
表4.6应答包格式