第次课DSP综合设计应用实例_第1页
第次课DSP综合设计应用实例_第2页
第次课DSP综合设计应用实例_第3页
第次课DSP综合设计应用实例_第4页
第次课DSP综合设计应用实例_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

会计学1第次课DSP综合设计应用实例10.1双音多频信号的产生与检测双音多频信号:由两个频率的音频信号叠加构成,为行频组(低频组)和列频组(高频组)两个频组的信号叠加构成,组成16个信号。第10章DSP综合设计应用实例第1页/共56页2023年1月19日DSP技术及应用31.DTMF信号的产生DTMF编码器由两个数字正弦波振荡器组合产生。其中:初始值:,A为正弦波的幅度第10章DSP综合设计应用实例第2页/共56页2023年1月19日DSP技术及应用4DTMF信号的产生算法:1.设置初始值2.确定行频及列频3.根据差分方程迭代生成样点值。样点值的产生:CCITT(国际电报电话咨询委员会)规定每秒钟传输/接收10个数字,每个数字持续100ms,包括50ms的静音时间,以便区分两个连续按键。信号的采样率为8000HZ,即每秒钟采样8000点,根据数字持续时间,每个数字的采样点为50/1000*8000=400点,静音样点数50/1000*8000=400第10章DSP综合设计应用实例第3页/共56页2023年1月19日DSP技术及应用5DTMF编码过程:1.确定发送数据的两个频率2.计算初始值及系数3.根据差分方程迭代生成400个样点值。4.根据D/A转换器的精度要求,将每个样点值乘以16384.第10章DSP综合设计应用实例第4页/共56页2023年1月19日DSP技术及应用6开始DSK板初始化设置D/A转换器的分辨率为15位及转换速率8000Hz计算各键行频系数及初始条件计算各键列频系数及初始条件取出发送的DTMF按键号码转换为数组下标查表得到键值的行频列频系数和初始值DTMF编码流程第5页/共56页2023年1月19日DSP技术及应用7计算本次输出的样点值(行频+列频)更新行频列频的初值,计算下一个样点值样点数转换为Q15格式如果D/A准备好发送数据则将样点值写入DTMF样点数是否发送完成?发送400点静音样点0至D/ADTMF编码流程第6页/共56页#include<type.h>#include<board.h>#include<codec.h>#include<math.h>voiddelay(s16period);HANDLEhHandset; //CODEC句柄变量s16data;s16buffer[400]; //输出缓冲区,用于图形窗口观察输出信号#definePI3.1415926floatfs=8000;s16tele_number[16]={‘1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’0’,’A’,’B’,’C’,’D’,’*’,’#’}第10章DSP综合设计应用实例第7页/共56页floatdtmf_freq[16][2]={ 941,1336, //键值0对应的行频和列频 697,1209, 697,1336, … 941,1663,

941,1209,

941,1447 //键值#对应的行频和列频 };f32row_freq[16][2]={0}; //行频系数及初始条件f32column_freq[16][2]={0}; //列频系数及初始条件f32ax1,ay1; //行频列频的系数f32x_n,x_n_1,x_n_2; //行频的二阶差分方程样点f32y_n,y_n_1,y_n_2; //列频频的二阶差分方程样点f32z_n; //双音多频样点第10章DSP综合设计应用实例第8页/共56页voidmain() //DTMF发送主程序{ s16cnt=2; f32f0; s16num; s16i=0,n=0; if(brd_init(100)) //初始化DSK板 return; while(cnt--) //发光二极管闪烁两次,表明程序运行正常 { brd_led_toggle(BRD_LED0); delay(1000); brd_led_toggle(BRD_LED1); delay(1000); brd_led_toggle(BRD_LED1); delay(1000); }第10章DSP综合设计应用实例第9页/共56页2023年1月19日DSP技术及应用11 hHndset=codec_open(HANDSET_CODEC);//打开CODEC,获得句柄 code_dac_mode(hHandset,CODEC_DAC_15BIT);//D/A工作在15-bit模式 code_aout_gain(hHandset,CODEC_AOUT_MINUS_6dB);//增益为-6dB code_sample_rate(hHandset,SR_8000);//D/A转换速率为 //计算各键值的行频系数COS(2*PI*F0/FS)和初始条件SIN(2*PI*F0/FS) for(i=0;i<16;i++) { f0=dtmf_freq[i][0]; row_freq[i][0]=cos(2*PI*f0/fs); row_freq[i][1]=sin(2*PI*f0/fs); } //计算各键值的列频系数COS(2*PI*F0/FS)和初始条件SIN(2*PI*F0/FS) for(i=0;i<16;i++) { f0=dtmf_freq[i][1]; column_freq[i][0]=cos(2*PI*f0/fs); column_freq[i][1]=sin(2*PI*f0/fs); }第10章DSP综合设计应用实例第10页/共56页2023年1月19日DSP技术及应用12 //循环发送DTMF按键缓冲区中的键值

