ADAU1701(含A2B)的开发详解四:DSP进阶开发(16个例程)

编程入门 行业动态 更新时间:2024-10-14 06:20:58

ADAU1701(含A2B)的开发详解四:DSP<a href=https://www.elefans.com/category/jswz/34/1769503.html style=进阶开发(16个例程)"/>

ADAU1701(含A2B)的开发详解四:DSP进阶开发(16个例程)

作者的话

ADAU1701我应该是整了不下100个例程,有自己写的,有网上收集的,也有产品级的程序,就在这个文档里一一展现吧。(有可能会分几个文档,一个文档写完100个例程的详解,有点太累了)

开发板和仿真器哪里找

某宝搜店铺 “ADI之家”

硬件准备

ADAU1701EVB-A2B开发板
USBi仿真器
5V2A电源适配器
USB线缆(MINI USB接口)
模拟输入音源(电脑声卡、手机、播放器都可以)
模拟输出设备(音箱、耳机)

软件准备

SigmaStudio4.7

使用到的例程

注意,我提供了文档里所有的例程,但OP老师希望兄弟们能根据我写的文档,自己做例程,完全自己搞出来,印象会更深刻。

硬件链接说明

在文档二里详细讲了,我在这里就不多废话,默认硬件都连接好了。

例程1:直通2

文档二的第一个例程,我们把板子弄出声了,输入音乐,输出音乐,这个也是验证板子硬件是否正常的最常规办法。这个例程继续讲直通,我们把直通换到另一个立体声输出通道,加深一下对通道设置的理解。

首先是硬件设计,再是原理图设计,跟文档二中完全一样,我就不再重复叙述了。

在原理图的设计中,把输出改成 DAC2 和 DAC3,就对应的是板子上的JP6,第二个输出接口,将音乐输出到音箱上:

软件里的输出2和3,对应板子上的2&3输出接口:

下载做好的程序,这个时候0&1接口就不出声了,因为我们改通道了,把音箱插到2&3接口,
音乐就能听得到了。

所以你看,通道就是这样,2进4出,以前的老DSP,我可能需要敲代码,配寄存器,一点点改,而ADAU1701里,动一动鼠标,通过SigmaStudio这个开发神器,随意配置。

例程2:直通3

还是讲通道,这个例程,我们将实现模拟音源输入,两个立体声模拟输出接口同时输出。

首先是硬件设计,然后到了原理图的阶段,因为是两路输出,所以我们需要拖出 4 个 output:

先将 output 的通道选择好,DAC0/1 是一组,DAC2/3 是第二组。

于是问题来了,输入接口只有 2 个点,如何才能跟 4 个 output 相连呢,这里我们需要引入一个非常重要的模块,T。T可以让他们并联起来。

链接好原理图,下载程序3,手机输入的音乐,将会在两个立体声输出接口同时同步播放,我们可以一个接口接音箱,一个接口接耳机,同步听一下效果。

例程3:音量调节

前面几个例程,做好了模拟音频输入,两路立体声输出的程序框架,下面我们就正式基于这个框架来做音效处理吧。

第一个处理,也是最简单的,音量调节。

1)默认做到例程2的阶段,硬件设计什么的都做完了,我们要在这里加音量调节模块。

2)设置一个音量控制,点开 Volume Controls 模块组,然后依此选中/点击如下图, 再把其中的 Single volume 模块拖到工作区。(调音量的模块很多,我们选一个出来讲,更多的调音量模块用户可以自行试用)

3)调出来的调音量模块只有一个输入一个输出,我们需要设置成双路,选中并鼠标右键点击刚加入的 Single 1 模块, 选择弹出菜单里的 Gain(no slew), 使其支持双声道处理。

4)将 Input 模块和音量调节模块进行连接,完成原理图设计。

5)通过 USBi 下载程序,音源输入后,马上就经过一个调音量的模块,再输出到音箱和耳机(输出第一个接口接音箱,第二个接口接耳机), 所以实现的效果就是,sigmastudio 里调节 single1,同时控制音箱和耳机的音量大小。

例程4:双通道音量分别调节

