当前位置:   article > 正文

ADAU1701(含A2B)的开发详解六:调音效的常用算法补漏(21个例程)_adau1701 信号发生器

adau1701 信号发生器

作者的话

ADAU1701EVB开发板在未升级成ADAU1701EVB-A2B前,我看了一下写的例程,虽然超过了100个,但我发现还是有很多常用的算法并没有写进来,那就借着这次产品大升级,我把例程也升级一下,加一些常用的,但是没有写的例程。

开发板和仿真器哪里找

某宝搜店铺 “ADI之家”,或者搜型号:ADAU1701EVB-A2B开发板。

硬件准备

ADAU1701EVB-A2B开发板
USBi仿真器
5V2A电源适配器
USB线(MINI USB口)

软件准备

SigmaStudio4.7

用到的例程

在这里插入图片描述

1.USBi自检

我们在做DSP调试的时候,经常会不知道USBi知否工作正常?我的程序到底下载进去了没有?那我就帮你做一个最简单的例子来检测。

在这里插入图片描述

很简单的一个例程,一个波形发生器,经过一个音量调节模块,到一个电平显示模块。下载程序后,把电平显示模块ON,然后拖动音量模块,你会发现电平随之增加减少,这就证明了USBi是在正常工作,数据传输一切正常。

2.子程序设计小技巧

我们在做SigmaStudio的音频框架程序的过程中,有时候工程会用到非常多的算法模块,把整个软件屏幕都占满了,继续往下做,是不是感觉软件上的图形化编程空间很不够???

怎么办,操作上鼠标拖来拖去,而且也很不好阅读程序,有这种困惑的兄弟们可以仔细阅读一下这一段,我来教你怎么简化编程界面,让你写的程序可以轻松的被每个人阅读。

我准备做一个音量调节的子模块,首先把子模块拖出来:

在这里插入图片描述

改名,我为了让兄弟们能很容易的阅读我的工程,我把这个子程序改名为:音量调节

在这里插入图片描述

改名就跟WORD里改名一样,点一下就能改。

然后你会发现在主程序页面边上多了一个子页面:

在这里插入图片描述

我们点进去,把音量调节模块拖出来,然后再把节点拖出来:

在这里插入图片描述

把节点跟音量调节模块连起来。

在这里插入图片描述

回到主程序界面:

在这里插入图片描述

我们的音量调节子模块就有可以连接的节点啦,我们用他来调节0通道的音量。

在这里插入图片描述

下载程序,然后在子程序里去调节音量大小,耳机会听到两个耳朵的响度区别,实验成功!

抛砖引玉,有了这个搞法,你比如要做EQ的时候,就弄个专门的EQ子程序,要做分频的时候,再搞个专门的分频子程序,自己看这方便,其他同事读你的程序也一目了然!我贴一个别人做的工程,你看看子程序是有多么受欢迎。

在这里插入图片描述

这个兄弟做的工程,主程序之外还整了7个子程序,输入、滤波、混音、调音量、输出等等等等,非常好阅读,程序界面也清爽干净,点个赞!(这个程序在CODE文件夹11里)

在这里插入图片描述

3.增益

音量的增加,我们专业一点的说法,叫增益,要给通道加一个固定的增益怎么做,请看例程:

在这里插入图片描述

这个Gain就是增益模块,我在通道1加了10个DB,大家可以接耳机去听,没有加增益的,和加了增益的,两个耳朵听到的音量是明显不同的。

4.静音

很常用的算法模块,我在第二个文档里竟然没有写进去,是我的错,这里补上:

我们可以选择在信号流中加入静音模块,通过对静音模块的操作来实现静音。

在这里插入图片描述

下载程序后,mute点√就静音,输出到耳机上,你会听到这个耳朵被静音了。

5.带压摆的静音

在 SigmaDSP 的算法模块中,会发现很多都有带 SW 的模块,拖出来跟不带的一模一样,这个是干嘛的?注意,非常重要,这个带 SW 的就叫带压摆的模块!

以静音这个模块来讲,见下面的图示:

在这里插入图片描述

带SW的就是带压摆的算法,压摆什么意思?这个得从这个模块的算法来讲了:

