1-1数据压缩的一个基本问题是“我们要压缩什么”,对此你是怎样理解的?
答:我们要压缩的是信号空间,即物理空间、时间区间、电磁频段。也就是指某信号所占的空域、时域、频域空间。
1-2数据压缩的另一个基本问题是“为什么进行压缩”,对此你又是怎样理解的?
答:之所以需要数据压缩是因为人么一数字形式生成和利用是我信息越来越多,表示多媒体数据所需要的字节数可能非常庞大。如果不进行数据压缩,就会导致传输或存储都很难实用化,使用了数据压缩就可以较快的传输各种信源,在现有通信干线上开通更多的并行业务,降低发射率,紧缩数据存储容量。使用数据压缩就能减少存储空间,存储空间的减少就能提高传输效率和节省占用带宽。还可减少数据的冗余。
1-6数据压缩是如何分类的?
答:数据压缩分为可逆压缩(冗余度压缩、熵编码)和不可逆压缩(熵压缩)。而可逆压缩包括统计编码和其他编码。不可逆压缩又包括特征抽取和量化两大类。
1.4项目与习题
1.用你的计算机上的压缩工具来压缩不同文件。研究原文件的大小和类型对压缩文件与原文件大小之比的影响。
答:我发现用我的电脑压缩的txt格式的文档、视频、MP3、图片、docx格式文件。txt格式、docx的文档文件越大的压缩效果好,而视频、MP3、图片不关大小如何压缩后的文件都没有多少改变。
2.从一本通俗杂志中摘录几段文字,并删除所有不会影响理解的文字,实现压缩。例如,在“This is the dog that belongs to my friend”中,删除is、the、that、和to之后,仍然能传递相同的意思。用被删除的单词数与原文件的总单词数之比来衡量文本中的冗余度。用一本技术期刊中的文字来重复这一实验。对于摘自不同来源的文字,我们能否就其冗余度做出定量论述?
答:经过我的实验,发现不关事通俗杂志还是技术期刊,被删除的单词数和原文件的总单词数之比没有太大的差别,所以我们不能就其冗余度做出定量论述。
3、给定符号集A={a1,a2,a3,a4},求一下条件下的一阶熵:
(a)P(a1)=P(a2)=P(a3)=P(a4)=1/4
(b)P(a1)=1/2 , P(a2)=1/4 , P(a3)=P(a4)=1/8
(c)P(a1)=0.505 , P(a2)=1/4 , P(a3)=1/8 , P(a4)=0.12
答:(a)H=-1/4*log2(1/4)-1/4*log2(1/4)-1/4*log2(1/4)-1/4*log2(1/4)
=1/2+1/2+1/2+1/2
=2 (bits)
(b)H=-1/2*log2(1/2)-1/4*log2(1/4)-1/8*log2(1/8)-1/8*log2(1/8)
=1/2+1/2+3/8+3/8
=7/4=1.75(bits)
(c)H=-0.505*log20.505-1/4*log2(1/4)-1/8*log2(1/8)-0.12*log20.12
=0.505*0.986+0.5+0.375+0.12*3.059
=0.498+0.875+0.367
=1.74 (bits)
5、考虑以下序列:
ATGCTTAACGTGCTTAACCTGAAGCTTCCGCTGAAGAACCTG
CTGAACCCGCTTAAGCTGAACCTTCTGAAGCTTAACCTGCTT
(a)根据此序列估计各概率值,并计算这一序列的一阶、二阶、三阶和四阶熵。
(b)根据这些熵,能否推断此序列具有什么样的结构?
答:(a):P(A)=21/84=1/4, P(T)=23/84, P(G)=16/84=4/21, P(C)=24/84=2/7
H=-1/4log2(1/4)-23/84log2(23/84)-4/21log2(4/21)-2/7log2(2/7)
=0.5+(23/84)*1.869+(4/21)*2.392+(2/7)*1.807
=0.5+0.274*1.869+0.190*2.392+0.286*1.807
=1.012+0.454+0.517
=1.983(bits)
(b):
7、做一个实验,看看一个模型能够多么准确地描述一个信源。
(a)编写一段程序,从包括26个字母的符号集{a,b,...,z}中随机选择字母,组成100个四字母单词,这些单词中有多少是有意义的?
答:
#include<iostream> using namespace std; #include<cstdlib> #include<iomanip> #include<ctime> void main() { int m,n,x; char y[100][100]; srand(time(NULL)); cout<<setfill('0'); for(n=0;n<100;n++) { for(x=0;x<4;x++) { m=rand()%26; y[n][x]=m+'a'; } y[n][4]=' '; cout<<n+1<<" "<<y[n]<<" "; } }
调试结果:
只有一个单词有意义poll(民意调查)