上一个例程是一个 signal 调 2 个音源的音量,下面我们来做一个例程,用 2 个 signal 分别调节音箱和耳机的音量大小。

1)通过硬件和原理图设计,达到上图的状态
2)设置两个音量控制,点开 Volume Controls 模块组,然后依此选中/点击如下图, 再把其中的 Single volume 模块拖到工作区,并都调整成双声道处理。

3)完成模块链接。

4)通过 usbi 下载例程,在 sigmastudio 里调这两个模块,实现了音源输入后,通过 2 个调音模块,single1 控制音箱的音量,single2 控制耳机的音量。

例程5:开关选通道

这个例程,我们主要想用一下 sigmastudio 里的开关功能,通过开关,选择哪个通道出声。

1)通过硬件设计,原理图设计,做到下面的状态。

2)选择 Muxes/Demuxes,这里都是开关电路,选择 2 进 4 出的开关,这里是 Demultiplexers
里的 Switch,选择如图所示,拖到设计区,然后进行逻辑连线。

3)通过 USBi 下载程序,然后调整 sigmastudio 软件里,原理图区的这个 2xN-1 开关,就可 以控制输出是音箱还是耳机了。当选择上面,走的是上面的通道,则是音箱输出,选择下面, 走的是下面的通道,则是耳机输出。

例程6:左右声道电平实时显示

在前面的所有例程中,我们的输出都是双声道,下面我们来搞个控件,实时的看一下这左右 声道的电平。

“电平检测器”(Level Detector)模块计算输入信号电平,实时地从硬件中直接读取,并以图形方式将电平值显示在仪表显示屏上。 “单电平检测器”(Single-Level Detector)计算并显示信号的均方根电平,单位为 dB。 电平检测器只进行分析,不修改输入信号。输出引脚的信号与输入相同。

通过“开/关”(On / Off)按钮启用或禁用显示屏。直到原理图设计编译完毕并下载至硬件且正确配
置 USB 通信通道之后,电平检测器才会正常工作。显示屏的刷新率约为 10 Hz,绿色横线跟踪
最大均方根值,略微延迟。注意,显示屏的性能受制于您的 PC 系统和 USB 通信资源。使用多
个电平检测器可能降低响应性。(这几段是ADI写的,我全盘摘抄)

1)硬件设计,原理图设计,到下面的状态,不再赘述。

2)点开 Level Detectors/Lookup Tables 的下面这个 Single Livel Detector 模块,拖出去 4 个。
作为左右声道电平实时显示,并连线,完成设计。(其他的显示还有很多,用户可以自行拖
出来测试)

3)将例程通过 usbi 下载到板子上,并打开 1XRTA1、1XRTA2、1XRTA3、1XRTA4 的 on 开关, 音源输入,音源输出,这个时候就能在你的原理图这里看到这四个通道的实时的左右声道电平显示了。

例程7:EQ 例程

做音效,EQ绕不过去,总是一说31段EQ什么的,那在ADAU1701上怎么做,能做多少?极限在哪里?我先教你做个最简单的,后面会有一个文档,专门讲EQ,有兴趣的话继续往后看。

1)硬件设计,原理图设计,到下面的状态,不再赘述。

2)在工具栏中点开 Filters 模块组, 依此选中/点开 Second Order>Single Precision, 然后把
Medium Size Eq 模块拖到工作区。(Filters 有很多功能模块,我们选择其中的这个来讲,其他的用户可以自行测试)

3)鼠标左键选中 Medium Size Eq 模块,点右键,如下图操作,先选择第二个“Grow Algorithm”, 选择 6,产生一个 7 段 EQ。每段的中心频率或增益都可自由设置。


(具体怎么调这个,我后面的EQ专辑里会简单说一说,其实兄弟们自己看一下这个EQ的各项参数也能弄明白,频率、Q值啥的,自己填)

4)复制粘贴这个 mid eq1,给耳机通道,并进行逻辑连线,完成原理图的设计。

