Matlab 夏農編碼

2021-10-01 03:12:20 字數 1316 閱讀 7195

資訊理論實驗課第乙個作業,是用matlab實現夏農編碼。拼拼湊湊刪刪改改做出了乙個,但是還不是很理想,陣列不知道怎麼轉換為字串拼接起來= =。

%夏農編碼

%output:二進位制編碼code

%input:信源分布p

function shannon(p)

n = length(p);%信源符號數

p = sort(p,'descend');%降序排列

f = zeros(1,n);%累加概率序列

for i=2:n

f(i)=f(i-1)+p(i-1);

endl = zeros(1,n);%碼長序列

for i=1:n

l(i)=ceil(-log2(p(i)));%向上取整

enddisp('最終編碼結果:');

for i=1:n

f = max(l(i));

w=trans(f(i),f);

for j=1:l(i)

code(j)=w(j);

enddisp([num2str(p(i)),'->',num2str(code)]);

end

其中十進位制轉二進位制的**:

(×2取整)

%十進位制轉換為二進位制

function w = trans( f,f )

for i=1:f

temp=f.*2;

if(temp<1)

w(i)=0;

f=temp;

else

f=temp-1;

w(i)=1;

endend

一道老師給的例題:

三、程式設計實現下列習題:

對於離散無記憶信源

進行二進位制編碼。

主程式及執行結果:

>> p=[0.20 0.19 0.18 0.17 0.15 0.10 0.01]

p = 0.2000 0.1900 0.1800 0.1700 0.1500 0.1000 0.0100

>> shannon(p)

最終編碼結果:

0.2->0 0 0

0.19->0 0 1

0.18->0 1 1

0.17->1 0 0

0.15->1 0 1

0.1->1 1 1 0

0.01->1 1 1 1 1 1 0

對= =最後編碼結果死活轉不成拼接好的字串就很無語。

夏農編碼python實現

依舊是資訊理論的作業,就放上來記錄一下!import math n int input 請輸入信源符號的個數 p 碼字概率 p sum 累加概率 p len 碼字長度 ex code a 0 b 0for i in range 1 n 1 c input 請輸入第 str i 個信源符號的概率 p....

c語言實現夏農編碼

1 設計思想 為了設計的方便,我們需要在這個程式裡設計乙個結構體,以用來儲存信源符號 信源符號概率等引數,將每一組引數看成乙個結構體來看待,這樣我們就可以隨時地呼叫。2 設計流程 主函式部分,我們先接收要輸入的信源符號個數,再接收每個信源符號的名稱以及他的概率。主函式設計好後,我們將各功能的函式分成...

python學習之實現夏農編碼

author wangshuna time 2021.1.22 import numpy from numpy.core import double 信源符號的個數 n int input 請輸入信源符號的個數 強制轉換型別,如若輸入其他字元將會報錯 信源符號的輸入 p double n for n...