《课程设计总结报告模板.doc》由会员分享,可在线阅读,更多相关《课程设计总结报告模板.doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、距上约5cm东北林业大学二号黑体居中检测与转换课程设计间距约3cm总 结 报 告间距约6cm字号:初号,黑体居中 小三号黑体 小三号楷体 设计项目: 基于Fusion单芯片的电话录音系统的设计 项目完成人: 张小海 、赵大海、王晓明 指导教师: 王 明 教授 学 院: 信息与计算机工程学院 专 业: 电子信息工程2007级1班 小三号黑体,本页最后一行指导教师一栏填写指导教师姓名、职称年 月 日基于Fusion单芯片的电话录音系统的设计三号黑体摘要前必须有题目,小二黑体,居中放置摘 要本设计主要研究一种基于数字通信的电话录音系统的设计方案.目前在国内已有现成的USB电话录音盒的产品,技术已经相
2、当成熟,它是专门为小公司而设计开发的,具有经济、稳定、高效的特点。USB接口安装安装方便,即插即用,不需要其他配件就可以对电话进行录音。但是采用的都是专用解码芯片,为了提高运用PFGA的能力,本设计采用FPGA进行FSK来电显示解码,语音采集以及进行核心控制,实现单芯片系统的设计。电话录音系统主要由上位机和下位机两部分组成。下位机由Actel公司的Fusion系列FPGA实现,主要负责来电号码识别,去电号码识别以及语音采样。来电的号码识别通过FPGA对FSK信号进行解码来完成,去电号码识别通过专用DTMF解码芯片MT8870完成,语音采样则由FPGA内部集成的ADC完成.上位机由VC6.0编写
3、,程序用ODBC(开放数据库互连)连接了Excel作为数据库。通话的号码、时间、类型等信息都会被存储到数据库当中,通话的语音则以WAV文件的形式保存.上位机与下位机通过RS232接口通信。本系统完成的功能是在有来电时,上位机软件能够从最小托盘处弹出,并显示来电号码,若此号码在数据库中有对应的联系人,将显示此联系人的姓名。若摘机,软件同样会自动弹出,显示去电号码,若有对应联系人,将显示姓名。并将所有通话记录以及通话语音进行存储,便于用户查询。小四宋体,中文摘要字数400左右关键词:Fusion;FPGA;来电显示;FSK解码;DTMF 小四宋体加黑基于Fusion单芯片的电话录音系统的设计小二号
4、黑体居中放置。论文标题及第一层次题序距上下文空一行1 绪论1.1 课题研究的背景和意义正文二级标题用小三号宋体字,与下文单倍行距在论文正文前,应阐述本课题研究的目的、意义、对本研究国内外研究现状有针对性的简要综合评述和本论文所要解决的问题等。三号宋体。论文标题及第一层次题序距下文空一行.来电显示,是近年来电信部门推出的一种新的业务:显示被叫方的电话号码和呼叫时间等信息。来电显示电话机和来电显示器产品应用已十分广泛,其技术也相当成熟.但传统的来电显示信息电话仅将数据显示在自身的话机内,无法将数据提供给计算机或其他设备。因此开发来电显示电话与计算机的接口和相关的数据采集系统是十分必要的,也是有实用
5、价值的.来电显示助手通过送入电脑的来电显示,结合客户信息数据库,将传统的电话来电显示功能进行扩展,使得客户在来电时通过来电号码在客户数据中查询相关的信息,显示在电脑上,使得我们在第一时间获知客户端基本信息、业务发生情况,占据业务的先机,把握谈话的主动性,拉近员工与客户之间的距离、提升企业形象、提高工作效率。而电话录音功能又可以让员工对客户提出的问题以及我们当时提出的系统的设计进行进一步的记录,有助于我们总结问题,以便于员工对客户进行更好的服务。1.2 本设计的主要要求小四宋体1.2.1 基本要求(1) 解码FSK制式来电显示;(2) 能记录语音信息;(3) 使用Fusion FPGA实现设计方
6、案;1.2.2 扩展功能要求(1) 通过串口将来电号码送往PC并做记录;(2) 通过串口将语音信息传到PC并做记录;(3) 能记录去电号码及语音信息;页面上边距2.5cm,下边距 2cm,左边距2.5 cm,右边距2cm,装订线位置选择左侧。页眉为:东北林业大学课程设计,字体设置为小五号宋体居中,页眉以通档横线与正文间隔2 系统总体方案设计2.1 系统方案实现系统主要由硬件和软件两大部分构成,其中硬件又由前端电路,FPGA以及隔离模块三大部分构成,其中前端电路将电话线上的信号进行并行处理并接入FPGA的内部进行进一步的处理,通过检测到的忙音信号,振铃信号,摘机信号进行判断当前状态并对通道选择模
7、块进行控制,将FSK解码,DTMF解码以及AD采样中的某一路与串口隔离模块相连,最后通过串口隔离模块后与PC机相连。软件部分是由VC6.0编写的一个小型应用软件,具有良好的人机界面,便于使用。图2Error! Bookmark not defined. 系统框图正文三级标题用四号宋体字2.2 下位机核心控制2.2.1 器件选择由于本系统要对语音信号进行采样,因此我们选择了Actel公司的Fusion系列FPGA作为核心控制器,针对本系统该系列FPGA提供了以下特点:(1)片内集成了采样精度最高12位,采样频率最高600kps的ADC(2)片内集成了1。5V电压调整器,可以实现低功耗的睡眠模式(
8、3)基于Flash架构,配置数据掉电不丢失基于以上的特点,我们选择了Fusion系列FPGA中AFS250来实现我们系统,不仅简化了外围电路的设计,同时还减小了PCB面积,有效实现了单芯片系统1。2.2.2 控制方案选择下位机有两种控制方案可供选择,分别是使用状态机和使用MCU软核。状态机占用的资源较少,运行也很稳定,然而当需要实现复杂的通信协议时,状态机的设计会变得异常复杂,需要花费大量的时间和精力才能完成.MCU软核则正好相反,它可以运行常规的C程序,从而能够高效的处理人机界面和进行协议转发,然而为了获得强大的功能,软核通常需要以占用大量的逻辑资源为代价,在一些小型设计中显得得不偿失。本系
9、统下位机的主要任务是对来电、去电信息进行解码并对语音信号进行采样,然后将这些数据上传给上位机,状态非常简单,其中并未涉及复杂的拆包、打包过程以及握手协议,因此我们使用了状态机来完成核心的控制。2.3 来电号码识别2.3.1 来电数据的格式目前我国的来电显示主要有复合数据格式和单数据格式两种,复消息数据格式如表21所示。表中值定义一栏的M、N、O表示该字节的值不确定,-表示该串字节的值不确定2。表 2-1 复合数据格式表例子:“表2-1 复合数据格式”位于表的上方居中,五号宋体加黑,表格内中文用小五号宋体,英文或其文字用小五号Times New Roman字体。字段位置功能描述值定义0复合数据格
10、式标识字符80H1从该字节之后到BCC字节之间的数据长度M2呼叫时间消息类型标识01H3呼叫时间消息长度08H412以ASCLL码表示的呼叫时间13主叫号码消息类型标识02H14主叫号码消息长度N1515+N以ASCLL码表示的主叫号码15+N+1BCC校验字O单数据格式的标识字符为04H,相对于复合数据格式,它省去了呼叫时间消息长度和主叫号码消息长度两个参数,其它参数的定义与复合数据格式相同,在此不再赘述。2.3.2 来电数据的传输制式电话交换机是通过FSK调制波将来电信息发送给电话终端的,具体的调制特性如下所示:(1) 调制方式:BFSK(相位连续二进制移频键控)页脚为页码,页码格式为阿拉
11、伯数字,字体设置为小五号Times New Roman字体居中(2) 逻辑 1:1200Hz(3) 逻辑 0:2200Hz(4) 传输速率:1200bps(5) 数据传送方式:二进制异步串行方式在挂机状态时,电话线上是50V左右的直流电平,当有电话呼入时,会有峰峰值为90V的振铃信号叠加到50V的直流电平上.承载着来电信息的FSK调制波会在第一声振铃和第二声振铃之间发送给电话终端,具体波形如图 22所示3。坐标图例子:横纵坐标必须标注量、单位,坐标名置于图的下方居中,五号宋体加黑图 22 不同状态下的电话信号波形2.3.3 来电数据的解调解码对于FSK调制波,有很多种成熟的解调方案,如使用模拟
12、或数字滤波器,或使用锁相环,然而这些方案在具体实现时都比较复杂。在本系统中,考虑到来电数据的传输速率较慢而且是单位传输,同时数据传输速率与载波频率的对应关系也较为单一,因此我们没有用传统的解调方案,而是将FSK调制波整形成矩形波后直接送入了FPGA,然后由FPGA根据波形的特性进行0、1判断,完成解调过程.来电信息是用UART的方式以1200bps发送的,因此在数据解调完毕后几乎不需要额外的解码处理,解调模块可直接将输出通过RS232接口发送给上位机。2.4 去电号码识别电话终端是以DTMF(双音多频)的方式将呼叫号码发送给电话交换机的,为了获知用户拨出的号码,下位机需要完成DTMF解码。DT
13、MF解码过程中需要完成对多种频率的识别,并将这些频率的组合方式译码成有效的数据,这一过程的实现非常复杂,因此在本系统中我们选用了专用的解码芯片MT88704。MT8870 能将DTMF 信号译为四位二进制码,表 22是该芯片的译码表。其中Digit为实际的按键,TOE是输出使能信号,Q1Q4为4位数字输出,每当解码芯片检测到有效载波时,就会进行解码,解码完成后Q4Q1的值会立即被更新,同时STD输出一个高电平信号,下位机可以根据STD的状态判断是否有按键,当检测到有按键按下时,通过读取Q4Q1的值即可获得按键代码,从而识别用户拨出的电话号码.表 22 MT8870译码表DigitTOEINHS
14、TDQ4Q3Q2Q1ANYLXHZZZZ1HXH00012HXH00103HXH00114HXH01005HXH01016HXH01107HXH01118HXH10009HXH10010HXH1010HXH1011HXH1100AHLH1101BHLH1110CHLH1111DHLH0000AHHL没有检测到按键时Q4Q1保持不变STD返回低电平BHHLCHHLDHHL2.5 语音记录方式本系统的语音采集工作,由下位机通过FPGA内部集成的ADC完成,下位机采样到的语音数据通过RS232接口发送给上位机,然后由上位机保存成WAV格式.2.5.1 WAV格式简介WAV格式是微软公司开发的一种声音
15、文件格式,也叫波形声音文件,是最早的数字音频格式,被Windows平台及其应用程序广泛支持。WAV格式支持许多压缩算法,支持多种音频位数、采样频率和声道,采用44。1kHz的采样频率,16位量化位数,因此WAV的音质与CD相差无几,但WAV格式对存储空间需求太大不便于交流和传播5。WAV来源于对声音模拟波形的采样。用不同的采样频率对声音的模拟波形进行采样可以得到一系列离散的采样点,以不同的量化位数(8位或16位)把这些采样点的值转换成二进制数,然后存入磁盘,这就产生了声音的WAV文件,即波形文件。该格式记录声音的波形,故只要采样率高、采样字节长、机器速度快,利用该格式记录的声音文件能够和原声基
16、本一致,质量非常高,但这样做的代价就是文件太大。但电脑的存储空间很大,而且文件可以随时进行清理与删除,对于本设计文件大并不是问题,我们还可以进行进一步的改进,如将WAV文件进行压缩后再保存等.由于只需要对声音进行采样,即将模拟信号送入FPGA的内部进行A/D采样后再经串口传给计算机,并以WAV格式进行保存,以这种方式我们就能将语音信号保存并进行播放,因此语音记录方式采用的是WAV格式文件。2.5.2 WAV文件头为了创建标准的WAV文件,上位机程序用结构体定义了一个WAV文件头,程序如下。typedef structchar RIFFID4;DWORD FileSize;char WAVEfm
17、t8; DWORD sizeofPCM; WORD WAVE_FORMAT;WORD Chanel;DWORD SamPerSec;DWORD DatPerSec;WORD ALian; WORD SamBitL;WORD SamBitH; char factID4;WORD factSizeL;WORD factSizeH;WORD factDataL;WORD factDataH;char dataID4;WORD dataSizeL;WORD dataSizeH; WaveHead;文件头中包含了文件大小、采样速率、通道数等信息,其中有些成员的值是固定的,如采样速率SamPerSec和通
18、道数SamPerSec,而有些成员的值则需要在程序运行过程中动态计算,如文件大小FileSize。关于WAV文件头中各个成员的进一步介绍,在此不再赘述。2.6 通信协议定义本系统的程序主要有下位机和上位机程序两大部分组成,下位机负责来电和去电信息的解码以及语音的采样,而上位机则负责对这些数据进行记录和管理。在系统的运行过程中,下位机共有三种类型的数据需要上传,分别是来电信息数据,去电信息数据和语音数据,为了让上位机能够将这些数据区分开来,需要定义一组简单的通信协议6.下位对引导字符的发送和上位机对引导字符的识别是本系统通信协议的核心,具体的实现机制是,当下位机有数据需要上传时,首先要向上位机发
19、送一段引导字符,上位机识别到引导字符后要根据引导字符的类型进入相应的数据接收准备状态。引导字符的定义如表 3-Error! Bookmark not defined.所示。表 3-Error! Bookmark not defined. 引导字符定义引导字符类型功能描述1024个AAH拨号信息前导,指示上位机准备接收拨号信息数据1024个BBH来电信息前导,指示上位机准备接收来电信息数据1024个CCH语音数据前导,指示上位机准备接收语音数据由表 3-Error! Bookmark not defined.可以看出,下位机与上位机的通信过程非常简单,上位机只需要接收下位机发送的引导字符,然后根
20、据引导字符的类型进入相应的状态并等待下位机上传的数据即可。协议中数据传输的结束是通过等待超时来实现的,当上位机在超过了规定的时间后还未接收到数据时则认为传输结束,然后会返回到空闲状态.3 硬件设计3.1 系统硬件设计框图如图 3所示,整个系统由Fusion FPGA和外围电路两大部分组成,其中外围电路又分为摘机检测电路、FSK提取电路、DTMF解码电路和语音提取电路四个单元.摘机检测电路用于检测话机的状态,挂机时检测电路会输出高电平,摘机时检测电路会输出低电平。振铃检测及FSK提取电路用于提取振铃信号以及电话交换机发送的FSK来电信息,并将其处理为规则的矩形波信号,然后送由FPGA解码处理.D
21、TMF解码电路用于解码用户的拨号的信息,当电路检测到有效的载波时,会自动对载波进行解码,并后将解码得到的数据通过一个四位总线并行输出.语音提取电路用于提取和处理通话过程中的语音信号,经过处理后的信号会被直接送至FPGA的ADC输入端口进行采样。Fusion FPGA是整个系统的核心,它对外围电路的输入信号进行逻辑判断,然后执行对应的操作并完成所需的功能。由于电话系统与PC机是共地的,因此当上位机与下位机通过RS232接口直接相连时,上位机会对下位机产生很大的干扰,如图31中的串口隔离模块用于实现上位机与下位机的电气隔离,从而有效避免干扰.图 31 系统硬件框图3.2 电源设计系统的电源电路如图
22、 3所示.外接电源通过线性稳压器7805和SPX1117-3。3后得到VCC_5和VCC_33两路电源,VCC_5用于对外围模拟电路供电,VCC_33则用于对FPGA的数字IO等供电。VCC_5通过DC-DC模块BS0505S隔离后得到UART_VCC,该路电源用于对UART发送模块供电。Fusion系列FPGA内部集成了一个1.5V的电压调整器,通过它可以给FPGA的内核以及其它1。5V外设供电.集成电压调整器最大可以输出20mA的电流,为了使其具有足够的驱动能力,需要用一个三极管进行电流放大.在图 3-2中,Q1的基极和发射极分别连接到了FPGA的PTBASE和PTEM引脚,电压调整器会根
23、据PTEM反馈的电压自动调整PTBASE电压,从而在Q1的发射极得到稳定的1.5V输出。VCC_15经过由R17、C14、C15组成的阻容滤波网络后生成PVCC,此路电源用于对FPGA内部的PLL供电。AGND、GND、PGND分别是系统的模拟地、数字地以及PLL地,为减少数字地对模拟地和PLL地的干扰,电路中用0电阻对它们进行了隔离.图 32 电源电路3.3 FPGA最小系统设计3.3.1 时钟和复位电路系统时钟采用的是48MHz的有源晶振,为了使时钟电路能够输出稳定的电压波形,必须保证供电电压的稳定,因此在时钟电路的前端添加了LC滤波电路,如图33所示,电阻R6的作用是抑制高次谐波和实现阻
24、抗匹配。图 3中的C8和R5组成了上电自动复位电路,在上电瞬间C8的充电电流会将RST拉高,从而对系统进行复位.图 3-3 时钟和复位电路3.3.2 FPGA电源和接地Fusion系列FPGA内部集成了ADC模块,是一个模数混合的系统,因此需要恰当的处理芯片的电源和接地。如图34所示,电路中为每个电源引脚都添加了去耦电容,同时遵循了将模拟电路与数字电路分开接地的原则.图 34 FPGA的电源和接地3.3.3 FPGA数字和模拟IO分配FPGA拥有丰富的IO资源,在本系统中我们只用到了少数几个。如图 3所示,其中CLK和RST是时钟和复位信号,它们需要连接到芯片的全局网络上,144引脚和142引
25、脚位于芯片东边的时钟调整电路上,可以通过多路选择逻辑连接到全局网络,符合我们的需求。SOUND_IO是语音信号输入信号,可以分配到AV0AV5中的任意一个,在此我们使用了AV0.图3-5中的其它信号均为来自外围电路数字信号,对IO分配没有特殊要求,在此是根据PCB布线情况分配的。图 35 数字和模拟IO分配3.3.4 JTAG下载电路如图 3所示,JP1即为JTAG插座,JTAG下载电路非常简单,只需要将对应引脚与下载插座相连即可。Fusion芯片内部集成的电压调整器是通过电荷泵工作的,因此需要外接电容C16。图36中的JP3是双排插针,它左边的端口直接与FPGA相连,右边的端口则与外围电路相
26、连,左右两边的端口可以通过跳线连接起来,这样设计的好处是容易隔离故障,方便调试。图 3-6 JTAG下载电路3.4 UART发送模块UART发送模块的电路如图 37所示,电路中用SP3232E完成TTL电平到RS232电平的转换,由高速光耦6N137实现电气隔离.图 37 UART发送模块3.5 FSK前置提取电路设计FSK前置电路如图38所示,电感L2、L3用于滤除电话信号上高频噪声,电容C42、C44用于隔直通交,三极管Q2与其外围的电阻构成了一个共射极放大电路。由于FSK信号是在第一声振铃和第二声振铃之间进行发送的,而且振铃信号的幅值比FSK信号的幅值高出很多倍,因此需要对振铃信号进行一
27、定程度的衰减,图38中的C45,R25,C43,R26构成了一个简单的阻容带通滤波器,它一方面可以有效的衰减振铃信号的幅值,另一方面还可滤除电话信号中的噪声。比较器U7用于将电路提取得到的FSK波形整形成矩形波,它的输出会被直接送入FPGA的数字I/O进行解调和解码处理.电位器W1用于调整比较器的参考电压,从而调整输出信号高电平的宽度,在干扰较大的环境下可以将比较电压调节的稍高一些,这样可以有效滤除干扰信号。图 38 FSK前置摘取电路3.6 DTMF解码电路的设计DTMF解码的实现比较复杂,在此我们直接使用专用解码芯片MT8870来完成。如图39所示,BG_OUT是电话线上的信号经过整流桥反
28、极后得到的,可直接通过隔直电容耦合到MT8870当中,在检测到有效载波后,MT8870会将解码得到的数据并行输出到Q1Q4上,然后置高StD信号,FPGA检测到StD信号的上升沿后即可从Q1Q4上读取到有效的数据.MT8870的工作电压为5V,而FPGA端口的工作电平为3.3V,R9、R11R14的作用是限制当Std或Q1Q4为高电平时灌入FPGA端口的电流,从而保护FPGA的IO不被损坏。图 3-9 DTMF解码电路3.7 语音提取电路的设计语音信号是直接在电话线上传输的,因此语音提取电路的结构非常简单,如图 310所示,电话信号通过整流桥反极后被送到Q3的发射极,电路中的Q3和Q4组成了一
29、个达林顿型三极管,当CTRL为低电平电时,光耦导通,达林顿三极管饱和,语音信号被耦合到下一级电路,当CTRL为高电平时,光耦截止,达林顿三极管截止,此时电话线上信号被切断。CTRL信号由FPGA控制,只有在启动录音时,该信号才会变为低电平,空闲状态下该信号为高电平。这样做一方面可以降低系统负载对电话线的影响,另一方面可有效防止高压振铃信号损坏后级电路.图 310中,D4、D5的作用是对SOUND信号进行钳位。当由于系统异常导致振铃信号在CTRL为低电平时进入时,90V的振铃信号会直接耦合到FPGA的模拟IO端口,这有可能会对系统造成致命的损坏。电路中的钳位二极管会将SOUND的电平钳在-0.7
30、V+5。7V之间,可有效避免因振铃信号异常进入而导致的FPGA损坏。图 310 语音提取电路3.8 摘机检测电路的设计在挂机情况下,电话线上的电压为50V左右,在摘机情况下电压会降低到6V左右,因此用电阻分压的方式即可实现摘机和挂机的检测,如图311所示,电路中二极管D6和D7的作用也是进行电压钳位,从而保护后级电路.图 311 摘机检测电路4 软件设计4.1 功能概述本系统的上位机软件由VC6.0编写,可以实现通话录音和来电显示等功能,程序还通过ODBC连接了Excel数据库,能够方便的实现对对电话簿和通话记录的管理。 上位机软件共有三个界面,下面分别介绍.4.1.1 主界面图5-1是程序运
31、行时的主界面,通过最小化到托盘按钮可以将程序隐藏在后台运行,当有电话呼入或用户摘机拨号时,程序界面会自动弹出.电话交换机是在第一声振铃后发送来电信息的,当上位机程序接收到来电信息后,会将来电号码提取出来并在数据库中查找对应的姓名,然后将姓名和号码分别显示到姓名栏和号码栏。用户摘机拨号时,上位机会将拨出的号码逐个捕获并显示在号码栏中,拨号完成后上位机根据拨出的号码从数据库中查询姓名并将其显示在姓名栏中,如果姓名未查到则显示未知。在程序的整个运行过程中,电话图标的状态会始终与系统的当前状态保持同步。图 5-1 主界面4.1.2 通话记录界面通话记录界面如图5-2所示,程序运行过程中的所有来电和去电
32、信息都会被记录在列表框中。通过查询选项可以对通话记录进行查询,如查询某人某时段的通话记录或查询某时段所有人的通话记录,也可以对通话类型进行筛选.程序的查询操作在后台是通过SQL语句实现的,查询通配符为“_”,如查询2009年4月的所有通话记录,可以在日期栏中输入“2009-04-_,然后点击查询按钮即可。通话的语音信息被记录在WAV文件中,双击某条通话记录或选中记录后点击播放按键即可播放对应的WAV声音文件。选中某一条或多条通话记录然后点击删除按钮,即可将其删除。图 52 通话记录界面4.1.3 电话簿界面电话簿界面如图53所示,在该界面下可以对电话簿进行添加、删除、查找和修改操作。它的操作方
33、法非常简单,在此不再赘述。图 5-3 电话簿界面4.2 程序结构框图上位机程序的结构框架如图54所示,其中的通话记录窗口、电话簿窗口和主界面窗口都是作为子窗口依托于应用程序存在的。MSC控件下位机通话记录窗口电话簿窗口应用程序主界面窗口ODBC后台数据库图 54 程序结构框架图通话记录窗口在整个程序中的作用最为关键,它通过MSComm控件直接接收下位机发送的数据并根据数据类型将其记录到数据库中或存储为WAV声音文件。电话簿窗口的功能较为独立,它只对后台数据库的电话簿进行管理,不与程序的其它部分交互。主界面窗口需要显示来电姓名、号码以及系统的当前状态,而这些信息产生在通话记录窗口,主界面窗口由通
34、话记录窗口间接控制.为了实现跨窗口的信息传递,通话记录窗口需要首先向父窗口发送消息,父窗口响应消息会通过主窗口对象调用其中对应的成员函数完成特定操作。4.3 数据接收和信息记录 数据接收和信息记录工作是在通话记录窗口中完成的,具体流程如图5-5所示,空闲状态下MSC控件的RThreshold属性被设置为1024,也就是说上位机每接收到1024个字节的数据后才会产生MSC事件,当查询到MSC事件后,即表明有数据数据上传,上位机程序首先根据引导字符的类型设置状态标志,在随后的MSC事件中,程序会根据状态标志选择数据记录方式。数据接收完成后,状态标志会被设置为空闲,程序进入等待下次数据上传的状态.M
35、CS事件状态为空闲状态为FSK状态为DTMF状态为语音识别引导字符设置状态标志来电信息记录去电信息记录语音信息记录状态复位结束NNNYYYY图 55 数据接收流程图4.3.1 引导字符的识别本系统定义的引导字符是1024个字节的0xAA、0xBB或0xCC,它的识别方式如下所示,MSC事件响应后,上位机程序接收到的数据被会被存储在数组rxdata中,为了提高识别效率,程序以32为步长抽样判断接收到的数据是否为有效引导字符,若接收到的数据中包含有非0xAA、0xBB或0xCC的字节,则表明系统出现了异常,程序会弹出“引导字符识别错误”对话框。引导字符识别成功后,状态标志state的值会被设置成引
36、导字符的值,在随后的MSC事件中,程序会根据state的值来选择数据记录的方式。state为0xAA表示DTMF数据,state为0xBB表示语音数据,state为0xCC表示FSK数据,state为0表示空闲,只有state为0程序才会对引导字符进行识别.if(state=0)for(k=10;k1024;k+=32)if(rxdatak!=0xaa & rxdatak!=0xbb & rxdatak!=0xcc)state=0;AfxMessageBox(”引导字符识别错误!”);return;state=rxdata512;4.3.2 来电信息记录当上位机程序识别到0xCC前导字符后会进
37、入到FSK状态,该状态下的程序流程如图5-6所示.前导字符0xCC由下位机在检测到第一声振铃后发送,因此上位机只要进入FSK状态即表明有呼叫进入。在第一声振铃后,下位机会将承载着来电日期、时间和号码的FSK数据上传给上位机,为了逐个接收这些数据,上位机程序会在第一声振铃后将MSC控件的RThreshold属性设为1,至此,上位机程序已准备好接收FSK数据。第一声振铃弹出用户界面通过消息向主界面窗口发送等待接听动画接收FSK数据设置FSK超时定时器设置振铃超时定时器识别语音向导发现语音前导状态标示为语音结束通过消息将号码和姓名发送给主界面窗口FSK超时定时器超时振铃超时定时器超时提取来电号码提取
38、来电号码查询来电者姓名查询来电者姓名将来电信息导入数据库,并将类型标示为未接结束结束NYNYFSK状态状态图 56 来电信息记录流程图在接收到FSK数据后,程序会设置一个FSK超时定时器和振铃超时定时器,FSK的超时表明下位机的FSK数据已经发送完毕,超时函数会从接收到的数据中提取出来电号码并从数据库中查询姓名,然后发送给主界面窗口显示。振铃的超时表明主叫方在呼叫无人接听的情况下终止了呼叫,超时函数根据来电号码查询出来电姓名,然后将来电信息记录到数据库中,同时会将号码和姓名发送给主界面窗口,并将主界面窗口状态标志为“未接来电”。下位机在用户接听电话后会发送语音前导,以指示上位机开始录音,因此上
39、位机在接收FSK的数据的过程中同时要检测语音前导,语音前导是1024个0xBB,然而此时MSC控件的RThreshold属性为1,因此在事件响应时不可能将1024个0xBB全部接收到,我们的实现方法是只要检测到5个连续的0xBB即会将状态标志为语音,在下次MSC事件中便会启动录音.4.3.3 去电信息记录去电信息的记录是在DTMF状态下完成的,该状态下的程序流程如图57所示.DTMF状态初次进入时,上位机程序的界面会自动弹出,同时MSC控件的RThreshold属性会被设置为1,以便逐个接收用户拨出的号码,此后用户的每次拨号都会产生一个MSC事件,事件被响应后,程序会设置拨号超时定时器并将号码
40、逐个发送给主界面窗口,拨号超时后程序则认为拨号结束,拨号超时函数被执行。在拨号超时函数中程序会根据拨出的号码从数据库中查询出姓名并将其发送给主界面窗口显示,然后程序复位到初始状态.程序复位到初始状态后,会不断的检测引导字符,若检测到0xBB语音前导,则开始录音。理想的处理情况是下位机在检测到对方接听电话后便向上位机发送语音前导,指示上位机开始录音,然而受电话业务的局限,对方的摘机信号并不会发送给主叫用户端,因此下位机只能通过拨号超时机制来向上位机发送语音前导的,这样做的坏处是可能会录到一些回铃音或彩铃音。如果用户在拨号超时前就挂机停止拨号,下位机会向上位机发送一个0xDD结束标志,上位机在检测
41、到该字节后也会复位到初始状态。Y系统复位到初始状态拨号超时查询姓名将姓名发送给主界面结束有结束标志NYDTMF状态状态首次进入弹出用户界面发送正在拨号动画Rthreshold属性设为1设置拨号超时定时器接收号码将号码发送给主界面窗口结束N系统复位到初始状态图 57 去电信息记录流程图4.3.4 语音信息记录语音信息的记录流程如图5-8所示,首次进入语音状态时,程序会以系统的当前日期和时间为名称创建一个文件,文件名的的格式为“XXXX_XX_XX XX_XX_XX.wav”.此时MSC控件的RThreshold属性为1024,也就是说程序每接收1024个字节的数据才会产生一次MSC事件,每次事件
42、响应后,程序都会将接收到的数据添加文件的末尾。当用户挂机后,下位机即会停止向上位机发送数据,上位机等待超时后会执行语音超时函数,在该函数中程序会根据接收到的数据长度和当前系统时间计算WAV文件头和通话时长,并将相应信息写入到数据库中。根据系统时间计算文件名并创建文件语音定时器超时获取系统时间并计算时长系统复位到初始状态结束来电信息写入数据库计算WAV文件头并将其写入文件NY语音状态首次进入向主界面窗口发送正在录音动画接收语音数据并将其存入文件设置语言超时定时器结束图 58 语音信息记录流程图4.3.5 数据库操作为了方便对通话记录和电话簿进行管理,程序用ODBC(Open Database C
43、onnectivity,开放数据库互连)连接了Execl数据库。ODBC是微软公司开放服务结构中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API函数,这些API利用SQL来完成其大部分的任务,同时ODBC也保留了对SQL语言的的支持,用户可以直接将SQL语句传递给ODBC.程序中关于数据库的基本操作如记录的添加、删除和查找等在后台都是由SQL语句通过ODBC实现的,关于数据库编程不是本系统的重点,在此不再赘述。4.4 其他为了提供友好的用户界面,上位机程序添加了GIF动画显示的功能,该功能由免费的CPictureEx类实现,程序还用SkinMagicToolkit美化了界面的皮肤.