打印

求高手解释一下这个程序

[复制链接]
1967|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sunt8707|  楼主 | 2010-6-1 14:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
se, ST, ISP, rc, code
本人在学压缩编码,下了一个压缩编码的程序,但不明白每一个语句分别实现什么功能,求高手逐句解释一下主程序,主程序如下:
function huff()
clc;
fid=fopen('seq1.txt','r');
seq=fread(fid,'*char');
fclose(fid);
seq=reshape(seq,1,length(seq));
[alpha prob]=probmodel(seq);
if ~isempty(alpha)
[huf entropy avglength redundancy]=huffman(alpha,prob);
if ~isempty(huf)
    lp=length(prob);
   for i=1:lp
     str=huf(i).sym;
     str=strcat(str,' :');
     str=strcat(str,num2str(huf(i).prob));
     str=strcat(str,' :');
     str=strcat(str,huf(i).code);
     disp(str);
   end
   disp(strcat('Entropy = ',num2str(entropy)));
   disp(strcat('Average length = ',num2str(avglength)));
   disp(strcat('Redundancy = ',num2str(redundancy)));
   encseq=huffencode(huf,seq);
   disp('Sequence :');
   disp(seq);
   disp('Encoded Sequence :');
   disp(encseq);
   decseq=huffdecode(huf,encseq);
   disp('Decoded Sequence :');
   disp(decseq);
end
else
    display('Empty Sequence....');
end
end

相关帖子

沙发
sunt8707|  楼主 | 2010-6-2 10:21 | 只看该作者
没人会啊

使用特权

评论回复
板凳
aresc| | 2010-6-2 22:44 | 只看该作者
这是啥语言啊?看不懂。

试着解释一下吧:

function huff()                     // 函数名?
clc;                                      // ?
fid=fopen('seq1.txt','r');      // 打开文本文件seq1.txt?
seq=fread(fid,'*char');        // 将seq1.txt的内容读到seq中?
fclose(fid);                           // 关闭打开的文件seq1.txt
seq=reshape(seq,1,length(seq)); // 调用reshape处理seq,得到新的seq?
[alpha prob]=probmodel(seq);      // 调用probmodel处理seq, 得到alpha, prob?
if ~isempty(alpha)                         // alpha 是否empty? ?
[huf entropy avglength redundancy]=huffman(alpha,prob);
                     // if not empty, 对输入alpha, prob 调用huffman,得到huf, entropy, avglength,
                     // redundancy?
if ~isempty(huf)        // huf 是否 empty?
    lp=length(prob);   // lp = prob的元素数目
   for i=1:lp                // for 循环
     str=huf(i).sym;     // str = huf(i)表示的symbol, 一个字符? 例如A
     str=strcat(str,' :'); // str = "A:"
     str=strcat(str,num2str(huf(i).prob)); // huf(i).prob为字符A的的出现概率,
                                          // 比如0.12,则str = "A:0.12"
     str=strcat(str,' :');                      // str = "A:0.12:"
     str=strcat(str,huf(i).code);         // huf(i).code为字符A对应的huffman码字,
                                     // 该码字很可能是类似如010101011的字符串。
     disp(str);                                    // disp "A:0.12:010101011" ?
   end                      // for 循环体结束标志
   disp(strcat('Entropy = ',num2str(entropy)));      // entropy是个数值,熵, disp Entropy = xxx?
   disp(strcat('Average length = ',num2str(avglength))); // disp Average length = xxx?
   disp(strcat('Redundancy = ',num2str(redundancy)));   // disp Redundancy = xxx? 冗余度?
   encseq=huffencode(huf,seq);    // 对输入huf,seq调用huffencode得到huffman编码的encseq?
   disp('Sequence :');                     // disp Sequence:
   disp(seq);                                   // disp seq.
   disp('Encoded Sequence :');       // disp Encoded Sequence :
   disp(encseq);                             // disp encseq?
   decseq=huffdecode(huf,encseq);  // 对输入huf, encseq调用huffdecode得到解码后的decseq?
   disp('Decoded Sequence :');          // disp Decoded Sequence :
   disp(decseq);                                 // disp decseq? 此处的decseq应该
                                                          // 等于 "seq = fread(fid,'*char')"里的seq?
end            
else
    display('Empty Sequence....');
end             //
end

整体的思路类似如下:
用Huffman压缩一个seq1.txt的文本文件,首先统计每个字符出现的概率,然后根据字符出现的概率进行Huffman编码,然后得到一个编码后的encseq,然后对这个encseq进行Huffman解码得到decseq,
没问题的话decseq应该等于seq1.txt里的内容。

使用特权

评论回复
地板
wxw2000| | 2010-6-10 18:37 | 只看该作者
像matlab里s函数编程,3楼注释的有点道理

使用特权

评论回复
5
wxw2000| | 2010-6-10 18:39 | 只看该作者
找找matlab里的资料吧,或者安装一个该程序,查看帮助文档,里面有详细介绍

使用特权

评论回复
6
361415768| | 2010-6-27 14:44 | 只看该作者
详细的去问下老师就行了

使用特权

评论回复
7
zhaoshifen| | 2010-6-28 15:17 | 只看该作者
matlab程序,clc是清屏命令,里面用的函数有“矩阵重组”,“字符拼接”,显示等等,3楼解释的基本是对的,具体函数如何调用可以看看帮助文件,或者在命令窗口中的 help + 函数名。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

164

帖子

1

粉丝