Matlab Shannon编码
簡(jiǎn)述:
香農(nóng)編碼是是采用信源符號(hào)的累計(jì)概率分布函數(shù)來(lái)分配字碼的。香農(nóng)編碼是根據(jù)香農(nóng)第一定理直接得出的,指出了平均碼長(zhǎng)與信息之間的關(guān)系,同時(shí)也指出了可以通過(guò)編碼使平均碼長(zhǎng)達(dá)到極限值。香農(nóng)第一定理是將原始信源符號(hào)轉(zhuǎn)化為新的碼符號(hào),使碼符號(hào)盡量服從等概分布,從而每個(gè)碼符號(hào)所攜帶的信息量達(dá)到最大,進(jìn)而可以用盡量少的碼符號(hào)傳輸信源信息。香農(nóng)編碼屬于不等長(zhǎng)編碼,通常將經(jīng)常出現(xiàn)的消息變成短碼,不經(jīng)常出現(xiàn)的消息編成長(zhǎng)碼,從而提高通信效率。 香農(nóng)編碼嚴(yán)格意義上來(lái)說(shuō)不是最佳碼,它是采用信源符號(hào)的累計(jì)概率分布函數(shù)來(lái)分配碼字。
實(shí)驗(yàn)需求如下:
輸入:信源符號(hào)個(gè)數(shù)q ,每個(gè)信源符號(hào)的概率分布P從鍵盤輸入
輸出:每個(gè)信源符號(hào)對(duì)應(yīng)的Shannon 編碼的碼字
以下采用matlab實(shí)現(xiàn):
close;clear;clc %% 數(shù)據(jù)輸入 i = 1; strTemp = ['請(qǐng)輸入第',num2str(i),'個(gè)概率(0退出):']; p = []; p(i) = input(strTemp); while(p(end))i = i+1;strTemp = ['請(qǐng)輸入第',num2str(i),'個(gè)概率(0退出):'];temp = input(strTemp);p = [p temp]; end eps = 1e-5; if(sum(p)>1.0+eps || sum(p)<1.0-eps)error('概率和不等于1'); end%% 初始化 n = length(p)-1; %由于最后一個(gè)數(shù)字為0 F = zeros(1,n); logp = zeros(1,n); L = zeros(1,n); for i = 2:nF(i) = F(i-1)+p(i-1);logp(i-1) = -log2(p(i-1));L(i-1) = ceil(logp(i-1)); end logp(n) = -log2(p(n)); L(n) = ceil(logp(n));%% 編碼過(guò)程 for i = 1:ntemp1 = L(i);temp2 = [];temp3 = F(i);while(temp1)temp4 = fix(2*temp3);temp3 = 2*temp3 - temp4;temp2 = [temp2 num2str(temp4)];temp1 = temp1 - 1;endfprintf('第%d個(gè)的香農(nóng)編碼為:%s\n',i,temp2); end運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的Matlab Shannon编码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 信息论 | Shannon编码MATLA
- 下一篇: Matlab Shannon编码实验