while(1) { for(i=0;i<16;i++) { num=tele_number[i];//取出当前要发送的DTMF按键号码第10章DSP综合设计应用实例第11页/共56页2023年1月19日DSP技术及应用13 switch(num) //将DTMF按键号转换为数组下标 { case’0’:num=0;break; case’1’:num=1;break; … case’*’:num=14;break; case’#’:num=15;break; } ax1=row_freq[num][0]; //行频系数 x_n_2=row_freq[num][1]; //行频的初始条件,x(-2) ay1=column_freq[num][0]; //列频系数 y_n_2=column_freq[num][1]; //列频的初始条件,y(-2) x_n_1=0; y_n_1=0; //输出DTMF信号,持续时间为50ms n=0; cnt=400;第10章DSP综合设计应用实例第12页/共56页2023年1月19日DSP技术及应用14 while(cnt--) { //计算本次输出的样点值 x_n=2*ax1*x_n_1-x_n_2; //行频样点值 y_n=2*ax1*y_n_1-y_n_2; //列频样点值 z_n=x_n+y_n; //DTMF信号样点值 x_n_2=x_n_1; //更新 x_n_1=x_n; y_n_2=y_n_1; y_n_1=y_n;

data=16384.0*z_n; //将样点数转换为整数 //等待D/A转换器准备好发送 while(!MCBSP_XRDY(HANDEST_CODEC)){}; *(volatileu16*)DXR1_ADDR(HANDSET_CODEC)=data; buffer[n]=data; n++; }第10章DSP综合设计应用实例第13页/共56页2023年1月19日DSP技术及应用15 cnt=400; //输出静音符号,持续时间为50ms while(cnt--) { while(!MCBSP_XRDY(HANDEST_CODEC)){};

*(volatileu16*)DXR1_ADDR(HANDSET_CODEC)=0; } } } } void delay(s16period) { inti,j; for(i=0;i<period;i++) { for(j=0;j<period>>1;j++) } }第10章DSP综合设计应用实例第14页/共56页2023年1月19日DSP技术及应用162.DTMF信号的检测(Goertzel算法)只计算8个行/列频率的信息及其二次谐波,提高计算速度。Goertzel算法原理框图传递函数:第10章DSP综合设计应用实例第15页/共56页2023年1月19日DSP技术及应用17Goertzel算法:第10章DSP综合设计应用实例第16页/共56页2023年1月19日DSP技术及应用18DTMF检测算法:1。计算接收点的 Vk(n),k为8个频率对应的数字角频率2。到N=125点后调用DTMF检测判决函数计算幅度平方3.将幅度平方与门限作比较,如果行频和列频同时有两个频率的幅度平方大于判决门限,接检测到有效的按键信息,放入缓冲区。4.重复上述过程,当缓冲区满后,将检测结果输出。第10章DSP综合设计应用实例第17页/共56页2023年1月19日DSP技术及应用19开始DSK板初始化设置D/A转换器的分辨率为15位及转换速率为8000Hz读样点除以16384后存入数据接收缓冲区A/D转换器输出数据准备好?否是DTMF检测流程图第18页/共56页2023年1月19日DSP技术及应用20调用DTMF检测判决程序初始化Vk(n-1),Vk(n-2),重新开始检测是否接收到125个DTMF样点?否是计算行频和列频共8个频率的Vk(n)DTMF检测流程图第19页/共56页2023年1月19日DSP技术及应用21开始计算频谱的平方幅度搜索幅度大于门限的行频和列频是否已检测到静音信号?否是是否有两个幅度达标的频率?如果没有检测到任何频率置检测到静音标志否是DTMF判决子程序流程图第20页/共56页2023年1月19日DSP技术及应用22置已检测到DTMF信号标志返回DTMF键值判决DTMF键值存储,存满256个键之后显示DTMF判决子程序流程图第21页/共56页2023年1月19日DSP技术及应用23#include

