ADAU1452的开发教程4:常规音频算法的开发(3)

作者的话

查看以前写的文章,竟然漏了ADAU1452的教程,这个系列补上。

硬件准备

ADAU1452EVB开发板 一块

产品链接:https://item.taobao.com/item.htm?id=39289236798\&mi_id=0000wqoRr6-98ywbCw8ZTr0mE6q1cknIFCl463Z2sUYdsks\&spm=a21xtw.29178619.0.0

USBi仿真器 一个

产品链接:https://item.taobao.com/item.htm?id=38242936768\&ltk2=17537807781694bl3w9jzvg4i3etpojyy4\&spm=a21xtw.29178619.0.0

5V2A电源适配器一个

3.5mm音频线两条

MINI USB线一根

模拟音频输入音源:手机

模拟音频输出设备:耳机

软件准备

首选需要安装 SigmaStudio 软件,这个软件是开发 ADAU1452 的唯一工具,你的所有功能都依赖这个软件来实现,所以请随时关注 ADI 官网上的软件更新情况,确保自己安装的是最新的 SigmaStudio 软件,已获得更多更稳定的功能。

目前最新的SigmaStudio软件版本是4.7,而且应该不会再有更新了,所以我们如果用SigmaStudio,就固定在4.7版。

这个软件是完全免费的,直接下载安装即可。

特别注意,安装 SigmaStudio 时,有可能需要你安装 Microsoft.NET Framework Ver4.0,如果你的机器之前没有安装过此类软件包。 最新版本的.net Framework 可到网站下载。

软件都装好了,就可以正式开启我们的 ADAU1452 的开发之旅了!

开发平台搭建示意图

ADAU1452 的开发 18:线性增益

"线性增益"(Linear Gain)模块以文本字段中指定的值对信号进行缩放。在例程 17 里,我假定一下,感觉低音输出的音量太小,我要对他进行放大,于是我就在这个通道上加上限行增益算法进行响度的补偿!

手动填入数字,感受一下声音放大、缩小的效果吧!

ADAU1452 的开发 19:1 段 EQ

终于到了音效处理的环节啦,下面的章节,我会用很大的篇章来讲一下均衡。

EQ 是最常用的音效处理。(本人是电子工程师,并不是声学工程师,水平有限,对音效的理解更偏重于 DSP 电子设计应用的实现这部分,文字中有错误或不准确的地方,请原谅、指正,共同学习,谢谢)

Equealizer,EQ,中文翻译为均衡。我的理解,在音效系统里,我们需要对原始的音频信号进行许多方面的加工处理,才能使播放的声音变得优美、悦耳、动听,满足人们对声乐的高品质需要。EQ 就是其中的一种用来对频响曲线进行调整的工具。换句话说,EQ 能对不同频率的声音信号进行不同的提升或衰减。因为它能补偿由于各种原因造成的信号中欠缺的频率部分,也能抑制信号中过多的频率成分,从而达到高品质声音效果。例如,EQ 可以抑制频率为 60~250Hz 的低频交流声,也能抑制频率为 6~12KHz 的高频噪声。由于乐器发出的声音大多是复合音,即他们是由基波和谐波复合而成的,所以改变了各频段能量分布的相对大小,就相当于改变了基波与谐波之间的相对关系,从而导致人耳对声音频谱结果的听觉感受发声了改变,我们俗称音色的改变。因此,利用 EQ 还可以进行音调调节和音色加工。

EQ 的种类有很多,我们的 SigmaDSP 就提供了非常多的 EQ 算法模块供大家使用,这些 EQ的最基本工作原理应该都是相通的。它们都是将音频信号的全频带(20Hz~20KHz)或全频带的主要部分,按一定的规律分成几个甚至几十个频点(也称之为频段),再分别进行提升或者衰减,从而获得所希望的频响校正曲线。

我们常说的 31 段 EQ,多少段 EQ,SigmaDSP 最多能实现多少段 EQ 是什么意思?频段数越多,则频段分得越细致,补偿修正功能越高。打个比方,15 段 EQ,中心频率我设置个常用的,在 25Hz,40Hz,63Hz,100Hz,160Hz,250Hz,400Hz,630Hz,1.6KHz,2.5KHz,4KHz,6.3KHz,10KHz,16KHz。31 段 EQ,中心频率我设个常用的,在 20Hz,25Hz,31.5Hz,40Hz,50Hz,63Hz,80Hz,100Hz,125Hz,160Hz,200Hz,250Hz,316Hz,400Hz,500Hz,630Hz,800Hz,1KHz,1.25KHz,1.6KHz,2KHz,2.5KHz,3.15KHz,4KHz,5KHz,6.3KHz,8KHz,10KHz,12.5KHz,16KHz,20KHz。根据需要,我们可以在 20Hz~20KHz 的整个音频范围内,调节更多的频点特性,根据需要,精准的提升与衰减增益,消除噪声,修饰音色,提高音质,校正房间声学特性,还能模拟一些特殊的声音效果!

均衡的技术指标有很多,我在这里简单的说一说:

  1. 中心频率

中心频率就是指均衡中各谐振回路的谐振频率,即提升或者衰减频段的峰点或谷点所对应的频率。

  1. 频带宽度

各段频带宽度是指的以中心频率为中心,-3dB 点所对应的频带宽度,它与品质因子 Q 值有关,Q 值越大频带越窄,Q 值越小频带越宽。

  1. 最大提升/衰减量

均衡器在中心频率点所对应的音频信号,能够提升或者衰减的最大能力,用 dB 分贝来表示。

  1. 频率响应

