100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 信道编码Huffman编码信息论与编码

信道编码Huffman编码信息论与编码

时间:2022-02-18 07:47:35

相关推荐

信道编码Huffman编码信息论与编码

信道编码Huffman编码信息论与编码

MATLAB做的信息论与编码的实验一小部分

结果编码是数字数组,还可计算平均码长,编码效率,编码后信息传输速率

话不多说,直接代码

function [W,L,q,r]=huffman(P)%哈夫曼编码n=length(P);p=P;mark=zeros(n-1,n);for i=1:n-1[p,num]=sort(p);mark(i,:)=[num(1:n-i+1),zeros(1,i-1)];p=[p(1)+p(2),p(3:n),1];endfor i=1:n-1table(i,:)=blanks(n*n);endtable(n-1,n)='1';table(n-1,2*n)='0';for i=2:n-1table(n-i,1:n-1)=table(n-i+1,n*(find(mark(n-i+1,:)==1))-(n-2):n*(find(mark(n-i+1,:)==1)));table(n-i,n)='1';table(n-i,n+1:2*n-1)=table(n-i,1:n-1);table(n-i,2*n)='0';for j=1:i-1table(n-i,(j+1)*n+1:(j+2)*n)=table(n-i+1,n*(find(mark(n-i+1,:)==j+1)-1)+1:n*find(mark(n-i+1,:)==j+1));endendfor i=1:nW(i,1:n)=table(1,n*(find(mark(1,:)==i)-1)+1:find(mark(1,:)==i)*n);l(i)=length(find(abs(W(i,:))~=32));endL=sum(P.*l);sum1=0;for i=1:n %使用for循环进行信息熵、平均码长求解a(i)=-log2(P(i)); %a(i)表示单个信源的自信息量K(i)=ceil(a(i)); %K(i)表示对自信息量向上取整c(i)=a(i)*P(i);sum1=sum1+c(i); %信息熵endH=sum1;r=H/L;q=H/L;[m,n]=size(W);W=reshape(W',1,m*n);W=double(W)-double('0')W(find(W==-16))=[];s1 = 'Huffman 编码所得码字 W:';s2=' Huffman 编码的平均码字长度L:';s3=' Huffman 编码的编码效率 Q:';s4='Huffman 编码后信息传输速率 R:';disp(s1),disp(W);disp(s2),disp(L);disp(s3),disp(q);disp(s4),disp(r);

上面是哈夫曼的编码函数,在主程序里面,直接调用就行

[w,l,q,r]=huffman(S);%w为编码,L为平均长度,q为编码效率,r编码后信息传输速率

最后显示一下结果

用到的离散无记忆信源S=[0.4,0.2,0.2,0.1,0.1];%离散无记忆信源

Huffman 编码所得码字 W:10000100110010Huffman 编码的平均码字长度L:2.2000Huffman 编码的编码效率 Q:0.9645Huffman 编码后信息传输速率 R:0.9645

我没写单位,要加的话在函数中每一行disp后面再加一个disp就行

算了,我加上吧

disp(s1),disp(W);disp(s2),disp(L,'(bit/sign)');disp(s3),disp(q);disp(s4),disp(r,'(bit/CodeSign)');

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。