G729编解码调用

G729进行编码时,每次只能编码160个字节,编码后为10个字节大小,压缩比固定为16:1。
如下代码有个前提,输入的音频裸数据为16k采样率,位深16,单通道,20ms发送一帧,则一帧音频数据为16k x 16 / 8 / (1000 / 20) = 640字节。重采样为8k之后,一帧为320字节。
因为每次只能编码160个字节,所以要编码320字节的数据,需要分两次进行,故需要像下面调用了两次audio_encode_g729和audio_decode_g729。

//编码
if (rl_strcasecmp("G729", enc_name) == 0)
{
	unsigned char pcm_out[1500];
	unsigned char rec_buf[320];
	audio_resample_16k_to_8k(rec_8_buf, rec_16_buf, 640);
	audio_encode_g729((short*)rec_8_buf, 80, (pcm_out + 12));//RTP 头长度12
	audio_encode_g729((short*)(rec_8_buf + 160), 80, (pcm_out + 12 + 10));//编码后为10字节
}

//解码
if(rl_strcmp("G729", dec_name) == 0)
{
	audio_decode_g729(encode_buf, 10, (short *)(play_8_buf),(int*)&speechType);
	audio_decode_g729((encode_buf + 10), 10, (short *)(play_8_buf+ 160),(int*)&speechType);
	audio_resample_8k_to_16k(play_16_buf, play_8_buf, 320);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
BCH码是一种重要的纠错编码,常用于无线通信和数字电视等领域。在MATLAB中,我们可以自己编写BCH码的编解码程序,并进行误码率仿真。 以下是一个简单的BCH码仿真程序,它实现了BCH码的编码和解码,并绘制了误码率曲线。程序中使用的是GF(2^m)有限域,其中m为BCH码的参数。 ``` clear all; % BCH码参数 m = 4; % GF(2^m) n = 2^m - 1; % 码长 t = 3; % 最大可纠错位数 % 生成BCH码的生成多项式 g = bchgenpoly(n,t); % 随机生成一些信息位 k = n - length(g) + 1; % 信息位数 data = randi([0 1],1,k); % 编码 code = bchenc(data,n,g); % 构造信道,这里假设是BSC信道 p = 0.1; % 误码率 channel = comm.BSC('ErrorRate',p); % 发送码字并进行误码率仿真 EbNo = 0:2:10; % 信噪比范围 ber = zeros(size(EbNo)); % 误码率 for i = 1:length(EbNo) snr = EbNo(i) + 10*log10(k/n); % 计算信噪比 rxCode = step(channel,code); % 发送并接收码字 % 解码 decoded = bchdec(rxCode,n,g,t); % 统计误码率 [~,ber(i)] = biterr(data,decoded); end % 绘制误码率曲线 semilogy(EbNo,ber,'-o'); xlabel('Eb/No (dB)'); ylabel('Bit Error Rate'); title('BCH Code Performance'); ``` 在这个程序中,我们首先生成了BCH码的生成多项式,然后随机生成一些信息位,并对它们进行编码。接着,我们构造了一个BSC信道,并设置其误码率为p。在每个信噪比点上,我们对发送的码字进行解码,并统计误码率。最后,我们绘制了误码率曲线。 需要注意的是,BCH码的编解码需要用到GF(2^m)有限域运算,因此我们需要自己实现GF(2^m)有限域的加、减、乘和除等运算。这些运算可以用多项式运算来实现,具体的实现方法可以参考相关的资料。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值