语音采集系统.docx
- 文档编号:23742034
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:19
- 大小:464.53KB
语音采集系统.docx
《语音采集系统.docx》由会员分享,可在线阅读,更多相关《语音采集系统.docx(19页珍藏版)》请在冰豆网上搜索。
语音采集系统
DSP作业
基于TMS320VC5509的语音处理系统
系统框图:
框图各模块功能分析:
(1)语音信号:
输入2路语音信号(8-16位放大信号,要去能完全捕获或恢复高保真的音频信号)
(2)音频信号放大:
经放大电路放大输入的语音信号
(3)A/D转换器:
放大后的音频信号在滤波之后由A/D转换器转换为一串数字信号
(4)DAP芯片处理器:
系统的核心芯片(DSP)选用美国TI公司的TMS320VC5509。
是整个实时语音处理系统的核心部分,它对经数字化的信号进行压缩,编解码。
在其内部进行高速运算,处理
(5)D/A转换器:
由DSP芯片处理好的信号由D/A转换器进行转换,经滤波输入到音频信号放大器
(6)音频处理程序存储区EPROM:
存储音频处理程序
(7)音量、音效等的选择、控制:
选择适当的音量、音效的控制方法
(8)功率放大电路模拟音频信号输出:
还原成的模拟声音信号,经音箱功率放大电路放大输出
(9)电源模块;为内部芯片及周边系统电路提供能量来源
(10)复位电路:
确保此方案的电路稳定工作。
语音输入与语音输出电路
语音输入电路
语音输出电路
语音信号通道包括模拟输入和模拟输出两个部分。
模拟信号的输入输出电路如图所示。
上图中MICBIAS为提供的麦克风偏压,通常是3/4AVDD,MICIN为麦克风输入,可以根据需要调整输入增益。
下图中LLINEOUT为左声道输出,RLINEOUT为右声道输出。
用户可以根据电阻阻值调节增益的大小,使语音输入输出达到最佳效果。
从而实现良好的模拟语音信号输入与模拟信号的输出。
存储器扩展模块:
系统工作所需的程序,以及经过转换处理后的中间数据的缓冲存储,都需要相关的程序和数据存储器来存储。
TMS320VC5402内部提供了4K的ROM和可选作用程序或数据存储空间的16K的RAM,故其内部比较紧张,尤其内部没有配置用户可编程的非易失的存储器,为使VC5402构成的系统能处理并存储一点的数据,或成为一个上电后能独立运行的系统,就需要根据实际应用情况扩展程序或数据存储器。
本系统主要用作音频信号的采集,存储器除了存储系统运行时所需的程序和一些先期的处理程序外,就作为音频信号的数据缓冲存储器用了,实际要扩展的存储的空间不是很大。
本系统用到静态随机读取存储芯片CY7C1021V33,作为自举引导装在(boot-loader)之后的外部程序或数据存储器,本系统采用并行的FLASH(SST39VF400)的引导方式。
FLASH存储自举引导装载程序,系统上电之初,被映射在DSP的数据空间,待引导装载工作结束之后,它将先前由其占据的数据空间退回给数据SRAM,VC5402的数据空间在系统的不同工作阶段由不同的外部储存器构成。
各个存储器和DSP连接的逻辑连接如图所示。
可以根据需要将他们映射到程序或数据空间去,这些逻辑控制可由CPLD或分立的逻辑器件来完成。
DSP和扩展存储器逻辑连接图见下页
DSP和扩展存储器逻辑连接
程序设计:
语音采集与回放:
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();
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++;
}
}
}
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
;CALLIfTxRDY1
;STM#0208h,McBSP1_DXR1;enableanalogloopback
RET
NOP
NOP
*********************
_CloseMcBSP:
STMSPCR1,McBSP1_SPSA;disableMcBSP0RX
LDMMcBSP1_SPSD,A
AND#0xFFFE,A
STLMA,McBSP1_SPSD
STMSPCR2,McBSP1_SPSA;disableMcBSP0TX
LDMMcBSP1_SPSD,A
AND#0xFFFE,A
STLMA,McBSP1_SPSD
RPT#5
RET
NOP
NOP
_READAD50:
stm0x00ff,ar3
stm0x3000,ar2
loopa:
CALLIfRxRDY1
ldmMcBSP1_DRR1,b
stlb,*ar2+
;banzloopa,*ar3-
nop
nop
ret
nop
nop
_WRITEAD50:
stm0x00ff,ar3
stm0x3100,ar2
loopb:
CALLIfTxRDY1
ldu*ar2+,B
and#0fffeh,b;masktheLSB
stlmB,McBSP1_DXR1
;banzloopb,*ar3-
nop
nop
ret
nop
nop
wait:
stm20h,ar3
loop1:
stm020h,ar4
loop2:
banzloop2,*ar4-
banzloop1,*ar3-
ret
nop
nop
nop
nop
.end
A/D模块:
xternvoidInitC5402(void);
externvoidOpenMcBSP(void);
externvoidCloseMcBSP(void);
externvoidREADAD50(void);
/***********************************************************************
**MainFunctionProgram
***********************************************************************/
voidmain(void)
{
InitC5402();
OpenMcBSP();初始化串口和AD50C
while
(1)
{
READAD50();
}
}
D/A模块:
externvoidInitC5402(void);
externvoidOpenMcBSP(void);
externvoidCloseMcBSP(void);
externvoidWRITEAD50(void);
/***********************************************************************
**MainFunctionProgram
***********************************************************************/
voidmain(void)
{
InitC5402();
OpenMcBSP();
while
(1)
{
WRITEAD50();
}
}
关于低通滤波器:
框图:
代码:
若通带截止频率fp=2kHz,通带最大衰减αp=0.1dB,阻带截止频率fs=8kHz,阻带最小衰减αs=60dB。
(用切比雪夫一致逼近法设计)
滤波器的技术指标:
clear;
Fs=25;
fp=0.6*Fs/2;
rp=0.01;
fs=0.7*Fs/2;
rs=0.1;
f=[fpfs];
A=[10];
dev=[rprs];
[n,f0,m0,W]=remezord(f,A,dev,Fs);
b=remez(n,f0,m0,W);
[h,W]=freqz(b,1,256,1);
h=abs(h);
h=20*log10(h);
plot(w,h);grid;
xlabel('频率(归一化)');
ylabel('幅度(dB)');
总结:
本次课程作业,让我对DSP有了一定的认识,同时由于自身能力的不足,导致在作业过程中遇到很多困难。
目前的DSP芯片以其强大的数据处理功能在通信和其他信号处理领域得到广泛注意并已成为开发应用的热点技术。
许多领域对于数字信号处理器的应用都是围绕美国TI公司所开发的DSP处理器进行的。
DSP芯片是一种特别适合于进行数字信号处理运算的微处理器。
主要应用是实时快速的实现各种数字信号处理算法,如卷积及各种变换等。
所以我们应该最其保持一种积极的态度去钻研!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语音 采集 系统