打印

cortex-m3的4.8K bit码率的声码器方案

[复制链接]
2087|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mybao|  楼主 | 2012-6-23 11:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mybao 于 2012-6-24 10:10 编辑

语音编解码:4.8K bit码率
需要小于50K byte的ROM,5K byte的RAM
消耗40M的cpu时钟(编码)。
平台:cortex-m3

全球首发,有感兴趣的请跟贴,
沙发
ilovezeno| | 2012-6-23 14:39 | 只看该作者
相比官方的语音库有啥优势?

使用特权

评论回复
板凳
mybao|  楼主 | 2012-6-23 15:25 | 只看该作者
本帖最后由 mybao 于 2012-6-24 10:11 编辑

1:这个只要5K的RAM
2:只需要40M的时钟平率
3:ST的SPEEX库对运算进行大量简化,你可以看看加法、减法、左移运算,没做一次都需要溢出保护的,也就是饱和运算,你看看官方库有没有,如果没有饱和运算,编解码可靠性没有保证,语音信号很强的时候,会有破音。

使用特权

评论回复
地板
mybao|  楼主 | 2012-6-23 15:30 | 只看该作者
按照这三点对比下,你就清楚了

使用特权

评论回复
5
mybao|  楼主 | 2012-6-23 15:35 | 只看该作者
本帖最后由 mybao 于 2012-6-24 10:08 编辑

举个加法例子
speex的库,简化版
#define ADD32(a,b) ((a)+(b))

标准版
Word32 ADD32(Word32 L_var1, Word32 L_var2)
{
    Word32 L_var_out;

    L_var_out = L_var1 + L_var2;

    if (((L_var1 ^ L_var2) & 0x80000000) == 0)
    {
        if ((L_var_out ^ L_var1) & 0x80000000)
        {
            L_var_out = (L_var1 < 0) ? 0x80000000 : 0x7fffffff;
        }
    }

    return (L_var_out);
}

使用特权

评论回复
6
ilovezeno| | 2012-6-24 19:14 | 只看该作者
饱和指令用汇编应该能比你这边C实现快多了。。。。

使用特权

评论回复
7
mybao|  楼主 | 2012-6-24 20:51 | 只看该作者
我只是举个例子说明这个和官方库的差别,我没做任何简化。
回答2楼的问题。

CORTEX-M3的加减法是没有饱和运算的,饱和移位运算也是有限制的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

85

主题

759

帖子

3

粉丝