Blackfin双核处理器与应用开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

0.1 数字信号处理

0.1.1 数字信号处理基本概念

世界上有各种各样需要研究的信号。信号主要是以物理量形式存在的,在数学上用函数来表示。信号可分为声、光、电等各种类型,常见的物理信号有语音信号、音乐、各种视频、生理信号、医学成像、遥感遥测信号、GPS信号、各种数据等,为了便于获取和传输,通常将其他形式的信号转换为电信号。

人们用感知认识世界、获取信息。信号是信息的载体,信息是从信号中获取的新知识或对某个方面发布的新要求。人们常说信息时代就体现了信息的重要性。信息对政治、军事、经济等举足轻重,也影响到个人具体的工作、生活、医疗、娱乐等各个方面,人们对信息的依赖越来越大。

人们会通过各种手段不断改变世界。信息处理是对信号进行处理的简称,结合各种各样的信息处理技术,产生了积极有效的作用。通过从信号中获取信息,并进行加工处理,可以得到想要的结果(如通过滤波得到更适合的信号),或最终做出某种判决(如说话人确认中的“是”与“不是”)。俗话说,聪明聪明,耳聪目明,可见听觉和视觉的重要性。从听觉和视觉获取的信息是人们感知、认识世界的主要渠道,更重要的是人们的主要交流方式。关于这方面的研究也最普遍、最丰富,其应用也更多。就语音来说,相关产业有电话通信,包括后来发展起来的移动电话,还有语音识别、说话人辨认、说话人确认、文语转换等应用。对于图像和视频,早期有拍照、电视等重要应用,目前指纹识别已在很多地方用上,未来人脸识别、虹膜识别、步态识别、人体跟踪、视频理解、手语自动识别等,都是可以应用的方面。

数字信号处理(Digital Signal Processing,DSP)是20世纪60年代前后发展起来的一门新兴学科,利用计算机或专用数字处理设备对信号进行采集、滤波、变换、估值(特征提取)、增强、识别、压缩等处理,以得到符合人们需要的结果,它涉及模拟信号、采样、数字信号、信号特征量、系统分析与设计、系统实现、测试等多个方面。它涉及众多学科而又广泛应用于众多领域,把许多经典理论体系作为自己的理论基础,同时又成为一系列新兴学科的理论基础,因此它与其他交叉学科相结合并渗透到了各个应用领域中[1]

现代信号处理理论,包括模糊逻辑、神经网络、小波变换、自适应计算、智能计算等,是非常重要研究方向,一些应用中可能涉及非常复杂的算法和大量的计算(如同时涉及语音信号、图像信号、视频信号的处理),增加了实时处理难度。实时是指为完成某项任务而对算法的实现时间有一定要求,如果算法的处理时间可以满足这个时限要求,就认为该算法是可以实时实现的。现代信息处理的一个重要发展方向是分布式、并行计算,并借助于大型并行计算机系统推广了其应用,在一些情况下,基于数字信号处理器(Digital Signal Processor,DSP)芯片的阵列处理系统也得到了应用。随着大规模集成电路(VLSI)和处理器技术的不断发展,通用计算机和DSP芯片都朝着多核发展,产生了多种新型处理器,也必将进一步推动现代信息处理的巨大发展和广泛应用。

0.1.2 数字信号处理算法基本特点

数字信号处理中一个最常见也是最重要的操作就是乘累加(MAC),它在求系统响应、计算信号相关函数等方面广泛应用。根据线性时不变离散时间系统的单位脉冲响应,系统响应可采用卷积和来计算:

式中,h(n)、x(n)、y(n)分别是系统的单位脉冲响应、输入序列、输出系列。如果系统是用差分方程描述的,其响应计算为

式中,aibi是系统结构的参数。

对于信号x(n)和y(n),它们的互相关函数rxy(m)表示了二者在时刻m上的相似性,rxy(m)计算为

在很多场合需要计算信号的频谱,就要计算时间序列的离散傅里叶变换(DFT):

在H.264等视频压缩算法中,离散余弦变换(DCT)是一个基本操作:

数字信号处理中还有大量的矩阵乘法等运算,这些操作中有大量的MAC操作。同时算法中普遍存在循环操作,它是一种非连续流执行方式,对系统性能影响较大。

0.1.3 数字信号处理实现方法

数字信号处理是围绕理论、实现、应用发展起来的,理论发展推动了应用发展,反过来,应用又促进了理论的提高,而实现则是理论和应用之间的桥梁。信号处理的基础理论和应用的深入研究开始于1822年傅里叶级数理论提出之后,到20世纪60年代初期基本理论已经比较成熟,重点是研究各种应用算法和快速算法,涉及到离散时间信号与系统分析、各种变换理论、DFT快速算法、数字滤波器分析与设计等。1965年Cooler和Tukey提出的快速傅里叶变换(FFT)使傅里叶分析速度提高了数百倍,从而为数字信号处理应用奠定了基础,标志着数字信号处理的开端。

数字信号处理的实现方法经历了一个较长的发展过程。20世纪60年代数字信号处理实现技术处于实验室阶段,计算速度不高,这期间主要是采用计算机模拟方法研究数字信号处理、变换和数字滤波等问题,一般要花费很多时间才能处理少量信号,无法像模拟信号系统那样做到实时处理。70年代后研制出了FFT和数字滤波器硬件,最初是用多个集成电路(IC)芯片实现数字信号处理中的一个基本运算部件(如加法器、乘法器、延迟器等),后来发展到在一个芯片内集成多个运算部件,同时采用了微处理器技术,实现了可编程和通用性,但内部结构主要是为通用计算和控制而设计的,在许多场合都难以实现实时处理。进入80年代,电子计算机、VLSI技术有了较大发展,1982年美国得州仪器(Texas Instruments,TI)公司研制出了第一片DSP芯片TMS320C10,使得在音频范围内实现了实时处理,之后各种DSP芯片不断问世并取得了广泛应用,以后DSP更多的就是指数字信号处理器。

