嵌入式系统与技术3.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
系统框图 :Input :Data Compressor :Output 1..n输入符号 1..m输出符号 算法设计 字符 概率 a 0.45 b 0.24 c 0.11 d 0.08 e 0.07 f 0.05 字符 编码 a 1 b 01 c 0000 d 0001 e 0010 f 0011 Hufman编码算法 对字符按出现概率排序; 选概率最低的一对字符,建立一棵有两个叶子的树,分配其中概率低的叶子编码为1,较高的为0; 将刚才已分配编码的两个字符概率求和,并将此认作一的新字符的概率; 若剩下超过一个字符,跳转到1; 对所有字符,按从树的根节点开始到最终叶节点路径生成编码。 需求表格 名称 数据压缩模块 目的 霍夫曼数据压缩的编码模块 输入 编码表,位编码的以字节为单位的输入符 输出 已组合好的压缩过的输出符 功能 霍夫曼编码 性能 快速 生产成本 N/A 功耗 N/A 物理尺寸和重量 N/A 规格说明 Data-compressor Buffer:data-buffer Table:symbol-table Current-bit:integer Encode():boolean,data-buffer Flush() New-symbol-table() Data-buffer data-buffer[databuflen]:character len:integer insert() length() Symbol-table symbols[nsymbols]:data-buffer value():symbol load() 编码 创建新缓冲区 加入到缓冲区 返回“T” 加入到缓冲区 返回“F” 缓冲区满? T F Encode行为图 压缩进当前缓冲区 将符号位低位压缩进 当前缓冲区,高位放置 溢出缓冲区 更新长度 新符号会装满 缓冲区吗? T F Insert行为图 输入符号 程序设计 data_buf数据缓冲区类定义及实现: const int databuflen=8; const int bitsperbyte=8; const int bytemask=0xff; const char lowbitsmask[bitsperbyte]= {0,1,3,7,15,31,63,127}; typedef char boolean; #define TRUE 1 #define FALSE 0 class data_buffer{ char databuf[databuflen]; int len; int length_in_chars(){return len/bitsperbyte;} public: void insert(data_buffer,data_buffer); int length(){return len;} int length_in_bytes(){return (int)ceil(len/8.0);} void initialize(); void data_buffer::fill(data_buffer,int); data_buffer operator=(data_buffer); data_buffer(){initialize();} ~data_buffer(){}; } data_buffer empty_buffer; 程序设计 void data_buffer::insert(data_buffer newval,data_buffer newbuf){ int i,j,bitstoshift,maxbyte; bitstoshift=length()-length_in_byte()*bitsperbyte; maxbyte=newval.length()+length()databuflen*bitsperbyte? databuflen:newval.length_in_chars(); for(i = 0;i maxbyte;i++){ databuf[i+length_in_chars()] |= (newval.databuf[i] bitstoshift) bytemask; databuf[i+length_in_chars()+1] |= (newval.databuf[i] (bitsperbyte-bitstoshift)) lowbitsmask[bitsperbyte – bitstoshift]; } 程序设计 if (newval.length()+length() databuflen*bitsperbyte){ bitstoshift = lengt

文档评论(0)

zxiangd + 关注
实名认证
内容提供者

本人从事教育还有多年,在这和大家互相交流学习

1亿VIP精品文档

相关文档