下面是一个人对“我如何学习 DSP?”这一常年问题的回答。它由Dale Grover编写,并得到了 Rick Lyons、Randy Yates 和 Grant Griffin 等人的参与,尽管他们的参与并不代表对这里表达的每一个观点的认可——他们只是好人。免责声明:我是其中一本书的合著者。
简介:你想知道什么?你现在知道什么?
三个必要元素
1. 书籍
非传统
在线教程
经典
2. 软件
Octave、Matlab 及相关
DSP 特定
符号
通用
3. 硬件
正式课程
DSP 主题简要概述
关于本文档
1. 书籍
非传统
在线教程
经典
2. 软件
Octave、Matlab 及相关
DSP 特定
符号
通用
3. 硬件
正式课程
DSP 主题简要概述
关于本文档
你想知道什么?你现在知道什么?
学习数字信号处理 (DSP) 的最佳方法取决于您的目标和背景。为什么是这样?
- DSP 包括许多不同的主题,例如:
- 数字滤波器
- 信号和系统分析(尤其是在频率方面)
- 信号合成
- 信号检测以及信号和系统参数的估计
- 数据压缩
- 等等……
- 数字滤波器
- DSP 是许多不同研究领域的交集:
- 数学
- 电气工程
- 信号与系统
- 模拟电路理论
- 计算机体系结构,(以及更多)
- 信号与系统
- 概率统计
- 电脑编程
- 和别的
- 数学
- 实现 DSP,尤其是实时实现,通常与理论分开处理,以至于它看起来像是一个完全独立于 DSP 的领域。
过去——事实上,直到几年前——DSP 的教学(和书籍编写)几乎完全是为具有电气工程背景的人开设的。如果这是您的背景,那么您在学习 DSP 方面有很多选择,并且本文档中提到的资源将为您提供很多选择。但是,如果您没有电气工程背景,现在有一些书籍(和课程)可以帮助您快速了解基本的 DSP 主题,甚至是实施问题。当我们讨论书籍时,稍后会详细介绍这些选项。
有些人——包括我自己——声称我们应该以与教授统计数据类似的方式对待 DSP。没有声称每个想了解一点统计的人都必须学习关于统计的一切知识,而是有针对人文专业、工程师、数学专业等的统计课程。为什么?因为统计在许多领域都很有用,即使人们没有研究统计背后的所有理论,也可以向人们教授和使用统计的一个有用子集。以几乎相同的方式(实际上,在非常深的意义上),DSP 具有这些相同的特性。DSP 当然很有用,事实上大多数人都可以学习 DSP 的基础知识——并在他们的领域中成功地应用这些工具。本文档概述了一些资源和方法来做到这一点。
与统计数据一样,工具箱的大小(以及您使用这些工具的技能)与所需的学习量和背景知识之间存在权衡。在一种极端情况下,您最终可能只得到一步一步的“秘诀”,而无需了解正在发生的事情。在另一个极端,你可以达到这样的程度,你可以从广泛的可能性中选择技术,甚至创造你自己的技术,尽管这需要良好的数学背景等。您的兴趣和背景将与其他人不同,并且没有单一的“DSP 启蒙”路径——甚至“DSP 熟悉”。
在正式课堂环境之外学习 DSP 的任何方法最终都将涉及书籍、DSP/数学软件和DSP 硬件的某种组合,因为每一种都可以提供对 DSP 的洞察力和动力。
- 书籍(和相关资源)将提供理论和实践知识;他们“推动”学习过程。
- 软件将使您获得经验并完善您对理论的理解。其他软件将有助于设计过程,甚至有助于实施过程(如果有的话)。
- 硬件可让您实时实施 DSP(如有必要)。
我们将在接下来的部分中逐一讨论。我们还提到了一些正式的学习情况。我们希望本文档能够为您提供一个确定适当路径的框架和有用的工具,以便您进一步了解 DSP。
现在可以使用 DSP 文本来解决一系列背景和目标。正如我们上面提到的,直到最近,DSP 教材都假定您具有“传统”电气工程背景。然而,现在有一些书籍和课程采用 DSP 技术的子集,并以一种没有这种背景的人也可以理解的方式呈现它。例如:
- Richard Lyons对数字信号处理的理解
- Jonathan (Y) Stein 的数字信号处理:计算机科学视角
- SW Smith 的The Scientist and Engineer's Guide to Digital Signal Processing(文本可在线获取!)
- Grover 和 Deller 的数字信号处理和微控制器。
(参见comp.dsp FAQ和/或dspGuru.com以获取书目信息。)
例如,这些书籍的目标读者是想要学习基本 DSP 以在工作中使用的科学家、工程师、计算机科学/程序员和研究人员。一般来说,这些书淡化数学,强调直观的介绍。(Stein 的书面向计算机科学专业的学生,没有回避数学和理论,但像其他书一样,没有对电气工程主题做出假设。)有些还强调实际实施问题。数字滤波器和频谱分析(例如,FFT——快速傅立叶变换)是所有这些教科书的共同主题;其他主题可以包括信号合成、在真实硬件上的实现、信号检测等。一般来说,
有几个可用的在线教程——例如参见
http://www.dspguru.com/info/tutor/other.htm上给出的教程列表。然而,并非每个教程都以相同的假设开始。所以,就像看书一样,如果你的兴趣和背景没有被提及,不要绝望;只是寻求替代方案。
http://www.dspguru.com/info/tutor/other.htm上给出的教程列表。然而,并非每个教程都以相同的假设开始。所以,就像看书一样,如果你的兴趣和背景没有被提及,不要绝望;只是寻求替代方案。
还有一些书籍针对的是还没有传统 DSP 先决条件的传统电气工程专业学生;这些是重新安排向电气工程专业学生教授主题的顺序的实验,而不是针对非工程受众。(例如,参见 McClellan、Schafer 和 Yoder 的DSP First。)但是,由于目标学生没有广泛的背景,这些书可能对其他读者也有用。请记住,虽然假定的背景可能与其他书籍相似,但目标不同。(在这种情况下,目标包括让学生为进一步的电气工程课程做好准备,因此奠定了一些额外的基础。)
上面的“非 EE”书籍和资源提供了一个(大部分)自包含的、通常是“低数学”的基本 DSP 理论路径,在某些情况下还提供了实现路径。然而,正如您可能猜到的那样,采用这种方式的书籍有一些折衷。特别是,对于那些轻描淡写(数学)理论的书籍,一些主题之间的联系可能会丢失,否则很容易看到。如果您所学的基本 DSP 主题足够了,那么这并不是一个很大的损失。但是要解决更复杂的DSP,无论是了解一些专业技术,还是自己出击解决一些新问题,都需要有更深的背景,包括
- 数学:微积分和微分方程
- 电气工程:通过线性信号和系统理论的模拟电路理论,计算机体系结构
- 计算机编程:基础编程(高级语言)和汇编语言
- 统计数据
许多 DSP 教材开始时大致采用这种类型的背景,可能对应于本科三年级的工程课程(见下文)。使用不太严格的文本(其中一些已在上面列出)初步探索 DSP 是完全合理的,但如果没有这些背景领域的技术和语言,则很难理解更高级的 DSP 理论。事实上,大多数 DSP 论文、书籍、演示文稿,甚至软件都假定您对上述领域的概念有一定的了解,并且很难“即时”地填写这些内容。
comp.dsp 常见问题解答(见下文) 中列出了一些经典(和流行的文本),其中包括
- Oppenheim 和 Schafer 的离散时间信号处理
- Proakis 和 Manolakis 的数字信号处理:原理、算法和应用。
Lathi 的《信号处理和线性系统》(1998 年) 是最近一本涵盖线性信号和系统到基本信号处理的教材,尽管有许多关于线性信号和系统的书籍应该对微积分、微分方程、和入门电子课程。
比较传统的 DSP 教材不一定会省略实际问题,有些还包括数字音频效果等应用( 例如,参见 Orfanidis 的《信号处理简介》)。但是,即使所涵盖的主题很吸引人,您也应该了解作者假定的数学舒适度。
这是否意味着您必须掌握所有基本的 DSP 理论才能理解,例如,一些简洁的数字音频效果?一点也不——但有两个警告。首先,根据领域的不同,这些简洁的算法通常使用假设传统 DSP 或模拟电子学(尤其是模拟滤波器设计)背景的术语和数学来表达。您可能不得不四处寻找针对没有深厚 DSP 背景的人的解释。(例如,Circuit Cellar Ink经常发表针对非 DSP 人员的信号处理文章。)其次,要意识到您在使用这些技术时没有那么大的灵活性——可能很难知道如何在不发生冲突的情况下调整或更改算法的一些问题。但我们使用的许多工具都是如此,这不是放弃的借口。事实上,玩一些你有动力去使用和理解的算法可以让你在现实生活中体验教科书所涵盖的问题(例如,采样率如何影响信号)。
一旦具备基本的 DSP 背景知识,就可以访问许多特定于应用程序的 DSP 领域。这包括语音处理(识别、合成、压缩)、图像处理、音乐处理(分析、合成等)、所有类型的生物医学信号处理等等。所有这些都利用了一组通用的工具,但您会发现每个领域都有自己最喜欢的工具集,其中许多工具可能不会在 DSP 的其他领域广泛使用。(部分原因可能是历史影响,但在不同领域处理的信号也可能具有截然不同的特性,这使得它们或多或少地适用于不同的 DSP 技术。因此,语音处理通常使用与图像处理技术非常不同,尽管它们也共享许多技术。)此外,
如果您的印象是活跃于 DSP 的人们最终会拥有相当多的书籍,那您是对的!没有任何一本书可以考虑到每个需要使用 DSP 的人的广泛背景和兴趣。更不用说 DSP 中的许多领域都有自己的一套工具和技术,如图像处理、语音处理等。此外,并不是每个作者都对每个主题都给予同样的重视——所以尝试几个并不少见例如,在找到您想要详细讨论的特定算法之前,先阅读大量书籍。尽管 DSP 已有数十年历史,但一些前沿技术可能最好在专业期刊、行业杂志或会议记录中找到。良好的网络搜索可能会找到这些更新的出版物。前面提到的鸿沟,
如果您正在阅读本文,您可能至少接触过一些有关 DSP 的网络资源。一个好的起点是位于
http://www.bdti.com/faq/dsp_faq.htm的 comp.dsp FAQ 。FAQ 包含一系列流行的 DSP 书籍、在线资源、有用的经典文章以及大量其他信息。您还会在comp.dsp 新闻组中找到一群有趣的人,他们拥有丰富的经验。然而,大多数基本问题都可以在任何优秀的 DSP 书籍中得到解答,而更具体的问题则留给新闻组。另一个资源是http://www.dspGuru.com,其中包含许多关于基本和高级 DSP 技术的文章、在线教程指针、软件源以及您可能会觉得有用的其他信息。您可能希望查看的另一个站点是
http://www.dsprelated.com/。
http://www.bdti.com/faq/dsp_faq.htm的 comp.dsp FAQ 。FAQ 包含一系列流行的 DSP 书籍、在线资源、有用的经典文章以及大量其他信息。您还会在comp.dsp 新闻组中找到一群有趣的人,他们拥有丰富的经验。然而,大多数基本问题都可以在任何优秀的 DSP 书籍中得到解答,而更具体的问题则留给新闻组。另一个资源是http://www.dspGuru.com,其中包含许多关于基本和高级 DSP 技术的文章、在线教程指针、软件源以及您可能会觉得有用的其他信息。您可能希望查看的另一个站点是
http://www.dsprelated.com/。
基于 PC 的软件有助于 DSP 的多个领域。首先,软件可以让您试验 DSP。其次,您可以使用各种软件在 PC 上进行(一般来说,非实时)信号处理。第三,基于 PC 的软件可用于生成将在专用 DSP 芯片上运行的实时软件。同一个软件可以完成所有这三件事情,或者只完成一件事情。但是对于学习DSP的人来说,实验能力是最重要的,也是本节要强调的。
无论您是想掌握一些 DSP 技术,还是想将 DSP 作为您的主要研究领域,拥有一个您可以试验信号处理的软件环境都非常有帮助。该环境应允许您创建(或至少导入)音频信号和图像等信号,使用简单的数学运算处理它们,并播放或显示(图形)处理后的信号及其频域表示。美国的大学生会发现找到相对便宜但功能强大且能很好地支持 DSP 的数学包并不困难。以下是一些可能的环境。(有关详细信息, 请参阅comp.dsp 常见问题解答。)
Octave是一个非常强大的数值计算环境。程序可以用简单的语言编写,但 Octave 的真正优势在于强大的矩阵和向量运算,以及广泛的函数库,其中包括一些用于信号处理的函数。可以使用 gnuplot 程序进行绘图。Octave 以源代码形式提供,并以二进制形式提供给 Mac OS X、Linux 和 Windows。Octave 使用的语言在很大程度上与 Matlab 兼容(见下文),但提供了零基索引等附加功能。积极维护。安装可能比商业软件包复杂一点。强烈推荐。Mac OS X 用户可能会发现High Performance Computing for Mac OS X页面有用,因为他们经常提供最新编译的 Octave 版本。
MATLAB是一个非常流行的商业软件包,在数组和矩阵的数值处理方面具有优势,但也有许多“工具箱”,包括一个用于 DSP 的工具箱。可以编写程序(脚本文件)或交互式输入命令,图形非常好(包括 3-d 绘图)。支持音频输出(和输入?),但不进行实时处理。Simulink 是一个附加产品,允许您使用图形构建块来模拟系统,并且有适用于该产品的工具箱以及适用于 DSP 的工具箱。对于非学生,MATLAB 可能非常昂贵。有许多书籍介绍 MATLAB 代码(其中大部分可以很容易地移植到 Octave)。
还有其他几个软件包可以免费获得,它们类似于 Octave 和 MATLAB。这些包括 Scilab 和 Rlab。有关详细信息,请参阅
http://www.dspguru.com/sw/opendsp/mathclo.htm上的讨论。
http://www.dspguru.com/sw/opendsp/mathclo.htm上的讨论。
有许多软件包专门用于创建和分析数字滤波器(在许多情况下,还有其他更高级的 DSP 操作)。在某些情况下,可以自动生成代码,针对特定的 DSP 芯片(汇编语言或 C 语言)或通用 C 代码。权衡是灵活性与交钥匙操作。正如下面所讨论的,具有 DSP 支持的通用数学包的低成本和高功能可能使它们对美国学生和那些有兴趣更多地了解 DSP 作为一门学科的人来说更有价值,而 DSP 特定的包将需要更少的学习,以便生成可行的数字滤波器。(comp.dsp FAQ和dspGuru.com都 包含更多信息。)
Mathematica和MathCAD也是流行的数学环境,历史上强调符号数学。然而,DSP 在这两个包中都是可能的,并且在很大程度上适用于 Octave、MATLAB 和相关的注释也适用于这些包。使用符号数学包来验证传统 DSP 课程及其前身中常见的推导和其他任务也非常方便。这些包中具有优秀到优秀的绘图功能。comp.dsp FAQ中描述了 Mathematica 的 DSP 特定扩展。
BASIC、C、Java等语言都可以用来设计、演示和实现DSP。然而,对于学习 DSP 来说,拥有良好的绘图功能是非常有用的——数学包中绘图例程的简单性和强大性是无与伦比的。(当然,您始终可以导出数据并使用 gnuplot 或类似工具进行绘图。)此外,数学包的交互性非常好,因为它比批处理模式环境允许更多的处理探索.虽然许多数字滤波器的设计和实现相当简单,但使用现成的函数来设计和实现 DSP 操作非常方便,数学包中提供了这些函数。同样地,如果性能不是问题,其他工具(如小波或 FFT)相当容易编写,但如果速度非常重要,则对编码非常敏感。FFT 等数值密集型运算在数学包中进行了优化。
在某些情况下,您可能希望创建一个独立的程序来实现您的 DSP 任务。例如,使用中值滤波器对图像进行去斑的滤波器。在这种情况下,一个有用的策略是使用 Octave 制作程序原型,这样可以快速轻松地进行更改并查看正在发生的事情,然后使用 C、Objective-C 或您拥有的其他语言编写代码。然后您可以将输出或中间结果与 Octave 代码进行比较以验证操作,但您最终会得到一个更小且可能更快的程序,特别是如果您能够利用操作系统调用来使用矢量处理实现 DSP 操作现在在现代 PC 上相当标准的能力(例如,PowerPC 的 AltiVec,英特尔的 SSE)。
在某些情况下,您可能希望创建一个独立的程序来实现您的 DSP 任务。例如,使用中值滤波器对图像进行去斑的滤波器。在这种情况下,一个有用的策略是使用 Octave 制作程序原型,这样可以快速轻松地进行更改并查看正在发生的事情,然后使用 C、Objective-C 或您拥有的其他语言编写代码。然后您可以将输出或中间结果与 Octave 代码进行比较以验证操作,但您最终会得到一个更小且可能更快的程序,特别是如果您能够利用操作系统调用来使用矢量处理实现 DSP 操作现在在现代 PC 上相当标准的能力(例如,PowerPC 的 AltiVec,英特尔的 SSE)。
电子表格可以提供良好的绘图和简单的数据操作能力。然而,与数学包甚至通用语言相比,它们受到相当大的限制(尽管电子表格的交互性质是积极的)。像 Octave 这样的环境可能会更有效率。
最近的趋势是教科书集成了基于计算机的练习和示例。到目前为止,最常用的软件是 MATLAB。虽然这对普通的美国工科学生非常有益(他们不仅可以相对便宜地购买软件——大约 100 美元——而且可能会在许多课程中使用它),完整版 MATLAB 的高成本是对非学生读者的障碍。如上所述,Octave 可能是一个合理的替代品,因为语言非常相似,但是可能需要编写一些功能。
还应注意,如果您有特定的处理需求——例如使用 FFT 进行信号分析、语音压缩或合成,或者处理音频文件——通常可以免费获得现成的程序。源代码并不总是公开的,但如果功能足够,这是迄今为止执行非常具体的 DSP 工作的最简单方法。即使您确实利用了这些预先打包的解决方案,您也可能会受益于对 DSP 做一些额外的阅读,以基本了解“幕后”发生的事情以及正在发生的处理有哪些限制。comp.dsp FAQ列出了很多这样的程序;在网络上搜索适当的关键词也会很有成效。
大多数 DSP 算法都不是很复杂。 这是真的。事实上,一些最重要的 DSP 功能是通过简单的重复乘法和求和运算实现的,并且可以用几乎任何人都能理解的 BASIC 程序编写出来。然而,算法必须运行的速度通常需要专门的微处理器(“DSP 芯片”)才能实时运行。尽管 DSP 芯片与通用微处理器有许多相似之处,但它们的架构已针对常见的 DSP 操作进行了调整,并且为实现最佳性能而对此类硬件进行编程(有时使用汇编语言)是一项必须掌握的技能。
好消息是大多数主要的 DSP 制造商(例如,Motorola、 Texas Instruments、Analog Devices等)现在为其 DSP 芯片提供低成本的评估平台。这些套件的价格通常为 100-500 美元,通常包括板上的 DSP 芯片,带有内存和模拟输入/输出,足以对音频和其他低带宽信号进行一些实时处理。软件几乎总是包括汇编器、链接器和模拟器。AC 编译器通常可用。(可以使用 C 编译器这一事实并不意味着程序员无需了解 DSP 芯片的架构,但如果应用程序对处理器的负载非常轻,程序员可以推迟在早期阶段进行详细研究设计过程。)选择 DSP 芯片的一个主要因素是它是否采用浮点或定点数学。定点芯片一般便宜很多,
这些套件是探索实时 DSP 实施问题的绝佳方式。然而,它们通常不是学习 DSP 理论的好方法——最好使用上述文本和允许更好的调试、可视化、快速修改和不太复杂的编程环境的软件环境来完成。
另外需要注意的是,如果处理需求不是很大,用通用的微处理器做DSP也是可以的。DSP不需要DSP芯片;它(通常)是对代表信号的一组数字进行的一系列相当简单的数学运算。对于多种类型的信号(例如音频),完全可以使用 PC 实时进行 DSP。
为避免给人以错误的印象,应该注意的是,许多人永远不会要求实时进行他们特定的数字信号处理。例如,他们的数据可能是批量处理的,或者是没有时间成分的数据(例如图像)。在 DSP 芯片上实现 DSP 是一项额外的技能,对于许多在工作中需要 DSP 的人来说,这将是完全可选的。
如果您更喜欢以更有条理的方式学习怎么办?大学和公司提供各种关于 DSP 的短期和/或夜间课程。(有关列表,请参阅comp.dsp 常见问题解答。)根据一些参加过的人的说法,这种培训的质量时好时坏。以大学为基础的课程可能仍然沿袭传统,并且以如此多的数学开始他们的课程,以至于初出茅庐的学生可能难以学习 DSP 的简单和优美。正如 Rick Lyons 喜欢说的那样:“过于丰富的数学 DSP 培训初学者很难消化。”另请注意,许多技术会议开始提供教程信号处理讲座。(DSP World、ICSPAT 和 Wireless Symposium 就是例子。)
我们还应该开始看到更多的 DSP 课程作为标准课程的一部分提供,这些课程将 DSP 打包给非工程师(回想上面提到的“DSP First”,以及 Stein 为计算机科学专业的学生准备的教科书)。虽然这可能比其他选择需要更多的时间承诺,但它可能是值得的,因为您可以向讲师提问,并且可能有实时 DSP 硬件设置并准备就绪的实验室,以及生成和分析信号的设备。
数字信号处理并非不可学,它不需要数学博士学位,即使您只学过一些基本工具,它也确实很有用。DSP 几乎可以在任何硬件上使用几乎任何软件完成——问题只是你需要多快完成处理。您可以使用各种软件学习 DSP,包括一些优秀的免费程序。现在有针对非工程师的文本和其他资源,信号处理试验从未如此简单——即使是实时试验。所以拿一本书,下载一些文件,并处理一些信号。
开始你的时钟。下面是对 DSP 中一些基本工具和概念的简要概述。
- 基于软件——可以通过改变软件来改变行为。
- 强大——比使用模拟硬件可以做更多的事情(尽管有时速度不如模拟硬件)。
- 便宜——类似于微处理器,您可以将许多不同的功能集成到一个芯片中。
- 任意精度。
- 行为不随年龄改变。
数字信号
以一定的时间间隔对模拟信号进行采样(足够快以准确描述信号,具有足够的分辨率以保持低噪声水平),并在这样做时将信号转换为一长串表示幅度的数字(例如,电压)在这些点的信号。这通常是通过模数转换器完成的。
DSP 的关键在于,您可以使用微处理器(或专门的微处理器,如在 DSP 芯片中)对数字列表执行数学运算,而不是使用运算放大器、电阻器和其他模拟电子设备来处理模拟信号(数字信号)以达到相同(或更好)的效果。例如,这可能会过滤掉高频,或将信号转换成另一种更有用的形式(例如,使用“FFT”)。可选地——尽管通常——您可以使用数模转换器将生成的数字列表转换回模拟信号。
一般来说,数字滤波器通过某些频率而阻止其他频率。取最近 7 个每日温度读数的平均值,过滤掉每天的温度变化。这是一个真正的数字低通数字滤波器(属于“FIR”——无限脉冲响应——种类)。过滤信号的另一种简单方法是采用上次平均值和当前读数的加权组合,并将该组合用作新的平均值。这个新平均值与下一个读数相结合,用于计算下一个平均值,依此类推。这是数字低通滤波器的另一个例子(一种称为“IIR”的类型——无限脉冲r响应)。大多数基本数字滤波器只是这两个主题的变体。最难的部分是指定滤波器的期望行为并确定如何组合过去的输入值和过去的输出值以获得这种期望的行为(即确定权重或系数)。通常,您只需将数字输入软件包以计算相关系数,然后将其插入非常简单的算法(事实上,有些文本似乎将其视为国家机密!)。
信号中存在哪些频率?也就是说,如果您有一个滤波器,您可以将其调谐为仅让窄带频率通过(有点像调谐收音机),那么部分信号会以什么频率通过?或者,或者,应该添加什么正弦波(即以什么频率和以什么偏移)来创建给定信号的副本?FFT 和其他相关技术根据频率给出信号的图像——有点像音频均衡器上的显示器显示音频信号在不同频率下的能量。