5)用 USBi 下载该例程。并输入音源,播放音源。这个时候,音源输入通过音量调节,到 7
段 EQ 调音处理,到左右声道实时显示电平并输出,这个例程就完成了。调节你画好的原理图里的 Single1 调节音量,Mid Filter1 和 Mid Filter2 做 EQ 调节,1XRTA1 和 1XRTA2、1XRTA3、 1XRTA4 实时显示左右声道电平。

说一个题外话,很多用户都问 Sigmadsp 到底能做几段 EQ,我想说的是,芯片的资源是有限的,我也说不好你的设计中,EQ 占了芯片多少资源,其他功能模块占了多少资源,到底最后留给 EQ 的能做出几段来。但软件上实现 EQ 是非常容易的,你只需要自己亲自试一下, 把你的系统都搭好,看看增加到多少段 EQ,USBi 下载没问题。一旦 USBi 下载出错,那就可能是超出了芯片的能力范围,这个临界值就是你的 EQ 段数啦。

后面的EQ专辑里,我给兄弟测一下,用ADAU1701做纯纯的EQ,到底能做多少段,这颗DSP的极限在哪里。

例程8:混音

基于第7个例程,我们再来玩个最简单的混音!将输入音源分别经过 EQ 调节后的声音,进行混音,再输出到音箱,听一听这个简单的混音效果。分析一下这个过程,首先输入音源, 再经过一个音量调节模块,出来后分成两路,一路接 EQ 做调音,一路接另一个 EQ 做调音。

EQ 调完音的声音出来之后,进行混音,再接左右声道实时电平显示,再输出,是这样一个 过程。那么在 SS 的原理图里是如何实现的呢?(混音效果也许不是很好,听不太出来,但 是开发板的文档是本着教会用的目的来写的,更好的效果就靠大家学会最基础之后自由发挥了)

1)硬件设计,原理图设计,达到下图状态

2)点开 Mixers/Splitters 的下面模块,拖出来 2 个。

3)完成连线,实现混音逻辑图例程的开发。

4)用 USBi 下载程序,音频输入出来,经过 T 并联出 3 路,上下两路分别接音量调节,7 段EQ,再经过两个 MIX, 上左声道和下左声道混,上右声道跟下右声道混,混音完成后通过电平模块,再输出到音箱。中间一路直通到耳机,通过调节 EQ,在音箱听混音效果,通过耳机听直通效果,对比一下,看看混音是不是很棒!

再次强调,做这些可能在声学上没什么道理,旨在教会兄弟们如何去用混音模块,想要看有道理的声学架构,可以关注一下我后面提供的,产品级的代码。

例程9:算法立体声(Surround & 3D Audio) 1

在 Sigmastudio 软件中,为每个型号的 DSP,根据其内存和处理能力的不同,提供了相应的算法和设计资源,ADAU1701 就有很多算法模块,可以直接拖出来调用。如下图:

我们来做几个算法的例子,感受一下。学会使用这些算法后,将其嵌入到你的系统中,将会
得到想要的音效。

我们先做一个 superphat。

1)硬件设计,软件设计,达到下面的状态:

2)拖出算法模块, 链接好电路图,通过 usbi 下载,听音效。

再说一句题外话,OP个人觉得 SigmaDSP 的开发,难点不在设计,通过前面的例程,
用户应该也发现,工程实现都非常容易。难点在于声学的知识,怎么样搭配模块才能出好
效果,什么样的效果才是好效果,这个作为电子工程师作者来讲,是回答不了的,我是真
不懂。

例程10:算法立体声(Surround & 3D Audio)2

再做一个例程,从ADI官网里搜到的,正好符合我们这个板子。

1)硬件设计,原理图设计,达到下面的状态,注意开关调出后是 4 选 2 出的,鼠标右键增加一路,这里我们要做 6 选 2 出。

2)逻辑连线,INPUT 出来后接 T,T 出来 3 路音源,一路接 SPhat1 后接开关 Nx2-1,一路接Phat-Stereo1 后接 Nx2-1,一路直接接 Nx2-1,最后统一由 Nx2-1 出左右声道到输出口。

3)通过 USBi 下载,通过 NX2-1 来选择输出哪一路效果,来听直通或者两个效果器的效果对比。