<stdio.h>#include<type.h>#include<board.h>#include<codec.h>#include<mcbsp54.h>#include<math.h>HANDLEhHandset;floatbuffer[125]; //DTMF样点缓冲区floatpi=3.1415926s16data;intk=0; //vk(n)=2*coef*vk(n-1)-vk(n-2)+x(n),coef为w[8],x(n)为buffer[256] //vk(n-2)为a[i][0],vk(n-1)为a[i][1],vk(n)为a[i][2]loatw[8],a[8][3];floatamp[8]; //频谱的平方幅度inti,j,x,y;intdtmf_flag=0; //DTMF检测进程,0为检测到静音符号,1为检测到1次DTMFintdetect_result[256]={0}; //缓存DTMF检测结果第10章DSP综合设计应用实例第22页/共56页2023年1月19日DSP技术及应用24intl=0;voiddelay(intperiod);voiddtmf_detect(void);voidmain() //主程序{ //初始化各行频列频的系数 w[0]=2*cos(2*pi*11/125); w[1]=2*cos(2*pi*12/125); w[2]=2*cos(2*pi*13/125); w[3]=2*cos(2*pi*15/125); w[4]=2*cos(2*pi*19/125); w[5]=2*cos(2*pi*21/125); w[6]=2*cos(2*pi*23/125); w[7]=2*cos(2*pi*26/125); //初始化vk(n-1),vk(n-2) for(i=0;i<8;i++); { a[i][0]=0;第10章DSP综合设计应用实例第23页/共56页2023年1月19日DSP技术及应用25 a[j][1]=0; } if(brd_init(100)) { return; } while(cnt--) //发光二级管闪烁两次,表明程序正常运行 { brd_led_toggle(BRD_LED0); delay(1000); brd_led_toggle(BRD_LED1); delay(1000); brd_led_toggle(BRD_LED2); delay(1000); } hHandset==code_open(HANDSET_CODEC);//获得句柄 codec_ade_mode(hHandset,CODEC_ADC_15BIT);//ADC为15bit模式 codec_ain_gain(hHandset,CODEC_AIN_0dB);//输入增益为0dB第10章DSP综合设计应用实例第24页/共56页2023年1月19日DSP技术及应用26 codec_sample_rate(hHandset,SR_8000);//取样率为8000 while(1) { //等待A/D转换器输出数据准备好 while(!MCBSP_RRDY(HANDSET_CODEC)){}; data=*(volatileu16*)DRR1_ADDR(HANDSET_CODEC); buffer[k]=data/16384.0; //增益控制,防止后续溢出 for(i=0;i<8;i++)//计算vk(n)-a[i][2] { //计算vk(n),vk(n-1),vk(n-2) a[i][2]=w[i]*a[i][1]-a[i][0]+buffer[k]; a[i][0]=a[i][1]; a[i][1]=a[i][2]; } k++; if(k==125) //读取125个样点,15ms时间 { k=0; dtmf_detect();//调用检测判决函数第10章DSP综合设计应用实例第25页/共56页2023年1月19日DSP技术及应用27 for(i=0;i<18;i++)//初始化vk(n-1),vk(n-2) { a[i][0]=0; a[i][1]=0; } } }}voiddtmf_detect(void){ //计算频谱的平方幅度 for(i=0;i<8;i++) { amp[i]=a[i][1]*a[i][1]+a[i][0]*a[i][0]-w[i]*a[i][1]*a[i][0]; //printf(“theamplitude%dis%f.\r\n”,i,amp[i] ); } j=0; 第10章DSP综合设计应用实例第26页/共56页2023年1月19日DSP技术及应用28 j=0; for(i=0;i<8;i++)//搜索大于门限的行频及列频,放入x,y中 { if(amp[i]>1500) { j++; if(j==1) x=i; elseif(j==2) y=i; } } //如果在静音之后检测到两个幅度达到门限的频率,则进行判决 i=-1; if(demf_flag==0) { if(j==2)第10章DSP综合设计应用实例第27页/共56页2023年1月19日DSP技术及应用29 if(j==2) { if(x==0&&y==4) i=‘1’; elseif(x==0&&y==5) i=‘2’; elseif(x==0&&y==6) … elseif(x==2&&y==7) i=‘C’; elseif(x==3&&y==7) i=‘D’; if(i!=-1) { detect_result[l]=i; l++; if(l==256)第10章DSP综合设计应用实例第28页/共56页 { for(l=0;l,256;l++) { //显示判决结果 printf(“theDTMFsignalis%c.\r\n”,detect_result[l]; } } dtmf_flag++;//已经检测到一次DTMF信号 } } } elseif(j==0) dtmf_flag=0; //检测到静音信号 }第10章DSP综合设计应用实例第29页/共56页 voiddelay(intperiod) { inti,j; for(i=0;i<period;i++) { for(j=0;j<period>>1;j++); } } 第10章DSP综合设计应用实例第30页/共56页第10章

