陈伟鹏基于DSP 5509的语音信号采集系统设计湘南学院Word格式文档下载.docx
《陈伟鹏基于DSP 5509的语音信号采集系统设计湘南学院Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《陈伟鹏基于DSP 5509的语音信号采集系统设计湘南学院Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
通常这些信号处理的过程要满足实时且快速高效的要求,随着DSP技术的发展,以DSP为内核的设备越来越多,为语音信号的处理提供了良好的平台。
本文设计了一个基于TMS320VC5509定点的语音信号处理系统,实现对语音信号的采集、处理与回放等功能,为今后复杂的语音信号处理算法的研究和实时实现提供一个通用平台。
关键词:
语音处理;
DSP;
TMS320VC5509;
TLV320AIC23B
1绪论
语音是人类相互间所进行的通信的最自然和最简洁方便的形式,语音通信是一种理想的人机通信方式。
语音通信的研究涉及到人工智能、数字信号处理、微型计算机技术、语言声学、语言学等许多领域,所以说语音的通信是一个多学科的综合研究领域,其研究成果具有重要的学术价值。
另外通过语音来传递信息是人类最重要的、最有效、最常用的交换信息的形式。
语言是人类特有的功能,声音是人类常用的工具,是相互传递信息的主要手段。
同时也是众构成思想交流和感情沟通的最主要的途径。
1.1DSP系统特点和设计基本原则
DSP(digitalsignalprocessor)是一种独特的微处理器,是以数字信号来处理大量信息的器件。
其工作原理是接收模拟信号,转换为0或1的数字信号。
再对数字信号进行修改、删除、强化,并在其他系统芯片中把数字数据解译回模拟数据或实际环境格式。
它不仅具有可编程性,而且其实时运行速度可达每秒数以千万条复杂指令程序,远远超过通用微处理器,是数字化电子世界中日益重要的电脑芯片。
它的强大数据处理能力和高运行速度,是最值得称道的两大特色。
1.2国内外研究动态
语音信号处理作为一个重要的研究领域,已经有很长的研究历史。
但是它的快速发展可以说是从1940年前后Dudley的声码器和Potter等人的可见语音开始的;
20世纪60年代中期形成的一系列数字信号处理的理念和技术基础;
到了80年代,由于矢量量化、隐马尔可夫模型和人工神经网络等相继被应用于语音信号处理,并经过不断改进与完善,使得语音信号处理技术产生了突破性的进展。
一方面,对声学语音学统计模型的研究逐渐深入,鲁棒的语音识别、基于语音段的建模方法及隐马尔可夫模型与人工神经网络的结合成为研究的热点。
另一方面,为了语音识别实用化的需要,讲者自适应、听觉模型、快速搜索识别算法以及进一步的语言模型的研究等课题倍受关注。
在通信越来越发达的当今世界,尤其最近几十年,语音压缩编码技术在移动通信、IP电话通信、保密通信、卫星通信以及语音存储等很多方面得到了广泛的应用。
因此,语音编码一直是通信和信号处理的研究热点,并其取得了惊人的进展,目前在PC机上的语音编码已经趋于成熟,而如何在嵌入式系统中实时实现语音压缩编码则是近些年来语音信号处理领域的研究热点之一。
2软件设计
要正确配置DSP的时钟发生器,产生DSP工作的正常时钟频率,这一个步骤的关键就是数字琐相环PLL的应用。
I2C模块是TMS320VC55xx新增的片内集成外设,通过I2C对TLV320AIC23进行编程控制,可以使DSP与I2C兼容设备通过该接口进行数据通信。
通过硬件和软件调试,最终成功采集到语音信号并播放出来,可以在CCS软件中观察到采集到的语音信号的波形。
改变程序中的延迟参数,可以明显改变混响效果。
aduio.pjt
;
CodeComposerProjectFile,Version2.0(donotmodifyorremovethisline)
[ProjectSettings]
ProjectDir="
C:
\VC5509AeS61\Lab0701-Echo\"
ProjectType=Executable
CPUFamily=TMS320C55XX
Tool="
Compiler"
CustomBuilder"
DspBiosBuilder"
Linker"
Config="
Debug"
Release"
[SourceFiles]
Source="
aic23.c"
audio.c"
i2c.c"
sdram_init.c"
util.c"
audio.cmd"
["
Settings:
"
]
Options=-g-q-fr"
\VC5509AeS61\Lab0701-Echo\Debug"
-d"
_DEBUG"
-ml-mn
Options=-q-o2-fr"
\VC5509AeS61\Lab0701-Echo\Release"
Options=-v55
Options=-q-c-m"
.\Debug\audio.map"
-o"
.\Debug\audio.out"
-w-x
.\Release\audio.map"
.\Release\audio.out"
aic23.c
#include"
5509.h"
util.h"
extaddr.h"
math.h"
//AIC23ControlRegisteraddresses
#defineAIC23_LT_LINE_CTL0x00//0
#defineAIC23_RT_LINE_CTL0x02//1
#defineAIC23_LT_HP_CTL0x04//2
#defineAIC23_RT_HP_CTL0x06//3
#defineAIC23_ANALOG_AUDIO_CTL0x08//4
#defineAIC23_DIGITAL_AUDIO_CTL0x0A//5
#defineAIC23_POWER_DOWN_CTL0x0C//6
#defineAIC23_DIGITAL_IF_FORMAT0x0E//7
#defineAIC23_SAMPLE_RATE_CTL0x10//8
#defineAIC23_DIG_IF_ACTIVATE0x12//9
#defineAIC23_RESET_REG0x1E//F-Writing0tothisregtriggersreset
//AIC23ControlRegistersettings
#definelt_ch_vol_ctrl0x0017/*0*/
#definert_ch_vol_ctrl0x0017/*1*/
#definelt_ch_headph_ctrl0x0079/*2*/
#definert_ch_headph_ctrl0x0079/*3*/
#definealog_au_path_ctrl0x0000/*4*/
#definedigi_au_path_ctrl0x0000/*5*/
#definepow_mgt_ctrl_ctrl0x0002/*6*/
#definedigi_au_intf_ctrl0x000D/*7*/
#defineau_FS_TIM_ctrl0x0000/*8MCLK=12MHz,SampleRatesetting*/
#definedigi_intf1_ctrl0x0001/*9*/
#definedigi_intf2_ctrl0x00FF/*10*/
#defineDIGIF_FMT_MS0x40
#defineDIGIF_FMT_LRSWAP0x20
#defineDIGIF_FMT_LRP0x10
#defineDIGIF_FMT_IWL0x0c
#defineDIGIF_FMT_FOR0x03
#defineDIGIF_FMT_IWL_160x00
#defineDIGIF_FMT_IWL_200x04
#defineDIGIF_FMT_IWL_240x08
#defineDIGIF_FMT_IWL_320xc0
#defineDIGIF_FMT_FOR_MSBRIGHT0x00
#defineDIGIF_FMT_FOR_MSLEFT0x01
#defineDIGIF_FMT_FOR_I2S0x02
#defineDIGIF_FMT_FOR_DSP0x03
#definePOWER_DEV0x80
#definePOWER_CLK0x40
#definePOWER_OSC0x20
#definePOWER_OUT0x10
#definePOWER_DAC0x08
#definePOWER_ADC0x04
#definePOWER_MIC0x02
#definePOWER_LINE0x01
#defineSRC_CLKOUT0x80
#defineSRC_CLKIN0x40
#defineSRC_SR0x3c
#defineSRC_BOSR0x02
#defineSRC_MO0x01
#defineSRC_SR_440x20
#defineSRC_SR_320x18
#defineANAPCTL_STA0xc0
#defineANAPCTL_STE0x20
#defineANAPCTL_DAC0x10
#defineANAPCTL_BYP0x08
#defineANAPCTL_INSEL0x04
#defineANAPCTL_MICM0x02
#defineANAPCTL_MICB0x01
#defineDIGPCTL_DACM0x08
#defineDIGPCTL_DEEMP0x06
#defineDIGPCTL_ADCHP0x01
#defineDIGPCTL_DEEMP_DIS0x00
#defineDIGPCTL_DEEMP_320x02
#defineDIGPCTL_DEEMP_440x04
#defineDIGPCRL_DEEMP_480x06
#defineDIGIFACT_ACT0x01
#defineLT_HP_CTL_LZC0x80
#defineRT_HP_CTL_RZC0x80
voidAIC23_Write(unsignedshortregaddr,unsignedshortdata)
{
unsignedcharbuf[2];
buf[0]=regaddr;
buf[1]=data;
I2C_Write(I2C_AIC23,2,buf);
}
voidMcBSP0_InitSlave()
PC55XX_MCSPpMCBSP0=(PC55XX_MCSP)C55XX_MSP0_ADDR;
//PuttheMCBSPinreset
Write(pMCBSP0->
spcr1,0);
spcr2,0);
//Configframeparameters(32bit,singlephase,nodelay)
xcr1,XWDLEN1_32);
xcr2,XPHASE_SINGLE|XDATDLY_0);
rcr1,RWDLEN1_32);
rcr2,RPHASE_SINGLE|RDATDLY_0);
//Disableintframegenerationandenableslavew/extframesignalsonFSX
//Framesyncisactivehigh,dataclockedonrisingedgeofclkx
pcr,PCR_CLKXP);
//Bringtransmitterandreceiveroutofreset
SetMask(pMCBSP0->
spcr2,SPCR2_XRST);
spcr1,SPCR1_RRST);
voidAIC23_Init()
I2C_Init();
//ResettheAIC23andturnonallpower
AIC23_Write(AIC23_RESET_REG,0);
AIC23_Write(AIC23_POWER_DOWN_CTL,0);
AIC23_Write(AIC23_ANALOG_AUDIO_CTL,ANAPCTL_DAC|ANAPCTL_INSEL);
AIC23_Write(AIC23_DIGITAL_AUDIO_CTL,0);
//Turnonvolumeforlineinputs
AIC23_Write(AIC23_LT_LINE_CTL,0x000);
AIC23_Write(AIC23_RT_LINE_CTL,0x000);
//ConfiguretheAIC23formastermode,44.1KHzstereo,16bitsamples
//Use12MHzUSBclock
AIC23_Write(AIC23_DIGITAL_IF_FORMAT,DIGIF_FMT_MS|DIGIF_FMT_IWL_16|DIGIF_FMT_FOR_DSP);
AIC23_Write(AIC23_SAMPLE_RATE_CTL,SRC_SR_44|SRC_BOSR|SRC_MO);
//Turnonheadphonevolumeanddigitalinterface
AIC23_Write(AIC23_LT_HP_CTL,0x07f);
//0x79forspeakers
AIC23_Write(AIC23_RT_HP_CTL,0x07f);
AIC23_Write(AIC23_DIG_IF_ACTIVATE,DIGIFACT_ACT);
//SetMcBSP0tobetransmitslave
McBSP0_InitSlave();
voidAIC23_Disable()
I2C_Disable();
#defineAUDIOBUFFER0x200000
FARPTRlpAudio;
unsignedintbEcho=0,uDelay=64,uEffect=256;
voidAIC23_Mixer()
intnWork,nWork1;
FARPTRlpWork,lpWork1;
longintluWork,luWork1;
floatfWork,fWork1;
lpWork=lpAudio=AUDIOBUFFER;
luWork=0;
for(luWork1=0;
luWork1<
0x48000;
luWork1++)
far_poke(lpWork++,0);
lpWork=lpAudio;
while
(1)
{
while(!
ReadMask(pMCBSP0->
spcr2,SPCR2_XRDY));
nWork=Read(pMCBSP0->
ddr2);
//
ddr1);
far_poke(lpWork++,nWork);
if(bEcho)//
uEffect%=1024;
//
uDelay%=1024;
//
fWork=uEffect/1024.0;
luWork1=100;
luWork1*=uDelay;
luWork1=luWork-luWork1;
if(luWork1<
0)luWork1+=0x48000;
lpWork1=lpAudio;
lpWork1+=luWork1;
nWork1=far_peek(lpWork1);
fWork1=nWork1;
fWork1/=512.0;
fWork1*=uEffect;
fWork1+=nWork;
fWork+=1.0;
fWork1/=fWork;
nWork=fWork1;
//}
Write(pMCBSP0->
dxr2,nWork);
//Write(pMCBSP0->
dxr1,nWork);
//
luWork++;
//
if(luWork>
=0x48000)
lpWork=lpAudio;
}
3实验结果及分析
3.1实验结果
按“F5”键运行,注意观察窗口中的bEcho=0,表示数字回声功能没有激活。
这时从耳机中能听到麦克风中的输入语音放送。
将观察窗口中bEcho的取值改成非0值。
这时可从耳机中听到带数字回声道语音放送。
分别调整uDelay和uEffect的取值,使他们保持在0-1023范围内,同时听听耳机中的输出有何变化。
当uDelay和uEffect的数值增大时,数字回声的效果就会越加的明显。
图3.1修改前程序图
图3.2修改前程序图
图3.3频谱分析
图3.4左声道及右声道波形
3.2实验分析
所以,从本实验可知当已知一个数字音源后,可以利用计算机的处理能力,用数字的方式通过计算模拟回声效应。
简单的讲,可以在原声音流中叠加延迟一段时间后的声流,实现回声效果。
当然通过复杂运算,可以计算各种效应的混响效果。
声音放送可以加入数字回声,数字回声的强弱和与原声的延迟均可在程序中设定和调整。
4总结与心得体会
通过本次课程设计,我明白了细节决定成败这句话的道理,在实验中,有很多注意的地方,都被忽视了,导致再花费更多的时间去修改,这严重影响了试验的进度。
同时,在本次实验中我了解了ICETEK–VC5509–A板上语音codec芯片TLV320AIC23的设计和程序控制原理,并进一步掌握了数字回声产生原理、编程及其参数选择、控制,以及了解了VC5509DSP扩展存储器的编程使用方法。
这一学期的理论知识学习加上这次课程设计,使我对DSP有了更加深刻的了解,对数字信号的处理功能,软硬件相结合,语音信号的采集与放送等等方面都有了很深的了解,相信本次课程设计,无论是对我以后的学习,还是工作等方面都有一个很大的帮助。
因此,本次课程设计让我受益匪浅。
参考文献
[1]李利.DSP原理及应用[M].北京:
中国水利水电出版社,2004
[2]王安民,陈明欣,朱明.TMS320C54xxDSP实用技术[M].北京:
清华大学出版社,2007
[3]彭启琮,李玉柏.DSP技术[M].成都:
电子科技大学出版社,1997
[4]李宏伟,等.基于帧间重叠谱减法的语音增强方法[J].解放军理工大学学报,2001
(1):
41~44
[5]TexasInstrumentsIncorporated.TMS320C54x系列DSP的CPU与外设[M].梁晓雯,裴小平,李玉虎,译.北京:
清华大学出版社,2006
[6]赵力.语音信号处理[M].北京:
机械工业出版社,2003比较图4和图5,可以看到1200Hz以上的频谱明显得到了抑制。
[7]江涛,朱光喜.基于TMS320VC5402的音频信号采集与系统处理[J].电子技术用,2002,28(7):
70~72[8]TexasInstrumentsIncorporated:
TMS320VC5402Datasheet,2001
致谢
在本次课程设计的即将完成之际,笔者的心情无法平静,本文的完成既是笔者孜孜不倦努力的结果,更是指导老师樊洪斌老师亲切关怀和悉心指导的结果。
在整个课程设计的选题、研究和撰写过程中,老师都给了我精心的指导、热忱的鼓励和支持,他的精心点拨为我开拓了研究视野,修正了写作思路,对课程设计的完善和质量的提高起到了关键性的作用。
另外,导师严谨求实的治学态度、一丝不苟的工作作风和高尚的人格魅力,都给了学生很大感触,使学生终生受益。
在此,学生谨向老师致以最真挚的感激和最崇高的敬佩之情。
另外,还要感谢这段时间来陪我一起努力同学,感谢我们这个小团队,感谢每一个在学习和生活中所有给予我关心、支持和帮助