标题:
Matlab源码:单片机播放语音的ADPCM编解码在STC15F上实现
[打印本页]
作者:
jackwugaopei
时间:
2018-3-20 09:54
标题:
Matlab源码:单片机播放语音的ADPCM编解码在STC15F上实现
最近做了个关于单片机播放语音的ADPCM编解码在STC15F408上实现,
ADPCM编码子程序,可直接移植使用,已经测试OK。
0.png
(46.29 KB, 下载次数: 74)
下载附件
2018-3-20 16:24 上传
Matlab源程序如下:
function adpcm_y = adpcm_encoder(raw_y)
% ADPCM编码子程序
% Edit by L7
IndexTable = [-1, -1, -1, -1, 2, 4, 6, 8, -1, -1, -1, -1, 2, 4, 6, 8];
StepSizeTable = [7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 21, 23, 25, 28, 31, 34, 37, 41, 45, 50, 55, 60, 66, 73, 80, 88, 97, 107, 118, 130, 143, 157, 173, 190, 209, 230, 253, 279, 307, 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358, 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767];
prevsample = 0;
previndex = 1;
Ns = length(raw_y);
n = 1;
raw_y = 32767 * raw_y; % 16-bit operation
while (n <= Ns)
predsample = prevsample;
index = previndex;
step = StepSizeTable(index);
diff = raw_y(n) - predsample;
if (diff >= 0)
code = 0;
else
code = 8;
diff = -diff;
end
tempstep = step;
if (diff >= tempstep)
code = bitor(code, 4);
diff = diff - tempstep;
end
tempstep = bitshift(tempstep, -1);
if (diff >= tempstep)
code = bitor(code, 2);
diff = diff - tempstep;
end
tempstep = bitshift(tempstep, -1);
if (diff >= tempstep)
code = bitor(code, 1);
end
diffq = bitshift(step, -3);
if (bitand(code, 4))
diffq = diffq + step;
end
if (bitand(code, 2))
diffq = diffq + bitshift(step, -1);
end
if (bitand(code, 1))
diffq = diffq + bitshift(step, -2);
end
if (bitand(code, 8))
predsample = predsample - diffq;
else
predsample = predsample + diffq;
end
if (predsample > 32767)
predsample = 32767;
elseif (predsample < -32768)
predsample = -32768;
end
index = index + IndexTable(code+1);
if (index < 1)
index = 1;
end
if (index > 89)
index = 89;
end
prevsample = predsample;
previndex = index;
adpcm_y(n) = bitand(code, 15);
%adpcm_y(n) = code;
n = n + 1;
end
复制代码
所有资料51hei提供下载:
ADPCM.rar
(409.27 KB, 下载次数: 34)
2018-3-20 09:53 上传
点击文件名下载附件
ADPCM编码
下载积分: 黑币 -5
作者:
liushiming82
时间:
2022-7-9 12:10
这个程序是什么意思呀, 没有明白
作者:
尘土的飞扬
时间:
2022-7-9 13:16
没有注释的程序真的很难看,
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1