例程11:算法 ADI 5.1 声道效果器

在 Surround & Spatializer 的算法模块中,我们发现了一个 ADI 的 5.1 声道效果器模块。“ADI虚拟”(ADI Virtual)可增强立体声场,以数种风格营造出一种更加开阔的视听环境。该算法用高级信号处理技术来合成虚拟扬声器, 使您如同置身于立体声音轨之中, 并/或使音乐环绕于您的周围。内置的声谱控制滤波器对频率和相位响应进行微调。可将 5.1-声道环绕音频(左、右、中、超重 低音、左右环绕声道)转换为双声道格式:针对耳机的双耳立体声以及针对扬声器回放的特殊立体声。

 “ADI 虚拟”算法设计用于嵌入式 DSP 上的轻型应用。 以下为可用处理配置:
 5.1 声道至扬声器虚拟器(5.1 to loudspeakers virtualizer)
 5.1 声道至耳机虚拟器(5.1 to headphones virtualizer)
 立体声至扬声器虚拟器(Stereo to loudspeaker virtualizer)
 立体声至耳机虚拟器(Stereo to headphones virtualizer)
 5.1 声道混合至立体声(5.1 mix to stereo)
 立体声直通 TKTK (Stereo passthrough TKTK)

以上文字是从ADI对这个算法模块的描述中抄来的。

我们通过一路音源,软件上配置一下,也来感受一下效果吧。

1)硬件设计,原理图设计,达到下面的状态

2)问题来了,5.1 这个模块有 6 个接口,我们输入只有 2 个,只接 2 个的话,usbi 编译下载会出错。于是直接把 T 拿出来,2 路分 6 路,连上 5.1,再输出。

3)用 USBI 下载程序,选择 5.1 里的这些效果器,来听声音的变化吧,效果器的差别很大,
连我这个外行耳朵都听得非常清楚。

例程12:FIR

FIR,最常见的滤波器,在 SigmaDSP 里是如何实现的,非常简单。把 FIR 模块拖出来,嵌入到你需要的位置,用线连好就好了。

通过 FIR(有限脉冲响应)模块,您可以设计任何需要的 FIR 滤波器。

  1. 将模块拖入工作区。
  2. 单击“表格”(Table)。
  3. 输入您所选软件(见下文)算出的系数。(最大值为 800。)

可通过指定适当的滤波器系数来控制频率响应,如此处所示:

您可用该弹出窗口输入任意多个系数,以形成自己的定制型 FIR 滤波器。(请记住,系数越多,
越接近理想 IIR 滤波器,但需以内存为代价。)

例程13:移频

移频在 ADAU1701 的算法模块里,有专门的叫做 Pitch transposer。 防啸叫一定会用到这个模块,注意。

最简单的例程当然就是直通里头加进去看看效果,调整一下模块,效果非常明显。具体这个模块的使用,还是要用户在自己的工程中去摸索,在合适的位置添加。

例程14:动态低音增强

Dynamic Bass Boost 是 ADAU1701 支持的算法之一,注意这个算法很有名哦,在ADI这里是免费用的。

“动态低音增强”(Dynamic Bass Boost)模块可提供因输入信号电平而异的增强效果:低电平比高电平要求且接收更多低音。该模块采用一个可变-Q 滤波器,可动态调节增强量。滤波器在 “阈值”(Threshold) 与 “最低增益”(Min(imum) Gain)设置间计算低音增强量。高于最低增益、低于阈值的输入存在固定最大限值。

