使用C语言实现PCM数据编码成ADPCM数据的完整代码
时间: 2023-03-08 11:16:41 浏览: 309
实现PCM数据编码成ADPCM数据的完整代码如下:
#include <stdio.h>
#include <stdint.h>
int16_t pcm_data[256]; //存放PCM数据
int16_t adpcm_data[256]; //存放ADPCM数据
int16_t diff=0; //差值
int16_t step=7;//步长
int16_t index=0; //索引
//编码函数
void encode_adpcm(){
for(int i=0;i<256;i++){
int16_t x=pcm_data[i];
int16_t delta=x-diff; //计算差值
int16_t sign=delta>0?1:0; //计算符号位
int16_t temp=sign?delta:-delta; //取绝对值
int16_t q=(temp*8+step)/(2*step); //计算量化系数
if(q>7) q=7; //限幅
if(q<0) q=0; //限幅
adpcm_data[i]=(sign<<7)|(index<<4)|q; //获取ADPCM编码
diff+=(step*delta_table[q])/(8*2); //更新差值
if(diff<-32768) diff=-32768; //限幅
if(diff>32767) diff=32767; //限幅
step=step_table[index]; //更新步长
index+=index_table[q]; //更新索引
if(index>88) index=88; //限幅
if(index<0) index=0; //限幅
}
}
阅读全文