频率响应也成频率特性,通常是表示不同频率对某一参考电平的相对信号电平特征曲线图。在给定的频率范围内,若所有频率信号均有平均的电平,则称之为平坦的频响曲线。频响也可表示为电平偏差不超过某一分贝数值的皮率范围。

均衡器的频率响应指在音频频率范围内各个频率点不提升也不衰减时的频率响应,此时的频率响应曲线越平坦越好!

  1. 频率中心点误差

频率中心点误差是指各频率点实际中心频率与设定的频率的相对偏移,通常用百分数表示。

  1. 总谐波失真

信号通过均衡器后,新增加的所有谐波成分的方均根值占基波信号的百分比

  1. 信噪比

音频信号电平与通过均衡器后产生的各种噪声电平的比值,用 dB 来表示,用于衡量均衡器的噪声性能,信噪比越大,说明均衡器噪声影响就越小。

  1. 最大输入电平

均衡器输入回路所能接受的信号最大电平。

还有其他的参数,如最大输出电平,输入阻抗,输出阻抗等等,这里就不再细说了,属于音频基础知识,可以百度或者找本教材读读看。

以上,简单介绍了一下 EQ,在 SigmaDSP 里,实现 EQ 是一件非常容易的事情,不过想要调好 EQ 就是一个细致的活,我们一起慢慢看,慢慢学,先做一个最简单的 EQ 程序。

1)在工具栏中点开 Filters 模块组, 依此选中/点开 Second Order>Single Precision, 然后把Medium Size Eq 模块拖到工作区。

2)鼠标左键选中 Medium Size Eq 模块,点右键,如下图操作,先选择第二个"Grow channels",选择 1,选择成双通道,和音量模块的操作一样。

3)连线完成设计

ADAU1452 的开发 20:15 段 EQ

在例程 19 的基础上,我们多加段数,加到 15 段 EQ:

注意,我并没有设置频率和调参数,大家可以通过自己的专业声学知识来设定每段的频点,以及增益和补偿,来调试音效。

ADAU1452 的开发 21:31 段 EQ

在例程 19 的基础上,我们做到 31 段 EQ,同样,只搭建了程序框架,并没有对每个频段进行细调,用户可根据自己的需要调节各个参数来实现想要的音效:

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

ADAU1452 的开发 22:延时

延时是音频处理中最常见的一种算法,"延迟"(Delay)模块(采用 Z-a 算法)向信号流中添加一个可变延迟,其范围在 1 与 DSP 的最大可用内存之间。

我做一个例程:

在这个例程呢,我把延迟加了进来,并且做了一个开关,上面的音频流是加了延时的,下面的音频流是直通,通过开关来选择,大家可以听一下有没有区别吧。

ADAU1452 的开发 24:反馈

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

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

通过开关的选择,上面是经过反馈后的音效,下面的是直通的音效,对比音效还是比较明显的。

ADAU1452 的开发 25:电平实时显示

基于第 24 个例程,我们来加几个电平显示的模块,直观的看看声音的情况:

打开这4个显示的开关,你会发现3个直通的电平,和经过反馈后的电平显示是完全不同的。

ADAU1452 开发例程 26:按键控制 LED 灯

ADAU1452 也有一定的 IO 控制功能,这里做一个简单的按键控制 LED 灯的程序,看看在 1452上是怎么做到的。

1)首先要配置一下 MPx,定义 GPIO 的 input 和 output。

我们回到 Hardware 的界面,选中 ADAU1452,点鼠标右键,并选择 Register Window,打开寄存器配置页面。

2)选择如下图的设置

MP6 和 MP7 设置成 output,即 LED 灯 D4,5。MP11,12,13 设置成 input,即按键 KEY1,2,3

如果要让板子上的按键控制 LED 灯,可做以下操作,拖出 input 和 output,并下拉指定接口即可。

GPIO11-GPIO7,对应了板子上的 KEY1 和 D4 灯,通过 USBi 下载之后,按下 KEY1,D4 闪。 GPIO12-GPIO6,对应了板子上的 KEY2 和 D5 灯,通过 USBi 下载之后,按下 KEY2,D5 闪。

相关推荐
持续学习的程序员+12 小时前
部分离线强化学习相关的算法总结(td3+bc/conrft)
算法
Rui_Freely2 小时前
Vins-Fusion之 SFM 滑窗内相机位姿及特征点3D估计(十三)
人工智能·算法·计算机视觉
李泽辉_2 小时前
深度学习算法学习(六):深度学习-处理文本:神经网络处理文本、Embedding层
深度学习·学习·算法
一碗姜汤2 小时前
【3DCV】Re10K数据集:抽帧处理、数据类构造
3d·音视频
Codeking__2 小时前
Redis的value类型及编码方式介绍——hash
redis·算法·哈希算法
u0104058362 小时前
企业微信通讯录同步服务的增量更新与冲突解决算法
算法·企业微信
码农水水2 小时前
阿里Java面试被问:RocketMQ的消息轨迹追踪实现
java·开发语言·windows·算法·面试·rocketmq·java-rocketmq
智驱力人工智能2 小时前
矿场轨道异物AI监测系统 构建矿山运输安全的智能感知防线 轨道异物检测 基于YOLO的轨道异物识别算法 地铁隧道轨道异物实时预警技术
人工智能·opencv·算法·安全·yolo·边缘计算
橘颂TA2 小时前
【剑斩OFFER】算法的暴力美学——leetcode 429 题:N 叉树的层序遍历
算法