当前位置:   article > 正文

ADAU1701(含A2B)的开发详解九:逻辑编程的音频算法框架-17个例程

adau1701

作者的话

做ADI的DSP也有近20年了,收集了一些常用的ADAU1701算法框架,有些我能懂,有些我也不明白,没有深入研究,都放在这里,兄弟们有需要就直接用。

注意一下输入输出通道,这个里头的设计有可能并不是完全符合开发板的硬件电路。

开发板和仿真器哪里找

某宝搜店铺 “ADI之家”

硬件准备

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

软件准备

SigmaStudio4.7

用到的例程

在这里插入图片描述

1:调音量滤干扰,以及 RealTimeDisplay 模块的用法

进阶例程中,就不再详细描述最基本的操作,如 hardware 中的设置等,只会以截图的方式 简单说明。

在这里插入图片描述

这里例子里,我将用它来配合开发板上的电位器,搭建调音模块,展现其功能。

我们搭建好 hardware 硬件后,因为要用到电位器,需要在 hardware 里进行一下设置:

在这里插入图片描述

程序设计

在这里插入图片描述

说一个小技巧,如果你找不到模块在哪里,可以直接 copy 我们例程中的模块即可。

下载程序,音源从 0/1 口输入,经过一个音量控制开关,再由 OUTPUT 0/1 出口输出播放。

重点来了,我们在电位器控制这里经过一个 T 之后,增加了 RealTimeDisplay 模块,这个模块是怎么用的呢?

打开这个 RealTimeDisplay:使用电位器即可调节音量 。

在这里插入图片描述

下载程序后,点开它,选中一直采用,并开始采集。不断转动电位器旋钮,采集到下面的图 示:

在这里插入图片描述

我们在 hardware 里,寄存器配置中把 ADC 输入改为如下图:

在这里插入图片描述

在 RealTime 中你会发现把电位器关到音量最小,音量不是 0,而且也关不死音量。

在这里插入图片描述

我们在 hardware 里,寄存器配置中把 ADC 输入改为如下图:

在这里插入图片描述

同样,RealTime 中采样,音量调到最小并不是 0,关不死。

在这里插入图片描述

我们在 hardware 里再改一下 ADC 的输入。

在这里插入图片描述

再看看 RealTime 中的采样,可以关死,但滤不掉高频干扰

在这里插入图片描述

放大一下,调调电位器看看。

在这里插入图片描述

我们在 hardware 里再改一下 ADC 的输入。

在这里插入图片描述

再看 RealTime,声音能关死,也不会再有高频干扰。

所以,在电磁环境不复杂得情况下,我们通常都会选择 No Low Pass…这个 ADC 输入,如果 电磁环境复杂,则需要用逻辑编程的方式来滤掉干扰。

2:Basic DSP 例程-通过逻辑编程滤高频干扰

在这里插入图片描述

逻辑编程是如何实现滤掉高频干扰的,我们来详细说一说:

在这里插入图片描述

这个就是逻辑编程的图示。ABCD1 的意思是:

当 a>b 时,输出为 C,即 ADC3 采样到的值
当 a<b 时,输出为 D,即为 0

给电位器设最小一个临界值,这个值就是 C,根据实际需求可调。很多产品用的是 0.01,可以满足大部份的需求。

特别注意 1:这个逻辑滤高频干扰电路,适用于所有 ADC 调节的控件,如 crossover、phase 等。

特别注意 2:Basic DSP 这个功能区域里,有很多基础的逻辑算法,如加减乘除,与或,等等,可以充分使用这些算法模块来组成复杂算法,控制 DSP 和外部设备。

3:crossover(12DB 调节)

在这里插入图片描述

特别注意 1:红色方框中的内容,可以通过 View 调出来,建议做开发的时候都给调出来, 是基于目标 DSP 的常用模块,这样调用模块就更好找一些。

crossover 的实现

在这里插入图片描述

我们着重来讲一下这个部分。首先为什么不直接用电位器去控制 crossover 查表模块?这是 因为 ADC 采样值是 5.23 格式,而 lookup 是以查表的方式来调节曲线,我们在 DC1_3 中填的 20 表示这个表里有 20 条曲线,是一个整数格式。所以我们要将他转成整数格式。我们乘 27 格式的 19。为什么不是 20?这是因为机器语言计算是从 0 开始的,0 表示第一条曲线。

在这里插入图片描述

在 SigmaStudio 里,我们点开这个模块的调节窗口,就可以通过里面的参数跟选项,然后通 过电位器来进行调节了,效果非常明显,各位可以自行测试。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4:crossover(24DB调节)

在这里插入图片描述

crossover(24DB 调节)

在这里插入图片描述

这里其实很简单,用 2 个 2 阶低通滤波器,使其 Slop 变成 24DB。调整这 2 个模块的参数, 再用电位器调节。

在这里插入图片描述

5:Phase 0-180 相位可以调

在这个例程里,我会把前几个例程的程序都添加进来。开发板上只做了一个电位器,所以其 他两个处理我虽然也调成了电位器,但对应的是按键,仅做参考。

注意:开发板上的 MP2 和 MP3 设计的并不是电位器,而是按键,所以这里仅仅只做参考, 实际上这俩按键不会起到功效。

在这里插入图片描述

程序详解

crossover,12DB 调节

在这里插入图片描述

这里多做了一个 DCB1,用来把直流滤掉。

在这里插入图片描述

在这里插入图片描述

用逻辑算法模块搭建的 phase 复杂算法

在这里插入图片描述

这个模块是希尔伯特变换,它能定义出任意时刻信号的瞬时频率,相位,幅度,解析出信号通过正弦和余弦相乘后,再相加合并,强制定义出自己想要的相位。

在这里插入图片描述

正弦和余弦的查表值。

特别特别特别注意,这个例程,他的硬件设计是3个电位器,而我的板子只有一个电位器,所以大家参考他的程序实现方式就好了。

参考他的设计思路,参考他的设计思路,参考他的设计思路,重要的话说三遍,这种逻辑算法的例程很难找的!!!

6:输入信道自动检测

本例程将通过寄存器配置,以及程序逻辑编程,实现当输入音源信号后,对应的 LED 灯被点亮,当拔出输入音源,则 LED 灯灭。歌曲播放完的时候,LED 灯也会灭,等下一首开始播放 的时候,LED 灯再被点亮。从而体现输入信道自动检测的功能。

在这里插入图片描述

输入信道自我检测模块说明

在这里插入图片描述

我们把 GPIO_7 作为 LED 输出显示,通过搭建的逻辑电路来实现。

注意:DCB1 为滤掉直流成分,很重要。

7:输入信道自动检测+无信号自动待机

基于上面的输入信道自动检测的例程,我们增加了无信号自动待机功能,通过一系列复杂算 法模块的搭建,最终实现输入信道有信号时,对应的 LED 灯被点亮,当输入信道无信号时, 设定待机时间,时间一到灯熄灭,进入待机状态。 算法模块比较复杂,这里不做更多讲解,可直接采用,或自行研究。

在这里插入图片描述

程序简单注释

在这里插入图片描述

基准 1HZ,用于计数基准频率。

在这里插入图片描述

去掉直流部分。

在这里插入图片描述

输入信号自动检测模块。

在这里插入图片描述

时间设定,目前为 60S。

在这里插入图片描述

LED,用于状态显示。

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

闽ICP备14008679号