您的位置: OpenADSP社区论坛 -> SHARC/TigerSHARC专区 -> 新手上路 -> ADSP21369-AD1835的音频数据格式输入输出问... 
本帖共有1010个阅读者
发表帖子 发表投票 回复主题
ADSP21369-AD1835的音频数据格式输入输出问题
风刀主人(论坛新手)
风刀主人
头衔:社区公民
帮派:无帮无派
帖数:4
金钱:136
积分:6
注册时间:2013/8/27
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
ADSP21369-AD1835的音频数据格式输入输出问题

请教一个浮点数格式化的问题:

#define NORMALIZE_I2F (1.0f/0x7FFFFFF)
#define NORMALIZE_F2I (1.0f*0x7FFFFFF)

程序中进行以下处理:

    temp0 = *(block_ptr+i);
    temp0 = temp0 * NORMALIZE_I2F;
    temp1 = process(temp0);
    temp1 = temp1 * NORMALIZE_F2I;
    *(block_ptr+i) = temp1;

也就是说,想要把AD1835的音频采样数据除以0x7FFFFFF得到-1.0~1.0之间的浮点数,
经过处理之后,再将得到的浮点数,乘以0x7FFFFFF得到整型数,输出到AD1835。
意外的是,经过这样计算之后,有很严重的杂音,......上面的代码,在TI C6748上是正常的。
所以请教各位,当音频数据需要采用浮点数处理时,怎么办?

非常感谢!


Just do it now.
等级:论坛新手 参考IP地址:*.*.*.*
2013/8/27 10:40:33
风刀主人(论坛新手)
风刀主人
头衔:社区公民
帮派:无帮无派
帖数:4
金钱:136
积分:6
注册时间:2013/8/27
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

补充一下,为了避免处理带来杂音,我把其中的处理改成了直通进行测试:

    temp0 = *(block_ptr+i);
    temp0 = temp0 * NORMALIZE_I2F;
    temp1 = temp0; //temp1 = process(temp0);
    temp1 = temp1 * NORMALIZE_F2I;
    *(block_ptr+i) = temp1;


Just do it now.
等级:论坛新手 参考IP地址:*.*.*.*
2013/8/27 10:43:21
风刀主人(论坛新手)
风刀主人
头衔:社区公民
帮派:无帮无派
帖数:4
金钱:136
积分:6
注册时间:2013/8/27
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

经过分析后,问题临时解决,算是暂时绕过去了吧,
跟踪发现被处理的数据是24bit有符号数,(从AD1835的ADC接收到的)
所以只好左移8位,转化为有符号数,再进行归一化运算,
对于输出结果,逆归一化运算后,转成无符号数,再右移8位,
送出到AD1835的DAC通道,经过验证,已经暂时能正常工作了。
程序如下:
    temp0 = *(block_ptr+i);
    temp0 = NORMALIZE_I2F * ((int)(temp0<<8));
    temp1 = temp0; //temp1 = process(temp0);
    temp1 = ((unsigned int)(NORMALIZE_F2I * temp1))>>8;
    *(block_ptr+i) = temp1;
以上是跟踪分析后,硬凑出来的办法,对VDSP实在不熟悉啊,无奈~
盼望有更好的规范的处理方法的朋友,能给指导分享一下。
希望能真正解决之。


Just do it now.
等级:论坛新手 参考IP地址:*.*.*.*
2013/8/27 16:53:30
daviscai(论坛新手)
daviscai
头衔:社区公民
帮派:无帮无派
帖数:3
金钱:105
积分:1
注册时间:2013/5/1
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

ADI的DEMO上也是这样处理的,大概这就是最好的方法了吧


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/9/10 10:34:48
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154162 Call, 1 Queries, Processed in 0.015625 second(s),