赞
踩
作者的话
做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,用于状态显示。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。