This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于AIC3106通信问题



TI工程师您好,现在用OMAPL137做音频信号处理,有两个问题:

1)想问一下音频信号在AIC3106和McASP之间的传递格式只能是Q15定点表示吗?我之前用浮点数试了一下不行。

2)接收到的音频信号做处理,这其中用到一些算法,请问算法中的运算只能用定点的运算规则吗?感觉定点运算很麻烦啊。

非常感谢!望指教。

  • #1. 对于ADC,DAC来说,其输出输出值只是个标量,好像没有见过哪个ADC可以设置其输出数据格式的问题,再说ADC输出数据的位宽代表其精度,也并不需要用另外的定标方式来扩充其数值范围。所以ADC,DAC的数据就是整数。

    #2. 中间算法可以采用数据类型转换以避免中间结果数据溢出,提高精度等,但在送往DAC前,还是要转换成整形,这个二进值就是代表多个DAC的“刻度”,毕竟DAC并不会数小数点哪儿,还做数据类型转换。

  • Tony Tang 说:

    #1. 对于ADC,DAC来说,其输出输出值只是个标量,好像没有见过哪个ADC可以设置其输出数据格式的问题,再说ADC输出数据的位宽代表其精度,也并不需要用另外的定标方式来扩充其数值范围。所以ADC,DAC的数据就是整数。

    #2. 中间算法可以采用数据类型转换以避免中间结果数据溢出,提高精度等,但在送往DAC前,还是要转换成整形,这个二进值就是代表多个DAC的“刻度”,毕竟DAC并不会数小数点哪儿,还做数据类型转换。

    感谢Tony Tang的回答,您说的我明白了。不过还是有些疑惑,音频数据基本都是浮点型小数吧,那么您所说的整数和真实的浮点数是怎么个对应关系呢?我所知的有IEEE的单精度浮点数表示法,但是需要32bit。再者就是把浮点数用定点表示,也就是Q格式,我自己也转化了一下,例程给的sin数组应该是Q15格式的,不知道我所说的是否正确?

  • Qn是算法当中用定点实现浮点运算的一种处理方式(由编程人员自己决定),对于ADC, DAC的输出,输入数据来说没有这个说法。

    关于ADC,DAC的数据类型可以看一下这个文章:

    http://wenku.baidu.com/link?url=YlgpsA-7WXfliJW50_wEp950s_4ovl38d6bMRQhG_7cvIAb8Ku5IYj9XfW7AWiEIfNx0BSIfv_SOTx23wzyu_D6vbsVwJfPdsK_gRvetoqS

  • Tony Tang 说:

    Qn是算法当中用定点实现浮点运算的一种处理方式(由编程人员自己决定),对于ADC, DAC的输出,输入数据来说没有这个说法。

    关于ADC,DAC的数据类型可以看一下这个文章:

    http://wenku.baidu.com/link?url=YlgpsA-7WXfliJW50_wEp950s_4ovl38d6bMRQhG_7cvIAb8Ku5IYj9XfW7AWiEIfNx0BSIfv_SOTx23wzyu_D6vbsVwJfPdsK_gRvetoqS

    您好,感谢Tony Tang耐心的回答。不过我还是有些没想明白,这样吧,您解释一下OMAPL137音频例程aic3106_tone_headphone里发1000Hz的声音为什么要这么给值吧?就是这个16bit数是什么类型的数据?接收的时候是不是和这个类似的?非常感谢!

    static Int16 sinetable[48] = {
    0x0000, 0x10b4, 0x2120, 0x30fb, 0x3fff, 0x4dea, 0x5a81, 0x658b,
    0x6ed8, 0x763f, 0x7ba1, 0x7ee5, 0x7ffd, 0x7ee5, 0x7ba1, 0x76ef,
    0x6ed8, 0x658b, 0x5a81, 0x4dea, 0x3fff, 0x30fb, 0x2120, 0x10b4,
    0x0000, 0xef4c, 0xdee0, 0xcf06, 0xc002, 0xb216, 0xa57f, 0x9a75,
    0x9128, 0x89c1, 0x845f, 0x811b, 0x8002, 0x811b, 0x845f, 0x89c1,
    0x9128, 0x9a76, 0xa57f, 0xb216, 0xc002, 0xcf06, 0xdee0, 0xef4c
    };

     

  • 有符号数,即二进制补码.

    有兴趣的话把上面的数值连起来,就是一个正弦波。

  • Tony Tang 说:

    有符号数,即二进制补码.

    有兴趣的话把上面的数值连起来,就是一个正弦波。

    嗯,画出来是正弦波,这些数转化为十进制是

    {  0 4276 8480 12539 16383 19946 23169 25995 28376 30271 31649 32485 32765 32485 31649 30271 28376 25995 23169 19946 16383 12539 8480 4276 0 -4276 -8480 -12539 -16383 -19946 -23169 -25995 -28376 -30271 -31649 -32485 -32765 -32485 -31649 -30271 -28376 -25995 -23169 -19946 -16383 -12539 -8480 -4276 }

    这样给值是因为ADC设置成有符号16bit,范围是-32768到32767,然后-32768和32767分别对应-1和1,是这样量化的吗?

  • 如果按"归一化" 可以这么说(这个1代表参考电压),我更愿意说最大值代表参考电压*1,最小的负值代表-1*参考电压。

  • 谢谢您,明白了!感谢耐心回答!