DSP语音信号采集与回放报告.docx
《DSP语音信号采集与回放报告.docx》由会员分享,可在线阅读,更多相关《DSP语音信号采集与回放报告.docx(25页珍藏版)》请在冰豆网上搜索。
![DSP语音信号采集与回放报告.docx](https://file1.bdocx.com/fileroot1/2023-5/23/b1877042-a3fe-4f35-915b-dc51b5ab0499/b1877042-a3fe-4f35-915b-dc51b5ab04991.gif)
DSP语音信号采集与回放报告
电子与信息工程学院
DSP综合实验报告
系(学院):
电子与信息工程学院
专业班级:
姓名:
学号:
题目:
语音信号采集与回放
指导老师:
2010年6月28日
目录:
概述
一.总体设计方案
1.1总框图
1.2DSP芯片
1.3A/D转换器与D/A转换器
1.3.1D/A转换器DAC0832的介绍
1.3.2A/D转换器DA574的介绍
1.4高增益放大器(UA741)
1.5高频功率放大器(LM386)
1.6带通滤波器
二.硬件电路设计
2.1总输入电路
2.2总输出电路
2.3语音输入与语音输出电路
三.程序设计
四.设计总结
五.附件
概述
语音处理应用数字信号处理技术和微电子技术,在语音识别、语音编码等方面获得了极大成功。
现代DSP技术的发展提高了数字信号高速运算与同步处理的能力,更推进了语音处理技术的发展。
数字信号处理技术通过计算机或专用处理设备,对信号进行分析、合成、变换、滤波、压缩、识别等加工处理,以便提取有用的信息并进行有效的传输与应用,以达到更符合人们要求的信号形式。
数字信号处理的实现是用硬件、软件或软硬结合的方法来完成,最普遍的方法是用通用的可编程DSP芯片构建硬件平台,通过软件编程实现特定的系统功能。
数字信号处理器(DSP)是一种具有特殊结构的微处理器,其DSP内核是高速的CPU,再配上用户所需的存储器和外设等组成系统,可以用来快速地实现语音信号处理的各种算法。
本文结合TMs32OVc5402处理器适合语音信号处理的特点和实践应用,配合外围电路,构成音频采集、处理和播放语音系统,成功实现语音信号的采集与回放,并进行了数字语音回声制作。
一.总体设计方案介绍
1.1总体框图
TMS320VC5402
1.2DSP芯片
数字信号处理芯片(digitalsignalproeessors简称DSP)诞生于20世纪70年代,
专门为实时数字信号处理而设计的一种可编程的嵌入式微处理器[2]。
它以数字器件特有的
稳定性,可重复性,可编程性和易于实现自适应处理特点,取得了突飞猛进的发展。
近年
来,随着DSP性能的日趋完善,功耗的逐步降低,开发环境的不断改进以及价格的不断
下调,其应用领域已拓展到国民经济生活的各个方面.
在通用的微处理器中,乘法由软件完成的,即通过加法和移位实现,需要多个指令周
期才能完成。
而DSP芯片中有专用的硬件乘法器,使得乘法累加运算速度大大提高。
在
DSP的指令系统中,提供了一些特殊的DSP指令。
例如,TMS320C54x中FIRS和LMS指令
专门用于系数对称的FIR波器和LMS算法。
所以在相同的时钟频率和芯片集成度下,DSP
完成FFT算法的速度比通用微处理器要快2一3个数量级。
早期的微处理器内部大多采用冯·诺依曼(VonNeuman)结构,其特点是数据和程序公
用总线和存储空间,因此在某一个时刻,只能读写程序或者只能读写数据。
因此即使是
执行单条指令也要耗费几个甚至几十个周期。
哈佛结构是不同于传统的冯·诺曼结构的
并行体系结构,其主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和
数据存储器是两个相互独立的存储器,每个存储器独立编址,独立访问,即程序指令和
数据的存取空间分开,各有自己的程序总线和数据总线。
这样处理器可以同时处理数据
和程序,大大地提高了处理器的处理能力。
与哈佛结构相关,DSP芯片广泛采用流水线以减少指令执行时间,从而增强了处理器
的处理能力。
TMS320系列处理器的流水线深度从2-6级不等,即处理器可以并行处理2-6
条指令,每条指令处于流水线的不同阶段。
例如,一个四级流水线操作中,DSP执行一条
指令,需要通过取指、译码、去操作和执行四个阶段,在程序运行过程中这几个阶段是
重叠的,在每个指令周期内,四个不同的指令处于不同的阶段。
从而可以加快运行速度。
本方案主要采用TMS320VC5402与TMS320AIC23B这两款芯片,TMS320VC5402是一款专用于语音信号处理的定点型DSP[1],TMS320AIC23B同样是TI推出的一款语音芯片,两者兼容性良好,数据交换速度快,程序较少跑飞,而且价格合理。
对于DSP初学者来说易于掌握,使用方便,是一个不错的选择,经过慎重的较比后,决定选用此方案。
作为DSP家族高性价比代表的16位定点DSP芯片,VC5402适用于语音通信等实时嵌入应用场合。
与其它C54X芯片一样,VC5402具有高度灵活的可操作性和高速的处理能力。
其性能特点如下
(1)操作速率可达100MIPS;
(2)具有先进的多总线结构,(3)三条16
位数据存储器总线和一条程序存储器总线;(4)40位算术逻辑单元(ALU),包括一个40
位桶形移位器和两个40位累加器;(5)一个17x17乘法器和一个40位专用加法器,允
许16位带/不带符号数的乘法:
(6)整图合维特比加速器,用于提高维特比编译码的速度;(7)单周期正规化及指数译码;(8)8个辅助寄存器及一个软件栈,允许使用业界最先进的定点DSPC语言编译器;(9)数据/程序寻址空间为IMxx6bit内置4Kx16bitROM和16k又16bitRAM:
(10)内置可编程等待状态发生器锁相环(PLL)时钟产生器、两个多通道缓冲串口、一个与外部处理器通信的8位并行HPI口、两个16位定时器以及6通道DMA控制器且低功耗[4]。
与C54X系列的其它芯片相比,5402具有高性能、低功耗和低价格等特点。
它采用6
级流水线,且当RPT(重复指令)时,一些多周期的指令就变成了单周期的指令;芯片内部
RAM和ROM可根据PMsT寄存器中的ovLY和DROM位灵活设置。
这些都有利于算法的优化。
TMS320VC5402主要片内外设包括:
软件可编程状态发生器和分区转换逻辑单元增强的8位主机接口Hpl(Hpl一8)
两个多通道带缓冲串行接口(McBSP)
两个定时器
一个带锁相环(PLL)的时钟发生器
一个直接存储器访问(DMA)控制器
TLV320AIC23B(以下简称AIC23)是TI推出的一款高性能的立体声音频Codec芯片,
内置耳机输出放大器,支持MIC和LINEIN两种输入方式(二选一)。
AIC23的模数转换
(ADCs)和数模转换(DACs)部件高度集成在芯片内部,采用了先进的Sigma-delta过
采样技术,可以在8K到96K的频率范围内提供16bit、20bit、24bit和32bit的采样,
ADC和DAC的输出信噪比分别可以达到90dB和100dB。
1.3A/D转换器与D/A转换器
1.3.1D/A转换器DAC0832的介绍
主要性能指标
数字化语音信号存储与回放系统设计:
分辨率,通常将输入数字量的最低有效位LSB变化1时所引起的输入电压的变化△V称为分辨率,即△V=Vm/2,式中,Vm为输出电压的满度值;n为D/A转换器的二进制数的位数。
建立时间,当DAC输入数字量发生变换时,输出模拟电压也随之改变,但输出电压变化到稳定值时相对于输入数字量的变化有一段延迟时间,这段延迟时间就称为建立时间,用ts表示。
建立时间越短,DAC的转换速度越块。
通常用转换时间来反映建立时间,如DAC0832的转换速度为100ns,DAC0832的转换速度为0.1ms。
转换误差,转换误差可以用绝对误差△或相对误差r来表示。
绝对误差△是指DAC的输入端加有固定的数字代码时,实际测得模拟输出值理论值之间的差。
相对误差r是指绝对误差△与满度值之比,常用百分数表示。
电源抑制比,DAC的输出电压的变化量与相对应的电源电压变化量之比定义为电源抑制比。
要求电源电压发生变化时,对输出电压的影响越小越好。
1.3.2A/D转换器DA574的介绍
AD574的特点及功能
AD574是AD公司生产的12位逐次逼近型ADC,它的转换速度为25μs,转换精度为0.05%,可广泛应用在数据采集系统中。
由于AD574芯片内有三态输出缓冲电路,因而可直接与单片机的数据总线相连,而无须附加逻辑接口电路。
1.4高增益放大器(UA741)
高增益放大器是uA741M,uA741I,uA741C(单运放),用于军事,工业和商业应用.这类单片硅集成电路器件提供输出短路保护和闭锁自由运作。
这些类型还具有广泛的共同模式,差模信号范围和低失调电压调零能力与使用适当的电位。
uA741M,uA741I,uA741C芯片引脚和工作说明:
1和5为偏置(调零端),2为正向输入端,3为反向输入端,4接地,6为输出,7接电源8空脚
电路图:
1.5高频功率放大器(LM386)
LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点的功率放大器,广泛应用于录音机和收音机之中。
静态功耗低,约为4mA,可用于电池供电。
工作电压范围宽,4-12Vor5-18V。
外围元件少。
电压增益可调,20-200。
引脚图
低失真度。
LM386是美国国家半导体公司生产的音频功率放大器,主要应用于低电压消费类产品。
为使外围元件最少,电压增益内置为20。
但在1脚和8脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至200。
输入端以地位参考,同时输出端被自动偏置到电源电压的一半,在6V电源电压下,它的静态功耗仅为24mW,使得LM386特别适用于电池供电的场合。
LM386的封装形式有塑封8引线双列直插式和贴片式。
1.6、带通滤波器
这种滤波器电路的作用是只允许在某一个同频带范围内的信号通过,而比通频带下限频率低和比上限频率高的信号都被阻断,典型的带通滤波器可以从二阶低通电路中将其中一级改为高通而成。
二.硬件电路设计
2.1总输入电路(自行总结设计)
从左到右各部分电路为:
话筒,开关,语音输入电路,UA741高增益放大电路,有源二阶带通滤波器。
2.2总输出电路(自行总结设计)
从左到右各部分电路为:
LM386高频功率放大器及其外围器件连接电路,语音输出电路,开关,扬声器。
2.3语音输入与语音输出电路
语音输入电路
语音输出电路
语音信号通道包括模拟输入和模拟输出两个部分。
模拟信号的输入输出电路如图所示。
上图中MICBIAS为提供的麦克风偏压,通常是3/4AVDD,MICIN为麦克风输入,可以根据需要调整输入增益。
下图中LLINEOUT为左声道输出,RLINEOUT为右声道输出。
用户可以根据电阻阻值调节增益的大小,使语音输入输出达到最佳效果。
从而实现良好的模拟语音信号输入与模拟信号的输出。
三.程序设计
语音采集与回放:
externvoidInitC5402(void);
externvoidOpenMcBSP(void);
externvoidCloseMcBSP(void);
externvoidREADAD50(void);
externvoidWRITEAD50(void);
/***********************************************************************
**MainFunctionProgram
***********************************************************************/
#include"stdio.h"
#include"math.h"
#definepi3.1415926
voidmain(void)
{
intk=0;
intx_ad,y_da;
int*px=(int*)0x3000;
int*py=(int*)0x3100;
//for(;;)
{
InitC5402();/*initializeC5402DSP*/
OpenMcBSP();
for(;;)
{
//for(j=0;j<=4;j++)
{
READAD50();
px=(int*)(0x3000);
x_ad=*px;
y_da=x_ad;
py=(int*)(0x3100);
*py=y_da;
WRITEAD50();
k++;
}
}
}
/*voidPROCESSING(void)
{
dothenecesseryoperationshere!
*/}
Asm文件:
.global_InitC5402
.global_OpenMcBSP
.global_CloseMcBSP
.global_READAD50
.global_WRITEAD50
.includeMMRegs.h
_InitC5402:
NOP
LD#0,DP;resetdata–pagepointer
STM#0,CLKMD;softwaresettingofDSPclock
STM#0,CLKMD;(todividermodebeforesetting)
TstStatu1:
LDMCLKMD,A
AND#01b,A;pollSTATUSbit
BCTstStatu1,ANEQ
STM#0xF7ff,CLKMD;setC5402DSPclockto10MHz
*STM#0x4007,CLKMD;setC5402DSPclockto100MHz
;(basedonDSKcrystalat20MHz)
*******ConfigureC5402SystemRegisters*******
STM#0x2000,SWWSR;2waitcycleforIOspace&
;0waitcyclefordata&progspaces
STM#0x0000,BSCR;setwaitstatesforbankswitch:
;64kmembank,extra0cyclebetween
;consecutiveprog/dataread
;STM#0x1800,ST0;ST0atdefaultsetting
;STM#0x2900,ST1;ST1atdefaultsetting(note:
INTX=1)
;STM#0x00A0,PMST;MCmode&OVLY=1,vectorsat0080h
*******SetupTimerControlRegisters*******
STM#0x0010,TCR;stopon–chiptimer0
STM#0x0010,TCR1;stopon–chiptimer1
;Timer0isusedasmainlooptimer
;STM#2499,PRD;timer0rate=CPUCLK/1/(PRD+1)
;=40M/2500=16KHz
*STM#6249,PRD;ifCPUat100M/6250=16KHz
*******InitializeMcBSP1Registers*******
STMSPCR1,McBSP1_SPSA;registersubaddrofSPCR1
STM#0000h,McBSP1_SPSD;McBSP1recv=left–justify
;RINTgeneratedbyframesync
STMSPCR2,McBSP1_SPSA;registersubaddrforSPCR2
;XINTgeneratedbyframesync
STM#0000h,McBSP1_SPSD;McBSP1Tx=FREE(clockstops
;torunafterSWbreakpoint
STMRCR1,McBSP1_SPSA;registersubaddrofRCR1
STM#0040h,McBSP1_SPSD;recvframe1Dlength=16bits
STMRCR2,McBSP1_SPSA;registersubaddrofRCR2
STM#0040h,McBSP1_SPSD;recvPhase=1
;retframe2Dlength=16bits
STMXCR1,McBSP1_SPSA;registersubaddrofXCR1
STM#0040h,McBSP1_SPSD;setthesameasrecv
STMXCR2,McBSP1_SPSA;registersubaddrofXCR2
STM#0040h,McBSP1_SPSD;setthesameasrecv
STMPCR,McBSP1_SPSA;registersubaddressofPCR
STM#000eh,McBSP1_SPSD;clkandframefromexternal(slave)
;FSatpulse–mode(00)
*******FinishDSPInitialization*******
STM#0x0000,IMR;disableperipheralinterrupts
STM#0xFFFF,IFR;cleartheintrupts’flags
RET;returntomain
NOP
NOP
*******WaitingforMcBSP0RXFinished*******
IfRxRDY1:
NOP
STMSPCR1,McBSP1_SPSA;enableMcBSP1Rx
LDMMcBSP1_SPSD,A
AND#0002h,A;maskRRDYbit
BCIfRxRDY1,AEQ;keepchecking
NOP
NOP
RET;return
NOP
NOP
*******WaitingforMcBSP0TXFinished*******
IfTxRDY1:
NOP
STMSPCR2,McBSP1_SPSA;enableMcBSP1Tx
LDMMcBSP1_SPSD,A
AND#0002h,A;maskTRDYbit
BCIfTxRDY1,AEQ;keepchecking
NOP
NOP
RET;return
NOP
NOP
******************************************
******************************************
_OpenMcBSP:
rsbxxf
callwait
NOP
STMSPCR1,McBSP1_SPSA;enableMcBSP0RXforADCdatain
LDMMcBSP1_SPSD,A
OR#0x0001,A
STLMA,McBSP1_SPSD
STMSPCR2,McBSP1_SPSA;enableMcBSP0TXforDTMFout
LDMMcBSP1_SPSD,A
OR#0x0001,A
STLMA,McBSP1_SPSD
LD#0h,DP;loaddatapage0
rpt#23
NOP
ssbxxf
NOP
NOP
;CALLIfTxRDY1
;STM#0x0101,McBSP1_DXR1
;CALLIfTxRDY1
;STM#0x0208,McBSP1_DXR1
;;rsbxxf
;;NOP
;;NOP
CALLIfTxRDY1
STM#0x0001,McBSP1_DXR1;requestsecondarycommunication
NOP
CALLIfTxRDY1
STM#0100h,McBSP1_DXR1;write00htoregister1
CALLIfTxRDY1
STM#0000h,McBSP1_DXR1
NOP
NOP
rpt#20h
nop
CALLIfTxRDY1
STM#0x0001,McBSP1_DXR1;requestsecondarycommunication
CALLIfTxRDY1
STM#0200h,McBSP1_DXR1;write00htoregister2
CALLIfTxRDY1
STM#0000h,McBSP1_DXR1
CALLIfTxRDY1
STM#0x0001,McBSP1_DXR1;requestsecondarycommunication
CALLIfTxRDY1
STM#0300h,McBSP1_DXR1;write00htoregister3
CALLIfTxRDY1
STM#0000h,McBSP1_DXR1
CALLIfTxRDY1
STM#0x0001,McBSP1_DXR1;requestsecondarycommunication
CALLIfTxRDY1
STM#0490h,McBSP1_DXR1;write00htoregister4
;bypassinternalDPLL
;andselecttheSampleFrequency
CALLIfTxRDY1
STM#0000h,McBSP1_DXR1
;CALLIfTxRDY1
;STM#0x0001,McBSP1_DXR1
;CALLIfTxRDY1
;STM#0102h,McBSP1_DXR1;enabledigitalloopback
;CALLIfTxRDY1
;STM#0x0001,McBSP1_DXR1
;CALLIfTx