OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5591|回复: 5

最近有在研究CODEC2的大佬吗?请教一下

[复制链接]

54

主题

351

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1109
金钱
1109
注册时间
2022-4-20
在线时间
380 小时
发表于 2022-7-7 18:04:30 | 显示全部楼层 |阅读模式
3金钱
我遇到了好几个函数,都只有声明,找不到函数的主体,却能正常调用这个函数,比如这个函数:codec2_decode(codec2, &buffer_decode_1[Txwl_point], bits);   能正常调用,但我搜索了整个工程,发现只有声明,没有主体,我很想知道他具体干了些什么,请问我如何找到这个函数的主体

又菜又爱指点
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2022-7-8 01:14:31 | 显示全部楼层
回复

使用道具 举报

1

主题

385

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1023
金钱
1023
注册时间
2019-9-21
在线时间
269 小时
发表于 2022-7-8 10:27:23 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

4

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2019-2-9
在线时间
42 小时
发表于 2022-8-23 12:06:59 | 显示全部楼层
你好,codec2_decode里调用了codec2_decode_ber。codec2_decode_ber这个函数根据压缩率点用了不同压缩率的decode函数,例如codec2_decode_2400。这个函数我把代码贴在下面
回复

使用道具 举报

0

主题

4

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2019-2-9
在线时间
42 小时
发表于 2022-8-23 12:07:23 | 显示全部楼层
void codec2_decode_2400(struct CODEC2 *c2, short speech[], const unsigned char * bits) {     MODEL   model[2];     int     lsp_indexes[LPC_ORD];     float   lsps[2][LPC_ORD];     int     WoE_index;     float   e[2];     float   snr;     float   ak[2][LPC_ORD+1];     int     i,j;     unsigned int nbit = 0;     COMP    Aw[FFT_ENC];      assert(c2 != NULL);      /* only need to zero these out due to (unused) snr calculation */      for(i=0; i<2; i++)         for(j=1; j<=MAX_AMP; j++)             model[i].A[j] = 0.0;      /* unpack bits from channel ------------------------------------*/      /* this will partially fill the model params for the 2 x 10ms        frames */      model[0].voiced = unpack(bits, &nbit, 1);      model[1].voiced = unpack(bits, &nbit, 1);     WoE_index = unpack(bits, &nbit, WO_E_BITS);     decode_WoE(&model[1], &e[1], c2->xq_dec, WoE_index);      for(i=0; i<LSP_SCALAR_INDEXES; i++) {         lsp_indexes[i] = unpack(bits, &nbit, lsp_bits(i));     }     decode_lsps_scalar(&lsps[1][0], lsp_indexes, LPC_ORD);     check_lsp_order(&lsps[1][0], LPC_ORD);     bw_expand_lsps(&lsps[1][0], LPC_ORD, 50.0, 100.0);      /* interpolate ------------------------------------------------*/      /* Wo and energy are sampled every 20ms, so we interpolate just 1        10ms frame between 20ms samples */      interp_Wo(&model[0], &c2->prev_model_dec, &model[1]);     e[0] = interp_energy(c2->prev_e_dec, e[1]);      /* LSPs are sampled every 20ms so we interpolate the frame in        between, then recover spectral amplitudes */      interpolate_lsp_ver2(&lsps[0][0], c2->prev_lsps_dec, &lsps[1][0], 0.5, LPC_ORD);     for(i=0; i<2; i++) {         lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD);         aks_to_M2(c2->fft_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0,                   c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw);         apply_lpc_correction(&model[i]);         synthesise_one_frame(c2, &speech[N*i], &model[i], Aw);     }      /* update memories for next frame ----------------------------*/      c2->prev_model_dec = model[1];     c2->prev_e_dec = e[1];     for(i=0; i<LPC_ORD; i++)         c2->prev_lsps_dec[i] = lsps[1][i]; }
回复

使用道具 举报

0

主题

4

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2019-2-9
在线时间
42 小时
发表于 2022-8-23 12:09:58 | 显示全部楼层
codec2我移植到了雅特力单片机上,目前实现了录音编码后再解码播放的功能,有兴趣可以一起讨论下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-8 21:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表