DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 253|回复: 0
打印 上一主题 下一主题

G.723标准数字录音系统设计

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-22 00:28:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果要将其录音以数字形式的数据保存,则应将其模拟录音信号变换成数字形式的数据,这就给原始数据的保存带来诸多不便。因此,笔者按G.723标准设计了一种数字录音机,它以ADSP-2181作为语音处理器和系统控制器,取消了普通录音机的机械部分和磁带,以大容量的闪速存储器(Flash RAM)作为数字语音数据存储器。该样机体积很小,录音时间长,没有机械噪声及机械故障,很有实用价值。







                          
                       
                          
                                通过编程控制寄存器D,可控制输入输出的增益。输入增益IG可在0~38dB之间调整,输出增益OG可在-15~6dB之间调整。AD73311的具体编程流程图如图3所示,控制程序如下: AX0=DM(0x3fe5); {For 2181-PF0 connect with AD73311-RESET} AR=AX0 AND 0XFFFE; {PF0 pin reset} DM(0x3fe5)=AR; {RESET AD73311 to program} NOP; {Delay} NOP; NOP AX0=DM(0x3fe5); AR=AX0 or 0X0001; {2181-PF0 SET} DM(0x3fe5)=AR; {ready to program} ax0=0x82f9; {写控制寄存器CRC,5V电源,使能ADC和DAC} tx0=ax0; IDLE; ax0=0x811b; {写控制寄存器CRB,分频,设置8K采样率} tx0=ax0; IDLE; ax0=0x8320; {写控制寄存器CRD,输出输入增益为0} tx0=ax0; IDLE; ax0=0x8400; {写控制寄存器CRE,DAC延迟量为0} ax0=ax0; IDLE; ax0=0x8001; {写控制寄存器CRA,进入数据传输模式} tx0=ax0; IDLE; 2.2 闪速存储器与ADSP-2181的接口电路闪速存储器采用韩国三星公司生产的KM29 N32000,容量为4M%26;#215;8=32Mbit,分成512块,每块有16页,每页528个字节。可进行100万次擦写,数据保存时间为10年,通过编程可自动进行擦写。这里用于保存录音数据,其数据保存不需要充电维持。






  3 系统控制软件设计
  ADSP21XX系列提供了一整套软件开发工具及相应的仿真器开发平台,给系统的调试与仿真提供了极大的方便。软件开发系统包括系统建造器、带运行时时间库的C编译器、汇编器、连接器、PROM划分器等。通过编译连接汇编源程序,可以生成EXE文件。此文件是存储映像文件,可以加载到仿真器上进行仿真;调试成功后,通过PROM划分器和EPROM烧制设备可以写入EPROM,系统复位时DSP加载EPROM程序便可自动运行,控制整个系统的工作。系统软件设计采用自举和中断控制两种方式。自举方式系统一上电,ADSP-2181读取EPROM中的程序,自动运行程序去控制整个系统工作。
  中断控制利用了ADSP-2181的两个中断,即sport0接收中断和timer中断。ADSP-2181的sport与AD73311相连。当得到一个采样数据时,产生一个接收中断,ADSP-2181读取便得到采样数据。由于sport0是全双工的,当产生接收中断时,同时可以发送数据,一方面在录音时可以得到回放效果;另一方面则在播放时可直接发送数据,而对采样数据置之不理,这样便于解码数据以固定的码率回放。Timer中断定时检测外部控制引脚状态,包括录音、放音、快放及码率转换4个引脚,每个引脚的0/1状态对应两种控制,即开始录音/停止录音、开始放音/停止放音、5.3kbps/6.3kbps码率转换及快放状态,共有七个状态。 DSP汇编语言的结构与ASM汇编语言类似,其开头部分对应中断向量表。工作在中断方式时,则向量表对应中断处一般为一条跳转语句;产生中断时,则跳到相应语句执行中断控制功能。主程序的中断设置部分如下: JUMP start;NOP;NOP;NOP; {reset start interrupt} RTI;NOP;NOP;NOP; {IRQ2} RTI;NOP;NOP;NOP; {IRQL1} RTI;NOP;NOP;NOP; {sport0 transmit} JUMP sportReceive;NOP;NOP;NOP; {sport0 receive} RTI;NOP;NOP;NOP; {IRQE} RTI;NOP;NOP;NOP; {BDMA} RTI;NOP;NOP;NOP; {sport1 transmit} RTI;NOP;NOP;NOP; {sport1 receive} JUMP settimer;NOP;NOP;NOP; {timer interrupt} RTI;NOP;NOP;NOP; {PowerDown} sporto和timer中断控制说明如下: (1)sporto接收数据中断在程序中,数据处理集中在此进行。主要过程是:在录音时,每收到240个采样数据,就进行G.723编码,将编码结果保存到闪速存储器中;在播放时,每次读取24个数据,将读取的数据进行解码,再通过串行口发送出去,经扬声器还原成语音信号。其流程如图6所示。(2)timer中断 timer中断用来检测用户的控制信息及显示运行时间信息。用户控制有4个,即码率选择、录音控制、放音控制及快退控制。对应这4个控制引脚,初始设定为输入态,然后通过检测各个引脚的电平设定工作态。其流程如图7所示。
  4 系统调试
  系统调试要使用AD公司提供的ADSP21XX系列的整套软件开发工具和仿真器。笔者使用ADSP-2181-EZ-ICE仿真器进行调试。仿真器上自带33MHz的2181,调试支持20个断点,可单步、设断点和全速运行,可随时观察和修改寄存器和存储单元的值。仿真器上提供了一个14针的仿真接口,仿真器通过此接口仿真控制目标系统。仿真器与计算机间有一个RS-232接口,通过数据进行连到计算机的串行口上,在仿真器开发平台上就可以进行软件调试。系统调试时遇到的主要问题是存储器读写及LCD的显示问题。开始时发现写进闪速存储器的数据与读出的数据不符。经仔细分析,发现是由于没有严格按照闪速存储器的读写操作时序进行编程,或是延迟量不够,或是两个信号的先后次序弄反了,数据可能根本没有写进去,读出的数据当然是错的。在严格按照其说明书的时序进行编程控制后,数据的读写擦除操作完全正常。在播放录音数据时,曾出现声音跳变不连续的问题,经分析发现原因在于地址定位时出错。因为对闪速存储器担任时每次读写都是一帧数据,而编解码时一次操作的数据为20/24个字节,两者长度不一样,需要进行转换操作。
  本系统中ADSP-2181处理器的机器周期为30ns,经设定最大的等待周期为7机器周期后也才有240ns,而LCD的工作使能脉宽至少要300ns。因此在硬件上增加了一单稳延迟电路,这样便解决了此问题。


                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-6-9 16:50 , 耗时 0.083506 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表