




已阅读5页,还剩58页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
宝鸡文理学院毕业设计论文目录目录i摘要iii第一章 引言51.1 设计背景51.2 工具简介51.3 本文的内容提要6第二章 实时频域分析基本原理72.1 概述72.2 采样82.3 离散傅里叶变换102.4 fft算法112.5 取帧152.6 依时傅里叶变换15第三章 开发平台173.1 dsp实现方式173.2 硬件平台dsk5416183.2.1 ti tms320 c5416 dsp芯片193.2.2 cpld可编程逻辑器件223.2.3 pcm3002 stereo audio codec立体声解编码器243.3 软件开发环境 code composer studio(ccs)263.4 算法模拟工具 matlab27第四章 软件设计284.1 采样操作中断服务程序的设计304.2 fft子程序的设计364.3 主程序设计394.4 在ccs中建立项目404.5 运行与调试43第五章 结束语47参考文献48致谢49附录i摘要以tms320vc5416 cpu的音频实时频域分析为主要内容。介绍音频信号处理中的采样、dft/fft等基本原理和项目的实现平台dsk5416及软件开发环境ccs ide;重点研究对dsk5416编程实现音频信号的采样、预处理、时频变换等处理关键字:数字信号处理,快速傅里叶变换,实时,音频信号abstract this treatise focuses on real-time audio frequency-domain analysis based on tms320vc5416 cpu. the thesis begins with some basic theories involved in audio signal processing, including sampling, dft/fft etc. a brief introduction of ti dsp starter kit 5416the hardware platform, and the software environment ccs ide is outlined in the second part. from chapter 4 a close analysis of programming realization of sampling, prepossessing, time-frequency domain transformation of the input audio signal on the basis of dsk5416 is elaborated, following a preliminary analysis of the system involved. key words:dsp, fft, real-time, audio signal- xiv -第一章 引言1.1 设计背景数字信号处理(dsp, digital signal processing)是将模拟或者数字信号用数字或者符号标示的序列,通过计算机或通用/专用信号处理设备,用数字的数值计算方法完成对输入信号的滤波、变换、压缩、增强、估计、识别等处理,达到提取有用信息的目的。自20世纪60年代以来,数字信号处理在人们的生产、生活、科研、国防等方面发挥了巨大的作用,从根本上地改变了人们关于信号处理、分析的理念。随着数字信号处理技术以及电子信息科学的发展,各种应用数字信号处理原理的产品纷纷出现,例如无绳电话,数字电视、互联网络等等,极大的便利了人们的生活。按照信号携带的信息种类分,信号可以分为语音、文字、图像、纯数据信号等等,在现实生活中,音频信号处理应用十分广泛,如广播、电话等。在国外,对于音频信号处理的研究已经趋于成熟,在软、硬件方面都有高效、可靠的应用方案,如应用于在电脑音频上的ac97(audio codec 97)标准和新一代gsm手机的omap(omap - open multimedia applications platform)平台等等。而国内对音频信号处理的研究还停留在应用国外现成技术、产品的阶段,硬件方面不得不使用国外的dsp处理器;软件方面多是不加修改地照搬使用。随着国产dsp芯片的问世以及国人对知识产权重要性的认识渐渐清醒, 音频信号处理的算法、实现已经成为各大学、研究中心的重要课题。1.2 工具简介本次设计硬件平台采用ti公司提供的dsp入门者套件(dsk, dsp starter kit)系列的dsk5416;软件开发平台采用code composer studio(ccs)。具体内容将在第三章介绍。1.3 本文的内容提要本文首先研究音频信号处理中包括采样、取帧及时频域序列转换方法在内的基本原理,接着介绍dsk5416开发板,并通过对dsk5416编程上实现具有采样、取帧、fft计算等功能的音频信号处理系统。本文第一章是引言部分,第二章介绍音频信号处理的基本原理,第三章研究dsk5416版的软硬件开发环境;第四章着手设计实现音频信号处理的程序;最后,第五章是结论,对本项目做了总结。第二章 实时频域分析基本原理2.1 概述为实现对音频信号进行计算机化分析、处理,必须将模拟的、连续的声音波形信号数字化,使其成为能够被电子计算机处理的在时间上离散,在数值上也是离散的一系列值,这个过程就是对输入信号采样的过程。将采样得到的数字信号序列进行一系列的处理,如滤波,时频域变换,得到需要的数据,进而输出或者储存起来,这就是一次典型的dsp分析/处理操作。为了实现对输入音频信号频率特性的研究,输入信号应通过时频域变换,即对输入序列进行离散傅里叶变换(dft, discrete fourier transform),得到频谱图。因此,整个系统的框图如图2.1所示:图2.1 音频信号频域分析系统框图2.2 采样音频处理的对象是数字化的音频数据,而通常存在的声音波形是以连续、模拟为特征,只有经过模拟数字转换(a/d, analog to digital conversion)才能生成可被计算机处理的数据。对于音频信号,模数转换主要包括两个方面:抽样和量化。抽样是指每隔一个固定的时间间隔,探测模拟音频信号的大小(声波的幅值),每秒钟收集数据的次数就称为采样频率。根据奈奎斯特(nyquist)抽样定理,对于某一频带宽度有限,最高频率分量为fm的信号,以高于2fm的频率进行抽样,所得到的时域序列可以无损地还原出原信号。人耳所能听到的声音频率范围为20hz20khz,要确保声音不失真,采样频率应在40khz以上。常用的抽样频率有6khz、8khz、12khz、24khz、44.1khz、48khz等等,采样频率越高,声音失真越少,但是更高的采样频率对于人耳有限的听力来说并没有什么实际意义。而且对一特定长度的音频信号,采样频率越高,返回的数据量就越大,进行信号处理时处理器的负担也就越重。同样,量化也是决定音频数字化质量的一个方面,它是指每一个采样点能表示的数据级数。常用的量化数据位数有8位、12位、16位、20位、32位等等,如8位数据可以表示28 = 256阶不同量化值,而16位对应216 = 65536、32位对应232 = 4294967296阶。同样,量化的位数越多,声音的质量越好,而对应的数据量也越大。图2.2抽样器示意图抽样器可以看作一个电子开关,每隔1/fs秒闭合一次,闭合时间极短(理想情况),产生的信号为频率为fs(sample frequency)的周期的冲击函数。将此冲击函数与待采样模拟信号相乘,既可“取出”冲击函数发生时该模拟信号的幅值。如图2.2所示。抽样器取出的幅值连续、时间上离散的信号将被送入a/d转换器进行量化编码,使其幅值被一定位数的二进制数表示。对于n位的数模转换,能够分辨的幅值为1/(2n-1)*,其中是输出满幅度。由于连续信号被转换成离散的数字信号,必然会引起误差。a/d转换时产生的最大误差为分辨率的1/2,因此,转换位数n越大,分辨率越高,误差也就越小。图2.3以一个3-bit的数模转换器量化传输曲线说明了a/d转换器的线性度、分辨率以及最大误差。图2.3 a/d转换器量化传输曲线图中代表输入满幅度,是输出满幅,、分别为输入输出单位分割的幅度,max代表最大量化误差。正如前面分析的,位数n越大,传输曲线越接近直线,误差也就越小。16-bit的a/d转换器输出可达65536级,能够满足一般应用的要求,同时数据量适中,不会占用太多的存储器空间。a/d转换的实现形式很多,比如逐次逼近型、积分型、sigma delta( )型等等,其中sigma delta型具有噪声性能好,转换精度高等优点,应用十分广泛。本课题使用的音频解编码器(codec)pcm3002也使用了sigma delta型a/d转换器。2.3 离散傅里叶变换为了得到输入信号的频率特性,需要将时间域的输入序列变换成频率域的序列。在连续时间信号系统中,变换域的方法是拉普拉斯变换与傅里叶变换。在离散时间信号与系统中,变换域分析方法是z变换法和傅里叶变换法。对于有限长离散数字序列,离散傅里叶变换(dft, discrete fourier transform)是一种十分有用的工具,在数字信号处理中应用十分广泛。傅里叶变换就是建立以时间为自变量的“信号”与频率为自变量的“频谱函数”之间的某种变换关系,当自变量“时间”或“频率”取连续或离散值时,傅里叶变换对的形式各不相同:1) 连续时间、离散频率傅里叶变换正变换:(2-1)反变换:(2-2)从连续时间非周期信号x(t)得到连续频谱密度函数x(j)。2) 连续时间、离散频率傅里叶级数正变换:(2-3)反变换:(2-4)从连续时间周期信号x(t)得到离散频谱级数x(jk0)。3) 离散时间、连续频率序列的傅里叶变换正变换:(2-5)反变换:(2-6)从离散时间非周期序列x(n)得到周期性的连续频谱密度函数x(ej)。4) 离散时间、离散频率离散傅里叶变换(dft)正变换:(2-7)反变换:(2-8)其中,从周期性的离散时间序列x(n)得到周期性的离散频谱函数x(k)。以上四种变换中,仅仅有最后一种适于通过计算机运算,而前面三种因为其函数至少在时频域中的一个域里是连续的,不能通过计算机在有限次操作中计算出结果,也不便于储存,故在dsp领域中应用远没有离散傅里叶变换广泛。2.4 fft算法由复数计算的特殊性以及傅里叶变换的复杂性,直接计算dft,计算量十分巨大:乘法次数和技法次数都是和n2成正比的,假如计算1024点的dft,处理器需要运算一百多万次。处理实时数据时如此大的运算量可能造成处理器计算速度跟不上数据采集速度造成信息丢失。自20世纪60年代库利(j.w.cooley)和图基(j.w.tukey)引入时间抽取基 2 fft(fast fourier transform,快速傅里叶变换)算法以来,dft计算效率和速度有了长足的发展。通过对dft的正变换和反变换(idft)公式的研究发现,dft运算有以下特点:1) 的对称性(2-9)2) 的周期性(2-10)3) 的可约性,(2-11)若dft的点数n为偶数,可以利用的对称性将其转换:(2-12)其中(2-13)(2-14)则n点的dft就被分解为2个n/2点的dft,计算量大大减少。若n/2仍然为偶数,还可以继续分解为4个n/4点的dft,这样的分解可以一直进行到点数不为偶数为止。对于n=2m点的dft,利用这种分解算法最后只需要复数乘法(n/2)log2n次,复数加法nlog2n,大大减少了运算量。将分解的2个n/2点dft运算结果组合为完整的n点dft,需要利用的周期性。最后得到x(k)前半部分和后半部分的表达式为:前半部分x(k):(2-15)后半部分x(k):(2-16)式2-15,2-16所示运算可以用图2.4的单位蝶形信号流图表示:图2.4 dit单位蝶形运算流图一个n=2m点的dft运算,经m次分解后的基 2 fft运算过程可以用蝶形运算流图表示如下(图2.5):图2.5 一个n点dft被分解为n/2个2点dft从图中可以发现,m次蝶形运算对应的m次序列分解都是以当前序列在时间上的次序是属于偶数还是奇数为标准的,因此该基 2 fft算法被称为时间抽选(dit, decimation in time)快速傅里叶变换法,radix 2 dit fft。当然,时间抽选并不是唯一的分解方法,按照输出频域序列x(k)的奇偶性也可以将dft分解为m轮蝶形运算,即为频率抽选法(dif, decimation in frequency),其蝶形运算示意图如图2.6。图2.6 dif单位蝶形运算流图同样,n=2m点的dft运算经频率抽选后分解为m级蝶形运算的流图如下(图2.7) 图2.7 一个n点dft被dif分解为n/2个2点dft从图2.5、图2.7中还可以发现,fft的输入或者输出序列中有一个序列是按照正常的顺序排列在存储单元中,既(0), (1), (2) (n-1),而另一个序列却不是按照自然顺序排列,有种混乱无序的感觉,这就是fft运算中必然要经历的一步,倒位序。在dit fft中,这是由于输入x(n)按标号n的奇偶性不断分组而造成的;在dif fft中,情况正好相反。在实际运算中,总是先按照自然顺序将输入序列存入存储单元,然后对存储单元进行变址运算,将输入序号为(00001b)的序列值与序号为(10000b)的序列制互换,输入序号为(00010b)的序列值与序号为(01000b)的序列制互换,以此类推,直到每一存储单元的内容都被调换过且只调换过一次,某些倒序序号之为其自身的序列值不变。在dit fft算法中,一般是将变址运算放在最前面;在dif fft算法中,一般是将变址运算放在最后面。除了按时间抽取和按频率抽取的基-2快速傅里叶变换算法以外,实用fft算法还有基4 fft、混合基fft、分裂基fft、线性调频z变换(chirpz)法等等,它们在代码长度、运算速度等方面各有优势,应该按照应用需求来决定选用的算法。目前的实用dsp领域中,基2 fft算法应用最为广泛,本课题也将使用radix 2 dit fft算法实现对音频信号的域变换。2.5 取帧由dft的分析可以看出,送入cpu计算fft的时域序列必须是有限长(如n点),这样才能将输入和输出放置在有限的存储器空间中,并对其进行操作,如变址、乘加等。然而对于实时音频信号处理,采样器返回的数据来自输入声音波形在时域上无止境的向后延拓,必须使之成为分割为有限长的序列才能对各个分段进行计算,这个过程就是取帧(framing)。如图2.8,对于输入序列x(n),n=0, 1, 2, 3,每n点取作一帧,得到的长度为n的序列,对其进行n点的fft运算,算完后将结果输出或者储存,然后计算下一帧长度为n的序列一系列操作就将连续不断的输入声音信号分段计算出频率特性,并不断刷新。图2.8 取帧操作示意2.6 依时傅里叶变换在正弦信号模型的实际应用中,信号的特性(振幅、频率和相位)常常随时间而改变。例如,用来描述雷达、声纳、语音和数据通信的信号就需要这种类型的非平稳信号模型。要描述这类信号,单一的dft估计是不够的,于是引入了依时傅里叶变换的概念,也称短时傅里叶变换。一个信号xn的依时傅里叶变换定义为 (2-17)式中wn 是一个窗序列。在依时博里叶表示中,一维序列xn是单个离散变量的函数,它转换为一个离散的时间变量n和连续的频率变量的二维函数。 依时博里叶变换对于是以2为周期的周期函数,因此分析信号时只需要考虑在区间上,或长度为2的其它区间上的值。式(2-17)可以看作,xn+m通过窗wm的博里叶变换窗有一个平稳的起始点,并且当n改变时信号滑动着通过窗,这样对于每个n值、可以看到信号的一段不同部分。通常使用的窗函数有三角窗(bartlett)、海明窗(hamming)、汉宁窗(hanning)、布拉克曼窗(blackman)等,他们的共同点在于n点的窗函数序列在其中值点 达到最大值,而两侧的值关于点n=(n-1)/2对称减小,图2.9为海明窗的窗函数示意图。图2.9海明(hamming)窗第三章 开发平台3.1 dsp实现方式数字信号处理的各种算法,如滤波、域变换、增强、识别等,只有通过显示产品实现,并能方便地应用在人们的生产、生活中才能创造实际价值,否则一切都仅仅是实验室里、学者们的头脑中概念性的东西。dsp的实现方法有三种:一种是在通用计算机(如pc、大型计算机等)上用软件编程来实现,如现有的c、perl等语言或者matlab仿真程序就行。这种方法的特点是灵活性强,但是速度慢,一般不能做到实时处理,多采用采样储存分析的流程;第二种是采用专用的dsp芯片,它只能针对某一种应用,通过加载数据、控制参数、加控制信号以使它具有有限的可编程能力,这种办法对专门应用处理速度快,可做到实时性,但是灵活性差,程序移植困难,而且定制芯片价格昂贵,故仅在某些特别强调速度的场合应用;第三种dsp的实现方法则为采用通用的dsp芯片,它是可以用指令/软件编程的处理平台,兼具上面两种方法的优点,既有灵活性,又有较快的处理速度,可做到实时信号处理。通用dsp芯片有定点与浮点两种,这类芯片生产厂家中最有名的是德州仪器(ti, texas instrument)公司、ad(analog device)公司、摩托罗拉(motorola)公司等,其中ti公司的产品系列最全,市场占有率最高,其tms320 c6xx系列性能强劲,既有浮点型dsp处理器,也有定点型dsp处理器,主要针对高端的图像视频应用;tms320c54x系列是目前使用最广泛的定点型dsp芯片,其主要成员有tms320 c548、c549、c5402、c5410、c5416、c5420等等,特点是功耗很低,运算速度较快,典型的100mips(million instructions per second,百万指令每秒)对应功耗为60mw。其中c5416芯片频率较快,成本低廉,在语音通讯、分组交换以及传真、话音服务中应用十分广泛。本课题所采用的dsk5416开发平台就板载了一块ti c5416芯片。3.2 硬件平台dsk5416ti公司提供的dsp入门者套件(dsk, dsp starter kit)是一独立的开发、验证硬件平台,为dsp开发者带来了快速进行设计工作的低成本解决方案。本课题使用的dsk5416开发平台除了使用c5416dsp cpu作为系统的中央处理器外,还在版上配置了64k字的ram,256k字的flash rom,以及一个能完成对声音信号进行采样,数模转换以及对时域序列进行插值、模数转换然后输出波形声音信号的音频解编码器pcm3002,十分适合应用于音频信号处理的项目。有关dsk5416的详细说明,参见文献5。图3.1 dsk5416系统框图3.2.1 ti tms320 c5416 dsp芯片c5416是一款基于该进型哈佛架构(advanced modified harvard architecture)的定点dsp处理器,具有一条程序总线、三条数据总线、两个地址生成器。c5416的算术逻辑单元(alu, arithmetic logic unit)具有高度的并行能力,同时,分开的地址、数据空间与总线结构使cpu能够同时完成取址,读/写操作数等操作,两条读指令和一条写指令可以在同一个指令周期中完成,增强了cpu的运算性能。c5416的具体特性如下:u 工作频率高达160mhz(对应指令执行速度为160mips),节能状态频率低至16mhz;u 继承了viterbi急速起,在移动通信gsm解码中viterbi碟形运算更新只需4周期;u 1个40-bit的相加器和2个40-bit的累加器,支持并行指令;u 1717-bit乘法器与加法器的级联,可同时完成1次乘和2次加;u 4条内部总线,2个地址生成器,可对程序和数据多路取数,减小存储器瓶颈;u 40-bit alu,可分为2个16-bit的通路,因而一周期可同时执行两路运算;u 8个辅助寄存器(ar0,ar1ar7)和一个软堆栈(software stack),可作为定点dsp的高级c编译器;u 6个dma(direct memory access,直接存储器存取)通道;u 带2k字节缓存器的串口,20ns指令时速度达50mb/s与t1/e1或h100标准接口;u 16-bit/8-bit可变hpi(host port interface,主机接口);u 3个多通道分时复用缓冲串口(mcbsp, multichannel buffered serial port),允许128个通道,832-bit/字;u 增强型8-bit/16-bit主机接口(hpi, host port interface),可用作普通并口或者连接其他dsp芯片,进行并行处理;u 64k字(16-bit)数据存储器、8m字程序存储器,128k字ram、16k字rom;u 内和电压为1.5v,i/o电压3.3v,并有3种底功耗模式,功耗很低。图3.2 ti tms320 c5416芯片框图c5416芯片和ti的c54x系列其他芯片一样,采用多级流水线结构,将指令的执行分为6个阶段:指令预取址、取指令码、指令解码、存储器访问、读存储器、执行指令,如图3.3。这6个阶段互相独立,在一个机器周期中可以处理多条指令,增强cpu的计算能力。c5416芯片有3个状态和控制寄存器,分别是状态寄存器0(st0, status register),状态寄存器1(st1),处理器模式状态寄存器pmst(processor mode status register),他们都是16-bit的存储器映射寄存器,可以在程序里方便的寻址。其中st0和st1各位指示了cpu各种状态和设置,而pmst中各位包含了存储器设置控制以及中断向量表。各存储器对应位意义如图3.4,各位对应值参见文献1。图3.3 c5416流水线操作示意图(a)st0(b)st1(c)pmst图3.4 c5416状态和控制寄存器c5416不仅不有片内存储器空间(on-chip memory) 还支持片外存储器(external memory),在地址生成器生成地址时,芯片自动决定应该访问片内存储器还是片外存储器,这一点对方便程序开发十分有利。但是,使用片内存储器有着速度快(访问时没有等待周期),专为cpu的流水线优化设计,相比使用片外存储器功耗更低,且开发、应用时不需要额外花钱购买外部存储器等优点,在片内空间足够的情况下,一般只使用片内存储器。对于片内存储器的寻址,c5416将程序寻址和数据寻址分开进行,采用不同的地址和数据总线,程序和数据寻址过程相互独立,但程序和数据的存储空间采用统一的物理内存。程序寻址的地址总线宽度为24位,进行字节(8-bit)寻址;数据寻址的地址总线也为24位,但是寻址时仅使用23位地址,将数据地址总线的最低位强制置0,按单字(16-bit)进行寻址。其中数据空间氛围128个数据页(0127),每个数据页为64k地址,进行数据访问时,采用7位页地址,16位偏移量。与ti公司其它定点dsp类似,c5416提供了定点乘法、除法、乘加等dsp专用指令,支持快速的硬件循环和循环缓冲区访问。另外,为了调试方便,c5416提供了片上仿真、允许主机和目标系统之间进行实时数据交换(rtdx, real-time data exchange),极大地方便了软件调试工作。3.2.2 cpld可编程逻辑器件dsk5416系统框图中cpld代表“complex programmable logic device”,是c5416对dsk板载设备进行控制的核心器件,具有地址译码、状态表示、外设控制等作用,主要通过cpld内部8个存储器映射寄存器(mmr, memory map register)来完成。8个8位cpld寄存器被映射在dsk5416的i/o空间,地址分别是0x0000, 0x0001, 0x00020x0007。它们的功能有:u 控制dsk版上4个发光二极管(led);u 返回dsk版4个跳线开关(dip)的状态;u 控制扩展子卡接口;u 选择c5416的mcbsp2是连接到hpi接口还是codec接口;u 控制pcm3002 codec的采样、输出、数据传输等操作。在8个cpld寄存器(表3.1)中,codec寄存器codec_l、codec_h,杂项寄存器misc以及codec频率寄存器codec_clk关系着版载音频解编码器pcm3002的工作方式及状态:表3.1 cpld各寄存器位定义i/o addrnamebit 7bit 6bit 5bit 4bit 3bit 2bit 1bit 00user_regusr_ sw3usr_ sw2usr_ sw1usr_sw0usr_ led3usr_ led2usr_ led1usr_ led01dc_regdc_ detdc_io_ ctldc_ stat1dc_ stat0dc_ rst0dc_ cntl1dc_ cntl02codec_lcodec_l_cmd7.03codec_hcodec_h_cmd15.84versioncpld_ver3.00board version2.05dm_cntldm_ selmemtype_dsmemtype_psdm_pg4dm_ pg3dm_ pg2dm_ pg1dm_ pg06misccodec_rdy0000dc_widedc32-oddbsp2 sel7codec_ clk0000div_ selclk_ stopclk_ div1clk_ div0u codec_l、codec_h寄存器用于向codec传送指令。codec的控制指令字长16-bit,cpu希望配置codec时,需要首先将指令的低8位写入cpld的codec_l寄存器,然后再将指令的高8位写入codec_h寄存器。当codec_h写入完毕后,cpld会自动将此16位通过串口移入pcm3002内部的控制寄存器中,达到配置pcm3002的目的。指令字不能连续写入codec_l及codec_h寄存器,因为cpld将控制字送出需要一定的延迟时间,约为1ms。为防止连续写入控制字导致控制指令被丢弃,写入控制字之前必须查询misc寄存器的codec_rdy位。该位用来表示上一个指令字是否已经送出,值为1时,cpld还未完成传送codec指令字的操作,仅当codec_rdy=0时,才能写入下一个控制字。u codec_clk寄存器用于改变pcm3002的采样频率。当div_sel位为0时,采样频率固定为48khz;为1时,codec的采样频率由clk_div1、clk_div0位决定。当clk_div1、clk_div0的值为00、01、10、11时,对应的采样频率分别为24khz、12khz、8khz、6khz。clk_stop位用来启动、停止采样脉冲信号,在改变采样频率时,必须设置该位来重新启动采样脉冲。u misc寄存器中的bsp2sel用来控制c5416的mcbsp#2口是连接codec还是hpi。针对音频应用,pcm3002必须通过mcbsp#2口连至cpu,以便将采样得到的音频序列输入cpu或将cpu输出的音频序列转换成模拟信号输出,此时bsp2sel位应设置为0;对于某些不使用pcm3002,而将mcbsp#2连至主机接口hpi的应用,bsp2sel位应设置为1。3.2.3 pcm3002 stereo audio codec立体声解编码器pcm3002双声道音频解编码器是dsk5416版集成的16-bit/20-bit输入/输出音频处理终端,其性能特点如下:单片20-bit位宽delta - sigma adc/dac转换器;u 使用软件方式控制codec的工作参数;u 双声道输入、输出(当使用麦克风输入时为单声道);u adc信噪比高达90db,动态范围90db;u dac信噪比高达94db,动态范围94db;u 采样频率最高可达48khz;u adc/dac可以分别处于节能状态,降低功耗;图3.5 pcm3002 codec系统框图对pcm3002操作的控制通过对其内部的4个控制寄存器register0、1、2、3进行读写来完成。表3.2为寄存器对应各位的定义表,观察该表发现,4个寄存器的bit10、bit9均为地址标识位,这是因为pcm3002的控制寄存器没有独立的地址,写入指令字时,必须通过地址标识位来确定该指令应该存入哪一个寄存器。表3.2 pcm3002控制寄存器定义reg #b15 b11b10b9b8b7b6b5b4b3b2b1b000000000ldlal7al010000001ldrar7ar020000010pdadbypspddaatcizdoutdem1dem0mut30000011000lop0fmt1fmt00lrp当地址标识位为00时,指令将存入reg#0,该指令字的用于控制左声道信号dac的衰减程度,一共256级,通过al7al0的值来确定。当al7al=0x00时,输出音频信号衰减到0;当al7al0=0xff时,输出信号不被衰减。衰减程度att与al7al0的值之间的关系为:att = 20 x log10(al7al0/255) (db)。另外,reg#0的bit8用于控制衰减值是否被刷新,bit8=0时,后续的衰减值被codec忽略;只有当bit8=1时,后续的衰减值才能起作用。地址标识位01对应的控制寄存器为reg#1,它的作用与reg#0相似,用于控制右声道的dac衰减。地址标识位10表示指令字将存入reg#2,其各位的定义如下:u bit8:pdad(power down a/d)位。等于1时,a/d转换器处于节能状态(关闭);等于0时,a/d转换器正常工作,持续进行转换。u bit7:byps(adc high-pass filter bypass)位。等于0时,输入信号通过高通滤波器后再进行a/d转换;等于1时,输入信号直接送入a/d转换器。u bit6:pdda(power down d/a)位。与pdad位类似,控制d/a转换器是否进入节能状态。u bit5:atc(dac attenuation channel)位。为1时,两个声道dac的衰减值均由reg#0控制;为0时,左右声道dac衰减值分别由reg#0和reg#1控制。u bit4:izd(dac infinite zero detection)位。为1时开启dac的恒0指探测功能。u bit3:out(dac output enable)位。为1时,关闭dac输出。u bit2、bit1:dem(dac de-emphasis control)位。u bit0:mut(dac soft mute control)位。为1时,两个声道的音频输出同时静音。reg#3的地址标识位11,其lop(bit4)位、fmt(bit3、bit2)位、lrp(bit0)分别控制codec的输入 输出循环、adc/dac数据格式以及左右声道数据的极性标识。在dsk5416平台中,c5416 cpu不能直接对pcm3002的操作进行控制,必须通过cpld模块向cpld写入控制字。cpu可以通过读出cpld codec_l、codec_h寄存器的值来查询上一次写入codec控制寄存器的控制字,却不能直接得到codec中各寄存器的实际值。有关通过cpld对codec进行控制的具体过程已在上一小节说明,因此不再赘述。3.3 软件开发环境 code composer studio(ccs)为了与dsk5416硬件平台相配套,ti提供了集成化的软件开发环境ccs ide(code composer studio integrated develop environment)。ccs专门为ti的dsp设计,扩充了基本的开发工具,增加了调试和实时分析功能,主要有以下特点:u 项目管理和编辑工具,用来对项目进行创建、配置、生成和运行,支持通过makefile和命令行来生成可执行代码;u 代码生成工具包括c编译器、汇编器和链接器等工具,另外ccs还提供了可视化的链接工具visual linker,帮助用户来调整代码和数据内存,实现程序内存的最优化;u ccs提供了丰富的调试工具,支持多种模拟器和仿真版,支持在程序运行中探测存储器特定地址的值,用户可以方便地在pc和目标版上交换数据;u 提供了丰富的函数库支持,如csl、dsplib以及imglib等;u 支持实时内核dsp/bios,极大的便利了程序的开发,使开发者能够把精力集中在对算法的研究上。3.4 算法模拟工具 matlabmatlab是英文matrix laboratory(矩阵实验室)的缩写,他是由美国mathworks公司推出的用于数值计算和图形处理的数学计算环境,其特点有:u 语言简洁紧凑,使用方便灵活,函数库极其丰富;u 运算符丰富,代码与c语言相似;u 既有结构化的控制语句,又有面向对象编程的特性;u 语法限制不严格,自由度大u 程序可以执行好,能在各种型号的计算机以及操作系统上运行;u 图形界面,更加直观u 有强大的工具箱,有上百个核心内部函数,扩展性好;u 源程序开放,用户可以自己开发matlab组建,实现特定功能。在matlab环境下,可以集成地进行程序设计、数值计算、图形绘制、输入输出、文件管理等各项操作,对于dsp应用,matlab提供了丰富的工具箱功能,如simulink工具中的fft、fir、iir模块,十分有利于dsp算法的模拟和系统开发。第四章 软件设计利用ccs开发平台以及dsp/bios实时内核编写的具有采样、加窗、fft计算、输出频谱功能的程序将实现基于dsk5416版的实时音频信号处理系统。系统的基本流程图如下(图4.1):图4.1 系统流程图图4.1所示流程图的特点是采样和fft计算依次进行,在计算fft时输入的音频信号将被忽略,造成帧的丢失。fft是系统的核心算法,cpu计算fft的时间占整个程序运行时间的90%以上,该流程丢失的音频信息量是相当大的。实时信号处理要求在计算fft时的音频信号尽量不被丢弃,应存入第二个音频输入信号帧,待前一帧数据的fft计算完成后接着进行第二帧的运算,在第二帧的数据进行fft运算时采集第三帧如此的系统流程才能满足实时音频信号处理的要求。dsp芯片只能同时进行一项任务的限制决定要“同时”进行fft运算和数据采集只能通过将cpu的运算时间划分成两块,cpu轮流执行两个操作来实现。划分cpu时间可以采用在fft函数中插入数据采集语句、用c5416内部定时器周期性地执行数据采集指令、利用dsp/bios的进程管理模块如任务管理器(task manager)、利用数据采集设备的中断等方法来实现。其中,中断方式能保证在正确的时间执行数据采集(对于采样频率fs,每隔1/fs秒中断一次,cpu进入数据采集程序),并且不会消耗而外的cpu性能,在一般情况下是首选的数据采集模式。同时,对帧进行加窗处理仅仅是逐一对输入序列加权,可以和数据采集一并进行,以减少cpu再次变址、寻址的负担。改进后的系统流程如下图4.2所示。图4.2 系统流程图实现以上的系统流程可采用汇编语言编程或c/c+语言编程,也可以采用汇编语言和c语言的混合编程方法。使用纯汇编语言编写的程序编译后产生的代码执行效率高、速度快,但是汇编编程的复杂度高、开发周期长,且编写、调试时不如c语言那样直观而便于理解;采用c语言编写的程序虽然执行效率相对较低,但是具有代码简单、调试方便以及开发周期短等优点,而且经过ti的工程师反复提高其c编译器的编译效率,目前c程序在ti dsp芯片上的执行效率已达到汇编语言的90%,完全可以满足信息量相对较小的音频信号处理的要求。4.1 采样操作中断服务程序的设计采样是音频处理系统的第一个操作,系统利用采样信号到来时的中断通知正在进行fft运算的cpu采样数据已准备好,等待形成帧。图4.3 mcbsp2框图及数据接收/发送示意在dsk5416硬件系统中,音频解编码器pcm3002与cpu的数据通讯是借助c5416的2号多通道缓冲串口mcbsp2完成的,如图4.3:codec采样得到的数据依次通过mcbsp2的接受位移寄存器rsr(receive shift register)、接收缓冲寄存器rbr(receive buffer register)送入mcbsp2的数据接收寄存器drr(data receive register),进而通过数据总线送到cpu或者dma;cpu或dma也可通过数据总线将待输出数据送入mcbsp2的数据发送寄存器dxr(data transmit register),mcbsp2将dxr的数据送至发送位移寄存器后,数据通过串行接口送到pcm3002。通过cpld寄存器配置好codec内部的控制寄存器后,pcm3002便开始以设定的频率采样。采样得到的音频数据将自动通过串行接口移入mcbsp2的rsr,进而被移入rbr。待mcbsp2的drr为空时,rbr将数据送入drr;若drr中还有数据未被cpu或dma控制器取走,rbr将把接收到的数据保持到ddr中数据被取走为止。其间若pcm3002再送入数据到mcbsp2,新的数据将被丢弃,所以应该及时取出数据一面信息丢失。当codec的数据到达后,mcbsp2的rrdy(read ready)位将被置1,cpu通过查询rrdy位的状态即可决定是否从mcbsp2读取数据。为了实现中断方式的数据输入,还需设置mcbsp2的中断方式,使其在每一个数据到来后通过rint位申请中断,以便cpu及时将数据取出。中断方式的控制通过改变mcbsp2内部的串口控制寄存器spcr1(serial port control register 1)来完成,该寄存器的bit5、bit4位名为intm(interrupt mode)位,值为00时,mcbsp2在每个数据到达后发送rint信号;值为01时,mcbsp2仅在每次缓冲区块被填满后(end of block or frame)中断cpu;值为10时,中断信号受帧同步信号控制(new frame synchronization);值为11时,仅在同步出错(rsyncerr)时申请中断。除了配置intm位,c5416的mcbsp2还有其他10个控制寄存器以及16个通道选择寄存器需要配置,每个寄存器及其各位的定义参见资料4,在此不再赘述。通过dsp/bios的配置文件(*.cdb)生成初始化mcbsp2的代码以及手工编写程序均可初始化mcbsp2,但dsp/bios配置文件的图形化界面更具吸引力。如图4.4及4.5,在mcbsp configuration manager下新建一个mcbsp配置块mcbspcfg0,并设置mcbsp2的rint位和rrdy位一致(对应intm位为”00”);设置接收字长(redlen1)为“16-bit”,本项目使用16-bit的音频采样数据;设置rphase为“single-phase”,不使用mcbsp的双帧模式。设置好以后,将此mcbspcfg0与mcbsp2口关联起来,这样在编译时dsp/bios将自动生成初始化mcbsp2口的代码,而不需要手工编写程序。图4.4 配置mcbsp2的数据接收方式图4.5 配置mcbsp2的接收字长mcbsp2向cpu申请中断后,cpu根据imr(interrupt mask register)寄存器以及st1寄存器中的intm(interrupt mode)位的状态决定是否响应中断。为了开启中断,应首先设置intm=0。mcbsp2的接收数据中断对应cpu中ifr(interrupt flag register)的brint2位(bit6),当中断信号到来时,该位被置1,若此时imr中对brint2位(bit6)为1,cpu将相应该中断,若imr中brint2位为0,中段被屏蔽。ccs提供了的csl(chip support library)应用程序接口中irq模块可用于在主程序中开启中断:irq_globalenable();/ inmt = 0irq_enable(irq_evt_sint6);/ imr对应位置注意到以上程序中,irq_enable( )的参数为irq_evt_sint6,这是因为在c5416 cpu中,brint2与sint6共用一个中断入口号,在中断向量表中对应的低7位地址为0x58。中断向量表高9位地址由cpu的pmst寄存器的iptr位(bit15bit7)决定,默认情况下,iptr = 0x1ff,故完整的brint2的中断入口地址为0xffd8。有关c5416的全部中断入口地址,可参见文献2,在此不再赘述。由于中断向量表中留给中断服务程序的指令空间只有四字节不足以满足复杂应用。一般采用一条条转指令使cpu相应中断后进
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024安全员考试全真模拟模拟题及参考答案详解【新】
- 2025园林绿化作业人员考试彩蛋押题带答案详解(培优A卷)
- 2023年度自考专业(金融)考试综合练习【全优】附答案详解
- 2024江苏护理职业学院单招《语文》模考模拟试题及参考答案详解【突破训练】
- 2025年大庆市信访局招聘(1人)模拟试卷附答案详解(典型题)
- 2024河南省邓州市中考数学预测复习(真题汇编)附答案详解
- 《教育与职业》杂志社2025年度公开招聘工作人员笔试模拟试题及完整答案详解1套
- 2025年下半年国家外汇管理局外汇研究中心招聘4人易考易错模拟试题(共500题)试卷后附参考答案-1
- 人防工程水泥使用方案
- 城市公共交通安全管理方案
- 民警培训安全驾驶简报课件
- 消毒灭菌效果监测报告
- 2025年软工导论期末试题及答案
- 十年(2016-2025)高考生物真题分类汇编(全国通.用)专题10 基因的自由组合定律(解析版)
- 2025年山东省潍坊市中考数学试卷附答案
- 俄罗斯礼俗课件
- 2024统编版八年级历史上册全册知识点复习提纲
- 虚拟服装培训教程课件
- 2025年国防教育知识竞赛试题(附答案)
- 非车主押车借款合同范本
- T-CES 153-2022 电力巡检无人机边缘智能终端技术规范
评论
0/150
提交评论