DSP芯片应用系统开发实例基于G.729A标准的DSP实时系统的设计第31页/共56页10.1DSP系统的硬件设计实例

本节将结合前几节所讨论的内容,介绍DSP系统的硬件设计案例,重点介绍系统硬件设计的一般流程,以帮助读者初步掌握一个完整的DSP系统工程设计的方法。10.1.1

基于G.729A标准的DSP实时系统的设计

1.

G.729A语音压缩标准

G.729是国际电信联盟ITU制定的一种高质量的语音压缩标准,工作速率为8kbit/s,目前已在许多通信系统中得到了应用。

该标准是采用“共轭结构-代数码激励线性预测(CS-ACELP)”算法,于1995年10月通过,主要应用于IP电话、移动通信、多媒体网络通信和数字卫星通信系统等领域。

第10章

DSP芯片应用系统开发实例第32页/共56页10.1.1

基于G.729A标准的DSP实时系统的设计

2.系统的组成本系统由TMS320VC5409芯片、模数转换电路、FLASH存储器和双口RAM组成。TMS320VC5409Flash双口RAMA/DD/A模拟输入模拟输出第10章

DSP芯片应用系统开发实例第33页/共56页10.1.1

基于G.729A标准的DSP实时系统的设计

2.系统的组成

’C5409——作为整个系统的核心,主要用来完成语音压缩和解压缩在内的所有软件功能;

A/D和D/A转换器——完成语音信号的模数和数模转换;

FLASH存储器——用于存放系统程序和已初始化的数据;

双口RAM——用来与外部交换语音压缩数据。

第10章

DSP芯片应用系统开发实例第34页/共56页10.1.2

语音基带处理模块的设计3.设计方案的选择该方案选择了TI公司的TMS320VC5409芯片,主要是基于以下几个原则:

运算速度:’C5409的指令速度可以达到100MIPS,完全可以实现该模块实时处理的要求;

片上硬件资源:’C5409片内ROM容量为16K×16位,片内双寻址RAM容量为32K×16位,可以减少片外存储器的容量。’C5409片内外设丰富,有软件等待状态发生器、主机接口HPI、时钟发生器、3个多通道缓冲串行口McBSP等,可以满足该模块数据传输的需求;

第10章

DSP芯片应用系统开发实例第35页/共56页3.设计方案的选择该方案选择了TI公司的TMS320VC5409芯片,主要是基于以下几个原则:

接口能力:’C5409的McBSP串行口具有灵活的接口能力,既可实现全双工通信,直接与数字信号编解码器的工业标准接口,也可以通过串行口与ADC/DAC实现无缝连接;

开发工具:TI公司为用户提供了方便的开发系统,如集成开发环境CCS,它支持软件的仿真,用户可以在制作目标板之前,利用CCS开发系统进行算法仿真。第10章

DSP芯片应用系统开发实例10.1.1

基于G.729A标准的DSP实时系统的设计第36页/共56页方案选择FLASH存储器主要基于以下原因:

TMS320VC5409为ROM型DSP芯片,用户的运行程序和数据在掉电后不能保留,因此,DSP芯片需要扩展FLASH存储器,来保存系统运行的程序和数据。

系统上电时,在引导程序的控制下,FLASH存储器中的数据自动加载到高速DSP的片内RAM中,并自动运行。

该模块采用Atmel公司产品AT29LV020,构成256K×8位的存储空间。

第10章

DSP芯片应用系统开发实例3.设计方案的选择第37页/共56页

4.系统的组成系统的工作过程:①

系统加电DSP芯片后,由其内部存储器固化的自引导程序(Boot)将存于FLASH中的程序和数据移入内部RAM;②

程序和数据移至内部RAM后,DSP芯片开始运行程序,执行语音编码算法。每隔10ms运行一次编解码算法,并与双口RAM交换一次数据;③

DSP芯片将语音压缩后得到的数据写入双口RAM,由外部系统读出并送至信道;④

外部系统将对方的编码数据送至双口RAM,由DSP芯片从双口RAM中读出,进行数据处理,还原为合成语音。

第10章

DSP芯片应用系统开发实例第38页/共56页10.1.1

基于G.729A标准的DSP实时系统的设计

