东北林业大学课程设计
表 4—5 FSK解码模块端口描述 名称 fre_in clk reset decode_out ring_out decode_cr
方向 输入 输入 输入 输出 输出 输出
宽度 1 1 1 1 1 1
功能描述 FSK信号输入端口,该端口直接与FSK前置提取电路的输出相连 系统时钟输入端口
高电平有效的复位信号输入端口
数据输出端口,格式为1200bps,8N1,UART 振铃输出端口,当有振铃时该端口输出高电平
数据有效端口,当模块解码到数据时,该端口输出高电平
4.5.2 工作原理
FSK解码模块首先对输入信号进行滤波,因为电话线上的信号难免会有一些干扰,我们首先要将这些毛刺滤除干净,否则会对后端的信号判断产生影响,因为在解码程序中我们都是在检测信号的边沿,然后通过窗口信号来检测信号的频率,从而判断是振铃信号还是FSK信号,如果是振铃信号,则将ring_out置1,并且一直检测后面是否有FSK信号;如果是FSK信号(通过判断是否有连续的175个1),则在连续的“1”之后同步1200hz的窗口信号,在此波特率下检测信号的边沿,若有4个边沿,则输出0,若有2个沿则输出1,若有三个沿,则计第一个沿到第三个沿之间的频率,如果在1200hz左右则输出1,若在2200hz左右则输出0,这样就将FSK信号解码输出了。没有信号的时候,输出高电平,因为在串口通信中高电平是认为没有数据的。
4.6 DTMF解码模块设计
DTMF解码模块的端口结构如图4—8所示,由于在外围电路中使用了专用的解码芯片MT8870,因此该模块仅仅需要完成接口逻辑的转换即可。图 4中的q和std端口直接与解码芯片的对应管脚相连,当解码芯片捕获到有效数据时,会在std管脚产生一个上升沿,解码模块检测到该上升沿后会将q端口上的数据读取到dtmf_data端口上,同时在dtmf_trig端口上产生一个正脉冲,后级的串口发送模块在该脉冲的触发下会将dtmf_data上的数据串行发送出去。
图 4—8 DTMF解码模块端口结构
4.7 A/D采样模块设计
4.7.1 端口介绍
A/D采样模块的顶层端口结构如图4—9所示,vol_in是模拟信号输入端口,它直接与外围语音提取电路相连,vref是参考电压输入输出端口,由于在本系统中我们使用了芯片内部的2.56V参考电压,因此vref为2.56V的输出端口。ADC_data端口是A/D模块采样得到的8位并行数据,ADC_trig端口用于输出触发信号,在每完成一次采样后,该端口会输出一个正脉冲触发UART发送模块将ADC_data上的数据串行输出。
19
东北林业大学课程设计
图 4—9 ADC采样模块顶层端口结构
4.7.2 模块结构
如图4—10所示,A/D采样模块由flash模块,ADC模块、PLL模块和接口逻辑四部分组成。flash模块中存储着ADC模块的配置数据,每次上电时它会自动将配置数据写入ADC模块中,PLL模块用于生成配置时钟。在配置完成后,ADC模块会以固定的采样频率对vol_in端口上的信号进行采样。接口逻辑的作用是连续对ADC的采样数据进行抽样,在每次抽样完成后它会将抽样得到的数据写到ADC_data,并在ADC_trig上生成一个正脉冲。
vol_inADC模块flash模块clk_48mPLL模块接口逻辑ADC_trigADC_data[7:0]
图 4—10 AD采样模块结构图
图4—10中的flash模块、ADC模块和PLL模块均为Fusion系列FPGA的集成外设,在Libero集成开发环境下可以通过向导生成,其中的配置逻辑也是由开发环境自动生成的,在应用时不需要考虑其实现细节。在Libero开发环境下,ADC模块的采样频是根据系统时钟自动计算的,不可以手动设置。在本系统中,软件计算的ADC的采样频率为83.9KHz,而我们需要的采样频率为8KHz,为了满足需求,接口逻辑需要以10为步长对ADC的采样结果进行间隔抽样。基于这种思路,实际获得的语音采样频率为8.39KHz,实测证明该采样频率下的语音采集效果良好。
20
东北林业大学课程设计
5 上位机软件设计
5.1 功能概述
本系统的上位机软件由VC6.0编写,可以实现通话录音和来电显示等功能,程序还通过ODBC连接了Excel数据库,能够方便的实现对对电话簿和通话记录的管理。 上位机软件共有三个界面,下面分别介绍。
5.1.1 主界面
图5—1是程序运行时的主界面,通过最小化到托盘按钮可以将程序隐藏在后台运行,当有电话呼入或用户摘机拨号时,程序界面会自动弹出。电话交换机是在第一声振铃后发送来电信息的,当上位机程序接收到来电信息后,会将来电号码提取出来并在数据库中查找对应的姓名,然后将姓名和号码分别显示到姓名栏和号码栏。用户摘机拨号时,上位机会将拨出的号码逐个捕获并显示在号码栏中,拨号完成后上位机根据拨出的号码从数据库中查询姓名并将其显示在姓名栏中,如果姓名未查到则显示未知。在程序的整个运行过程中,电话图标的状态会始终与系统的当前状态保持同步。
图 5—1 主界面
5.1.2 通话记录界面
通话记录界面如图5—2所示,程序运行过程中的所有来电和去电信息都会被记录在列表框中。通过查询选项可以对通话记录进行查询,如查询某人某时段的通话记录或查询某时段所有人的通话记录,也可以对通话类型进行筛选。程序的查询操作在后台是通过SQL语句实现的,查询通配符为“_”,如查询2009年4月的所有通话记录,可以在日期栏中输入“2009-04-__”,然后点击查询按钮即可。
通话的语音信息被记录在WAV文件中,双击某条通话记录或选中记录后点击播放按键即可播放对应的WAV声音文件。选中某一条或多条通话记录然后点击删除按钮,即可将其删除。
21
东北林业大学课程设计
图 5—2 通话记录界面
5.1.3 电话簿界面
电话簿界面如图5—3所示,在该界面下可以对电话簿进行添加、删除、查找和修改操作。它的操作方法非常简单,在此不再赘述。
图 5—3 电话簿界面
5.2 程序结构框图
上位机程序的结构框架如图5—4所示,其中的通话记录窗口、电话簿窗口和主界面窗口都是作为子窗口依托于应用程序存在的。
22
东北林业大学课程设计
ODBC 电话簿窗口 MSC控件 通话记录窗口 应用程序 后台数据库 下位机 主界面窗口
图 5—4 程序结构框架图
通话记录窗口在整个程序中的作用最为关键,它通过MSComm控件直接接收下位机发送的数据并根据数据类型将其记录到数据库中或存储为WAV声音文件。电话簿窗口的功能较为独立,它只对后台数据库的电话簿进行管理,不与程序的其它部分交互。主界面窗口需要显示来电姓名、号码以及系统的当前状态,而这些信息产生在通话记录窗口,主界面窗口由通话记录窗口间接控制。为了实现跨窗口的信息传递,通话记录窗口需要首先向父窗口发送消息,父窗口响应消息会通过主窗口对象调用其中对应的成员函数完成特定操作。
5.3 数据接收和信息记录
数据接收和信息记录工作是在通话记录窗口中完成的,具体流程如图5—5所示,空闲状态下MSC控件的RThreshold属性被设置为1024,也就是说上位机每接收到1024个字节的数据后才会产生MSC事件,当查询到MSC事件后,即表明有数据数据上传,上位机程序首先根据引导字符的类型设置状态标志,在随后的MSC事件中,程序会根据状态标志选择数据记录方式。数据接收完成后,状态标志会被设置为空闲,程序进入等待下次数据上传的状态。
MCS事件 N 状态为空闲 Y 识别引导字符 设置状态标志 状态为FSK Y 来电信息记录 N 状态为DTMF Y 去电信息记录 N 状态为语音 Y 语音信息记录 结束 状态复位
图 5—5 数据接收流程图
5.3.1 引导字符的识别
本系统定义的引导字符是1024个字节的0xAA、0xBB或0xCC,它的识别方式如下
23