信息论与编码课程大作业二进制哈夫曼编码
- 格式:docx
- 大小:69.85 KB
- 文档页数:6
哈夫曼二进制编码过程(原创实用版)目录1.哈夫曼编码的定义和用途2.哈夫曼编码的过程3.哈夫曼编码的优点4.哈夫曼编码的应用实例正文哈夫曼编码是一种无损数据压缩编码方法,主要用于将原始数据转换为更小的二进制表示,从而实现数据压缩。
它是由美国计算机科学家David A.Huffman 在 1952 年提出的,因此也被称为哈夫曼编码。
哈夫曼编码被广泛应用于数据压缩、图像压缩、音频压缩等领域。
哈夫曼编码的过程主要包括两个步骤:第一步是构造哈夫曼树,第二步是利用哈夫曼树生成哈夫曼编码。
构造哈夫曼树的过程如下:1.将原始数据中的每个字符出现的频率作为权值,将所有权值放入一个哈希表中,并按照权值大小进行排序。
2.从权值最小的两个节点开始,将它们合并为一个新的节点,并将新节点的权值设为两个节点权值之和。
然后将新节点放回哈希表中,并重新排序。
3.重复第二步,直到哈希表中只剩下一个节点,这个节点就是哈夫曼树的根节点。
4.从根节点到每个叶子节点的路径代表一个字符的哈夫曼编码,其中左子节点的边表示 0,右子节点的边表示 1。
利用哈夫曼树生成哈夫曼编码的过程如下:1.从哈夫曼树的根节点开始,沿着一条路径到达某个叶子节点,将路径上的 0 和 1 按照顺序拼接起来,得到一个字符的哈夫曼编码。
2.对哈夫曼树中的每个叶子节点进行同样的操作,得到所有字符的哈夫曼编码。
哈夫曼编码的优点主要有以下几点:1.哈夫曼编码是无损压缩,即压缩后的数据可以完全还原原始数据。
2.哈夫曼编码的压缩效果较好,对于出现频率较高的字符,压缩后的编码较短;对于出现频率较低的字符,压缩后的编码较长。
3.哈夫曼编码的编码和解码过程都比较简单,易于实现和操作。
哈夫曼编码的应用实例包括:1.文本压缩:将文本数据转换为哈夫曼编码,可以大大减少存储空间和传输时间。
2.图像压缩:将图像中的每个像素的颜色值转换为哈夫曼编码,可以减少图像的数据量。
信息论与编码课程设计--统计信源熵与哈夫曼编码信息论与编码课程设计信息论与编码课程设计报告设计题目:统计信源熵与哈夫曼编码专业班级学号学生姓名指导教师教师评分2015年 3 月 25 日1信息论与编码课程设计目录一、设计任务与要求...................................................................... ...........................................3 二、设计思路...................................................................... .......................................................3 三、设计流程图...................................................................... (5)四、程序运行及结果...................................................................... ...........................................6 五、心得体会...................................................................... . (8)参考文献...................................................................... (9)附录:源程序...................................................................... .. (10)2信息论与编码课程设计一、设计任务与要求1.1设计目的信息论与编码是信息、通信、电子工程专业的基础,对理论研究和工程应用均有重要的作用。
5.1某离散无记忆信源的概率空间为采用香农码和费诺码对该信源进行二进制变长编码,写出编码输出码字,并且求出平均码长和编码效率。
解:计算相应的自信息量1)()(11=-=a lbp a I 比特 2)()(22=-=a lbp a I 比特 3)()(313=-=a lbp a I 比特 4)()(44=-=a lbp a I 比特 5)()(55=-=a lbp a I 比特 6)()(66=-=a lbp a I 比特 7)()(77=-=a lbp a I 比特 7)()(77=-=a lbp a I 比特根据香农码编码方法确定码长1)()(+<≤i i i a I l a I平均码长984375.164/6317128/17128/1664/1532/1416/138/124/112/1L 1=+=⨯+⨯+⨯+⨯+⨯+⨯+⨯+⨯=由于每个符号的码长等于自信息量,所以编码效率为1。
费罗马编码过程5.2某离散无记忆信源的概率空间为使用费罗码对该信源的扩展信源进行二进制变长编码,(1) 扩展信源长度,写出编码码字,计算平均码长和编码效率。
(2) 扩展信源长度,写出编码码字,计算平均码长和编码效率。
(3) 扩展信源长度,写出编码码字,计算平均码长和编码效率,并且与(1)的结果进行比较。
解:信息熵811.025.025.075.075.0)(=--=lb lb X H 比特/符号 (1)平均码长11=L 比特/符号编码效率为%1.81X)(H 11==L η(2)平均码长为84375.0)3161316321631169(212=⨯+⨯+⨯+⨯=L 比特/符号 编码效率%9684375.0811.0X)(H 22===L η(3)当N=4时,序列码长309.3725617256362563352569442569242562732562732256814=⨯+⨯+⨯⨯+⨯⨯+⨯⨯+⨯+⨯⨯+⨯=L平均码长827.04309.34==L %1.98827.0811.0X)(H 43===L η可见,随着信源扩展长度的增加,平均码长逐渐逼近熵,编码效率也逐渐提高。
信息论与编码课程作业——霍夫曼编码求信源熵和存储前后的信息量的变化一:设计目的:1、学习离散信源平均信息量的计算方法。
2、理解和掌握huffman 编码的基本原理,实现对信源符号的huffman 编码3、熟悉 Matlab 编程; 二:设计原理和思路1.信源熵的计算:公式: 21()log a I a p = Matlab 实现:I=log2(1/p) 或I=-log2(p) 熵(平均自信息)的计算公式22111()log log qq i i i i i i H x p p p p ====-∑∑Matlab 实现:HX=sum(-x.*log2(x));或者h=h-x(i)*log2(x(i));2.霍夫曼编码原理;分为两步,首先是码树形成过程:对信源概率进行合并形成编码码树。
然后是码树回溯过程:在码树上分配编码码字并最终得到Huffman 编码。
1、码树形成过程:将信源概率按照从小到大顺序排序并建立相应的位置索引。
然后按上述规则进行信源合并,再对信源进行排序并建立新的位置索引,直到合并结束。
在这一过程中每一次都把排序后的信源概率存入矩阵p 中,位置索引存入矩阵m 中。
这样,由排序之后的概率矩阵 p 以及索引矩阵m 就可以恢复原概率矩阵P 了,从而保证了回溯过程能够进行下去。
2、码树回溯过程:在码树上分配编码码字并最终得到Huffman 编码。
从索引矩阵M 的末行开始回溯。
(1) 在p 的末行2元素位置填入0和1。
(2) 根据该行索引1位置指示,将索引1位置的编码(‘1’)填入上一行的第一、第二元素位置,并在它们之后分别添加‘0’和‘1’。
(3) 将索引不为‘1’的位置的编码值(‘0’)填入上一行的相应位置(第3 列)。
(4) 以m的倒数第二行开始向上,重复步骤(1) ~ (3),直到计算至m的首行为止。
三:设计代码:>> clear all;format longdisp(strcat('信息论与编码课程作业——霍夫曼编码求信源熵和存储前后的信息量的变化',13));histgram=zeros(1,255);[c,map]=imread('C:\Documents and Settings\Administrator\桌面\infomation\lenna.bmp');x=rgb2gray(c);[a,b]=size(x);for i=1:afor j=1:bk=x(i,j);histgram(k)=histgram(k)+1;endendf=histgram/a/b;symbols=find(f~=0); %灰度值p=f(symbols); %概率L=length(p);pp=p;%霍夫曼编码m=zeros(L-1,L);for i=1:L-1[p,mark]=sort(p);m(L-i,1:L-i+1)=mark(1:L-i+1);p=[p(1)+p(2),p(3:L),1];endc=cell(L-1,L);c(1,1)={'0'};c(1,2)={'1'};for i=2:L-1;ind=find(m(i-1,:)==1);temp=char(c(i-1,ind));c(i,1)={[temp,'0']};c(i,2)={[temp,'1']};snc=find(m(i-1,:)~=1);for j=3:i+1;con=snc(j-2);c(i,j)=c(i-1,con);endendcodeL=[];averge_long=0;H1=0;disp(strcat('灰度值',32,32,32,'概率',32,32,32,32,32,32,32,32,32,'霍夫曼编码:'));for i=1:L;ind=find(m(L-1,:)==i);code=char(c(L-1,ind));codeLength(i)=length(code);averge_long=averge_long+pp(i)*codeLength(i);H1=H1+pp(i)*log2(1/pp(i));disp(strcat(32,num2str(symbols(i)),32,32,32,num2str(pp(i)),32,32, code));enddisp(strcat('信源熵=',num2str(H1),32,32,32,32,'平均码字长度=',num2str(averge_long),32,32,32,32,32,'压缩比=',num2str(8/averge_long)));四:设计运行结果:信息论与编码课程作业——霍夫曼编码求信源熵和存储前后的信息量的变化灰度值概率霍夫曼编码:30 1.5259e-005 101000111100001031 1.5259e-005 101000111100001136 1.5259e-005 101000111100000037 1.5259e-005 101000111100000139 6.1035e-005 1010001111000140 7.6294e-005 1110010101001041 6.1035e-005 0111010111011042 6.1035e-005 0111010111011143 9.1553e-005 1110010101001144 0.00018311 111011101010145 0.00021362 00111101101146 0.00022888 01110101111047 0.00024414 01110101111148 0.00039673 0011110110049 0.00048828 1010001110050 0.00065613 1110010101151 0.00090027 011101011052 0.00086975 001111011153 0.0013123 111001011054 0.0013733 111011101155 0.0015411 00010101156 0.0018005 01110101057 0.0025177 11010001158 0.0036621 0111111059 0.0033722 0101111060 0.0046539 1100110161 0.0055847 1111010162 0.0061188 001001063 0.0080261 100111064 0.0075226 100001165 0.0083466 101010166 0.0088806 101111167 0.0092773 110011168 0.0095367 110101069 0.0086517 101101070 0.0084229 101011071 0.0075378 100010172 0.0071564 011011173 0.0061493 001001174 0.0056 1111011075 0.0053864 1110110076 0.0045319 1100011177 0.0043488 1011000178 0.0042114 1010111079 0.0039063 1000111180 0.0041199 1010100181 0.0035706 0110101182 0.0039368 1001011083 0.0037537 1000010084 0.003479 0110101085 0.0036011 0111000186 0.0033417 0101101087 0.0032501 0100110088 0.0034027 0110000189 0.0031128 0011010090 0.0031433 0011110091 0.0036774 0111111192 0.0041046 1010011094 0.0038452 1000111095 0.004364 1011100096 0.0037842 1000110097 0.0037079 1000001198 0.0033722 0101111199 0.0040741 10100001 100 0.0040741 10100010 101 0.0038147 10001101 102 0.0040588 10011111 103 0.0041046 10100111 104 0.004364 10111001 105 0.0048218 11010111 106 0.0052185 11100100 107 0.0049591 11011010 108 0.005188 11100001 109 0.0047455 11010110 110 0.0052032 11100011 111 0.0054474 11110100 112 0.0057526 11111011 113 0.0065308 0100111 114 0.0079346 1001100 115 0.010223 1101111116 0.0095825 1101100 117 0.0089417 1100000 118 0.0086975 1011011 119 0.0081787 1010010 120 0.007782 1001001121 0.0066376 0101011 122 0.0059357 11111111 123 0.0056458 11110111 124 0.0051575 11100000 125 0.0052948 11101001 126 0.005188 11100010 127 0.0059814 0000001 128 0.0058594 11111101 129 0.0065613 0101010 130 0.0062561 0011011 131 0.006897 0110100132 0.0072479 0111011 133 0.0073242 0111110 134 0.007309 0111101135 0.0075226 1000100 136 0.0077515 1001000138 0.008606 1011001139 0.0091095 1100100 140 0.012115 000010141 0.012115 000011142 0.012741 001110143 0.012329 001100144 0.010941 1111001145 0.010147 1101110146 0.0089417 1100001 147 0.0088043 1011101 148 0.0091095 1100101 149 0.010712 1110101150 0.011337 1111100151 0.010513 1110011152 0.012878 010000153 0.012268 001010154 0.013138 010100155 0.012238 001000156 0.012939 010001157 0.012115 000100158 0.012955 010010159 0.012207 000111160 0.011993 000001161 0.013916 011001162 0.012177 000110163 0.012299 001011164 0.0094604 1101001 165 0.0089874 1100010 166 0.0088501 1011110 167 0.0056915 11111010 168 0.0059357 0000000 169 0.0071716 0111001 170 0.0057678 11111100 171 0.0054016 11101111 172 0.0054169 11110001 173 0.0058746 11111110 174 0.0072937 0111100 175 0.0070953 0110110 176 0.006424 0011111177 0.0061035 0001011 178 0.0054016 11110000 179 0.0053864 11101101 180 0.0046692 11010000182 0.0036774 10000000183 0.0033875 01100000184 0.0033264 01011000185 0.0031281 00110101186 0.0035706 01110000187 0.0033264 01011001188 0.0033569 01011011189 0.0036011 01110100190 0.0040436 10011110191 0.0034485 01100010192 0.0036774 10000001193 0.0032654 01001101194 0.0034485 01100011195 0.003006 00010100196 0.0033722 01011100197 0.0036774 10000010198 0.0042419 10110000199 0.0045166 11000110200 0.0041046 10101000201 0.0052643 11101000202 0.0050354 11011011203 0.0045319 11001100204 0.0039825 10011010205 0.0040588 10100000206 0.0039673 10010111207 0.0037537 10000101208 0.0033722 01011101209 0.0026703 111011100210 0.0022125 110100010211 0.0018768 101000110212 0.0015259 000101010213 0.0013428 1110010111214 0.0012665 1110010100215 0.0007782 0011110100216 0.00079346 0011110101217 0.00061035 10100011111218 0.00054932 10100011101219 0.00065613 11101110100220 0.00035095 111011101011 221 0.00033569 111001010101 222 0.00030518 101000111101 223 0.00021362 011101011100 224 0.00016785 1110111010100225 0.00019836 001111011010226 0.00015259 1110010101000227 0.00010681 0111010111010228 6.1035e-005 10100011110010230 3.0518e-005 101000111100110231 1.5259e-005 10100011110011110232 1.5259e-005 10100011110011111233 1.5259e-005 1010001111001110信源熵=7.2193 平均码字长度=7.2492 压缩比=1.1036五:设计新得体会:通过这学期对信息论和编码的学习,以及这次的设计,使我了解了很多东西,也使以前所学的知识得以巩固!,通过这次的设计,进一步学习了离散信源平均信息量、平均码长和压缩比的计算方法。
哈夫曼编码方式对字母进行不定长的二进制编码哈夫曼编码是一种常用于数据传输和数据压缩的编码方式。
它可以对不同的符号(比如字母或者其他字符)进行不定长的二进制编码,从而实现高效的数据压缩。
在这篇文章中,我将会对哈夫曼编码进行深入的探讨,从原理到应用,让你更全面地了解这一编码方式的重要性和价值。
在介绍哈夫曼编码前,我们先来了解一下传统的固定长度编码和变长编码。
固定长度编码是将每个符号都用固定长度的二进制序列表示,比如ASCII码就是一种固定长度编码方式。
这种编码方式的缺点是不适合对出现频率不同的符号进行编码,会浪费大量的存储空间。
而变长编码则可以根据符号的出现频率来灵活地进行编码,从而实现更高效的数据压缩。
哈夫曼编码就是一种典型的变长编码方式,它是由大卫·哈夫曼在1952年提出的。
在哈夫曼编码中,根据符号出现的频率不同,使用不同长度的二进制序列表示。
出现频率高的符号对应较短的二进制序列,而出现频率低的符号对应较长的二进制序列。
这样一来,可以实现对数据进行高效压缩,减少存储空间的占用。
哈夫曼编码的原理非常巧妙,通过构建哈夫曼树来实现对符号的编码。
在构建哈夫曼树的过程中,首先将所有的符号按照出现频率进行排序,然后将出现频率最低的两个符号合并为一个新的符号,其出现频率为两者之和。
不断重复这个过程,直到所有的符号都被合并在一棵树中。
哈夫曼树的叶子节点就对应着每个符号及其对应的二进制编码。
通过哈夫曼编码,我们可以实现对数据的高效压缩。
这种编码方式在通信和存储领域有着广泛的应用,比如在JPEG、MP3等格式中都采用了哈夫曼编码来对数据进行压缩。
这不仅可以节省存储空间,还可以提高数据传输的效率,是一种非常重要和实用的编码方式。
从个人的角度来看,我认为哈夫曼编码是一种非常巧妙和高效的编码方式。
它充分利用了符号出现频率的特点,实现了对数据的高效压缩,为数据传输和存储提供了重要的技术支持。
哈夫曼编码的应用领域非常广泛,可以说几乎涵盖了所有需要数据压缩的领域。
信息论与编码课程大作业
一、信源与信源编码
1、若信源包含N 个符号,在什么情况下熵最大?(10分)
最大的熵值是多少?(10分)
2、简述信源编码的两个作用。
(10分)
3、已知离散无记忆信源中各符号的概率空间为
X = 符号u1 u2 u3 u4
概率:1/2 1/4 1/8 1/8
(1)求信源的熵(10分);
(2)对其进行哈夫曼编码(要求码方差较小),写出过程(10分);
(3)求出平均码长和编码效率(10分)。
4、举出学过的无失真与限失真编码方法,各1种。
(10分)
并选择一种,阐述其在实际中的应用(不少于200字)。
(10分)
5、编程题(20分)
二、信道与信道编码
1、 对称信道容量公式?(10分)
在信源如何分布时达到信道容量?(10分)
2、信道编码的基本原理是什么?(10分)
3、对一个(4,2)码,其生成矩阵为
(1)写出伴随式译码表(10分);
(2)接收序列R=1100,估算发码(10分);
(3)判断码的检错能力(10分)。
4、举出两种常用的纠错码,(10分)
并选择一种,阐述其在实际中的应用(不少于200字)。
(10分)
5、编程题(20分)
说明:(1)按学号排列前30名同学完成信源与信源编码方面的作业,其余同学
完成信道与信道编码方面的作业。
(2)第5题编程题另付题目与具体要求,可在20道编程题中任选一道;
自己编写课程相关的其他程序也可以。
(3)第4题和第5题,任意两个同学不能雷同,否则均不能通过。
10010111G ⎡⎤=⎢⎥⎣⎦。
信息论与编码课程大作业
二进制哈夫曼编码
题目
学生姓名:
学号: 00
专业班级:2010级电子信息班
2013年5 月18 日
二进制哈夫曼编码
1、二进制哈夫曼编码的原理及步骤
1、1信源编码的计算
设有N个码元组成的离散、无记忆符号集,其中每个符号由一个二进制码字
表示,信源符号个数n信源的概率分布P={p(sJ},i=1,…..,n。
且各符号xi
n
的以li个码兀编码,在变长字编码时每个符号的平均码长为L p(xi)li ;
i 1
信源熵为:H(X) p(xi)log p(xi)
i 1
n
唯一可译码的充要条件:m Ki 1 ;
i 1
其中m为码符号个数,n为信源符号个数,Ki为各码字长度
构造哈夫曼数示例如下图所示。
1、2二元霍夫曼编码规则
(1)将信源符号依出现概率递减顺序排序。
(2)给两个概率最小的信源符号各分配一个码位“ 0”和“1”,将两个信源符号合并成一个新符号,并用这两个最小的概率之和作为新符号的概率,结果得到一个只包含(n-1 )个信源符号的新信源。
称为信源的第一次缩减信源,用si表示。
(3)将缩减信源si的符号仍按概率从大到小顺序排列,重复步骤
(2),得到只含(n-2)个符号的缩减信源s2。
(4)重复上述步骤,直至缩减信源只剩两个符号为止,此时所剩两个符号的概率之和必为1,然后从最后一级缩减信源开始,依编码路径向前返回,就得到各信源符号所对应的码字。
1、3二元哈夫曼编码流程图如下图所示。
2、二元哈夫曼编码程序
p=input( 'please input a number:' ) %提示输入界面n=length(p);
for i=1:n if p(i)<0 fprintf( '\n The probabilities in huffman can not less than 0!\n' );
p=input( 'please input a number:' ) %如果输入的概率数组中有小于0 的值,
end end
if abs(sum(p)-1)>0
fprintf( '\n The sum of the probabilities in huffman can more than 1!\n' ); p=input( 'please input a number:' ) %如果输入的概率数组总和大于 1 ,则重
end q=p;
a=zeros(n-1,n); %生成一个n-1 行n 列的数组
for i=1:n-1
[q,l]=sort(q); %对概率数组q进行从小至大的排序,并且用I数组返回一个q排序前的顺序编号
a(i,:)=[l(1:n-i+1),zeros(1,i-1)]; %由数组l 构建一个矩阵,该矩阵表明概率合并
q=[q(1)+q(2),q(3:n),1]; %将排序后的概率数组q 的前两项,即概率最小的两
end
for i=1:n-1 c(i,1:n*n)=blanks(n*n);
end
c(n-1,n)= 'O' ; %由于a矩阵的第n-1行的前两个元素为进行huffman编码加和运算时所得的最
c(n-1,2*n)= '1' ;
for i=2:n-1 c(n-i,1:n-1)=c(n-i+1,n*(find(a(n-i+1,:)==1))-(n-2):n*(find(a(n-i+1,:)==1)));
c(n-i,n)= 'O' ; %根据之前的规则,在分支的第一个元素最后补O
c(n-i,n+1:2*n-1)=c(n-i,1:n-1);
c(n-i,2*n)= '1' ; %根据之前的规则,在分支的第一个元素最后补 1
for j=1:i-1 c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,n*(find(a(n-i+1,:)==j+1)-1)+1:n*find(a(n-i+1,: )==j+ 1));
end
end %完成huffman 码字的分配for i=1:n
h(i,1:n)=c(1,n*(find(a(1,:)==i)-1)+1:find(a(1,:)==i)*n); ll(i)=length(find(abs(h(i,:))~=32));
%计算每一个huffman 编码的长度
end
disp( ' 二元霍夫曼编码平均码长' )
l=sum(p.*ll) %计算平均码长
%fprintf('\n huffman code:\n');
h
disp( ' 信源熵' )
hh=sum(p.*(-log2(p))) %计算信源熵
%fprintf('\n the huffman effciency:\n');
disp( ' 编码效率' )
t=hh/l %计算编码效率
3、运行结果及分析
当输入数据[,,,,,,,,] 时
3、1 运行结果:
please input a number:[,,,,,,,,]
p =
Columns 1 through 5
Columns 6 through 9
二元霍夫曼编码平均码长
l = h =
1110100
1110101
111011 11100 1111 110 00 10 01
信源熵
hh =
编码效率
3、2分析:
1、在哈弗曼编码的过程中,对缩减信源符号按概率有大到小的顺序重新排列,应使合并后的新符号尽可能排在靠前的位置,这样可使合并后的新符号重复编码次数减少,使短码得到充分利用。
2、哈弗曼编码效率相当高,对编码器的要求也简单得多。
3、哈弗曼它保证了信源概率大的符号对应于短码,概率小的符号对应于长码,每次缩减信源的最后两个码字总是最后一位码元不同,前面的各位码元都相同,每次缩减信源的最长两个码字有相同的码长。
4、哈弗曼的编法并不一定是唯一的。
4、体会
此次设计用matlab编程实现哈夫曼对信源无失真编码。
由于课本知识点的不太理解,一点都不知道编码的过程,后来通过阅读<<信息论与编码>>课本、网上查阅资料,最后才对本次设计有了一定的理解,详细理解了哈夫曼的具体编码过程。
经过理解,发现这种编码其实挺简单的,最重要的是怎样用程序把他实现,这对我们的编程能力也是一次考验。
设计要求中要求计算信源熵,这又考察了现代通信原理的知识。
所以这次设计所设计的知识面广,有利于我们对相关知识进一步加深、巩固。
更加深刻的感觉到哈夫曼编码能够大大提高通信的效率通过这次设计,让我明白,在平时的学习中,对于每一个知识点都不能一知半解,否则在具体的实际运用中就会现“原形”。
比如这次哈夫曼编码,如果我们只读一下它的编码过程的步骤,不实际举一个例子来验证,我们就很有可能在很多地方犯错。
所以需要我们在阅读课本的时候还要仔细思考课本有关编码的示例,这对于我们掌握课本知识尤其重要的。
这次设计编程的思路,编辑,调试等让我明白编程时一定要保持清醒的头脑,有严谨的思维才能将实验要求实现得完整;调试
过程会发现很多问题,这时不能烦躁,要耐心的去发现问题,不断掌握matlab 软件的各种调试方法。
此次的实践又是对我的一次警醒,要有认真的态度,才有可能做好每一件事的!最后非常感谢一直给我教导的老师和帮助同学们,他们的支持和鼓励让我在遇到挫折时能够战胜它,也让我成功了完成了这次课程设计。
今后我要更加努力的学习专业知识,提高自我的能力!。