久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4361|回復: 2
打印 上一主題 下一主題
收起左側

Matlab源碼:單片機播放語音的ADPCM編解碼在STC15F上實現

[復制鏈接]
跳轉到指定樓層
樓主
最近做了個關于單片機播放語音的ADPCM編解碼在STC15F408上實現,
ADPCM編碼子程序,可直接移植使用,已經測試OK。



Matlab源程序如下:
  1. function adpcm_y = adpcm_encoder(raw_y)

  2. % ADPCM編碼子程序
  3. % Edit by L7


  4. IndexTable = [-1, -1, -1, -1, 2, 4, 6, 8, -1, -1, -1, -1, 2, 4, 6, 8];
  5.          
  6. 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];

  7. prevsample = 0;
  8. previndex = 1;

  9. Ns = length(raw_y);
  10. n = 1;

  11. raw_y = 32767 * raw_y;          % 16-bit operation

  12. while (n <= Ns)
  13.     predsample = prevsample;
  14.     index = previndex;
  15.     step = StepSizeTable(index);

  16.     diff = raw_y(n) - predsample;
  17.     if (diff >= 0)
  18.         code = 0;
  19.     else
  20.         code = 8;
  21.         diff = -diff;
  22.     end

  23.     tempstep = step;
  24.     if (diff >= tempstep)
  25.         code = bitor(code, 4);
  26.         diff = diff - tempstep;
  27.     end
  28.     tempstep = bitshift(tempstep, -1);
  29.     if (diff >= tempstep)
  30.         code = bitor(code, 2);
  31.         diff = diff - tempstep;
  32.     end
  33.     tempstep = bitshift(tempstep, -1);
  34.     if (diff >= tempstep)
  35.         code = bitor(code, 1);
  36.     end

  37.     diffq = bitshift(step, -3);
  38.     if (bitand(code, 4))
  39.         diffq = diffq + step;
  40.     end
  41.     if (bitand(code, 2))
  42.         diffq = diffq + bitshift(step, -1);
  43.     end
  44.     if (bitand(code, 1))
  45.         diffq = diffq + bitshift(step, -2);
  46.     end

  47.     if (bitand(code, 8))
  48.         predsample = predsample - diffq;
  49.     else
  50.         predsample = predsample + diffq;
  51.     end

  52.     if (predsample > 32767)
  53.         predsample = 32767;
  54.     elseif (predsample < -32768)
  55.         predsample = -32768;
  56.     end

  57.     index = index + IndexTable(code+1);

  58.     if (index < 1)
  59.         index = 1;
  60.     end
  61.     if (index > 89)
  62.         index = 89;
  63.     end

  64.     prevsample = predsample;
  65.     previndex = index;

  66.     adpcm_y(n) = bitand(code, 15);
  67.     %adpcm_y(n) = code;
  68.     n = n + 1;
  69. end
復制代碼

所有資料51hei提供下載:
ADPCM.rar (409.27 KB, 下載次數: 34)


評分

參與人數 3黑幣 +5 收起 理由
jellypejic + 1 絕世好帖!
supernovadada + 3 共享資料的黑幣獎勵!
nilsqc + 1

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:3666 發表于 2022-7-9 12:10 | 只看該作者
這個程序是什么意思呀, 沒有明白
回復

使用道具 舉報

板凳
ID:1024371 發表于 2022-7-9 13:16 | 只看該作者
沒有注釋的程序真的很難看,
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日一区二区 | www.婷婷| 黄色一级毛片 | 亚洲免费久久久 | 在线免费观看亚洲 | 日韩α片 | 第一色在线 | 欧美久久久 | 嫩草网 | 国产精品成人在线观看 | 亚洲一区二区三区视频 | 久草新在线 | 视频一区二区在线观看 | 97久久久久久 | 在线伊人网 | 欧美久久久久久久久 | 一级毛片免费完整视频 | 在线观看视频一区 | 欧美成人精品一区二区男人看 | 欧美在线一区二区三区 | 无码一区二区三区视频 | 欧美黑人一级爽快片淫片高清 | 久久精品久久综合 | 久久久蜜桃一区二区人 | 久久91av| 成人在线免费电影 | 中文字幕人成乱码在线观看 | 一区二区三区影院 | 亚洲一区中文 | 亚洲日韩中文字幕 | 国产精品日韩欧美一区二区三区 | 国产日产精品一区二区三区四区 | 日本不卡在线观看 | 亚洲一区在线免费观看 | 色欧美片视频在线观看 | 欧美极品少妇xxxxⅹ免费视频 | 亚洲免费精品 | 日韩中文一区二区三区 | 亚洲国产精品一区二区三区 | 国产精品免费在线 | 亚洲精品片 |