电话通信系统中信号音的产生及其实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
合肥学院
课程设计报告
题目:_ 电话通信系统中信号音的产生与实现
系别:__ 电子信息与电气工程系 _ _ 专业:___ 通信工程___ ______ _
班级:____ _ ______
2013年 12月 09日
《现代通信技术课程设计》课程设计任务书
电话通信系统中信号音的产生及其实现
摘要:随着社会的飞速发展,人与人之间的交流日益密切,电话通信系统运用日趋广泛,每时每刻都充满了我们的生活,给我们的生活提供了方便,带来了不一样的体验和色彩。在电话通信系统中,各种不同的信号音对我们的通信状态,有很大的提示和指引作用。本设计中我们通过运用所学的FPGA的相关知识,基于VHDL语言进行编程,借助Quartus软件和GW-48实验开发平台设计实现拨号音,回铃音、忙音、通知音,这四种不同的信号音,并进行验证。
关键词:信号音;VHDL语言;FPGA ;Quartus2 ;实现;
正文:
一、设计目的
1.掌握CPLD可编程器件的编程和下载方法。
2.熟悉用CPLD可编程器件产生程控交换中信令信号的方法。
3.从设计中掌握一些基本技巧,提高自己动手能力和发现问题解决问题的能力。
4.通过设计完成一个小项目,培养团队合作能力,并检验我们四年来所学的专业知识。
二、设计要求
利用可编程器件CPLD对系统的全局时钟信号进行分频,产生程控交换系统中电话交换的4种信号音:
拨号音:连续发送的500Hz信号。
回铃音:1秒通,4秒断的5秒断续的500Hz信号。
忙音:0.35秒通,0.35秒断的0.7秒断续的500Hz信号。
振铃信号(铃流):以0.2秒通,0.2秒断,以0.2秒通,0.6秒断的1.2秒断续方式发送。
通过软件编程及仿真,正确实现以上四种信号音的发生,最终下载,并用示波器观察波形,和拨数字键调出不同信号音听扬声器发出声音是否正确来验证程序及产生信号音的正确性。
三、设计原理
设计中我们用到的开发系统主频为50MHz,因设计要求产生500Hz及25Hz 的信号音,故我们首先考虑把50MHz的主频进行分频。那么首先我们将50MHz 的主频信号分频为500Hz,再将信号再次分频为25Hz。至此我们就可以容易地得到连续发送的500Hz的拨号音信号。那么要得到1s通4s断的5s断续的500Hz 回铃音,首先我们要产生一个1s通4s断的矩形波,再将产生的信号与500Hz 方波信号进行相与运算,那么得到的信号就是1s通4s断的5s断续的500Hz信号了。同理,要产生0.35s通,0.35s断的0.7s断续的500Hz忙音信号,就要首先产生一个0.35s通,0.35s断的方波信号,将之与500Hz方波信号相与就能实现;要产生1s通,4s断的5s断续方式发送的振铃音信号,那么首先需要将已产生的500Hz方波信号分频成10Hz,再将其与0.2s通,0.2s断,0.2s通,0.6s 断的矩形波进行与运算,这样就能产生所需要的振铃音了。总而言之,此设计的要点就是如何把主频50MHz分频为500Hz,20Hz,10Hz,1Hz的方波及1s通,4s 断的矩形波。只要将以上不同频率不同占空比的方波从主频分频产生,那么这个设计就能成功地实现。
四、程序设计与调试
有了设计方案,那么我们利用Quartus II这个软件设计平台,对设计方案进行程序设计,首先我们要产生一个500Hz的方波信号,因开发板的主频为50MHz,根据计算我们需对开发板主频进行100000分频,那么我们就可以得到500Hz方波了,再对所得方波进行25分频就很容得到20Hz的方波,再对500Hz 方波进行50分频得到10Hz的方波,并对500Hz方波进行500分频得到1Hz的方波,再对所得1Hz信号进行计数翻转,便能得到1s通4s断的断续信号,对所得10Hz信号进行计数翻转,便能得到0.2秒送,0.2秒断,0.2秒送,0.6秒断的1.2秒不等间隔断续的信号,对所得20Hz信号进行计数翻转,便能得到0.35秒送,0.35秒断的0.7秒断续的信号,至此所有所需信号都已产生,再将对应信号相与并赋给相应输出信号,那么我们就可以从示波器上观察到设计要求中的4
个信号音了。
程序设计如下:
1、分频程序:
PROCESS(CLK)--500HZ (50MHZ主频分频为500HZ)
VARIABLE COUNT1:INTEGER RANGE 0 TO 99999:=0;
BEGIN
IF RISING_EDGE(CLK)THEN
IF COUNT1=99999 THEN CLK500HZ<='1';COUNT1:=0;
ELSIF COUNT1<50000 THEN CLK500HZ<='0';COUNT1:=COUNT1+1; ELSIF COUNT1<99999 THEN CLK500HZ<='1';COUNT1:=COUNT1+1; END IF;
END IF;
END PROCESS;
PROCESS(CLK500HZ)--20HZ (500HZ继续分频为20HZ)
VARIABLE COUNT2:INTEGER RANGE 0 TO 24:=0;
BEGIN
IF RISING_EDGE(CLK500HZ)THEN
IF COUNT2=24 THEN CLK20HZ<='1';COUNT2:=0;
ELSIF COUNT2<13 THEN CLK20HZ<='0';COUNT2:=COUNT2+1;
ELSIF COUNT2<24 THEN CLK20HZ<='1';COUNT2:=COUNT2+1;
END IF;
END IF;
END PROCESS;
PROCESS(CLK500HZ)--10HZ (500HZ继续分频为10HZ)
VARIABLE COUNT3:INTEGER RANGE 0 TO 49:=0;
BEGIN
IF RISING_EDGE(CLK500HZ)THEN
IF COUNT3=49 THEN CLK10HZ<='1';COUNT3:=0;
ELSIF COUNT3<25 THEN CLK10HZ<='0';COUNT3:=COUNT3+1;
ELSIF COUNT3<49 THEN CLK10HZ<='1';COUNT3:=COUNT3+1;
END IF;
END IF;
END PROCESS;
PROCESS(CLK500HZ)--1HZ (500HZ继续分频为1HZ)
VARIABLE COUNT4:INTEGER RANGE 0 TO 499:=0;
BEGIN
IF RISING_EDGE(CLK500HZ)THEN
IF COUNT4=499 THEN CLK1HZ<='1';COUNT4:=0;
ELSIF COUNT4<250 THEN CLK1HZ<='0';COUNT4:=COUNT4+1;