首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
DSP技术
» Adaptive Filtering 功能详解及代码实现
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
Adaptive Filtering 功能详解及代码实现
发短消息
加为好友
forsuccess
当前离线
UID
871057
帖子
6281
精华
0
积分
3141
阅读权限
90
在线时间
282 小时
注册时间
2012-2-21
最后登录
2015-6-23
论坛元老
UID
871057
性别
男
1
#
打印
字体大小:
t
T
forsuccess
发表于 2014-5-5 22:08
|
只看该作者
Adaptive Filtering 功能详解及代码实现
德州仪器
,
半导体
,
解码器
Texas instruments 推出的超低功耗miniDSP 音频Codec 集成了miniDSP 内核,可在耗电极低的工作状态下为电池供电的便携式产品提供高性能的语音及音乐处理能力。AdaptiveFiltering 是miniDSP 的一项重要功能。本文详细介绍了该功能的使用方法及注意事项,并给出了示例代码以供参考。
1 miniDSP Codec 简介
德州仪器半导体公司(Texas Instruments)推出的内嵌miniDSP 的音频编解码器(简称miniDSP Codec)在普通音频编解码器的基础上提供了强大、灵活的低功耗DSP 引擎来满足消费类电子应用中对音质、音效的需求。
miniDSP 的内核是完全可编程的,支持许多录音和回放的专用算法。例如:多段均衡(Multi-Band Equalization)、动态噪声消除(Dynamic Noise Filter)、回声消除(Echo Cancellation)等。miniDSP Codec 具有非常优秀的电源管理功能,在提供强大的音效处理能力的同时兼顾了低功耗特性,非常适合电池供电的便携式产品应用,例如智能手机,多媒体播放器,导航仪,电子相框等。
TLV320AIC3254(简称AIC3254)是miniDSP Codec 的典型器件,本文将基于该器件展开分析。其他miniDSP Codec 均具有类似的架构、功能及使用方法。请用户参考相应产品的器件手册获得详细信息。
1.1 miniDSP Codec 架构
以AIC3254 为例,该miniDSP Codec 集成了两个miniDSP 内核,如图1 所示,miniDSP-A 位于ADC 信号路径上,主要负责ADC 采样后的数字音频流处理。miniDSP-D 位于DAC 路径上,主要负责I2S 总线输入的数字音频流处理。miniDSP-A 和miniDSP-D 之间有互联的内部数据总线可用于数据交换及共享代码空间。
图 1. miniDSP 音频Codec 内部简化框图
除了Audio Codec 以外,某些ADC、DAC 也拥有miniDSP 内核,本文介绍的部分内容也适用于该类器件。请参考相应器件的手册获得详细信息。
1.2 miniDSP 内存架构及寄存器地址
miniDSP-A 和D 分别有自己独立的内存空间。每个DSP 的内存分为指令内存(Instruction RAM)、数据内存(Data RAM)和系数内存(Coefficient RAM)三类。
• 指令内存用于存储miniDSP 的运行指令及程序。
• 数据内存用来暂存miniDSP 运行时的运算结果等临时数据。
• 系数内存用来存储miniDSP 音效、增益等控件的参数数据。
指令内存和系数内存均可通过映射的I2C 或SPI 地址来进行读写。Codec 上电时主控芯片需要通过I2C 或SPI 接口将miniDSP 程序下载到指令内存和系数内存以供运行。以TLV320AIC3254 为例,指令内存、系数内存的寄存器映射地址及功能如表1 所示:
表 1. TLV320AIC3254 内存架构及寄存器地址
从寄存器映射地址可发现,miniDSP-A 和 miniDSP-D 的系数内存控件均被等分成两块:Buffer-A和Buffer-B。当Adaptive Filtering 功能关闭时,Buffer-A 和Buffer-B 是一个整体,连续的存储空间。当Adaptive Filtering 功能开启时,两个Buffer 的内容是完全同步并相互备份的。这种内存架构是Adaptive Filtering 功能的基础。
注 意:
当用户不需要Adaptive Filtering 功能时,建议关闭该功能。系数内存(Coefficent
RAM)将不会划分Buffer-A 和Buffer-B。能提供多一倍的系数内存给用户使用。2 Adaptive Filtering
2.1 功能概述
Adaptive Filtering 是一种在miniDSP 运行时的滤波器、音效控件、混音比例等参数的实时切换功能。启动该功能后主控芯片可以通过控制端口对系数内存内的参数数据进行实时更新。
当miniDSP Codec 运行在non-Adaptive Filtering 模式下,系数内存中的滤波器、音效控件、混音比例等参数将被锁定,无法实时更改。这种模式适用于不需要实时调节参数的场合。miniDSP 的代码将在启动时一次性被下载并执行,运行过程中不会进行任何miniDSP 系数内存参数的修改。
当Adaptive Filtering 功能启动后,系数内存将启用缓存(Buffer-A 和Buffer-B)设置。允许用户在miniDSP 工作时实时修改系数内存中的参数设置,从而满足用户实时调节音效等参数的需求。例如,启用了Adaptive Filtering 模式后,用户可在听歌过程中将EQ 均衡器从流行(POP)转换为古典(Classic)模式,该效果实时产生作用无需中断播放。
2.2 Adaptive Filtering 控制寄存器
Adaptive Filtering 功能是通过特定寄存器来控制和实现的,以AIC3254 的miniDSP-A 为例,表2列出了miniDSP-A 的Adaptive Filtering 控制寄存器的含义。用户可通过D2 位开启或关闭miniDSP-A 的Adaptive Filtering 功能。D1 位用来指示miniDSP 运行时哪一个Buffer 被锁定,用户可读取该位来确认Buffer 使用的状态。D0 位用来控制Buffer 的切换,向D0 位写入1 后miniDSP-A 会切换到新的Buffer 进行工作,并向控制端口释放原先使用的Buffer。切换完毕后D0的值会自动清零,用户可通过循环读取D0 的值来判断Buffer 的切换是否已经完成。
表 2. AIC3254 miniDSP-A Adaptive Filtering 控制寄存器(P8_R1)
注 意:
每个支持Adaptive Filtering 功能的miniDSP 都有自己的Adaptive Filtering 控制寄存器,miniDSP-A 和miniDSP-D 的Adaptive Filtering 功能是独立运行的。
2.3 系数内存(Coefficient Memory)存取规范
在介绍Adaptive Filtering 的具体流程前,首先需要了解系数内存存取的规范。
在non-Adaptive Filtering 模式下,系数内存在miniDSP 停止运行时可通过控制端口(I2C/SPI)直接存取。在miniDSP 工作时,系数内存将被锁定只有miniDSP 能够存取。表3 给出了该模式下的存取规范供参考:
表 3. 在non-Adaptive Filtering 模式下系数内存的存取规范
当启动了Adaptive Filtering 模式,系数内存将分为Buffer-A 和Buffer-B 两块,两块内存内容完全一致,相互备份。miniDSP 工作时将锁定Buffer-A 或者Buffer-B 其中的一个,从中获取参数信息。控制端口(I2C 或SPI)只可以读写未锁定的另一块Buffer。表4 给出了该模式下的存取规范供参考:
表 4. Adaptive Filtering 模式下系数内存的存取规范
为了简化Buffer 切换的操作,在miniDSP 运行时,控制端口访问系数内存的地址均映射到未锁定的Buffer 内。例如控制端口向锁定Buffer-A 某地址写入的参数将直接更新未锁定Buffer-B 内的镜像参数。这个设置允许用户在切换Buffer 后无需修改写入地址即可向释放出来的Buffer 内存更新参数。注意在miniDSP 停止运行的时候,Buffer-A 和Buffer-B 的页面地址均恢复正常模式,用户需使用它们各自的地址进行参数更新。2.4 Adaptive Filtering 控制流程
本节详细介绍了如何使用Adaptive Filtering 功能来进行系数内存内参数的更新操作。附录A 给出了推荐的Adaptive Filtering 更新参数操作时序图供参考。
2.4.1 miniDSP 停止时的参数更新流程
如2.3 节所示,在miniDSP 停止运行时,控制端口可以存取所有的系数内存地址(Buffer-A 和 Buffer-B)。则该模式下参数更新的流程为:
1. 通过控制接口直接向Buffer-A 写入新参数。
2. 切换到Buffer-B 所在页面,向Buffer-B 写入同样参数。使Buffer-A 和Buffer-B 保持同步。
以AIC3254 为例,若需要更新的参数在miniDSP-A 的Buffer-A 内,其地址为p8_r44,新参数值为0xAB。则更新流程为:
1. 向p8_r44 写入新参数0xAB。
2. 向p26_r44 写入新参数0xAB。(p26_r44 是p8_r44 的镜像寄存器)
2.4.2 miniDSP 运行时的参数更新流程
miniDSP 运行时,系数内存的其中一个Buffer 被miniDSP 锁定,控制端口无法直接修改该Buffer内的参数。用户需要先更新未锁定Buffer 内的参数,然后通知miniDSP 切换Buffer 来使用新的参数。切换后原先被锁定的Buffer 将被释放,用户需要对它更新相同的参数以确保两块Buffer 的参数同步。
在miniDSP 运行时,系数内存参数更新的流程如下:
1. 通过控制端口向目标寄存器更新参数。
2. 向Adaptive Filtering 寄存器写入Buffer 切换命令。
3. 回读Adaptive Filtering 寄存器状态位,判断Buffer 切换是否完成。
4. 确认切换完成后,再次向目标寄存器更新参数确保Buffer-A 和Buffer-B 参数同步。
以AIC3254 为例,若需要更新的参数在miniDSP-A 的Buffer-A 内,其地址为p8_r44,新参数值为0xAB。则更新流程为:
1. 向p8_r44 写入新参数0xAB。
2. 将p8_r1_d0,Adaptive Filtering 寄存器的D0 位置1,执行Buffer 切换操作。
3. 回读p8_r1_d0,Adaptive Filtering 寄存器状态位,判断Buffer 切换是否完成。
4. 确认切换完成后,再次向目标寄存器p8_r44 更新参数0xAB,确保Buffer-A 和Buffer-B参数同步。
3 总结
本文详细介绍了miniDSP Codec 的Adaptive Filtering 功能的使用方法,并以AIC3254 为例给出了详细的操作步骤和示例代码。在实际使用中,用户需要注意准确的获取并判断miniDSP 工作状态,选择正确的操作流程来完成参数的切换和更新。
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议