跳转到内容

数字信号处理/DSP 编程

来自维基教科书,开放的书籍,开放的世界

乍一看,数字信号处理单元与其他可编程微处理器、微控制器和 FPGA 非常相似。但是,DSP 芯片通常具有某些其他芯片类别没有的功能和局限性。本章将尝试用广泛的语言中立术语解释 DSP 编程涉及的一些问题。

饱和运算

[编辑 | 编辑源代码]

大多数程序员熟悉的 Intel 兼容微处理器具有几个功能,人们已经习惯于从可编程芯片中获得这些功能。特别是,Intel 兼容芯片具有称为“溢出运算”的算术模式,也称为模运算。假设我们在字节大小的寄存器中存储了整数 250(十进制)。如果我们在该数字上加 10,处理器将溢出,并将答案回滚,得到答案 4。但是,DSP 芯片通常不会回滚,而是饱和到最大值。

假设我们正在处理灰度图像。此图像具有字节大小的整数白色/黑色值,如下所示:纯白色为 255,纯黑色为 0。现在,假设我们想将每个像素“提亮” 10 个点,以提高可见度。因此,我们创建一个循环,遍历图像中的每个像素,将 10 加到任何特定点的值。但是,如果我们将 10 加到已经是纯白色的像素会发生什么?在普通的 Intel 兼容芯片中,值 255 + 10 = 9。实际上,如果我们使白色像素更亮,我们就把它们变成了黑色!现在,为了避免这种情况,DSP 芯片会饱和,并且会达到最高值(255),并且不会回滚。因此,在 DSP 芯片上,白色不能再变白了。以下是一些示例(使用无符号字节)

乘累加 (MAC)

[编辑 | 编辑源代码]

在差分方程中,我们已经看到乘法和加法运算是最常见的。让我们看一个一般性的例子

现在,我们注意到此方程中的每个元素都乘以一个系数,并加到总计中。DSP 工程师已经注意到这种模式,并且已经优化了 DSP 芯片以非常快速地进行乘法和加法运算(以牺牲其他缺少或缓慢的运算为代价)。实际上,许多 DSP 芯片将具有称为乘累加的指令,这些指令将同时执行这两个运算,比普通处理器能够执行的快得多。

华夏公益教科书