




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE1题目基于DSP的MP3播放器设计一技术指标表一技术指标序号技术指标参数1内存2GB2数据流速度64kb/s—320kb/s3谐波失真0.01%4信噪比≥90dB5动态范围85dB6通道分离度80dB7录音格式ADPCM8录音数据流速率16kb/s-32kb/s9解码功能16、32kb/s等(WAV格式)16、32、48、64、128kb/s等(MP3格式)10USB接口3—4Mb/s(下载)5—6Mb/s(上传)11音频输出功率(5-7.5)mW×212电池AAA型1节13静态电流≤2uA14待机电流≤30mA15工作电流≤70mA16录音取样频率8kHz二功能描述表二功能描述序号功能当前状态操作结果1播放待机、停止按PLAY键顺序播放内存中的MP3歌曲2随机播放播放按随机键MP3中的歌曲随机播放3重复播放播放重复按REPEAT键普通播放→单曲重复→所有歌曲重复→普通播放4循环播放播放按MODE键按一次设起点,再按一次设终点,两点间循环播放循环播放按MODE键返回原播放5音场选择待机、播放重复按EQ键普通(NORMAL)→古典(CLASSIC)→摇滚(ROCK)→重低音(BASS)→迪斯科(DISCO)→爵士(JAZZ)→流行(POP)→普通(NORMAL)6音量控制播放按VOL+键声音增大按VOL-键声音减小7搜索播放按REW或FF键向前或向后搜索歌曲并播放待机、停止按REW或FF键向前或向后搜索歌曲文件名8暂停播放按PLAY键暂停播放暂停播放按PLAY键恢复播放9删除待机:选定文件按DEL键二次删除选定文件10锁定待机、播放按HOLD键其他键失去作用锁定按HOLD键取消锁定11浏览停止按REW或FF键顺序显示存储器中的歌曲文件名12停止播放按STOP键停止13关机停止按“开关”键关机待机n分钟无三方案论证1硬件要求预期的MP3播放器的目标系统硬件要求实现以下功能:·能够存储一定量的MP3码流文件,供解码系统使用。在系统初步实现时,存储的码流长度至少要保证能够从主观上感受到音频信号解码的效果;·能够对MP3码流进行解码,从MP3格式恢复成PCM码流。系统应该能够保证解码过程的正确性,并能够解码算法在实现过程中所需要的存储空间、计算速度等需求;·能够把解码后输出的PCM码流通过扬声设备,如耳机、音箱等播放出来,这样才能够从直观上判断解码的效果,并且方便后期在使用该系统方案时进行直观性能评价和直接应用;·能够满足系统的功率要求。对于电子类便携式系统,或者嵌入式应用方案来说,系统的功耗要比较低,用电池供电能够满足系统的工作需要。2软件要求系统的软件应该能够实现以下功能:·能够从数据存储介质中读取MP3码流数据,要能保证数据读取的速度满足系统的需要;·能够正确对MP3码流进行解码,并且以所需要的格式和方式输出。解码算法要在目标系统中实现,因此,不但要保证算法的正确性,也要保证算法的适应性,充分利用目标系统性能特性,并满足系统的运算速度要求;·能够正确协调硬件各个模块的工作,提供正确的芯片控制信号,这项软件功能是专门针对硬件的,需要根据目标系统的硬件需求来设计实现;3两种设计方案为了能够设计和实现出较高性能的系统,需要了解当前的MP3解码器系统的实现方案。市场调查和技术咨询的结果显示,目前MP3播放器系统MP3解码模块一般有两种实现方案。第一、使用专业的MP3解码芯片,辅以简单的外围电路实现。这种方案的优点是系统个体集成度高,电路结构紧凑,实现相对比较简单,能够很快设计实现出目标系统并投入使用,但是由于使用的是专业芯片,芯片中的功能模块即使能扩充,幅度和范围都相对较小,系统很难进行算法升级或功能扩充,在嵌入式应用中与原系统的集成度不高。第二、以通用数字信号处理器(DSP,DigitalSignalProcessor)为核心,搭建相应的外部电路形成一个系统,解码功能通过对数字信号处理芯片编程来实现。这种方案中,使用一定开发环境进行软件的设计实现和调试测试。为了满足解码系统的需求,需要根据性能和技术要求,对通用的数字信号处理芯片进行外围电路扩充。这种方案的优点是系统实现的灵活性高,功能的可扩展性强,系统成本可以通过对芯片的选择控制到相对较低的水平,而且对于同样使用数字信号处理芯片实现的系统来说,能最大程度地进行系统集成。但是由于整个系统从硬件到软件都需要自行设计和搭建,系统实现的难度和复杂度比较高。对于本系统设计采用方案二,即采用以DSP实现编解码的系统。四设计方案基于DSP的系统设计方案MP3解码器的解码算法完全由DSP芯片实现,其控制部分用单片机实现,作为硬件电路设计的一个部分。电路的整体设计与开发需要综合考虑前面两部分程序算法接口内容,可以在进行详细的程序设计的基础上进行。这样,可以把MP3解码器的开发工作分为两大模块,即MP3解码程序DSP实现,即软件设计,以单片机控制程序和电路板设计部分,即硬件设计。MP3系统开发从模块上可以划分为硬件开发和软件开发两个部分,软件主要实现MP3解码算法,单片机实现存储器访问控制,MP3文件播放控制等功能。系统总体的功能结构如图一所示。图5.1系统结构框图软件系统设计方案是用DSP软件实现MP3解码算法功能,并完成相应的接口访问功能,软件功能图如图二所示。图5.2MP3解码器软件系统功能原理图五系统整体框图MP3解码算法要被用来实现数码MP3实时解码适配器,所以必须通过硬件实现其算法。本系统以DSP(TMS320VC5416)作为解码的主要部分,还包括音频D/A转换,单片机的控制模块,电源系统,存储器模块等组成,图三给出了系统框图。图5.3系统整体框图六硬件电路设计1主译码模块(1)TMS320C6711接口与时钟电路veloci结构使C6000DSP成为高性能的DSP芯片。典型的VLIW结构由多个并行运行的执行单元组成,这些单元在单个时钟周期内可执行多条指令。并行是突破传统设计而获得高性能的关键。C6711处理器由三个主要部分组成:CPU内核、外设和存储器。CPU中8个功能单元可以并行操作,这些功能单元被分成类似的两套,每套由4个基本功能单元组成。CPU有两组寄存器,每组寄存器由16个32位寄存器组成。由于在运行期间个做硬件数据相关性的检查,所以程序的并行性在编译时就被确定。片内程序存储器的总线宽度为256的,使每个周期可取8条32位指令。C6711腆芯片包括片内程序存储器和数据存储器,有些芯片将这些存储器作为高速缓冲存储器。外设包括直接存储器访问(DMA)、低功耗逻辑、外部存储器接口、串口、扩展总线或主机口和定时器等。具有以下特点:1运行速度快。指令周期为6ns,峰值运算能力为1336MIPS,对于单精度运算可达1GFLOPS,对于算精度运算可达250MFLOPS.2硬件支持IEEE格式的32位单精度与64为双精度浮点操作。3继承了32*32bit的乘法器,其结果可为32或64bit.4C6711的指令集在C62的指令集基础上增加了浮点执行能力,可以看作是C62指令集的超集。与C62系列芯片一样,由于其出色的运算能力、高效的指令集、智能外设、大容量的片内存储器和大范围的寻址能力,这个系列的芯片适合用于基站数字波束形成、图像处理、语音识别等对运算能力和存储量有高要求的应用场合。图6.1时钟,JTAG和DSP接口电路时钟电路有25MHZ晶振,两片ICS504和SN74LVTH125PW组成,如图所示图6.2时钟电路(2)JTAG仿真口电路连接测试组(JTAG)接口用于连接最小系统和仿真器,实现仿真器对DSP的访问,JTAG接口的连接需要和仿真器上的接口一致。一般情况下,最小系统板需要引出双排的14脚插针,图中引脚间隔为0.1英寸,引脚宽度为0.025英寸,引脚长度为0.235英寸。在大多数情况下,如果开发板和仿真器之间的连接电缆不超过6英寸,可采用上述接法,在EMU0和EMU1接上拉电阻4.7K。图6.3JTAG电路2模拟音频模块声音采集电路以TI公司的音频编解码器TLV320AIC23为核心来完成,AIC23把麦克风输出的模拟音频信号转换成数字音频信号,形成PCM码流,送给DSP芯片。DSP则以DMA方式,通过多通道缓冲串口读取PCM样值,并在片内RAM建立帧缓冲区,每帧的大小为12,DSP通过I2C接口对芯片的内部寄存器进行控制设置,使其工作在合适的的工作模式下。(1)A1C23与6711的连接方式AIC23与DSP的接口有两个:一个是控制口,用于设置AIC23的工作参数;另一个是数据口,用于传输AIC23的A/D、D/A数据。将6711的McASP配置成脉冲帧同步模式,2通路TDM格式的数据流,与4片AIC23的数据接口相连;使用I2C总线与AIC23的控制口接口。AIC23的数据口AIC23的数据口有4种工作方式,分别为Rightiustitled、Leftjustified、xlsMode、DSPMode。其中后两种可以很方便的与DSP的McASP串口相连接。采用DSPMode工作方式。AIC23的数据口可以和6711的McASP接口无缝连接,方便地实现主模式与从模式两种工作方式。当McASP为从模式时,McASP的接收时钟与帧同步信号都由AIC23来提供;当McASP为主模式时,McASP产生所有的信号。McASP串口相连接。采用DSPMode工作方式。AIC23的数据口可以和6711的McASP接口无缝连接,方便地实现主模式与从模式两种工作方式。当McAS为从模式时,McASP的接收时钟与帧同步信号都由AIC23来提供;当McAS为主模式时,McASP产生所有的信号。AIC23的控制口AIC23的控制口有两种工作方式:两线制的I2C方式(MODE为低);三线制的SPI方式(MODE为高),文中采用I2C方式,时序图如图4.6所示。图6.4I2C总线配置AIC23的时序图使用I2C总线对AIC23进行配置时,I2C总线选择7位地址的寻址方式,由于AIC23的寄存器只有写操作无读操作,因而其通讯协议规定每个WORD的前7Bit为寄存器的地址,后1Bit为寄存器内容。在两线制的I2C方式下SDI为串行数据线,SCLK为串行时钟线,开始条件是当SCLK为高而SDI为下降沿,1到7个位时钟传输寄存器地址,R/W位决定数据传输方向,第9个位时钟识别地址并接受数据传输,后2个8位时钟传输控制数据位(9位)。单片AIC23接口电路。图6.5音频转换电路3电源模块TMS320C6711的内核电压典型值为1.26V,电压范围为1.1~1.8V;外部接口电压典型值为3.3V,电压范围为3.0~3.6V。另外单片机需+5V供电;电平转换电路需3.3V供电;故电源系统有5V、3.3V和1.26V四种电压。电系统的5V电压由外部稳压电源供给;3.3V和1.26V由系统内部线性电压调节器提供。采用TI公司的TPS767D3011线性调压电路芯片,能满足系统设计要求。TPS767D3011为双输出低漏电压调整器。其特点如下:具有快速瞬态响应功能;3.3V/1.26V可调电压输出;输出电流范围为0~1A;200MS延迟的双通道上电复位;热关断保护;超低静态电流,典型值为80uA;关断电流为1uA。采用TPS767D3011构成的电源电路如图6.2所示。从外部稳压电源引入5V电压。+5V电压一方面输入给TPS767D3011,经TPS767D3011后输出电压1.26V和3.3V,另一方面又直接供给单片机电源。图6.6电源电路4存储扩展(1)SDRAM扩展本系统采用MICron公司生产的MT48LC4M16AZ作为SDRAM存储芯片,并可与DSP完全兼容,能够与6711实现无缝连接。MT48LC4M16AZ连线图如图4.12所示。通过对6711的EMIF与SDRAM相关寄存器的设置之后,DSP对SDRAM的访问操作将变的非常透明,可像访问片外SRAM一样访问它,因此非常方便。系统中采用一片Mieron公司的MT48LC4M16AZ,数据宽度16bit,工作电压为3.3V。该芯片可以满足系统对内存容量和读写速度的要求。板上通过6711的EMIF总线扩展了一片64M位(IM*4Blank*16)的SDRAM,它将占用oM642的石而和瓦1二个片外存储空间可寻址范围oXo40000一oX7FFFFF:最大配置时,板上可安装一片128M为的SDRAM,它将占用6711的CEO一CE3。全部四个片外存储空间,可寻址范围0x040000一OxFEFFFF(6711状态寄存器ST3中的MPNMC=O),或oxO40000一OxFFFFFF(MPNMC=0),上电复位时,MPNMC被清0。由于EMIF每个片选的最大空间为64M比特,所以一片64M比特的SDRAM就要占用1个片选空间,然而仅有1个对应映射范围开始的CE引脚作为SDRAM的片选信号。所以同时选用CEO和CEI空间,用EMIF的CEO与SDRAM片选CS相联,CEI引脚悬空。图6.7SDRAM扩展电路(2)FLASH存储器模块本系统采用SST公司推出的多用途、高性能、低电压、基于CMOS的FLASH存储器SST39VF80OA,其容量为SMbit(512kx16bit),只需2.7V的电压就可完成读、写和擦除操作,写入一个字节(sbit)仅需20,s,整个存储器的擦除只需8s。FLASH存储器电路的连接图如图4.13所示。图6.8FLASH扩展电路由于本系统DSP采用ROM加载方式,在上电复位之后首先将CE1空间的程序代码搬到片内地址O处开始运行,因此FLASH主要分配到DSP的外部CE1空间。为使DSP能够正确地从FLASH引导并加载程序,还需配置相应的引脚。由于C6000系列DSP提供了与FLASH的无缝接口,因此设计6711与FLASH的接口电路就变得相对较简单。(3)ROM模块采用EPROM芯片AT29LV010A-15JC存储程序,接线图如下;图6.9ROM电路5单片机控制模块(1)USB接口电路与控制下面介绍以下PDIUSBD12芯片。图6.10PDIUSBD12芯片引脚D0~D7:双向8位数据线。ALE:地址锁存使能信号。CLKOUT:可编程时钟输出。/INT:PDIUSBD12中断输出。D-:USBD-数据线。D+:USBD+数据线。PDIUSBD12适应于不同类型的设备,有四种不同的模式:非同步传输,同步输出传输,同步输入传输,同步输出/输入传输。共有3各端点,分别为端点0,端点1和端点2。端点是一个USB设备唯一可以确认的部分,它是主机和设备之间的通信流终点。每一个USB逻辑设备都包括一个端点集合,PC机应用软件只能通过一个或多个端点与一个USB设备通信。在设备接入时,每个逻辑设备都有一个由系统分配的唯一地址,而一个设备上的任一个端点都有一个有设备确定的唯一的标识和端点号,利用设备的地址和端点号就可以唯一指定任一个端点。所有的USB设备都要拥有端点0,它总是在设备一经接入和上电时就进行配置。该端点用于对一个逻辑设备进行初始化和一般的操作。端点0支持控制传输,通过它访问一般的USB状态和控制操作。除了端点0外,功能设备还具有其他端点,如PDIUSBD12的端点1和端点2.低速功能设备有两个端点可供选择,而一个全速设备最多可以有16个输入端点和16个输出端点。(2)单片机与键盘控制单片机采用80C52芯片,实现按键管理,及USB控制。图6.11USB,键盘和单片机接口电路6LCD扩展LCD模块选择VPG240128TA-SC-HT-LED04,LCD工作电压与DSP的电压不匹配,需要做电平匹配,LCD电平转换芯片SN74LVC4245A;LCD模块通过排线与单板连接。图6.12LCD显示接口电路七PCB板设计在MP3播放机PCB板设计中,经过合理布局,全面满足了外观和结构方面的需求。同时在数字信号部分精心考虑信号线走向,尽可能多地增加铺地面积,减少分布参数的影响,使干扰减少到合理范围。兼顾信号质量和成本后,最终PCB板采用了六层板设计。八系统软件设计1CVSD编码语音信号采用比较容易实现的CSVD编码,也即线性增量调制算法编码方法,实现对语音信号的编码以及相应的解码算法。CVSD是一种量阶随着输入语音信号平均斜率大小而连续变化的增量调制方法。他的工作原理是使用多个连续可变斜率的线段来逼近语音信号,当斜率为正时,对应的数字编码为1;当斜率为负时,对应的数字编码为0。当CVSD工作于编码方式时,其系统框图如7.1,语音输入信号经采样得到数字信号,数字信号与积分器输出信号¥比较后输出偏差信号,偏差信号经判决后输出数字编码,该信号同时作为积分器输出斜率的机型控制信号和积分器输出斜率逻辑的输入信号。在每个时钟周期内,若语音信号大于积分器输出信号,则判决输出为1,积分器输出上升一个量阶;若语音信号小于积分器输出信号,则判决输出为0,积分器下降一个量阶。图8.1CSVD编码系统框图当CSVD工作于解码方式时,其系统框图如图7.2。在每个时钟周期内,数字编码被送到连码检测器,然后送到斜率幅度控制电路一控制积分器输出斜率的大小。若数字编码输入为1,则积分器的输出上升一个量阶,这相当于编码过程的逆过程。积分器的输出通过低通滤波器平滑滤波后将重现输入语音信号。图7.2CSVD解码系统框图可见输入信号的波形上升越快,输出的连1码就越多,同样下降越快连0码越多,CVSD编码能够很好地反应输入信号的斜率大小。为使积分器的输出能够更好地逼近输入语音信号,量阶随着信号斜率大小而变化,当信号斜率绝对值很大,编码出现3个连1或连0码时,则量阶加一个增量,当不出现上述码型时,量阶则相应地减小。为了减码及译码的偏差,要求编码和译码过程使用相同的时钟频率,而且采样频率应符合耐酸斯特采样定律。CSVD通过不断改变量阶大小来跟踪信号的变化以减小颗粒噪声与斜率过程失真,量阶调整是基于过去的3个或4个样值输出。具体编码程序如图7.3,具体解码程序如图7.4.图7.3语音编码流程图图7.4语音解码流程图2CVSD编码的C语言程序代码#include<stdio.h>#include<math.h>//#include<C55.h>#defineBUFFERSIZEOUT254#defineBUFFERSIZEIN4064#defineDeltaMax1280 #defineDeltaMin6.5#defineBeta0.99 #defineORD6 #defineMAX_BITS16doubleValPreCVSD=0;doubleDeltaCVSD=20; doubleDelta0CVSD=10; charThreeJudgeCVSD[3]={0,1,0};doubleValPreCVSDDE=0;doubleDeltaCVSDDE=20; doubleDelta0CVSDDE=10; charThreeJudgeCVSDDE[3]={0,1,0};staticdoubleCoefA[ORD]={1.00000000,-3.88893329,6.64074495,-6.08600100,2.98673653,-0.62768820};staticdoubleCoefB[ORD]={0.03285030,-0.05723916,0.03681835,0.03681835,-0.05723916,0.03285030};staticshortfilterY[ORD-1];staticshortfilterX[ORD];charCVSDCoder(shortInData);shortCVSDDecoder(charInData);charCVSDCoder(shortInData) { doubleDiff=0; intj=0; charOutData; Diff=InData-ValPreCVSD; if(Diff>0) { ThreeJudgeCVSD[j]=1; OutData=1; } else { ThreeJudgeCVSD[j]=0; OutData=0; } //判断三连码 if(((ThreeJudgeCVSD[0]==1)&(ThreeJudgeCVSD[1]==1)&(ThreeJudgeCVSD[2]==1))| ((ThreeJudgeCVSD[0]==0)&(ThreeJudgeCVSD[1]==0)&(ThreeJudgeCVSD[2]==0))) DeltaCVSD=DeltaCVSD+Delta0CVSD; else DeltaCVSD=Beta*DeltaCVSD; if(DeltaCVSD>DeltaMax) DeltaCVSD=DeltaMax; if(DeltaCVSD<DeltaMin) DeltaCVSD=DeltaMin; if(ThreeJudgeCVSD[j]==1) {ValPreCVSD=ValPreCVSD+DeltaCVSD; } if(ThreeJudgeCVSD[j]==0) { ValPreCVSD=ValPreCVSD-DeltaCVSD; } j++; j%=3; returnOutData; }shortCVSDDecoder(charInData) { doubleMax; intj=0; intm=0; shortOutData; shortDataDecode; if(InData==0)ThreeJudgeCVSDDE[m]=0; if(InData==1)ThreeJudgeCVSDDE[m]=1; if(((ThreeJudgeCVSDDE[0]==1)&(ThreeJudgeCVSDDE[1]==1)&(ThreeJudgeCVSDDE[2]==1))|((ThreeJudgeCVSDDE[0]==0)&(ThreeJudgeCVSDDE[1]==0)&(ThreeJudgeCVSDDE[2]==0))) DeltaCVSDDE=DeltaCVSDDE+Delta0CVSDDE; else DeltaCVSDDE=Beta*DeltaCVSDDE; if(DeltaCVSDDE>DeltaMax) DeltaCVSDDE=DeltaMax; if(DeltaCVSDDE<DeltaMin) DeltaCVSDDE=DeltaMin; if(ThreeJudgeCVSDDE[m]==1)ValPreCVSDDE+=DeltaCVSDDE; if(ThreeJudgeCVSDDE[m]==0)ValPreCVSDDE-=DeltaCVSDDE; if(ValPreCVSDDE>32767) ValPreCVSDDE=32767; if(ValPreCVSDDE<-32768) ValPreCVSDDE=-32768; m++; m%=3; OutData=(short)ValPreCVSDDE; Max=0; filterX[0]=OutData; for(j=0;j<ORD;j++) { Max=Max+CoefB[j]*filterX[j]; } for(j=1;j<ORD;j++) { Max=Max-CoefA[j]*filterY[j-1]; } DataDecode=(short)Max; for(j=ORD-1;j>0;j--) { filterX[j]=filterX[j-1]; } for(j=ORD-2;j>0;j--) { filterY[j]=filterY[j-1]; } filterY[0]=(short)Max; returnDataDecode; }main() {shortCVSDinput=0;charCVSDoutput;shortCVSDDEoutput;charCVSDDEinput=0;CVSDoutput=CVSDCoder(CVSDinput); CVSDDEoutput=CVSDDecoder(CVSDDEinput); }3编码程序.title"CVSDcoder.asm".mmregsSTACK.usect"STACK",10h.globalInit,BeginDeltaMax.set1280hDeltaMin.set65hBeta.set99hDelta0CVSD.set10h.dataTBL:.word0,1,0.bssThreeJudge,3.bssInData,1.bssOutData,1.bssDeltaCVSD,1.bssValPreCVSD,1.textInit:STM#ThreeJudge,AR5RPT#3MVPDTBL,*AR5+STM#ThreeJudge,AR5ST#20,*(DeltaCVSD)ST#0,*(ValPreCVSD)ST#100,*(InData)Begin:LD*(InData),ASTLMA,AR1LD*(ValPreCVSD),ASTLMA,AR0CMPRLT,AR1BCDiffNeg,TCSTM#1,*AR5+ST#1,*(OutData)LD#1,AAND*AR5+,AAND*AR5+,ABCL1,ANEQSTM#DeltaCVSD,AR6STM#Beta,TMPYAR6,ABL2L1:LD#DeltaCVSD,ASTM#Delta0CVSD,AR3;ADDAR3,AL2:STM#DeltaMax,AR0STLA,AR4CMPRLT,AR4BCL3,TCLDAR0,AL3:STM#DeltaMin,AR0STLA,AR4CMPRGT,AR4BCL4,TCLDAR0,AL4:STLA,*(DeltaCVSD)STM#ValPreCVSD,AR4ADD*AR4,ASTLA,*(ValPreCVSD)BendingDiffNeg:STM#0,*AR5+ST#0,*(OutData)LD#0,AADD*AR5+,AADD*AR5+,ABCL5,ANEQLD#DeltaCVSD,ASTM#Delta0CVSD,AR3;ADDAR3,ABL6L5:STM#DeltaCVSD,AR6STM#Beta,TMPYAR6,AL6:STM#DeltaMax,AR0STLA,AR4CMPRLT,AR4BCL7,TCLDAR0,AL7:STM#DeltaMin,AR0CMPRGT,AR4BCL8,TCLDAR0,AL8:STLA,*(DeltaCVSD)STLA,AR4STM#ValPreCVSD,AR6LD*(AR6),ASUBAR4,ASTLA,*(ValPreCVSD)ending:STLA,*(ValPreCVSD).END4解码程序.title"CVSDdecoder.asm".mmregsSTACK.usect"STACK",10h.globalnit,BeginDeltaMax.set1280hDeltaMin.set65hBeta.set99hDelta0CVSD.set10hORD.set6hORD1.set5h.dataTBL:.word0,1,0Coefa:.word-3888933*32768/1000000.word6640744*32768/1000000.word-6086001*32768/1000000.word2986736*32768/1000000.word-627688*32768/1000000Coefb:.word32850*32768/1000000.word-57239*32768/1000000.word36818*32768/1000000.word36818*32768/1000000.word-57239*32768/1000000.word32850*32768/1000000.bssThreeJudge,3.bssJudge,1.bssInData,1.bssOutData,1.bssDeltaCVSD,1.bssValPreCVSD,1.bssFilterX,6.bssCoefA,5.bssFilterY,5.bssCoefB,6.textInit:STM#ThreeJudge,AR5RPT#3MVPDTBL,*AR5+STM#CoefA,AR5RPT#5MVPDCoefa,*AR5+STM#CoefB,AR5RPT#6MVPDCoefb,*AR5+STM#ThreeJudge,AR5ST#20,*(DeltaCVSD)ST#0,*(ValPreCVSD)ST#1,*(Judge)ST#1,*(InData)Begin:LD*(InData),ASTLA,*AR5+AND*(Judge),ABCONE,ANEQLD#0,AADD*AR5+,AADD*AR5+,ABCL1,ANEQSTM#DeltaCVSD,AR6STM#Beta,TMPYAR6,ABL2L1:LD#DeltaCVSD,ASTM#Delta0CVSD,AR3;ADDAR3,AL2:STM#DeltaMax,AR0STLA,AR4CMPRLT,AR4BCL3,TCLDAR0,AL3:STM#DeltaMin,AR0STLA,AR4CMPRGT,AR4BCL4,TCLDAR0,AL4:STLA,*(DeltaCVSD)STLA,AR4STM#ValPreCVSD,AR6LD*(AR6),ASUBAR4,ASTLA,*(ValPreCVSD)ONE:LD#1,AAND*AR5+,AAND*AR5+,ABCL5,ANEQSTM#DeltaCVSD,AR6STM#Beta,TMPYAR6,ABL6L5:LD#DeltaCVSD,ASTM#Delta0CVSD,AR3;ADDAR3,AL6:STM#DeltaMax,AR0STLA,AR4CMPRLT,AR4BCL7,TCLDAR0,AL7:STM#DeltaMin,AR0STLA,AR4CMPRGT,AR4BCL8,TCLDAR0,AL8:STLA,*(DeltaCVSD)STM#ValPreCVSD,AR4ADD*AR4,ASTLA,*(ValPreCVSD)IIR:STM#CoefB,AR2STM#FilterX,AR3LD*(ValPreCVSD),ASTLA,*AR3MPY*AR2+,*AR3+,ARPT#4MAC*AR2+,*AR3+,ASTM#CoefA,AR2STM#FilterY,AR3RPT#4MAS*AR2+,*AR3+,ASTM#FilterX+4,AR3RPT#3DELAY*AR3-STM#FilterY+3,AR3RPT#2DELAY*AR3-S:STLA,*(FilterY).END八*软硬件电路调试九总结本文通过MP3的设计,熟悉并掌握了C6711芯片,TLV320AIC23芯片以及语音编解码原理;十参考书目(1)宋亚玲,MP3音频编码算法的DSP实现及优化,北京工业大学,2021.(2)王希公,MP3数码音频播放机设计,天津大学工程硕士学位论文,2021.(3)计丹,基于定点DSP的MP3解码系统设计与实现,硕士学位论文,2021.(4)邓彦松,向伟,基于DSP的语音信号处理系统设计,中国集成电路,2021,(4):95(5)吕海平,基于DSP的MP3编码器技术研究,硕士学位论文,2021.(6)王宏,基于TMS320C50的通用语音信号处理系统,电子技术应用,2021,(7):3.(7)高永清,基于TL16C550C实现TMS320C6711的异步串行通信,工矿自动化,2021,(4):2.(8)冯小龙,基于多媒体DSP芯片TMS320DM642的语音信号处理,煤炭工程,2021,(8):3.十一附录1电路图(1)主译码电路(2)模拟音频模块电路(3)电源电路(4)SDRAM扩展电路(5)FLASH和ROM扩展电路(6)单片机控制电路(7)LCD电路2系统的PCB版图(1)小图(2)放大后
中南民族大学学生课程设计报告课程名称:C程序设计语言选题名称:通讯录管理年级:专业:信息管理与信息系统学号:姓名:指导教师:完成地点:管理学院综合实验室完成日期:1.课程设计的目的为了熟练掌握C语言的语法特点、及其数据结构,提高自身编写程序的能力。通过课程设计实现理论知识与实际情况的结合,使所学知识能够在现实社会中起到一定的作用,防止所编写的程序脱离实际,让程序可以更好的发挥作用,以便减轻实际工作中所遇到的繁琐步骤,提高现实工作中的效率。此外通过课程设计提高逻辑思考能力和解决实际问题的能力。程序设计是公认的、最能直接有效地训练学生的创新思维,培养分析问题、解决问题能力的学科之一。其次课程设计有利于治学态度的培养。程序设计中,语句的语法和常量变量的定义都有严格的要求,有时输了一个中文标点、打错了一个字母,编译就不通过,程序无法正常运行。因此,程序设计初学阶段,学生经常会犯这样的错误,可能要通过几次乃至十多次的反复修改、调试,才能成功,但这种现象会随着学习的深入而慢慢改观。这当中就有一个严谨治学、一丝不苟的科学精神的培养,又有一个不怕失败、百折不挠品格的锻炼。通讯录信息管理系统是生活中不可缺少的部分编写了一个通讯录信息管理系统是十分必要的。本程序设计具有通讯信息的录入,进行保存、查找、删除等功能,操作界面简洁美观,易于操作。程序用了条件、循环、指针、结构体等知识点,综合了文件的打开和保存编写的。可运用于小的管理软件。软件运用菜单实现交互式管理,用户轻松的按键既可实现对软件的操作,操作简单易懂,功能丰富,可以很好的满足的需要。通过对通讯录管理系统的设计,进一步理解和掌握C语言这门课程的知识点,能够熟练的调用各种函数,把各种C语句有机的结合起来,提高自己C语言程序设计的能力,为今后解决实际问题打下良好基础。2.设计方案论证2.1设计思路建立一个函数,用来添加、显示、删除、查询通讯录等信息,完成通讯录的功能。主函数可以调用六个子函数,分别完成添加记录、显示记录、删除记录、查询记录、退出系统等功能。在主函数中可以以1、2、3、4、0数字键分别可以执行某个功能模块。退出程序删除记录查询记录显示退出程序删除记录查询记录显示记录添加记录通讯录管理系统 2.2程序设计2.2.1根据图1定义数据类型建立函数typedefstruct { charscore;/*编号*/ charname[10];/*姓名*/ charnum[15];/*号码*/ charemail[20]; /*邮箱*/ charage[8]; /*年龄*/ charadds[20]; /*住址*/ }Person;2.2.2主函数及其流程图Y定义主函数main()和一系列的功能函数,只有通过这些函数才可实现程序的功能。每次使用都会调用主函数。主函数主要是利用switch语句对数据进行处理,流程图如下:Y添加记录选择1开始N选择2YYYYNNNN退出系统查询记录删除记录显示记录选择0选择4选择3添加记录选择1开始N选择2YYYYNNNN退出系统查询记录删除记录显示记录选择0选择4选择3结束结束2.2.3增加函数及其流程图.添加通讯录记录流程图:.显示通讯录记录流程图:.删除通讯录记录流程图:.查询通讯录记录流程图:2.3源程序#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstruct { charscore;/*编号*/ charname[10];/*姓名*/ charnum[15];/*号码*/ charemail[20]; /*邮箱*/ charage[8]; /*年龄*/ charadds[20]; /*住址*/ }Person;Personpe[80];intmenu_select() { charc; do{ system("cls"); printf("\t\t*****通讯录*****\n"); printf("\t\t┌───────┐\n"); printf("\t\t│1.添加记录│\n"); printf("\t\t│2.显示记录│\n"); printf("\t\t│3.删除记录│\n"); printf("\t\t│4.查询记录│\n"); printf("\t\t│0.退出程序│\n"); printf("\t\t└───────┘\n"); printf("\t\t请您选择(0-4):"); c=getchar(); }while(c<'0'||c>'4'); return(c-'0'); }intInput(Personper[],intn){ inti=0; charsign,x[10]; while(sign!='n'&&sign!='N') { printf("\t编号:"); scanf("\t%d",&per[n+i].score); printf("\t姓名:"); scanf("\t%s",per[n+i].name); printf("\t年龄:"); scanf("\t%s",per[n+i].age); printf("\t电话号码:"); scanf("\t%s",per[n+i].num); printf("\t通讯住址:"); scanf("\t%s",per[n+i].adds); printf("\t电子邮箱:"); scanf("\t%s",per[n+i].email); gets(x); printf("\n\t是否继续添加?(Y/N)"); scanf("\t%c",&sign); i++; } return(n+i);}voidDisplay(Personper[],intn){ inti; printf("\n");/*格式*/ printf("编号姓名年龄电话号码通讯地址电子邮箱\n"); printf("\n"); for(i=1;i<n+1;i++) { printf("%-5d%-8s%-6s%-13s%-15s%-15s\n",per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].num,per[i-1].adds,per[i-1].email); if(i>1&&i%10==0) { printf("\t\n"); printf("\t"); system("pause"); printf("\t\n"); } } printf("\n"); system("pause");}intDelete_a_record(Personper[],intn){ chars[20]; inti=0,j; printf("\t请输入想删除记录中的名字:"); scanf("%s",s); while(strcmp(per[i].name,s)!=0&&i<n)i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return(n); } for(j=i;j<n-1;j++) { strcpy(per[j].num,per[j+1].num); strcpy(per[j].name,per[j+1].name); strcpy(per[j].age,per[j+1].age); strcpy(per[j].adds,per[j+1].adds); strcpy(per[j].email,per[j+1].email); per[j].score=per[j+1].score; } printf("\t\t\t已经成功删除!\n"); return(n-1);}voidQuery_a_record(Personper[],intn){ intm; printf("\t\n请选择查询方式:\n");printf("\t┌──────┐\n");printf("\t│1姓名│\n");printf("\t│2电话│\n");printf("\t│3地址│\n");printf("\t│4返回│\n");printf("\t└──────┘\n");printf("请选择:");scanf("%d",&m);while(m!=1&&m!=2&&m!=3&&m!=4){ printf("输入错误,请重新选择:"); scanf("%d",&m); } if(m==1) { chars[20]; inti=0; printf("\t请输入想查询的姓名:"); scanf("\t%s",s); while(strcmp(per[i].name,s)!=0&&i<n)i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t此人编号:%d\n",per[i].score); printf("\t此人年龄:%s\n",per[i].age); printf("\t电话号码:%s\n",per[i].num); printf("\t通讯地址:%s\n",per[i].adds); printf("\t电子邮箱:%s\n",per[i].email); }; if(m==2) { chars[20]; inti=0; printf("\t请输入想查询的电话:"); scanf("\t%s",s); while(strcmp(per[i].num,s)!=0&&i<n)i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t此人编号:%d\n",per[i].score); printf("\t此人姓名:%s\n",per[i].name); printf("\t此人年龄:%s\n",per[i].age); printf("\t通讯地址:%s\n",per[i].adds); printf("\t电子邮箱:%s\n",per[i].email); }; if(m==3) { chars[20]; inti=0; printf("\t请输入想查询的地址:"); scanf("\t%s",s); while(strcmp(per[i].adds,s)!=0&&i<n)i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t此人编号:%d\n",per[i].score); printf("\t此人姓名:%s\n",per[i].name); printf("\t此人年龄:%s\n",per[i].age); printf("\t电话号码:%s\n",per[i].num); printf("\t电子邮箱:%s\n",per[i].email); };}voidChange(Personper[],intn){ chars[20]; inti=0; printf("\t请输入想修改的记录中的名字:"); scanf("%s",s); while(strcmp(per[i].name,s)!=0&&i<n)i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t编号:"); scanf("\t%d",&per[i].score); printf("\t姓名:"); scanf("\t%s",per[i].name); printf("\t年龄:"); scanf("\t%s",per[i].age); printf("\t电话号码:"); scanf("\t%s",per[i].num); printf("\t通讯住址:"); scanf("\t%s",per[i].adds); printf("\t电子邮箱:"); scanf("\t%s",per[i].email); printf("\t修改成功!");}voidWritetoText(Personper[],intn){ inti=0; FILE*fp;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- “双新”及“双减”背景下学校有效开展教研工作的策略
- 系统掌握CPSM试题及答案
- 无懈可击的CPSM考试试题及答案
- 2024年CPSM难点突破试题及答案
- 仓储管理中的成本控制方法试题及答案
- 2024年湖南省株洲市天元区群丰镇招聘社区工作者考前自测高频考点模拟试题(共500题)含答案
- 国际物流师人才评估考题讨论试题及答案
- 专业考试:CPMM试题及答案概论
- 2025届浙江省源清中学高三第五次模拟考试化学试卷含解析
- 2024年CPMM重点理解试题及答案
- 机电一体化专业课程改革调研报告及改革建议
- 新生儿各种导管的护理
- 《天津天狮奖金制度》课件
- 2025年中远海运投资控股有限公司招聘笔试参考题库含答案解析
- 人力资源内部培训课件
- 医院临床医学带教老师培训
- 2024年03月浙江南浔银行春季招考笔试历年参考题库附带答案详解
- HPE-DL380-Gen10-服务器用户手册
- Unit6Beautifullandscapes-Reading教学设计译林版七年级英语下册
- 金刚石行业分析报告
- 中间人协议书范本(2025年)
评论
0/150
提交评论