No Slew:不带压摆的静音,启用时,可立即使信号静音,不存在增益调节。相对于压摆算法,这种算法需要较少资源;但是实时切换时,可能导致不连续现象(滴答声和爆裂声)

SW:压摆类算法,可从 0dB 增益平滑过渡至静音,并从静音过渡至 0dB 增益。这种压摆算法由软件(故称为“SW”)实现,比“无压摆”算法要求更多指令。

所以综上所述,无压摆的模块,在音效框架很复杂的时候,实时切换,有可能会出现爆破音。用带压摆的模块就可以很好的解决这个问题。

有些用户可能就要说了,那就全都用带 SW 的模块不就好了?不是这样的,DSP 的内部资源是很有限的,带压摆的算法会占用更多的资源,全都用SW,可能会导致你用不了太多的算法模块了,这里就要有一个权衡,如果用不带压摆的模块, 实测没有爆破音,那就放心大胆的用,如果发现爆破音,再换带压摆的模块来解决吧,我们还是希望 DSP 能用更多的算法模块的。

下面这个例程就是带压摆的静音,因为程序简单,跟普通静音没什么区别,但这个章节技术点一定要掌握。

在这里插入图片描述

下载程序后,你感觉不出任何跟例程4的不同,但是这是一个重要的知识点,你的程序做复杂之后,很有可能就出现爆破音,带压摆的器件就是解决之道!

6.分频器-直通分频

分频器,可将一个输入信号分离成两个或更多输出,最简单的就是 T,而在 SigmaDSP 的这些列表里又提供了很多种分频:

在这里插入图片描述

在这里插入图片描述

两通道输入,通过直通分频,分出4个输出,简单愉快。注意这个分频就是纯直通的,不会做高中低音分哦。

7.分频器-分频音量可调

在这里插入图片描述

再做一个分频,这个有点花里胡哨,就是每个通道直接给他加个音量调节,做到每个通道的音量可控。

8.分频器-高低音分频

分频可以是直通的分频,DSP 还可以支持把高低音分离出来,高音走高音通道,低音走低音通道,我们来看一下是怎么做的。

在这里插入图片描述

Crossover就是分频器,我把低音都分给了输出0/1,高音分给了输出2/3,下载程序后,2个输出设备发出来的声音非常明显的做了高低音分频。

怎么去调整这个高低音分频的量?点击这个分频模块,进去调:

在这里插入图片描述

各种参数,频点,自己试一下就知道啦。

9.分频器-高中低音分频

在这里插入图片描述

高中低音分频也有专门的算法模块,我把高给了2和3通道,低音给0,中音给1,动手能力强的兄弟,可以从板子上把0,1,2,3分别飞线出来接喇叭,这样就能有4个喇叭输出,就能感受高中低音喇叭的音效啦。

分频器的设置依然是点开他:

在这里插入图片描述

10.延时

在这里插入图片描述

专门的延时模块在这里,ADI是这样描述的:

“延迟”(Delay)模块(采用 Z-a 算法)向信号流中添加一个可变延迟,其范围在 1 与 DSP 的最大可用内存之间。 特定延迟模块的最大可用延迟取决于系统可用总数据 RAM,该值由 DSP 处理器数据手册规定。设置“最大”(Max)控制值,分配 DSP 中的内存并保留这些内存,专供这一特定模块使用,降低设计中所有其他延迟模块的可用内存。这是一种编译器指令,可修改汇编代码,47因此,每当更改“最大”设置时,您必须重新编译并下载程序。注意:此规则适用于可分配内存的任何模块(如压缩器模块)。最大延迟值范围局限于 RAM。

OP想说的是,就纯延时,加上自己调,如果想要更多延时,而这个模块调到最大了,那么你可以多拖出来几个,串联就好了。需要注意的是,DSP的内存是有限的,延时很占内容,你可以一直加,直到你下载工程的时候报错,那就是软件告诉你,内存溢出了,你不能这么干,要减模块。

在这里插入图片描述

11.移频防啸叫

ADAU1701有专门的移频算法,这个模块多用于防啸叫,我只给一个最简单的例程告诉你在 哪里,至于防啸叫就需要用户自己在自己的声乐环境下细调了。

在这里插入图片描述

12.反馈

