摘要: 该系列的第二部分介绍建模滤波器转换功能,将型号与DSP架构联系起来,测试数字滤波器。
如果您已经阅读了本系列的第1部分(或者已经熟悉了DSP处理实际信号的一些方法),您可能想了解更多关于如何使用DSP实现数字滤波器(例如第1部分中描述的那些)的信息。本文是系列文章的第二篇,介绍了以下DSP主题:
建模滤波器变换函数
将模型与DSP体系结构联系起来
数字滤波器实验
本系列旨在从希望将DSP添加到其设计曲目的系统设计人员的角度描述这些主题。使用本系列文章中的信息作为介绍,设计人员可以做出更明智的决定,何时DSP设计可能比电路设计更高效。
第1部分比较了数字滤波器和数字滤波器的特性,并提出了为什么可以实现数字滤波器(使用DSP);本部分重点介绍数字滤波器应用的一些机制。
使用数字滤波的三个主要原因是:(1)更接近理想的滤波器近似,(2)能够在软件中调整滤波器特性,而不是通过物理调谐,以及(3)滤波器响应与采样数据的兼容性。第1部分中描述的两个最著名的滤波器是有限脉冲响应(FIR)和无限脉冲响应(IIR)类型。FIR滤波器响应被称为有限的,因为它的输出仅仅基于有限的输入样本集;它是非递归的,没有极点,在s平面上只有零。另一方面,IIR过滤器的响应可以无限持续(并且可能不稳定),因为它是递归的,也就是说,它的输出值同时受到输入和输出的影响。它在s平面上既有极又有零。图1显示了第1部分中出现的典型过滤器架构和求和公式。
要对这些过滤器进行数字化建模,可以采取两个步骤。首先,把这些公式看作是在计算机上运行的程序。这一步包括将公式分解为数学步骤(例如,乘法和加法),并确定计算机执行(处理指令和数据,测试状态等)所需的所有附加操作,以便在软件中实现公式。
其次,把这些操作写成一个程序。这可能是一项相当艰巨的任务。幸运的是,有很多“罐装”软件可用,通常使用C等高级语言(HLL),在某种程度上简化了编程工作(但绝不是消除!)。不过,从学习的角度来看,从汇编语言开始可能更有启发性;此外,汇编语言算法通常比必须优化系统性能的HLL更有用。在一些高级语言的抽象层次上,程序可能看起来不太像方程式。例如,图2显示了一个用C程序实现的FIR算法的示例
有许多可用的分析包支持算法建模;有关几个流行的软件包,请参阅本文末尾的参考资料。在本系列的课程中,我们将在不同的时间回到算法建模。现在,继续讨论这个过程,在这些滤波器算法建模之后,它们就可以在DSP架构中实现了。
将模型与DSP体系结构联系起来:对于编程,必须了解DSP架构的四个部分:数字、内存、顺序器和I/O操作。这个体系结构的讨论是通用的(适用于一般的DSP概念),但它也是特定的,因为它与本文后面的编程示例相关。图3显示了本节描述的通用DSP架构。
数字部分:由于DSP必须在单个指令周期内完成乘法/累加、加法、减法和/或位移位操作,因此针对数字操作进行优化的硬件是所有DSP处理器的核心。正是这种硬件将dsp与通用微处理器区分开来,后者可能需要许多周期来完成这些类型的操作。在数字滤波器(和其他DSP算法)中,DSP必须完成涉及数据值和系数的多个算术运算步骤,以实时产生通用处理器无法实现的响应。
数字运算发生在DSP的乘法/累加器(MAC)、算术逻辑单元(ALU)和桶式移位器(shifter)中。MAC执行大多数DSP算法(如FIR和IIR滤波器以及快速傅立叶变换)中出现的乘积和运算。ALU功能包括加法、减法和逻辑运算。对位和字的操作发生在移位器内。图3显示了MAC、ALU和移位器的并行性,以及数据如何流入和流出它们。
从编程的角度来看,使用单独的数字部分的DSP架构提供了极大的灵活性和效率。数据有许多不冲突的路径,允许单周期完成数值操作。DSP的架构还必须为MAC操作提供广泛的动态范围,能够处理两倍于输入宽度的乘法结果,并且累加器输出可以安装而不会溢出。(在16位DSP上,此功能相当于16位数据输入和MAC的40位结果输出)处理大多数DSP算法(如滤波器)需要此范围。
数字部分的其他特性可以方便实时系统中的编程。通过使操作取决于由数字运算产生的各种条件状态,这些状态可以作为程序执行中的变量,测试进位、溢出、饱和、标志或其他状态。利用这些条件,DSP可以快速处理基于数值运算的程序流决策。需要不断地将数据馈送到数字部分是对DSP的内存和内部总线结构的关键设计影响。
内存段:DSP的存储器和总线结构设计是以速度的需要为指导的。数据和指令必须在每个指令周期流入DSP的数字和排序部分。没有延误,没有瓶颈。设计的一切都集中在吞吐量上。
哈佛和冯·诺伊曼体系结构的词源——根据弗吉尼亚理工大学计算机科学系的John A. N. Lee的说法: 霍华德·艾肯,哈佛系列机器的开发者,坚持在他所有的机器中分离数据和程序。在我最熟悉的马克III中,他甚至为每一个鼓都设计了不同大小的鼓。” 冯·诺伊曼的概念是,通过将指令视为数据,可以对程序进行修改,从而增强程序的‘学习’能力。” “由于某种原因,后者以冯·诺伊曼的名字命名,而前者则以哈佛的机器命名。” |
为了把重点放在吞吐量上,可以看看DSP内存设计和其他微处理器内存之间的区别。大多数微处理器使用包含数据和指令的单个内存空间,使用一根总线作为地址,另一根总线用于数据或指令。这种结构被称为冯·诺伊曼结构。在冯·诺伊曼架构中,吞吐量的限制来自于必须在每个周期中选择一条数据或一条指令。在dsp中,存储器通常分为程序存储器和数据存储器,每一种存储器都有单独的总线。这种类型的架构被称为哈佛架构。通过分离数据和指令,DSP可以在每个周期内获取多个项目,使吞吐量增加一倍。其他优化,如指令缓存、结果反馈和上下文切换,也增加了DSP吞吐量。
DSP内存架构中的其他优化与重复内存访问有关。大多数DSP算法,如数字滤波器,需要以重复的访问模式从存储器中获取数据。通常,这种类型的访问用于从一个地址范围中获取数据,这个地址范围中充满了要处理的真实世界信号的数据。通过减少“管理”内存访问(开销)所需的指令数量,dsp“节省”了指令周期,允许更多的时间用于每个周期的主要工作——处理信号。为了减少开销并自动管理这些类型的访问,dsp使用专门的数据地址生成器(dag)。
大多数DSP算法需要在一个周期内从内存中取出两个操作数,以成为算术单元的输入。为了灵活地提供这两个操作数的地址,DSP有两个dag。在DSP改进的哈佛体系结构中,一个地址生成器通过数据存储地址总线提供一个地址;另一个通过程序内存地址总线提供一个地址。通过为下一个数字指令及时执行这两个数据提取,DSP能够维持指令的单周期执行。
DSP算法,例如示例数字滤波器,通常需要地址范围内的数据(缓冲区)进行寻址,以便地址指针从缓冲区的末尾“环绕”到缓冲区的开始(缓冲区长度)。这种指针移动称为循环缓冲。(在滤波器方程中,每个求和基本上是由数据点的圆形缓冲区和系数的圆形缓冲区的乘法和累加序列产生的)。在某些应用程序中需要循环缓冲的一种变体,每“一步”将地址指针向前移动一个以上的值,但仍然以给定的长度进行循环。这种变化称为模循环缓冲。
通过其dag支持各种类型的缓冲,DSP能够在硬件上执行地址修改和比较操作,以获得最佳效率。在软件中执行这些功能(如在通用处理器中发生的那样)限制了处理器处理实时信号的能力。
由于缓冲是一个不寻常的概念,但对数字信号处理至关重要,因此简要介绍一个缓冲示例是有用的。在图4所示的示例中,内存中有八个位置的缓冲区,从地址30开始。地址生成器必须计算留在这个缓冲区内的下一个地址,同时保持适当的数据间距,以便跳过两个位置。地址生成器将地址30输出到地址总线上,同时将地址修改为33,以便下一个周期的内存访问。这个过程重复,移动地址指针通过缓冲区。当地址36被修改为39时,会出现一种特殊情况。地址39在缓冲区之外。地址生成器检测到地址已经落在缓冲区边界之外,并将地址修改为31,就好像缓冲区的末尾连接到缓冲区的开始一样。更新、比较和修改没有任何开销。在一个周期内,地址36被输出到地址总线上。在下一个周期,地址31被输出到地址总线上。这种模循环缓冲服务于插值滤波器等算法的需要,并节省了处理的指令周期。
音序器部分:因为大多数DSP算法(如示例滤波器)本质上是重复的,DSP的程序定序器需要在从循环结束回到循环开始时循环遍历重复的代码而不会产生开销。这种功能称为零开销循环。具有无开销的循环能力是dsp区别于传统微处理器的一个关键领域。通常,微处理器要求在软件中维护程序循环,在循环的末尾放置一条条件指令。这个条件指令决定地址指针是移动(跳转)回循环顶部还是到另一个地址。因为从内存中获取这些地址需要时间——而信号处理的可用时间在DSP应用中是至关重要的——DSP不能以这种方式浪费周期来检索有条件程序排序(分支)的地址。相反,dsp在硬件中执行这些测试和分支功能,存储所需的地址。
如图5所示,DSP在一个周期内执行循环的最后一条指令。在下一个循环中,DSP计算条件并执行循环顶部的第一条指令或循环外的第一条指令。由于DSP使用专用硬件进行这些操作,因此没有多余的时间浪费在软件评估条件,检索地址或分支程序执行上。
输入/输出(I/O)部分:正如一次又一次指出的那样,需要向DSP提供巨大的数据吞吐量;其设计的一切都集中在将数据输入和输出到数字、内存和序列器部分上。数据的来源和输出的目的地(信号处理的结果)是DSP与其系统和现实世界的连接。完成信号处理任务需要一些I/O函数。非dsp存储器阵列存储处理器指令和数据。通信通道(如串口,I/O端口和直接存储器访问(DMA)通道)将数据快速地传入和传出DSP。其他功能(如定时器和程序启动逻辑)简化了DSP系统的开发。DSP系统中典型I/O任务的简要列表包括以下(以及许多其他任务):
启动时间长:在复位时,DSP通常通过外部存储器接口从外部源(EPROM或主机)加载指令。
串行通信:DSP通过同步串行端口(SPORT)接收或传输数据,与编解码器、adc、dac或其他设备通信。
内存映射I/O: DSP通过一个非DSP的内存位置接收或传输数据,由外部设备解码。
在对滤波器算法进行建模并研究了一些DSP架构特性之后,我们准备开始研究如何用DSP汇编语言对这些滤波器进行编码。到目前为止,讨论和示例都是通用的,适用于几乎所有的dsp。这里的示例是针对Devices ADSP-2181的。该处理器是一个定点的16位DSP。术语“定点”是指分隔尾数和指数的“点”在算术运算期间不改变其位位置。定点dsp的编程可能更具挑战性,但它们往往比浮点dsp便宜。“16位DSP”中的“16位”是指DSP数据字的大小。该DSP采用16位数据字和24位宽指令字。DSP是由数据的大小来指定的,而不是指令的宽度,因为数据字长描述了DSP可以最有效地处理的数据的宽度。
图6中的示例程序是用ADSP-2181汇编语言编写的FIR滤波器。该软件由两部分组成。主例程包括寄存器和缓冲区初始化以及中断向量表,以及当数据样本准备好时执行的中断例程。初始化后,DSP在主例程中执行指令,执行一些后台任务,循环代码,或在低功耗待机模式下空转,直到从a /D转换器获得中断。在本例中,处理器以低功耗待机模式空闲等待中断。
FIR滤波器中断子程序(代码的最后一部分)是滤波器程序的核心。处理器响应中断,保存主例程的上下文并跳转到中断例程。这个中断例程处理滤波器输入样本,从存储器中提取数据和滤波器系数,并将它们存储在DSP处理器的数据寄存器中。在对输入采样进行处理后,DSP将输出采样发送给D/A转换器。
请注意,该程序使用DSP特性来执行零开销的操作,通常由条件引入。特别是,程序循环和数据缓冲区的维护开销为零。过滤器循环核心的多功能指令在从内存中获取下一个数据字和过滤器系数时执行乘法/累加操作。
程序检查过滤器计算的最终结果是否有溢出。如果最终值已经溢出,则该值被饱和以模拟信号的裁剪。最后,恢复主例程的上下文,并通过中断返回(RTI)指令将指令流返回到主例程。
本文的目的是在滤波器理论和数字滤波器实现之间建立联系。在此过程中,本文介绍了用HLL程序建模滤波器,使用DSP架构,以及用滤波器软件进行实验。本文介绍的问题包括:
作为程序的过滤器
DSP架构(通用)
DSP汇编语言
由于这些问题涉及许多有价值的细节,在这篇简短的文章中无法公正地处理,您应该考虑阅读Richard Higgins的文本,VLSI中的数字信号处理,以及Paul Embree的文本,实时DSP的C算法(请参阅下面的参考资料)。这些文本提供了DSP理论,实施问题的完整概述,并减少到实践(与设备在出版时可用),再加上练习和例子。下面的参考资料部分还包含进一步阐述本文问题的其他来源。为了准备本系列的下一篇文章,您可能需要获得ADSP-2100系列用户手册*或ADSP-2106x SHARC用户手册的免费副本。*这些文本提供了关于器件的定点和浮点DSP架构的信息,这是这些文章中的一个主要主题。在本系列中,每个部分都添加了一些功能或信息,有助于实现开发DSP系统的系列目标。为了实现这一目标,下一篇文章将介绍该系列的开发平台(ADSP-2181 EZ-KIT LITE),并介绍其他DSP开发主题。
Dearborn, G.等,使用ADSP-21000家族的数字信号处理应用卷1,Norwood, MA: Devices, Inc., 1994。可从。
Embree, p.m.,实时DSP的C算法。上马鞍河,新泽西州:普伦蒂斯霍尔出版社(1995)。
刘志强,超大规模集成电路中的数字信号处理,中国科学技术大学学报(自然科学版),1990。DSP基础知识。包括广泛的参考书目。可从。
Mar, A,编,使用ADSP- 2100家族的数字信号处理应用第1卷,Englewood Cliffs, NJ: Prentice Hall, 1992。可从。
马,A.,巴布斯特,J.,编。,使用ADSP-2100系列的数字信号处理应用卷2,Englewood Cliffs, NJ: Prentice Hall, 1994。可从。
Mar, A., Rempel, H.,编辑。, ADSP-2100家庭用户手册,Norwood, MA: Devices, Inc., 1995。
Mar, A., Rempel, H.,编辑。, ADSP-21020家庭用户手册,Norwood, MA: Devices, Inc., 1995。
MATLAB For DSP Design (DSP的分析和设计软件包),联系The Math Works, Inc.,电话:(508)647-7000,传真:(508)647-7101,或网址:
QEDesign(数字滤波器设计软件),联系动量数据系统:电话(714)557-6884,传真:(714)557-6969,或网址:
Rempel, H.编,ADSP-21060/62 SHARC用户手册,Norwood, MA: Devices, Inc., 1995。
*来自Embree, P. M.,实时DSP的C算法。上马鞍河,新泽西州:普伦蒂斯霍尔出版社(1995)。
社群二维码
关注“华强商城“微信公众号
Copyright 2010-2023 hqbuy.com,Inc.All right reserved. 服务热线:400-830-6691 粤ICP备05106676号 经营许可证:粤B2-20210308