資源簡介
######Matlab實現算術編碼,代碼功能:輸入一個字符串,輸出編碼和編碼所需位數################

代碼片段和文件信息
clearclc;
format?long?g;
str1_1=[‘DIGITAL?AUDIO?TECHNOLOGY?AND?APPLICATION‘];
str1_2=[‘DIGITAL?AUDIO?TEC‘];
str1_3=[‘AILAILBABA‘];
str1=str1_3;
%字符
b=unique(str1);
%統計字符個數
for?i=1:length(b)
????a(i)=length(strfind(str1b(i)));
end
%排序
for?i=1:length(a)-1
????for?j=i+1:length(a)
????????if(a(i)????????????t1=a(i);
????????????a(i)=a(j);
????????????a(j)=t1;
????????????t2=b(i);
????????????b(i)=b(j);
????????????b(j)=t2;
????????end
????end
end
%求概率
for?i=1:length(a)
????frequency(i)?=?a(i)/sum(a);
end
%求范圍?
low(1)=0;
for?i?=?1:length(frequency)
????if?i==1
????????high(i)=frequency(i);
????else
????????low(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)?%遍歷字符串中的每一個元素,使用for循環語句。
????
?????d=strfind(bstr1(i));?%找到字符串中的字符,在數組d中的角標
?????
?????%算術編碼
?????high_value?=?low_value+?range*high(d);
?????low_value?=?low_value+range*low(d);
?????range=high_value-low_value;
?????
?????%編碼后數據處理
?????if?i==length(str1)
?????????ave=(high_value+low_value)/2;
?????????ave_str=num2str(avelength(str1));?%把數字轉成字符串
?????????low_value_str=num2str(low_valuelength(str1));?%把數字轉成字符串
?????????high_value_str=num2str(high_valuelength(str1));?%把數字轉成字符串
?????????
?????????%當ave_str與low_value_str對應位的元素不一樣時
?????????%截去ave_str不一樣元素后面的字符
?????????for?ii=?3:?length(low_value_str)
?????????????if?low_value_str(ii)?~=?high_value_str(ii)
??????????????????ave_str((ii+1):end)=[];
??????????????????break;
?????????????end
?????????????ii=ii+1;???????????
?????????end
?????end
end
%把ave_str值賦給codeword
codeword=ave_str
%計算codeword占用的位數
bits=-log2(range)
%編碼后的高低范圍
?high_value
?low_value
?%ave
???
%?range
%?b??字符
%?a??出現的次數
%?frequency??出現的頻率
%?low?低位值
%?high?高位值
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2051??2018-11-16?14:56??overflow.m
-----------?---------??----------?-----??----
?????????????????2051????????????????????1
- 上一篇:dijkstra算法代碼
- 下一篇:邊界提取,邊界連接,Matlab
評論
共有 條評論