“反馈”(Feedback)算法在信号通道中生成一个延迟,并将信号重新引导至该通道中较早发生的输入。(图中所示即为这种反向信号流,这是唯一一个绿色输入位于右侧、蓝色输出位于左侧的模块。)注意,如果设计中要求反馈,则必须使用该模块。

我做一个例子,主要是要讲一下这个反馈的信号流是反的:

在这里插入图片描述

当然真实的音频框架设计里,肯定不会这样搞,我做的这个程序仅仅只是展示,学会他,再应用到你自己的框架中吧!

13.设置采样率

注意,很关键的技术点,ADAU1701是支持192K采样率的,而且因为codec在ADAU1701的内部,所以我们可以实时的去调采样率,怎么做看下面的详细说明吧。

我就拿一个直通的例子来改采样率。

在这里插入图片描述

采样率就看这里,默认的是48KHz,我们怎么把他改到192,很简单,下拉菜单,直接改:

在这里插入图片描述

他问你是不是要改,我们点Yes!

在这里插入图片描述

这样就结束了吗?并没有,我们需要让这个192KHz在整个程序框架例全局应用,于是我们还需要点这里:

在这里插入图片描述

点完之后,我们看一看采样率变了没有,选中一个节点,鼠标右键:

在这里插入图片描述

在这里插入图片描述

192000,也就是192KHz采样率,没问题了。这样结束了吗?NO,最后一步,你必须要点在线下载工程,才能让这个采样率生效!

在这里插入图片描述

14.31段EQ

31段EQ是常规操作,我们看看怎么做:

在这里插入图片描述

用一个EQ模块,最多只能设置成15段,那31段怎么说?那就再拖出1个EQ,设置成15段撒!还差一个,就再拖出来1个,这不就是31段了?

在这里插入图片描述

细节参数我就不去调了,大家自由发挥吧。

15.90段EQ

ADAU1701到底能做多少段EQ? 我也不知道,取决于你的算法框架,每一个算法都要占用内存,最后留给EQ的能有多大内存,就能搞多少段。一直加到你下载程序报错,那就说明芯片到极限了。

那我就只做EQ,来测一下ADAU1701的极限EQ段位在哪里,先做一个90段!

在这里插入图片描述

90段EQ不行,你看他的报错,MIPS不够啦,我们减一点,减到60段。

(这是一个错误的例程,目的就是让兄弟们了解怎么去做极限开发,如何快速的掌握DSP到底能不能达到想要的性能)

16.60段EQ

90段不行,我试试60段:

在这里插入图片描述

60段EQ,下载程序没有报错,正常运行!!!所以ADAU1701,在采样率48KHz的情况下,2进2出,做60段EQ是没问题的。

后面我就不继续了,方法给到兄弟们,有兴趣有需要的自己去测吧。

17.信号发生器-正弦波、方波等

DSP天然属性,他可以自发生很多的信号源,在ADAU1701的算法里,有很多信号源直接可以用,我们先搞个正弦波:

在这里插入图片描述

下载程序后,正弦波模块点√,就可以发出正弦波了,我接了一个输出到音箱,就会听到滴…的长鸣声,把√点掉,声音就没有了。

源有很多,有需要的直接拖出来用,参数自己设置。

18.白噪声

经典算法,DSP自发生,找出来就用。

在这里插入图片描述

下载程序后,点白噪声的开关,音箱中发出嘈杂的白噪声。

19.粉红噪声

在这里插入图片描述

输入音源,加入粉红噪声,输出耳机或音箱,听一下很明显。

20.相位

ADAU1701的算法里有专门的相位算法,找了一个做了一下程序:

在这里插入图片描述

当然也可以用组合算法,我在前面的文档里有写过,很复杂,坦率的讲那个逻辑算法搭的相位可调,OP自己也没完全整明白。

21.和声算法

可能有兄弟会需要,我也找出来了。

在这里插入图片描述

下一章预告

本章把我当下能想到的常用的算法都列了一下,后面会陆续再想到了,再新增,注意关注OP的CSDN博客。

下一步把Basic DSP和RMS限幅器找几个例子写一写吧。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/105245
推荐阅读
相关标签
  

闽ICP备14008679号