语音信号采集与处理系统的设计
音频信号采样与处理系统方案设计
姓 名 : 杨 宁 学 号 : [1**********] 专 业 : 电子信息工程 学 院 : 电子工程学院
指 导 老 师: 那 彦
目 录
第1章 理论依据 1.1音频信号的介绍 1.2采样频率 1.1 TMS320VC5402介绍 1.2 TLC320AD50介绍 第2章 系统方案设计 2.1 DSP 核心模块的设计 2.2 A/D转换模块 第3章 硬件设计 3.1 DSP 芯片 3.2 电源设计 3.3 复位电路设计 3.4 时钟电路设计 3.5 程序存储器扩展设计 3.6数据存储器扩展设计 3.7 JTAG接口设计 3.8 A/D接口电路设计 第4章 软件设计 第5章 总结 参考文献 致 谢 附录
2 2 2 2 6 8 8 9 10 10 10 11 12 12 13 13 14 15 17 18 19 20
摘要
在研究数字信号处理的基础上,提出了一个基于DSP TMS320VC5402
和A/D转换芯片TLC320AD50的音频信号采集系统的设计。给出了该系统的总体设计方案,具体硬件电路, 包括系统电源设计、复位电路设计、时钟电路设计、存储器设计、A/D接口电路设计、JTAG 接口设计、DSP 与A/D芯片的连接等,以及软件流程图。
关键词:音频信号 数据采集 DSP TLC320AD50
ABSTRACT
On the basis of studying digital signal processing, The design of A audio signal acquisition system based on DSP TMS320VC5402 and A/D conversion chip TLC320AD50 is proposed. Overall design scheme of the system is given, and the specific hardware circuit, including the system power supply design, design of reset circuit, clock circuit design, design of memory, A/D interface circuit, JTAG interface, DSP and the connection of A/D chip, and software flow chart.
Key words: audio signal data collection DSP TLC320AD50
绪论
1.1 选题背景及意义
语言是人类特有的功能,它是创造和记载几千年人类文明史的根本手段,没有语言就没有今天的人类文明。语音是语言的声学表现,是相互传递信息的最重要的手段,是人类最重要、最有效、最常用和最方便的交换信息的形式。通过语言相互传递信息是人类最重要的基本功能之一。让计算机能听懂人类的语言,是人类自计算机诞生以来梦寐以求的想法,用现代手段研究语音信号,使人们能更加有效地产生、传输、存储、获取和应用语音信息。
通过语音传递信息是人类最重要、最有效、最常用和最方便的交换信息的形式。语言是人类持有的功能.声音是人类常用的工具,是相互传递信息的最主要的手段。因此,语音信号是人们构成思想疏通和感情交流的最主要的途径。并且,由于语言和语音与人的智力活动密切相关,与社会文化和进步紧密相连,所以它具有最大的信息容量和最高的智能水平[3]。现在,人类已开始进入了信息化时代,用现代手段研究语音信号,使人们能更加有效地产生、传输、存储、获取和应用语音信息,这对于促进社会的发展具有十分重要的意义。
让计算机能听懂人类的语言,是人类自计算机诞生以来梦寐以求的想法。随着计算机越来越向便携化方向发展,随着计算环境的日趋复杂化,人们越来越迫切要求摆脱键盘的束缚而代之以语音输人这样便于使用的、自然的、人性化的输人方式。作为高科技应用领域的研究热点,语音信号采集与分析从理论的研究到产品的开发已经走过了几十个春秋并且取得了长足的进步。它正在直接与办公、交通、金融、公安、商业、旅游等行业的语音咨询与管理.工业生产部门的语声控制,电话、电信系统的自动拨号、辅助控制与查询以及医疗卫生和福利事业的生活支援系统等各种实际应用领域相接轨,并且有望成为下一代操作系统和应用程序的用户界面。可见,语音信号采集与分析的研究将是一项极具市场价值和挑战性的工作。我们今天进行这一领域的研究与开拓就是要让语音信号处理技术走。
语音信号采集与分析之所以能够那样长期地、深深地吸引广大科学工作者去不断地对其进行研究和探讨,除了它的实用性之外,另一个重要原因是,它始终与当时信息科学中最活跃的前沿学科保持密切的联系.并且一起发展。语音信号采集与分析是以语音语言学和数字信号处理为基础而形成的一门涉及面很广的综合性学科,与心理、生理学、计算机科学、通信与信息科学以及模式识别和人工智能等学科都有着非常密切的关系。
对语音信号采集与分析的研究一直是数字信号处理技术发展的重要推动力量。因为许多处理的新方法的提出,首先是在语音信号处理中获得成功,然后再推广到其他领域。
1.2 语音信号在国内外研究现状
语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的学科,是目前发展最为迅速的信息科学研究领域的核心技术之一。
60年代之前的发展主要有:1876年Bell 发明电话,1939年H.Dudley 研制成功第一个声码器,1942年Bell 实验室发明了语谱仪,1948年美国Haskin 实验室研制成功“语图回放机”,1952年Bell 实验室研制成能识别十个英语数字的识别器。60年代以后,随着计算机技术的发展,语音信号处理技术获得了长足的进步,计算机模拟实验取代了硬件研制的传统做法。各种突破性的思想不断涌现。20世纪60年代中期形成的一系列数字信号处理的理论和算法,如数字滤波器、快速傅立叶变换(FFT )等是语音信号数字处理的理论和技术基础,主要的有Martin 等人为邮局研制了邮政编码阅读机。随着信息科学技术的飞速发展,语音信号处理取得了重大的进展:进入70年代之后,提出了用于语音信号的信息压缩和特征提取的线性预测技术(LPC ),并已成为语音信号处理最强有力的工具,广泛应用于语音信号的分析、合成及各个应用领域,以及用于输入语音与参考样本之间时间匹配的动态规划方法;
20世纪80年代,由于矢量量化,隐马尔可夫模型和人工神经网络(ANN)的研究取得了迅速发展,并相继被应用与语音信号处理,经过不断的改进与完善,使得语音信号处理技术产生了突破型的进展。进入20世纪90年代以来,语音信号的采集与分析在实用化这一方面取得了很多的实质性的进展。语音信号处理的各项课题是促进其发展的重要动力之一,同时,它的许多成果也体现在有关语音信号处理的各项技术之中。
1.3 本文主要工作
本次音频信号的采集与处理的设计主要是基于DSP TMS320VC5402和A/D转
换芯片TLC320AD50的语音信号采集系统的设计。给出了该系统的总体设计方案,具体硬件电路, 包括系统电源设计、复位电路设计、时钟电路设计、存储器设计、A/D接口电路设计、JTAG 接口设计、DSP 与A/D芯片的连接等,以及软件流程图。
第1章 理论依据
20世纪50年代以来,随着数字信号处理各项技术的发展,语音信号处理技术得
到不断提高, 语音合成、语音识别、语音记录与语音控制等技术已开始逐步成熟并得到应用。在语音信号处理过程中, 要实现语音信号处理技术的精确性、实时性目的,语音信号采集和无误差存储成为语音信号处理中的前提。TMS320VC5402是TI 公司推出的定点数字信号处理器,它采用修正的哈佛结构,包括1个程序存储总线、3个数据存储总线和4个地址总线,这种结构允许同时执行程序指令和对数据操作, 运行速度快,单周期定点指令执行时间为10NS ,远高于语音信号采集和处理的要求。在语音信号采集中, 模拟信号向数字信号转换(ADC ) 的精度和实时性对后续信号处理过程起到了重要作用。设计中采用TLC320AD50完成语音信号的A/D转换。TLC320AD50是
TI 公司提供的一款16 BIT 同步串口A/D和D/A转换芯片,ADC 之后有1个抽取
滤波器以提高输入信号的信噪比, 其采样频率最高可达22.5 KB/S,满足语音信号处理中关于采样频率的要求。
1.1音频信号的介绍
音频信号是带有语音、音乐和音效的有规律的声波的频率、幅度变化信息载体。 根据声波的特征,可把音频信息分类为规则音频和不规则声音。其中规则音频又可以分为语音、音乐和音效。规则音频是一种连续变化的模拟信号,可用一条连续的曲线来表示,称为声波。声音的三个要素是音调、音强和音色。声波或正弦波有三个重要参数:频率 ω0、幅度A n 和相位ψn ,这也就决定了音频信号的特征。
1.2采样频率
在进行模拟/数字信号的转换过程中,当采样频率fs.max 大于信号中最高频率fmax 的2倍时,即:fs.max>=2fmax,则采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的5~10倍;采样定理又称奈奎斯特定理。 这就保证了音频信号采样的不失真性。
1924年奈奎斯特(Nyquist)就推导出在理想低通信道的最高大码元传输速率的公式:想低通信道的最高大码元传输速率=2W*log2 N (其中W 是理想低通信道的带宽,N 是电平强度)
1.3 TMS320VC5402介绍
TMS320VC5402是基于一个先进的哈佛结构:一个指令存储总线和三个数据存
储总线。此处理器提供一个具有高平行度的算术逻辑单元、特殊功效的硬件逻辑、片上存储器和附加的外围芯片。操作灵活和快速的DSP 原理及专用的指令系统。独立的程序和数据空间允许他同时并行地访问指令和数据,提供了高度的平行性。在一个独立的周期内可以同时执行一次写操作和两次读操作。并行的指令存储和特殊功用的指令都可以完全的被在一个机器周期内执行。数据可以在程序空间或数据空间内传输(见图1.1输入输出时序图)。这一并行操作是算术、逻辑以及二进制运算的强大的机制。另外,
C5402还包括控制机制从而可以处理中断、循环、程序调用。
图1.1 输入输出时序图
C5402设备提供片上ROM 和RAM 来帮助系统完成执行任务和系统的综合。C5402映射到片上一块4K×16BIT ROM。用户可以根据自己的需要来设置ROM 的
编程实现自己应用目的。安全选项可以用来保护自定义的ROM 。系统的引导可以在
C5402的片上ROM 中利用。这段引导程序在上电时可以主动的把用户代码程序从片
外存储器中装载进来。但如果引脚MP/MC在硬件复位时被采样低电平,那么程序将从ROM 的FF8H0处开始执行。这个区域包含了启动引导程序的分支指令。C5402引导提供了不同装载程序的方法以便适应不同系统的需求:并行的8位时16位
EPROM 并行的8位I/O空间或16位模式8位或时16位的串口模式主机端口引导。
存器的地址。
音频信号采样与处理系统方案设计
图1.2 TMS320VC5402的引脚图
任何用户中断或陷阱向量将会被映射到新的128数字的页面上来。
时,处理器的PC 装入陷阱向量从而让处理器去处理向量位置处的程序。每个向量地址
存储器空间数据存储器空间用于存储需要程序处理的数据或程序处理后的结果。通过对
要是允许中断分支服务与正常的服务。在系统复位时,复位、中断和陷阱向量都被映射
读取。复位时,DROM 位被清0;64K 字的数据存储器空间包括数据存储器映像寄存
中断和陷阱向量都被定义地址到程序空间。这些向量是软的---也就是说当遇到陷阱
处理器方式状态寄存器PMST 的DROM 位的设置,将片内ROM 配置在数据存储器
到程序地址空间FF80H 。然而,这些向量可以被重新映射到128字页的程序空间当系
器,0000H ~001FH 是常用的CPU 寄存器地址, 0020H ~005FH 是片内外设寄
空间(DROM=1),这样,可以用指令将片内ROM 作为数据存储器中的数据ROM 来
都有四个字空间被保留,以便适应延迟的分叉指令,不管是一字指令还是两字指令,只
统复位时。这将PMTR 寄存器装载中断向量标志位被完成。在完成装载IPTR 之后,
C5402在程序空间规划时用一个可扩展的页存储器,它允许访问1024K 的程序
音频信号采样与处理系统方案设计
I/O空间用于与外部存储器映像的外设接口,也可以用于扩展外部数据存储空间,
除程序存储器空间和数据存储器空间外,C54X 系列器件还提供了I/O存储器空间,利用I/O空间可以扩展外部存储器。I/O存储器空间为64K 字(0000H ~FFFFH ),有两条指令PORTR 和PORTW 可以对I/O存储器空间操作,读写时序与程序存储器空间和数据存储器空间有很大不同。TMS320VC5402存储器分配情况如图1.3存储器分配图所示,当存储空间超过64K 之后,TMS320VC5402采用了分页机制,进行程序扩展见图1.4存储器分页机制所示。
程序空间:页0
0000H
007FH 0080H
007FH 0080H 0000H
F000H FF00H
FF7FH FF80H (微处理器模式)
FF7FH FF80H (微型计算机模式)EFFFH
F000H
程序空间:页0
0000H 005FH
0060H 007FH 0080H 3FFFH 4000H
FF00H
FF7FH
FF80H
数据空间34000H 34000H
图1.3 存储器分配图
0 0000H
2 0000H
... ...
2 4000H
F ... F 4000H
0 F XPC=0
1 XPC=1
XPC=2
... F FFFFH
XPC=15
图1.4存储器分页机制
1.4 TLC320AD50介绍
TLC320AD50(以下简称AD50 )是TI 生产的多媒体音频编解码器芯片, 它集成了
16位A/D和D/A 转换器, 采样速率最高可达22.05KHZ , 其采样速率可通过DSP 编程来设置。在AD50内部ADC 之后有抽样滤波器, 以提高输入信号的信噪比, 在DAC 之前有插值滤波器, 以保证输出信号平滑。AD50内部有7个数据和控制寄存器, 用于编程设置它们的工作状态。由于语音信号的频率范围在200HZ ~23400HZ 之间, 采样率一般设定为8KHZ , 所以用AD50做AD 转换器非常合适。AD50的工作方式和采样频率均通过串口编程来实现。由于转换的数据和控制数据是通过同一串行口进行传输的, 所以AD50中有首次通信和二次通信。首次通信专用于转换数据的传送。二次通信则用来设置和读出寄存器的值, 所有的寄存器都在二次通信时编程。启动二次通信有两种方法, 一种是在FC 上加高电平, 第二种是将15位方式在首次通信的D IN 的LSB 位置为1。AD50完成语音信号采集后, 在DSP 中进行相应的处理算法, 语音信号经处理再从AD50输出。
第2章 系统方案设计
基于TMS320VC5402的语音信号采集系统的结构如图2.1所示,该系统的中央处理单元采用美国TI (德州仪器) 公司的高性能定点数字信号处理芯片TMS320VC5402,TMS320VC5402是TI 公司推出的定点数字信号处理器,它采用修正的哈佛结构,包括1个程序存储总线、3个数据存储总线和4个地址总线,这种结构允许同时执行程序指令和对数据操作,运行速度快,单周期定点指令执行时间为10NS 。在语音信号采集中, 模拟信号向数字信号转换(ADC ) 的精度和实时性对后续信号处理过程起到了重要作用。设计中采用TLC320AD50完成语音信号的A/D转换。TLC320AD50是TI 公司提供的一款16 BIT同步串口A/D和D/A转换芯片,ADC 之后有1个抽取滤波器以提高输入信号的信噪比, 其采样频率最高可达22.5 KB/S,满足语音信号处理中关于采样频率的要求。
图2.1系统结构框图
2.1 DSP核心模块的设计
TMS320VC5402是整个数据采集系统中,核心处理部分。把缓存器的数据转存到海量存储器中,并对CPLD 逻辑的工作方式,工作时钟进行控制,同时还完成与上位机的通信。TMS320VC5402有20根地址线,16根数据线,可以寻址1M 的地址空间,在这里,选用TMS320VC5402的数据空间用做SRAM 的扩展,选用TMS320VC5402的I/O空间用做FLASH 扩展。
DSP 核心模块充当整个系统的CPU 的功能,除了承担对A\D转换器送来的信
号做相应的处理之外,还驱动RS-232串行通信链路将相应的数据及时的传到上位机上以备做之后的相关处理或计算,这就要求DSP 芯片的处理能力相当的强大和速度必须与ADC 相匹配,这一点TMS320VC5402完全有能力做到。
2.2 A/D转换模块
A/D转换模块是整个系统的主要部分,它接收来自外部的信号或模拟数据,然后经过处理转换成数字信号传递给CPU 做后续的处理。设计中采用TLC320AD50完成语音信号的A/D转换。TLC320AD50是TI 公司提供的一款16 BIT同步串口A/D和D/A转换芯片,ADC 之后有1个抽取滤波器以提高输入信号的信噪比, 其采样频率最高可达22.5 KB/S,满足语音信号处理中关于采样频率的要求。
TLC320AD50(以下简称AD50 ) 是TI 生产的多媒体音频编解码器芯片, 它集成了16位A/D和D/A 转换器, 采样速率最高可达22.05KHZ , 其采样速率可通过DSP 编程来设置。在AD50内部ADC 之后有抽样滤波器, 以提高输入信号的信噪比, 在DAC 之前有插值滤波器, 以保证输出信号平滑。AD50内部有7个数据和控制寄存器, 用于编程设置它们的工作状态。由于语音信号的频率范围在200HZ ~23400HZ 之间, 采样率一般设定为8KHZ , 所以用AD50做转换A/D器非常合适。AD50的工作方式和采样频率均通过串口编程来实现。由于转换的数据和控制数据是通过同一串行口进行传输的, 所以AD50中有首次通信和二次通信。首次通信专用于转换数据的传送。二次通信则用来设置和读出寄存器的值, 所有的寄存器都在二次通信时编程。启动二次通信有两种方法, 一种是在FC 上加高电平, 第二种是将15位方式在首次通信的DIN 的LSB 位置为1。AD50完成语音信号采集后, 在DSP 中进行相应的处理算法, 语音信号经处理再从AD50输出。
第3章 硬件设计
3.1 DSP芯片
作为DSP 家庭高性价比代表的16位定点DSP 芯片,C5402适用于语音通信等实时嵌入应用场合。与其它C54X 芯片一样, C5402具有高度灵活的可操作性和高速的处理能力。其性能特点如下:操作速率可达100MIPS ; 具有先进的多总线结构,三条16位数据存储器总线和一条程序存储器总线;40位算术逻辑单元(ALU ),包括一个40位桶形移位器和两个40位累加器;一个17×17乘法器和一个40位专用加法器,允许16位带/不带符号的乘法;整合维特比加速器,用于提高维特比编译码的速度; 单周期正规化及指数译码;8个辅助寄存器及一个软件栈,允许使用业界最先进的定点DSP C 语言编译器;数据/程序寻址空间为1M×16BIT ,内置4K×16BIT ROM 和16K×16BIT RAM;内置可编程等待状态发生器、锁相环(PLL )时钟产生器、两个多通道缓冲串口、一个与外部处理器通信的8位并行HPI 口、两个16位定时器以及6通道DMA 控制器且低功耗。与C54X 系列的其它芯片相比,C5402具有高性能、低功耗和低价格等特点。它采用6级流水线, 且当RPT (重复指令)时,一些多周期的指令就变成了单周期的指令;芯片内部RAM 和ROM 可根据PMST 寄存器中的OVLY 和DROM 位灵活设置。这些都有利于算法的优化。
3.2 电源设计
为了降低芯片功耗,C54X 系列芯片大部分都采用低电压设计,并且采用双电源供电,即内核电源CVDD :采用1.8V ,主要为芯片的内部逻辑提供电压,包括CPU 、时钟电路和所有的外设逻辑;I/O电源DVDD :采用3.3V ,主要供I/O接口使用。可直接与外部低压器件接口,而无需额外的电平变换电路。DSP 芯片采用的供电方式,主要取决于应用系统中提供什么样的电源。在实际中,大部分数字系统所使用的电源可工作于5V 或3.3V ,本设计采用TI 公司提供的双电源芯片:TPS73HD318电源的最大输出电流为750MA ,并且提供两个宽度为200MS 的低电平复位脉冲。电路图如图
3.1所示。
3.3 复位电路设计 音频信号采样与处理系统方案设计 图3.1由TPS73HD318芯片组成的双电源电路 序。本设计采用由TPS3707-33组成的自动复位电路(如图3.2)。 RS 引脚应至少保持5个时钟周期稳定的低电平,以确保数据、地址和控制线的正确配置。复位后(RS 回到高电平) ,CPU 从程序存储器的FF80H 单元取指,并开始执行程TMS320VC5402的复位输入引脚RS 为处理器提供了一种硬件初始化的方法, 它是一种不可屏蔽的外中断, 可在任何时候对TMS320VC5402进行复位。当系统上电后,
图3.2由TPS3707-33芯片组成的自动复位电路
3.4 时钟电路设计
时钟电路用来为’C54X芯片提供时钟信号,由一个内部振荡器和一个锁相环PLL 组成,可通过芯片内部的晶体振荡器或外部的时钟电路驱动。利用DSP 芯片内部提供的晶振电路,在DSP 芯片的X1、X2之间连接晶体振荡器。使用芯片内部的振荡器在芯片的X1和X2/CLKIN引脚之间接入一个晶体, 用于启动内部振荡器。时钟电路图如图3.3。
C1=C2=20pF
图3.3时钟电路
3.5 程序存储器扩展设计
FLASH 存储器用以扩展程序存储器AT29LV1024是1M 位的FLASH 存储器FLASH 存储器与EPROM 相比,具有更高的性能价格比,而且体积小、功耗低、可电擦写、使用方便,并且3.3V 的FLASH 可以直接与DSP 芯片连接。地址线:A0~A15;数据线:I/O0~I/O15;控制线:CE —片选信号;WE —编程写信号;OE —输出使能信号。扩展连接图如图3.4。
图3.4程序存储器扩展电路
3.6数据存储器扩展设计
要实现语音数据和系统程序的存储,TMS320VC5402必须有外接扩展存储器。TMS320VC5402 的速度为100 MI/S,为保证DSP 运行速度,需要外部存储器的速度接近10NS 。系统选择ICSI64LV16作为外部存储器,其容量64K 字×16 BIT。其硬件连接图如图3.5所示。
图3.5数据存储器扩展电路
3.7 JTAG接口设计
在系统中,通过JTAG 测试口访问和调试DSP 芯片。JTAG 是一种国际标准测试协议(IEEE 1149.1兼容) ,针对现代超大规模集成电路测试、检验困难而提出的基于边界扫描机制和标准测试存取口的国际标准。标准JTAG 测试端口包括4个必选引脚和一个可选的异步JTAG 的复位引脚TRST ,分别是工作模式选择引脚TMS ,串行数据输入引脚TDI ,串行数据输出引脚TDO ,端口工作时钟引脚TCK 。JTAG 接口引脚连接如图3.6所示。
图3.6 JTAG接口引脚连接图
3.8 A/D接口电路设计
A/D转换模块是整个系统的主要部分,它接收来自外部的信号或模拟数据,然后经过处理转换成数字信号传递给CPU 做后续的处理。TLC320AD50是一款SIGMA- DELTA 型单片音频接口芯片, 通过串行口与DSP 或其它设备通信。它内部集成了16位的D/A 和A/D 转换器, 采样速率最高可达22.05 KB/S,其采样速率可通过DSP 编程来设置。设置AD50时,串行通信数据最低为高电平。在DAC 之前有一个插值滤波器以保证输出信号平滑, ADC 之后有一个抽取滤波器以提高输入信号的信噪比。AD50 的发送和接收可以同时进行。参考AD50的产品手册文献, 得出TMS320VC5402与
图3.7 TLC320AD50与 TMS320VC5402 串行口的连接
第4章 软件设计
主程序流程图如图4.1所示。
图4.1主程序流程图
MATLAB 是美国MATH WORKS 公司推出的一种面向工程和科学计算的交互式计算软件,在MATLAB 环境中,可以通过多种编程方法驱动声卡实现对语音信号的采集和播放,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析.使用MATLAB 语言编程可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析、声音回放以及各种分析图的呈现等等.下面给出一个MATLAB 程序,读入一个采样频率为 22.050 KHZ、16位单声道的W A V 文件,然后播放。具体程序见附录,其仿真结果如图4.2所示。
图4.2 MATLAB 环境中做出的语音信号的波形图、频谱图和倒谱图
第5章 总结
在这次课程设计中我将总体电路分成了多个模块,这样有助于我理清思路,设计上会比较容易实现一些。
课程设计刚开始时,我拿着选定的题目不知如何入手。毕竟课程设计不同于实验课,电路图都要自己设计,我感觉有些迷茫。静下心来,仔细分析题目,再加上老师和周边同学的帮助,心中才有了谱。我将整个系统根据不同的功能化分成几个模块,分别进行设计,最后再将其整合起来。在这个过程中我遇到了不少问题,但是通过老师和同学的帮助,最终还是顺利的解决了这些问题,这使我充分了解到了一个人的力量是有限的,团队合作非常重要。
通过这次课程设计,使我对DSP 技术有了更进一步的了解。在此基础上学习了基于DSP 系统设计的基本思想和方法,学会了科学地分析实际问题,通过查资料、分析资料及请教老师和同学等多种途径,独立解决问题。同时,也培养了我认真严谨的工作作风。这次的设计虽然是比较完善的,但还是略有不足,因为我的这篇论文主要是偏系统设计,关于信号处理并未做过多的介绍及研究,所以再加上我们研讨小组关于信号处理的相关研究才能真正使这次的工作尽善尽美。
参考文献
[1]王念旭等,《DSP 基础与应用系统设计》,北京航空航天大学出版社
[2] 李哲英,《DSP 基础理论与应用技术》,北京航空航天大学出版社.
[3] 赵晶.Protel99高级应用[M].人民邮电出版社, 2006.
[4] 谷树忠.Protel DXP实用教程[M].电子工业出版社,2003.
[5] 刘湘涛、江世民. 单片机原理与应用[M].电子工业出版社, 2006.
[6] 孙育才. ATMEL 新型A T89S51系列单片机及其应用[M].清华大学出版社, 2005.
[7] 李华.MCU-51系列单片机实用接口技术[M].北京:北京航空航天大学出版社,1993.
[8] 李华.MCU-51系列单片机实用接口技术[M].北京:北京航空航天大学出版社,1993.
致 谢
虽然已经做过几次课程设计了,但每次做起来还是感到很吃力。在做课程设计时总觉得对所学的知识掌握的不够熟练,不能将它应用到实际问题中。在编写程序的过程中遇到很多麻烦,还好有老师和同学的帮助,总算顺利完成了任务。通过这次课程设计,使我对DSP 技术有了更进一步的了解。在此基础上学会了基于DSP 系统设计的基本思想和方法。
在整个设计过程中有很多人给了我帮助,在此要感谢我的指导老师那彦老师和热心的同学们,要不是他们的帮助,本课程设计是不可能完成的。多谢那彦老师的悉心辅导和同学们的热心帮助并祝在新的一年里他们能工作顺利万事如意!
附 录
[y,fs] = wavread('c:\wav\wav1.wav'); %读一个已保存的WAV 语音文件 wavplay (y) ; %播放语音文件
t=(0:length(y)-1)/fs; %计算语音播放时间
subplot(3,1,1) ; %确定语音波形的显示位置
plot(t,y) ; %画波形图
legend('波形图') ;
xlabel('时间(s)'); %X 轴的标题
ylabel('幅度') ; %Y 轴的标题
x=fft(y.*hamming(length(y))); %加hamming 窗快速傅立叶变换
fm=5000*length(x)/fs; %限定频率范围
f=(0:fm)*fs/length(x); %确定频率刻度
subplot(3,1,2) ; %确定语音波形的显示位置
plot(f,20*log10(abs(x(1:length(f)))+eps)); %画频谱图
legend('频谱图') ;
xlabel('频率(Hz )') ;
ylabel('频谱幅度(dB )') ;
c=fft(log(abs(x)+eps)); % 倒频谱计算
ms1=fs/1000;
ms20=fs/50;
q=(ms1:ms20)/fs; %确定倒频刻度
subplot(3,1,3) ;
plot(q,abs(c(ms1:ms20))) ; %画倒谱图
legend('倒谱图') ;
xlabel('倒频(s)') ;
ylabel('倒频谱幅度') ;
DSP 初始化程序:
#include "timothy.h"
#include "math.h"
int sin_data[256];
int tri_data[256];
ioport int port9100;
ioport int port8000;
int keycode=0x0000;//the code number of the key;
void main(void)
{
int i;
ST0=0x1800;
ST1=0x4800;//disable all maskable interrupt;
SWWSR=0x7fff;//no wait cycle;
CLKMD=0x1007;
IFR=0xffff;
IMR=0x0007;
asm(" RSBX INTM");//open the interrupt;
for(i=0;i
{
sin_data[i]=255*sin(3.1415*i/256);
}
129
for(i=0;i
{
tri_data[i]=i;
}
for(;;)
{
if(keycode==0xf410)//key F1;
{
for(i=0;i
{
port9100=sin_data[i];
}
}
else if(keycode==0xf411)
{
for(i=1;i
{
port9100=tri_data[i];
}
}
}
}
interrupt void bobo_int1()
{
keycode=port8000;
数据处理程序:
#define DSYNC_REVT1 0x05 /* sync to McBSP1 receive event */
#define AUTOINIT_ENABLE 0x01 /* auto-initialization mode is enabled */ #define DINM_ENABLE 0x01 /* DMA interrupt is enabled */
#define IMOD_HALFBLOCK 0x01 /* DMA Int occurs each half block*/ #define CTMOD_DEC 0x00 /* Decrement counter mode*/
#define INDEXMODE_NOMOD 0x00 /* No modify (Index mode)*/ #define INDEXMODE_INC 0x01 /* Post increment index mode*/
#define HIGH_PRIORITY 0x01 /* Highest priority for DMA channel */ #define INTSEL_01 0x01 /*
RINT0,XINT0,RINT2,XINT2,DMAC2,DMAC3, */
/* DMAC4,DMAC5 */
#define DSYNC_XEVT1 0x06 /* sync to McBSP1 transmit event*/
#define IMOD_BLOCK 0x00 /* DMA Int occurs at the end of the block*/ #define CTMOD_DEC 0x00 /* Decrement counter mode*/
#define SPACE_DATA 0x01 /* DMA Data Space Select*/
/* Memory-Mapped Register Definitions */
#define DMPREC (*(volatile unsigned int*)(0x0054u))
#define DMSBA (*(volatile unsigned int*)(0x0055u))
#define DMSDI (*(volatile unsigned int*)(0x0056u))
#define DMSDN (*(volatile unsigned int*)(0x0057u))
#define IMR (*(volatile unsigned int*)(0x0000u))
#define IFR (*(volatile unsigned int*)(0x0001u))
#define XPC (*(volatile unsigned int*)(0x001eu))
#define PMST (*(volatile unsigned int*)(0x001du))
#define BSCR (*(volatile unsigned int*)(0x0029u))
#define DRR1_ADDR(port) (port ? 0x41 : 0x21)
#define DXR1_ADDR(port) (port ? 0x43 : 0x23)
#define TCR_ADDR(port) (port ? 0x32 : 0x26)
#define TCR(port) (*(volatile unsigned int*)TCR_ADDR(port))
#define PRD_ADDR(port) (port ? 0x31 : 0x25)
#define PRD(port) (*(volatile unsigned int*)PRD_ADDR(port))
/* Sub Address Register Definitions */
#define DMSRC_SUBADDR 0x00
#define DMDST_SUBADDR 0x01
#define DMCTR_SUBADDR 0x02
#define DMSEFC_SUBADDR 0x03
#define DMMCR_SUBADDR 0x04
#define DMSRCP_SUBADDR 0x1E
#define DMDSTP_SUBADDR 0x1F
#define DMIDX0_SUBADDR 0x20
#define DMIDX1_SUBADDR 0x21
#define DMFRI0_SUBADDR 0x22
#define DMFRI1_SUBADDR 0x23
#define DMGSA_SUBADDR 0x24
#define DMGDA_SUBADDR 0x25
#define DMGCR_SUBADDR 0x26
#define DMGFR_SUBADDR 0x27
/* Channel Definitions */
#define DMA_CH0 0
#define DMA_CH1 1
#define DMA_CH2 2
#define DMA_CH3 3
#define DMA_CH4 4
#define DMA_CH5 5
/* DMA Channel Flags for IMR/IFR */
#define DMAC0 6
#define DMAC1 7
#define DMAC2 10
#define DMAC3 11
#define DMAC4 12
#define DMAC5 13
/* Register Bit Fields */
#define TDDR 0
#define TSS 4
#define TRB 5
/* Macro Definitions */
/* DMA Framecount Set */
#define DMA_FRAMECOUNT(chan, value) \
{ DMSBA = (chan * 5) + DMSEFC_SUBADDR;\
DMSDN = (DMSDN & 0xFF00u) | value;\
}
/* DMA Channel Enable */
#define DMA_ENABLE(chan) \
DMPREC |= (1
#define INTR_GLOBAL_ENABLE\
asm("\tRSBX INTM")
#define INTR_CLR_FLAG(flag)\
{IFR |= (0x1u
#define INTR_ENABLE(flag)\
{IMR |= ((0x1u)
#define TIMER_HALT(port)\
TCR(port) |= (0x1u
#define TIMER_START(port)\
TCR(port) = (TCR(port) & (~(0x1u)
#define TIMER_RESET(port)\
{ TIMER_HALT(port);\
TCR(port) &= 0xFFF0u;\
PRD(port) = 0xffffu;\
TIMER_START(port); }
/* DMA Reset All */
static inline void dma_reset_all( void )
{
unsigned short channel;
DMPREC = 0x0000u;
DMSBA = DMSRC_SUBADDR;
for (channel= 0;channel
{
DMSDI = 0x0000u; //src
DMSDI = 0x0000u; //dst
DMSDI = 0x0000u; //ctr
DMSDI = 0x0000u; //sefc
DMSDI = 0x0000u; //mcr
}
DMSBA = DMSRCP_SUBADDR;
DMSDI = 0x0000u; /*DMSRCP*/
DMSDI = 0x0000u; /*DMDSTP*/
DMSDI = 0x0000u; /*DMIDX0*/
DMSDI = 0x0000u; /*DMIDX1*/
DMSDI = 0x0000u; /*DMFRI0*/
DMSDI = 0x0000u; /*DMFRI1*/
DMSDI = 0x0000u; /*DMGSA*/
DMSDI = 0x0000u; /*DMGDA*/
DMSDI = 0x0000u; /*DMGCR*/
DMSDI = 0x0000u; /*DMGRF*/
}
/* Initialize Global DMA Registers */
static inline void dma_global_init(
unsigned int dmpre /*IN:Value for priority and enable reg*/
,unsigned int dmsrcp /*IN:Value for source page reg */
,unsigned int dmdstp /*IN:Value for dest page reg */
,unsigned int dmidx0 /*IN:Value for element index reg 0 */
,unsigned int dmidx1 /*IN:Value for element index reg 1 */
,unsigned int dmfri0 /*IN:Value for frame index reg 0 */
,unsigned int dmfri1 /*IN:Value for frame index reg 1 */
,unsigned int dmgsa /*IN:Value for global src addr reload */
,unsigned int dmgda /*IN:Value for global dst addr reload */
,unsigned int dmgcr /*IN:Value for global count reload reg*/
,unsigned int dmgfr) /*IN:Value for global frame reload reg*/
{
DMPREC &= 0xFF00u; /* Temporarily Disable All Channels */
DMSBA = DMSRCP_SUBADDR; /* Set DMA SubBank Address Register */ DMSDI = dmsrcp; /* Write to DMA src subbank register with increment */ DMSDI = dmdstp;
DMSDI = dmidx0;
DMSDI = dmidx1;
DMSDI = dmfri0;
音频信号采样与处理系统方案设计
DMSDI = dmfri1;
DMSDI = dmgsa;
DMSDI = dmgda;
DMSDI = dmgcr;
DMSDI = dmgfr;
DMPREC = dmpre;
}
static inline void dma_init(
unsigned int channel /*IN: DMA channel number */
,unsigned int dmsefc /*IN: Value to set sync & fr reg */
,unsigned int dmmcr /*IN: Value to set mode control reg */
,unsigned int dmctr /*IN: Value to set element count reg */
,unsigned int src_page /*IN: Value to set source page reg */
,unsigned int src_addr /*IN: Value to set source addr reg */
,unsigned int dst_page /*IN: Value to set dest page reg */
,unsigned int dst_addr /*IN: Value to set dest addr reg */
)
{
DMSBA = (channel * 5) + DMSRC_SUBADDR;
DMSDI = src_addr; /* Write to DMA src subbank register with increment */ DMSDI = dst_addr;
DMSDI = dmctr;
DMSDI = dmsefc;
DMSDI = dmmcr;
DMSBA = DMSRCP_SUBADDR;
DMSDI = src_page;
DMSDI = dst_page;
}
第 27 页 共 27 页