7个参数(如下所述)控制着该模块的性能。在相应字段输入参数值,也可通过箭头输入。尽管了解这些参数的工作原理及其具体作用是非常重要的,但您需要做的只是试试各个参数,感受它们各自及组合后对目标音效的影响。

 低通频率(Lowpass Freq) – 低通频率范围为 20Hz 至 250Hz;检测器通过选中点之下的频率来确定增强量。
 高阈值(High Threshold) (dB) – 高阈值的范围为-20 至 10dB,用于设定检测器操作的上限点。 高于最低增益的信号不会影响增强计算,而会被以固定量增强。
 时间常数(Time Constant) – 范围为 0 至 500 毫秒,控制着检测器的均方根时间常数,可改变起音速率(attack rate)和释放速率(release rate)。
 低阈值(Low Threshold) (dB) – 该值的范围为-100 至-20dB,为检测器的阈值下限。进入检测器且低于此阈值的任何信号不会影响增强计算,而是获得固定量的增强。
 压缩比(Compression Ratio) – 压缩比的范围为 1 至 15,可能理解为一种动态增强比更为恰当,控制着低音增强从低阈值变为高阈值的比率。
 增强(Boost) – 该滑块的范围为 0 至 16dB,控制着动态应用于算法的最大增益。另见下一个参数。低音频率(Bass Freq)- 本字段位于增强滑块之下,其范围为 20 至 300Hz,用于设定增强滤波器的中心频率。

注意: 当“增强”设为 0dB 时,并不能真正绕过输入模块。

以上是ADI写的,我摘抄。

我们来看一下这个模块是怎么使用的,做一个最简单的例程。

分别调整 BASS 的值,和开关选择通路,来分别听加了效果器的音效,以及直通的音效,做
一下对比。

例程15:响度(低和高)Loudness (Low and High)

Loudness (Low and High)是 SigmaStudio4.1 软件中,ADI 算法里的一个模块。

对于低电平, “响度”(低和高) (Loudness (Low and High))模块可增强低于 60 Hz 的低音和高于 7kHz 的高音(另见下面的控制旋钮部分)。

增强值依据著名的 Fletcher-Munson 等响曲线及其他曲线计算而得。这项研究显示,低电平时,低声级和高声级必须显著提高响度,才能使音色平衡听起来比例适当,并使整体声音在人耳中呈现出相同的响度。请注意,这种算法为固定而非动态算法:它假定输入电平保持不变。

该模块的参数包括电平滑块、LPF 及 HPF 旋钮和电平(Level)。

  1. 电平滑块控制整个信号的输出音量, 但更重要的是,它同时也控制响度算法。低电平时,响度算法对低频的增强效果好于高频。电平为 0dB 时,无论输入电平为何,低频和高频都不能增强。
  2. 通过 LP 旋钮,您可以更改低通滤波器的截止频率。默认值接近 Fletcher-Munson 曲线。频率值越高,低音带宽增益越高。
  3. 通过 HF 旋钮,您可以更改高通滤波器的截止频率。默认值为 7kHz,接近 Fletcher-Munson曲线。

我们来看一下这个模块是怎么使用的,做一个最简单的例程。

例程16:仿真头模块和激励模块

这个例程很重要,SigmaStudio里能看波形的,我印象中就这个。

这个例程旨在向用户展示如何通过仿真头模块和激励模块来监控所设滤波器的频率响应。

1)硬件设计,原理图设计,达到下面的状态:

2)USBi 下载程序。
3)单击“仿真头”模块,窗口中不显示任何内容。
4)单击“激励”模块按钮,打开“频率响应” (Frequency Response)窗口。现在,您可实时查看对 EQ 所作更改的结果。以上参数的响应如下所示:

题外话

写完这些例程,兄弟们是不是发现了,ADAU1701支持的算法极其的多,想要准确的找到哪个模块在哪里,似乎有点困难,OP老师最开始也是这样的,有没有搜索模块的功能?很遗憾SigmaStudio并没有。

怎么解决,两个办法,第一个就是多用,用熟了,基本上知道哪个模块在哪个区域,信手拈来,还有一个办法就是哪我做的例程,直接复制粘贴模块,SigmaStudio可能是知道大家不好找模块,他在某个版本升级后,就支持复制粘贴了,同一处理器的工程,模块是可以直接复制粘贴的。

下章预告

这个文档里我写了16个例程,随心写的,旨在让兄弟们能迅速熟悉这颗DSP的开发流程,下面的章节,我就再来搞点深层次的。

更多推荐

ADAU1701(含A2B)的开发详解四:DSP进阶开发(16个例程)

本文发布于:2024-02-10 22:44:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1677733.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:进阶   详解   例程   A2B   DSP

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!