作者的话

ADI的音频DSP里,SHARC是现阶段最高端的型号,在汽车座舱的前装后装、音响、调音台等一切音频相关的应用中,都得到了广泛的应用。我在前面的文章中写过一个经典的型号:21489,这个系列就简单的说一说SAHRC的算法吧,文章我借鉴了很多前辈的积累,加上自己的一点点小理解,先致敬。

硬件准备

ADSP-21489EVB:ADI 21489 DSP的开发板

产品链接:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-5192690539.13.3cd16938GrbRa1&id=539694123232

在这里插入图片描述

AD-HP530ICE:ADI DSP通用仿真器

产品链接:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-5192690539.11.27e0bfa3NS4TTS&id=38007242820

在这里插入图片描述

软件准备

Visual DSP++:ADI DSP的软件开发环境

数字信号处理基础知识

这一块比较通用,有大把的教材可以看。我就只讲一下我自己的小小理解。

信号处理我觉得主要包含两个方面:

  1. 算法的研究

算法的研究,我认为是要按照要求,设计有限的、确切的计算过程,这个过程不仅需要实现所需的功能,还要将所需的运算量和存储空间控制在可以接受的范围内。数字信号处理的任务是算法研究,一般在 Matlab 或 c 语言等软件平台上进行仿真。

  1. 数字信号处理的实现

数字信号处理的实现是用硬件、软件或软硬件结合的方法来实现各种算法。目前各类数字产品中最常用的是软硬件结合的方法,即在通用的数字信号处理芯片(Digital Signal Processor,DSP)上通过软件来实现各种数字信号处理算法。

数字信号处理及数字信号处理器的英文缩写均为 DSP,前者指算法,后者指器件,工程上 DSP 一般指的是后者,即数字信号处理器,本文也是默认这一说法。

数字信号

数字信号处理最基本的算法有两类:频谱分析、数字滤波。为了实现这两类算法,首先要了解什么是数字信号,下图是其示意图。

在这里插入图片描述

专业数字音频信号处理中,常见的采样率:44.1kHz、48kHz、96kHz、192kHz,采样精度:16bit、24bit、32bit。采样率和采样精度越高,信号的失真就越小,但所需的存储空间也越大、所需计算的数据也越多,因此实际的工程应用中要根据实际情况合理选择采样率和采样精度。

采样得到的数据其字长由采样精度确定,表示方法有两种:定点、浮点,在 DSP 的应用中经常遇到,下面作简要介绍。

  1. 定点数及其定标

在定点 DSP 芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。一个整型数的最大表示范围取决于 DSP 芯片所给定的字长。显然,字长越长,所能表示的数的范围越大,精度也越高,现以 16 位字长为例。

DSP 芯片的数以 2 的补码形式表示。每个 16 位数用一个符号位来表示数的正负,0 表示数值为正,1 则表示数值为负。其余 15 位表示数值的大小。因此

二进制数 0010000000000011b - 8195 (十进制数)
二进制数 1111111111111100b -4 (十进制数)

对 DSP 芯片而言,参与数值运算的数就是 16 位的整型数。但在许多情况下,数学运算过程中的数不一定都是整数。那么,DSP 芯片是如何处理小数的呢?应该说,DSP 芯片本身无能为力。那么是不是说 DSP 芯片就不能处理各种小数呢?当然不是。这其中的关键就是由程序员来确定一个数的小数点处于 16 位中的哪一位,这就是数的定标。

二进制转换为十进制的计算方法如下:一个具有 n+ 1 位整数 m 位小数的二进制数表示为:

在这里插入图片描述

以上数据的下标 2、10 分别表示二进制、十进制。

通过设定小数点在 16 位数中的不同位置,就可以表示不同大小和不同精度的小数了。数的定标有 Q 表示法和 S 表示法两种。同样一个 16 位数,若小数点设定的位置不同,它所表示的数也就不同。例如:

16 进制数 2000H=8192,用 Q0 表示
16 进制数 2000H=0.25,用 Q15 表示

其中 Q0 表示小数的位数为 0,整数 15 位,符号 1 位;Q15 表示小数的位数是 15,整数 0 位,符号 1 位。

但对于 ADI的DSP 芯片来说,不管小数设在什么位置,处理方法是完全相同的,都是看成 16位的整数,真正的数据是什么就需要根据工程师设定的 Q 来计算。 从表 1 可以看出,不同的 Q 所表示的数不仅范围不同,而且精度也不相同。Q 越大,数值范围越小,但精度越高;相反,Q 越小,数值范围越大,但精度就越低。例如,Q0 的数值范围是-32768 到+32767,其精度为 1,而 Q15 的数值范围为-1 到 0.9999695,精度为 1/32768 = 0.00003051。

因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想提高精度,则数的表示范围就相应地减小。在实际的定点算法中,为了达到最佳的性能,必须充分考虑到这一点。

在这里插入图片描述

  1. 浮点数

定点数由于要对数定标,编程时难度较大,数据的精度也会受到一定的影响。若用浮点数,则简单方便很多。一个浮点数可以表示为指数和尾数的形式:

在这里插入图片描述

其中,e 称为阶码(指数),m 为尾数。

IEEE 754-1985 定义的单精度格式的字长是 32 位,按下图进行分配:

在这里插入图片描述

符号位:1 位,0 表示正数,取 1 表示负数。
阶码位:8 位。
尾数:23 位,但实际上却是 24 位,有一个位是“不可见”的,其值固定为 1,这也就是说IEEE 754 标准所定义的浮点数,其有效数字是介于 1 与 2 之间的小数,因此尾数 m=1.f。

在这里插入图片描述

例:1000.6879,其 32 位的浮点数用十六进制表示:447A2C07H,二进制为: 01000100 01111010 00101100 00000111B

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