5.系统的硬件设计本系统由’C5409芯片、FLASH、双口RAM、时序发生电路、模数转换电路和电平缓冲接口芯片等组成。(1)电源设计

本系统需要三种电源,电压为5V、3.3V和1.8V。

双口RAM、模数转换电路和时序发生电路均采用5V电源供电,由系统外部提供;

FLASH和电平缓冲接口芯片需3.3V供电;DSP的双电源可采用TPS73HD318实现,该芯片的输出电压分别为3.3V和1.8V,每路电源的最大输出电流为750mA。第10章

DSP芯片应用系统开发实例第39页/共56页

5.系统的硬件设计(1)电源设计

由TPS73HD318芯片组成的双电源电路。

NC1RESETNCNC1GNDNC1ENFB/SENSE1IN1OUT1IN1OUTNC2RESETNCNC2GNDNC2EN2SENSE2IN2OUT2IN2OUTNCNCNCNCC333F3.3V1234567910111213171516814CVDD

TMS320VC5409DVDDGND&18192021222324252627281.8VD2D3C233FC11FC01F5VR1100kR2100kPGRESETtoDSPTPS73HD318DL5817DL4148DL4148D1第10章

DSP芯片应用系统开发实例第40页/共56页

5.系统的硬件设计(2)

DSP设计

DSP设计主要考虑以下几个方面:

复位电路

时钟电路

串行接口

外部存储器地址及数据分配

引导程序第10章

DSP芯片应用系统开发实例第41页/共56页(2)

DSP设计

采用MAX706R芯片组成自动复位电路,既能实现上电复位,又能监视系统运行。

复位电路MAX706RMR

WDOVCC

RESGNDWDIPFI

PFO12345678RSVCC至DSP的复位端CLK来自DSP的输出端R1R2手动复位第10章

DSP芯片应用系统开发实例第42页/共56页(2)

DSP设计

采用外部时钟源,设置CLKMD1=1,CLKMD2=0,CLKMD3=1。芯片上电后,使CLKMD寄存器的复位值为F000H,DSP芯片的时钟为外部晶振频率的1/4。

时钟电路

串行接口

’C5409提供了3个高速、双向、多通道带缓冲功能的串行口McBSP。本系统采用标准串行口工作方式。第10章

DSP芯片应用系统开发实例第43页/共56页(2)

DSP设计系统使用的外部存储器为FLASH和双口RAM。

FLASH既可以映射在程序存储空间,也可以映射在数据存储空间;

双口RAM仅映射在数据存储空间。

为了防止两个存储器的数据冲突,FLASH采用外部数据的低8位(D7~D0),双口RAM使用外部数据的高8位(D15~D8)。

外部存储器地址及数据分配第10章

DSP芯片应用系统开发实例第44页/共56页(2)

DSP设计本系统采用外部并行8位Boot方式。

FLASH的数据空间地址:0000H~FFFFH

程序空间地址:0000H~FFFFH010000H~01FFFFH020000H~02FFFFH030000H~03FFFFH

双口RAM的数据空间地址:8000H~FFFFH

引导程序第10章

DSP芯片应用系统开发实例第45页/共56页5.系统的硬件设计(3)

FLASH接口设计

FLASH选用一片AT29LV020,构成256K×8的存储空间,主要用来存储程序及初始化数据。设计时主要考虑以下几个方面:

DSP的引导程序采用外部8位Boot方式;②

通过DSP的仿真系统,能将程序和数据写入FLASH中;③

系统运行时,能从FLASH中读出程序装入到内部RAM中;④

接口尽可能简单;⑤

注意存储器地址及数据的分配,避免数据冲突。第10章

DSP芯片应用系统开发实例第46页/共56页

5.系统的硬件设计(3)

FLASH接口设计基于以上几个方面,FLASH与DSP的接口如图所示。A17~A0

CEAT29LV020

OED7~D0

WE1R/WMSTRBA17~A0D7~D0第10章

DSP芯片应用系统开发实例第47页/共56页

5.系统的硬件设计(4)双口RAM的设计

双口RAM选用CY7C135-55,构成4K×8的存储空间。用于与外部交换数据。它映射在DSP的外部数据区,其地址为8000H~FFFFH。A10~A0CECY7C135-55A11

OED7~D0WER/WMSTRBA10~A0D15~D8DSA15第10章

DSP芯片应用系统开发实例第48页/共56页12.1.1

基于G.729A标准的DSP实时系统的设计6.系统的调试整个系统的调试包括硬件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论