数字信号处理的实现方法一般有以下几种:① 通用计算机上软件实现;② 通用计算机系统中专用加速处理机实现;③ 专用DSP芯片实现;④ 通用单片机实现;⑤ FPGA实现;⑥ 通用可编程DSP实现。在早期,第1种方法速度较慢但使用方便,一般用于算法模拟,现在通用处理器速度可以很快,但还是不利于小型化;第2种方法专用性强,不便于系统独立运行;第3种方法也有专用性强的特点,比较适合某些特殊场合,如专用于FFT、数字滤波、卷积、相关、数字图像信号处理等算法的DSP芯片,这种芯片将相应算法在芯片内部用硬件实现,无须进行编程;第4种方法适用于简单的数字信号处理算法,如简单的数字控制系统;第5种方法成本较高,编译时间较长;第6种方法最适合实现数字信号处理应用,具有丰富的数字信号处理的软件和硬件资源,适用于复杂的数字信号处理算法,可满足大多数应用中的实时约束,也便于小型化。因此DSP芯片为数字信号处理提供了很好的实现平台,现在的高性能DSP芯片可以实现更加复杂的现代数字信号处理(自适应滤波、卡尔曼滤波、同态滤波等),从而极大地拓展了数字信号处理和数字信号处理器的应用。

0.1.4 数字信号处理系统及特点

对信号进行处理从而获取信息的过程是基于系统来实现的,系统是一个比较大、比较泛的概念,与本书相关的有控制系统、滤波器、通信系统等。对系统的研究有两个主要方面:系统分析和系统设计,系统分析是系统设计的基础,系统设计是为了更好地实现任务、解决问题。系统的实现方式与系统的研究紧密相关,实现方式上先后经历了分别以模拟和数字为主的时代,后来发展起来的以数字为主的系统是为了避免出现模拟系统的缺陷。

模拟系统主要是用电阻、电容、电感、运放等组成的系统,如模拟电话、模拟电视机、模拟滤波器、模拟控制系统等。数字系统现在一般指用单片机、计算机、数字信号处理器等数字处理器件为主组成的系统,如数字电视机、数字机顶盒、数字手机、数字滤波器、数字控制系统等。

数字信号处理系统既可以处理数字信号,也可以处理模拟信号,一般的系统框图如图0-1所示。模拟输入信号可以是来自扬声器的语音信号、来自摄像机的图像信号或模拟视频信号等。输入信号在带限滤波和采样后进行A/D变换得到数字信号。数字处理器件对输入的数字信号进行处理,如进行一系列的MAC操作。处理后的数字信号再经过D/A变换转换为模拟样值,最后进行内插和平滑滤波以得到连续的模拟波形。如图0-1所示的数字系统框图是一般性的,实际系统中可以省去一些子系统。例如对于说话人确认系统,其输出为“是”或“不是”,该系统就不需要后续的数模转换和平滑滤波子系统。

图0-1 数字信号处理系统框图

相对于模拟系统,数字系统有如下优点:① 接口方便,符合工业标准的数字系统或设备在设计上都考虑了兼容性,因此其连接要比模拟系统接口容易得多。② 编程方便,数字器件一般具有可编程性,便于开发过程中灵活方便地对软件进行修改和升级。③ 稳定性好,数字系统受环境温度以及噪声的影响较小,因此可靠性高。④ 精度高,数字器件一般可实现16-bit、24-bit、32-bit数据,甚至更高,因此数字系统的精度可以达到很高。⑤ 可重复性好,数字系统基本上不受元器件参数变化的影响,便于调试和大规模生产。⑥ 集成方便,数字系统中的数字部件一般都有高度规范性,因此便于大规模集成。数字系统的突出优点使其得到了广泛应用。基于DSP芯片的系统设计的一般过程描述如下:

(1)事前准备阶段。在设计之前首先必须根据具体应用确定系统的性能指标、信号处理的各种具体要求。

(2)算法模拟阶段。根据系统的应用要求,可能需要对输入信号进行适当处理、抽取出有效的特征、进行优化计算才能得到理想结果。一个关键是要研究有效算法,并用高级语言快速验证。例如,视频压缩算法要考虑到编码速率和编码质量,不同的应用有不同的要求,因为二者具有矛盾性。

(3)系统设计阶段。包括硬件设计和软件设计两个方面。硬件设计上要根据算法运算量、运算精度、接口、系统成本、功耗等要求选择器件并设计电路。软件设计主要是根据算法和所选择的器件编写程序,为缩短软件开发周期和提高程序可读性、移植性、执行效率,一般采用高级语言和汇编语言混合编程。

(4)系统调试阶段。硬件调试一般采用硬件仿真器、示波器、逻辑分析仪等进行,简单情况下可借助于普通工具。软件调试一般要借助于开发工具,如软件模拟器、开发系统等。算法调试一般采用比较法,在输入相同情况下,系统调试结果应与高级语言算法模拟结果的输出相一致。

(5)运行调试阶段。系统开发一般是一个反复调试的过程。实际运行状况要比实验室算法模拟状况复杂,将算法移植到实时系统上时必须考虑各个环节的配合对整体系统实时性的影响,以及噪声、环境变化的影响。如果实时性得不到保证或系统运行不稳定,都需要重新设计、修改算法。