日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(Matlab源码)Matlab实现算术编码(Arithmetic coding)超级详解(每一段代码都可以看懂)

發(fā)布時(shí)間:2024/7/23 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (Matlab源码)Matlab实现算术编码(Arithmetic coding)超级详解(每一段代码都可以看懂) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、代碼功能

  • 輸入:一個(gè)字符串
  • 輸出:
    • ? codeword(碼值)
    • ?codeword所占的位數(shù)

2、代碼框圖

3、代碼超詳解

  • ?統(tǒng)計(jì)字符串中的字符種類,調(diào)用函數(shù),放入數(shù)組b中。
b=unique(str1);
  • 統(tǒng)計(jì)每種字符的個(gè)數(shù),放入數(shù)組a中。
for i=1:length(b)a(i)=length(strfind(str1,b(i))); end
  • ?排序,形成對應(yīng)關(guān)系的數(shù)組。排序后,若數(shù)組b中的第一個(gè)元素為字符‘a(chǎn)’, 則數(shù)組a中的第一個(gè)元素為字符‘a(chǎn)’,出現(xiàn)的次數(shù)
for i=1:length(a)-1for j=i+1:length(a)if(a(i)<a(j))t1=a(i);a(i)=a(j);a(j)=t1;t2=b(i);b(i)=b(j);b(j)=t2;endend end
  • 統(tǒng)計(jì)每種字符出現(xiàn)的頻率,放入數(shù)組frequency中。
for i=1:length(a)frequency(i) = a(i)/sum(a); end

?根據(jù)頻率分配概率范圍,范圍高值放入數(shù)組high中,范圍低值放入數(shù)組low中。

low(1)=0; for i = 1:length(frequency)if i==1high(i)=frequency(i);elselow(i)=frequency(i-1)+low(i-1);high(i)=low(i)+frequency(i);end end

編碼

%編碼 low_value=0; %初始化 high_value=1; %初始化 range=high_value-low_value; %初始化 for i = 1:length(str1) %遍歷字符串中的每一個(gè)元素,使用for循環(huán)語句。d=strfind(b,str1(i)); %找到字符串中的字符,在數(shù)組d中的角標(biāo)%算術(shù)編碼high_value = low_value+ range*high(d);low_value = low_value+range*low(d);range=high_value-low_value;%編碼后數(shù)據(jù)處理if i==length(str1)ave=(high_value+low_value)/2;ave_str=num2str(ave,length(str1)); %把數(shù)字轉(zhuǎn)成字符串low_value_str=num2str(low_value,length(str1)); %把數(shù)字轉(zhuǎn)成字符串high_value_str=num2str(high_value,length(str1)); %把數(shù)字轉(zhuǎn)成字符串%當(dāng)ave_str與low_value_str對應(yīng)位的元素不一樣時(shí)%截去ave_str不一樣元素后面的字符for ii= 3: length(low_value_str)if low_value_str(ii) ~= high_value_str(ii)ave_str((ii+1):end)=[];break;endii=ii+1; endend end%把a(bǔ)ve_str值賦給codeword codeword=ave_str %計(jì)算codeword占用的位數(shù) bits=-log2(range)

?

  • 整個(gè)代碼地址

? ? ? ?Matlab實(shí)現(xiàn)算術(shù)編碼

4、代碼缺點(diǎn)

  • 這個(gè)代碼可以實(shí)現(xiàn)短字符串的編碼,對于長字符串的編碼,會出現(xiàn)underflow。如何解決underflow, 這篇博客有專題研究

? ? ? ?算術(shù)編碼(arithmetic coding)的underflow問題

總結(jié)

以上是生活随笔為你收集整理的(Matlab源码)Matlab实现算术编码(Arithmetic coding)超级详解(每一段代码都可以看懂)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。