信息论实验报告香农编码

信息论实验报告香农编码
信息论实验报告香农编码

目录

实验目的: (2)

实验要求: (2)

程序算法: (2)

程序运行结果: (4)

程序操作步骤: (5)

试验中遇到的困难及解决方法: (5)

实验心得及体会: (5)

实验目的:

1.进一步熟悉使用C++编程语言及软件。

2.进一步认识shannon编码过程,并能在学习中灵活运用。

实验要求:

要求:

(a) 允许使用的编程语言:C、C++、Basic、Pascal、Fortran、Java、Perl

、Tk/Tcl

(b) 输入:信源符号个数q、信源符号s0,...,sq?1,信源概率分布p0,...,pq?1。

(c) 输出:信源符号与码字的对应关系表(编码表)。

(d) 源程序格式整齐清晰,注释简单明了。

程序算法:

(a) 将q 个信源符号按其概率的递减次序排列:

p(s0) > p(s1) > ... > p(sq?1)

(b) 计算出各个信源符号的累加概率:

(c) 按下式计算第i 个消息的二元代码组的码长li:

(d) 将累加概率F(si)(十进制小数)变换成二进制小数。根据码长li 取小

数点后li 个二进制符号作为第i 个消息的码字。

程序代码:

#include

#include

using namespace std;

void InsertSort(double r[],char m[] ,int n)//直接插入排序算法按照概率从大到小排列符号和相应概率

{

for(int i=1;i

{

r[n]=r[i]; //设置哨兵

m[n]=m[i]; //设置哨兵

for(int j=i-1;(r[n]>r[j])&&(j>=0);j--)//寻找插入位置

{

r[j+1]=r[j];//记录后移

m[j+1]=m[j];//记录后移

}

r[j+1]=r[n];

m[j+1]=m[n];

}

}

void Leijia(double p[], int s)//将当前概率及之前概率相加{

for(int r=1;r

p[r]=p[r-1]+p[r];

}

void main()

{

int geshu,erjinzhi[100][100];

int z=0,g=0;

double gailv[100],L[100];

char fuhao[100];

cout<<"请输入需要编码的字符个数(小于100)"<>geshu;

cout<<"请按照先后顺序输入符号"<

for(int i=0;i

cin>>fuhao[i];

cout<<"请输入各相应符号的概率"<

for(int j=0;j

cin>>gailv[j];

InsertSort( gailv,fuhao, geshu);

for(z=0;z

{

L[z]=-log(gailv[z])/log(2);

L[z]=ceil(L[z]);//向上取整求所需要的位数

}

Leijia( gailv, geshu);

for( z=0;z

{

gailv[z]=gailv[z]-floor(gailv[z]);

for( g=0;g

{

if((gailv[z]*2)>=1)

{

erjinzhi[z][g]=1;

gailv[z]=(gailv[z]*2)-1;

}

else

{

erjinzhi[z][g]=0;

gailv[z]=gailv[z]*2;

}

}

}

cout<<"各信源符号及相应码字分别为"<

{

cout<

for( g=0;g

cout<< erjinzhi[z][g];

cout<

}

}

程序运行结果:

程序操作步骤:

1.按照提示输入所要编码的符号个数并回车

2.按顺序输入要求个数的符号并回车

3.按顺序输入各符号相应的概率并回车

4.即可得到各符号相应的shannon编码

试验中遇到的困难及解决方法:

本次试验相对而言比较简单,但由于长时间没有联系C++语言有些生疏。再进行按照概率从大到小顺序排列时刚开始只注意到了排列概率因此导致概率与符号不对应,因此修改了插入排序算法,将概率和相应符号同时进行排列。

求对数时没有注意对数底应为2(虽然以e为底也正确,但是基本上运算都是以2为底),于是加上了除以log(2)。

实验心得及体会:

通过本次试验我进一步熟悉使用C++编程语言及软件,充分理解认识shannon编码过程,对我今后的学习有一定的帮助。

信息论实验报告-

信息论实验报告 学生: 班级: 学号:

实验一香农编码一、程序设计的流程图 二、程序清单 #include

#include #include using namespace std; void swap(double *x,double *y); int main() { int N; cout<<"输入信源个数"<>N; double S[N]; //注意变量在数组中的影响cout<<"输入信源概率"<>S[i]; for(int i=0;i1) { MM[i]+='1';

aa=tem-1; } else { MM[i]+='0'; aa=tem; } } } string BB[N]; for(int i=0;i

汉明码编码实验报告

重庆工程学院 电子信息学院 实验报告 课程名称:_ 数据通信原理开课学期:__ 2015-2016/02_ 院(部): 电子信息学院开课实验室:实训楼512 学生姓名: 舒清清梁小凤专业班级: 1491003 学号: 149100308 149100305

重庆工程学院学生实验报告 课程名 称 数据通信原理实验项目名称汉明码编译实验 开课院系电子信息学院实验日期 2016年5月7 日 学生姓名舒清清 梁小凤 学号 149100308 149100305 专业班级网络工程三班 指导教 师 余方能实验成绩 教师评语: 教师签字:批改时间:

一、实验目的和要求 1、了解信道编码在通信系统中的重要性。 2、掌握汉明码编译码的原理。 3、掌握汉明码检错纠错原理。 4、理解编码码距的意义。 二、实验内容和原理 汉明码编码过程:数字终端的信号经过串并变换后,进行分组,分组后的数据再经过汉明码编码,数据由4bit变为7bit。 三、主要仪器设备 1、主控&信号源、6号、2号模块各一块 2、双踪示波器一台 3连接线若干

四、实验操作方法和步骤 1、关电,按表格所示进行连线 2、开电,设置主控菜单,选择【主菜单】→【通信原理】→【汉明码】。 (1)将2号模块的拨码开关S12#拨为10100000,拨码开关S22#、S32#、S42#均拨为00000000;(2)将6号模块的拨码开关S16#拨为0001,即编码方式为汉明码。开关S36#拨为0000,即无错模式。按下6号模块S2系统复位键。 3、此时系统初始状态为:2号模块提供32K编码输入数据,6号模块进行汉明编译码,无差错插入模式。 4、实验操作及波形观测。 (1)用示波器观测6号模块TH5处编码输出波形。 (2)设置2号模块拨码开关S1前四位,观测编码输出并填入下表中: 五、实验记录与处理(数据、图表、计算等) 校对输入0000,编码0000000 输入0001,编码0001011 输入0010,编码0010101 输入0011,编码0011110 输入0100,编码0100110 输入0101,编码0101101 输入0110,编码0110011输入0111,编码0111000

信息论与编码实验报告.

本科生实验报告 实验课程信息论与编码 学院名称信息科学与技术学院 专业名称通信工程 学生姓名 学生学号 指导教师谢振东 实验地点6C601 实验成绩 二〇一五年十一月二〇一五年十一月

实验一:香农(Shannon )编码 一、实验目的 掌握通过计算机实现香农编码的方法。 二、实验要求 对于给定的信源的概率分布,按照香农编码的方法进行计算机实现。 三、实验基本原理 给定某个信源符号的概率分布,通过以下的步骤进行香农编码 1、将信源消息符号按其出现的概率大小排列 )()()(21n x p x p x p ≥≥≥ 2、确定满足下列不等式的整数码长K i ; 1)(l o g )(l o g 22+-<≤-i i i x p K x p 3、为了编成唯一可译码,计算第i 个消息的累加概率 ∑ -== 1 1 )(i k k i x p p 4、将累加概率P i 变换成二进制数。 5、取P i 二进制数的小数点后K i 位即为该消息符号的二进制码。 四、源程序: #include #include #include #include #include using namespace std; int main() { int N; cout<<"请输入信源符号个数:";cin>>N; cout<<"请输入各符号的概率:"<

int i,j; for(i=0;i

香浓编码实验报告

香农编码实验报告 姓名:徐以刚 学号:20094034 专业班级:信计09.1 学院:理信学院 一 、实验目的 1. 了解香农编码的基本原理及其特点; 2. 熟悉掌握香农编码的方法和步骤; 3. 掌握C 语言或者Matlab 编写香农编码的程序。 二、实验要求 对于给定的信源的概率分布,按照香农编码的方法进行计算机实现. 三、实验原理 给定某个信源符号的概率分布,通过以下的步骤进行香农编码 1.信源符号按概率从大到小排列 2. 对信源符号求累加概率,表达式: G i =G i-1+p(x i ) 3. 求自信息量,确定码字长度。自信息量I(x i )=-log(p(x i ));码字长度取大于等 于自信息量的最小整数。 4. 将累加概率用二进制表示,并取小数点后码字的长度的码 。 四、实验内容 离散无记忆信源符号S 的概率分布: S 1S 2S 3S 4S 5S 6S 7S P(S) = 0.20 0.19 0.18 0.17 0.15 0.10 0.01 对离散无记忆信源分布S 进行香农编码 1.画出程序设计的流程图

2.写出程序代码, N=input('N='); %输入信源符号的个数 s=0; l=0; H=0; for i=1:N p(i)=input('p='); %输入信源符号概率分布矢量,p(i)<1 s=s+p(i) H=H+(-p(i)*log2(p(i)));I(i)=-log2(p(i)); %计算信源信息熵end if abs(s-1)>0, error('不符合概率分布') end for i=1:N-1 for j=i+1:N if p(i)

香农编码实验报告

中南大学 《信息论与编码》实验报告 题目信源编码实验 指导教师 学院 专业班级 姓名 学号 日期

目录 一、香农编码 (3) 实验目的 (3) 实验要求 (3) 编码算法 (3) 调试过程 (3) 参考代码 (4) 调试验证 (7) 实验总结 (7) 二、哈夫曼编码 (8) 实验目的 (8) 实验原理 (8) 数据记录 (9) 实验心得 (10)

一、香农编码 1、实验目的 (1)进一步熟悉Shannon 编码算法; (2)掌握C 语言程序设计和调试过程中数值的进制转换、数值与字符串之间 的转换等技术。 2、实验要求 (1)输入:信源符号个数q 、信源的概率分布p ; (2)输出:每个信源符号对应的Shannon 编码的码字。 3、Shannon 编码算法 1:procedure SHANNON(q,{Pi }) 2: 降序排列{Pi } 3: for i=1 q do 4: F(i s ) 5:i l 2 []log 1/()i p s 6:将累加概率F(i s )(十进制小数)变换成二进制小数。 7:取小数点后i l 个二进制数字作为第i 个消息的码字。 8:end for 9:end procedure ------------------------------------------------------------------------------------------------------------------ 4、调试过程 1、fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory fatal error C1083: Cannot open include file: 'values.h': No such file or directory 原因:unistd.h 和values.h 是Unix 操作系统下所使用的头文件 纠错:删去即可 2、error C2144: syntax error : missing ')' before type 'int' error C2064: term does not evaluate to a function 原因:l_i(int *)calloc(n,sizeof(int)); l_i 后缺少赋值符号使之不能通过编译 纠错:添加上赋值符号 1 1 ()i k k p s -=∑

信息论与编码实验报告材料

实验报告 课程名称:信息论与编码姓名: 系:专 业:年 级:学 号:指导教 师:职 称:

年月日 目录 实验一信源熵值的计算 (1) 实验二Huffman 信源编码. (5) 实验三Shannon 编码 (9) 实验四信道容量的迭代算法 (12) 实验五率失真函数 (15) 实验六差错控制方法 (20) 实验七汉明编码 (22)

实验一信源熵值的计算 、实验目的 1 进一步熟悉信源熵值的计算 2 熟悉Matlab 编程 、实验原理 熵(平均自信息)的计算公式 q q 1 H(x) p i log2 p i log2 p i i 1 p i i 1 MATLAB实现:HX sum( x.* log2( x));或者h h x(i)* log 2 (x(i )) 流程:第一步:打开一个名为“ nan311”的TXT文档,读入一篇英文文章存入一个数组temp,为了程序准确性将所读内容转存到另一个数组S,计算该数组中每个字母与空格的出现次数( 遇到小写字母都将其转化为大写字母进行计数) ,每出现一次该字符的计数器+1;第二步:计算信源总大小计算出每个字母和空格出现的概率;最后,通过统计数据和信息熵公式计算出所求信源熵值(本程序中单位为奈特nat )。 程序流程图: 三、实验内容 1、写出计算自信息量的Matlab 程序 2、已知:信源符号为英文字母(不区分大小写)和空格输入:一篇英文的信源文档。输出:给出该信源文档的中各个字母与空格的概率分布,以及该信源的熵。 四、实验环境 Microsoft Windows 7

五、编码程序 #include"stdio.h" #include #include #define N 1000 int main(void) { char s[N]; int i,n=0; float num[27]={0}; double result=0,p[27]={0}; FILE *f; char *temp=new char[485]; f=fopen("nan311.txt","r"); while (!feof(f)) { fread(temp,1, 486, f);} fclose(f); s[0]=*temp; for(i=0;i='a'&&s[i]<='z') num[s[i]-97]++; else if(s[i]>='A'&&s[i]<='Z') num[s[i]-65]++; } printf(" 文档中各个字母出现的频率:\n"); for(i=0;i<26;i++) { p[i]=num[i]/strlen(s); printf("%3c:%f\t",i+65,p[i]); n++; if(n==3) { printf("\n"); n=0; } } p[26]=num[26]/strlen(s); printf(" 空格:%f\t",p[26]);

实验二 香农编码的计算与分析

实验二 香农编码的计算与分析 一、[实验目的] 1、理解香农第一定理指出平均码长与信源之间的关系。 2、加深理解香农编码具有的重要理论意义。 3、掌握Shannon 编码的原理。 4、掌握Shannon 编码的方法和步骤。 5、熟悉shannnon 编码的各种效率 二、[实验环境] windows XP,MATLAB 7 三、[实验原理] 香农第一定理: 设离散无记忆信源为 12 (1) (2)....()S s s sq P p s p s p sq ????=???????? 熵为H(S),其N 次扩展信源为 12 (1) (2)....()N q S p p p q P αααααα????=???????? 熵为H(S N )。码符号集X=(x1,x2,…,xr )。先对信源N S 进行编码,总可以 找到一种编码方法,构成惟一可以码,使S 中每个信源符号所需的平均码长满足: 1N L H S H S N N +>≥()()logr logr 当N →∞时 lim ()N r N L H S N →∞= N L 是平均码长 1 ()N q N i i i L p αλ==∑ i λ是i α对应的码字长度

四、[实验内容] 1、根据实验原理,设计shannon 编码方法,在给定 条件下,实现香农编码并算出编码效率。 2、请自己构造两个信源空间,根据求Shannon 编码结果说明其物理意义。 五、[实验过程] 每个实验项目包括:1)设计思路2)实验中出现的问题及解决方法; 要求: 1)有标准的实验报告 (10分) 2)程序设计和基本算法合理(30分) 3)实验仿真具备合理性(30分) 4)实验分析合理(20分) 5)能清晰的对实验中出现的问题进行分析并提出解决方案(10分) S P s1 s2 s3 s4 s5 s6 s7 0.01 0.17 0.19 0.10 0.15 0.18 0.2 =

卷积码实验报告

苏州科技大学天平学院电子与信息工程学院 信道编码课程设计报告 课设名称卷积码编译及译码仿真 学生姓名圣鑫 学号1430119232 同组人周妍智 专业班级通信1422 指导教师潘欣欲 一、实验名称 基于MAATLAB的卷积码编码及译码仿真 二、实验目的 卷积码就是一种性能优越的信道编码。它的编码器与译码器都比较容易实现,同时它具有较强的纠错能力。随着纠错编码理论研究的不断深入,卷积码的实际应用越来越广泛。本实验简明地介绍了卷积码的编码原理与Viterbi译码原理。并在SIMULINK模块设计中,完成了对卷积码的编码与译码以及误比特统计整个过程的模块仿真。最后,通过在仿真过程中分别改变卷积码的重要参数来加深理解卷积码的这些参数对卷积码的误码性能的影响。经过仿真与实测,并对测试结果作了分析。 三、实验原理

1、卷积码编码原理 卷积码就是一种性能优越的信道编码,它的编码器与解码器都比较易于实现,同时还具有较强的纠错能力,这使得它的使用越来越广泛。卷积码一般表示为(n,k,K)的形式,即将 k个信息比特编码为 n 个比特的码组,K 为编码约束长度,说明编码过程中相互约束的码段个数。卷积码编码后的 n 各码元不经与当前组的 k 个信息比特有关,还与前 K-1 个输入组的信息比特有关。编码过程中相互关联的码元有 K*n 个。R=k/n 就是编码效率。编码效率与约束长度就是衡量卷积码的两个重要参数。典型的卷积码一般选 n,k 较小,K 值可取较大(>10),但以获得简单而高性能的卷积码。 卷积码的编码描述方式有很多种:冲激响应描述法、生成矩阵描述法、多项式乘积描述法、状态图描述,树图描述,网格图描述等。 2、卷积码Viterbi译码原理 卷积码概率译码的基本思路就是:以接收码流为基础,逐个计算它与其她所 有可能出现的、连续的网格图路径的距离,选出其中可能性最大的一条作为译码估值输出。概率最大在大多数场合可解释为距离最小,这种最小距离译码体现的正就是最大似然的准则。卷积码的最大似然译码与分组码的最大似然译码在原理上就是一样的,但实现方法上略有不同。主要区别在于:分组码就是孤立地求解单个码组的相似度,而卷积码就是求码字序列之间的相似度。基于网格图搜索的译码就是实现最大似然判决的重要方法与途径。用格图描述时,由于路径的汇聚消除了树状图中的多余度,译码过程中只需考虑整个路径集合中那些使似然函数最大的路径。如果在某一点上发现某条路径已不可能获得最大对数似然函数,就放弃这条路径,然后在剩下的“幸存”路径中重新选择路径。这样一直进行到最后第 L 级(L 为发送序列的长度)。由于这种方法较早地丢弃了那些不可能的路径,从而减轻了译码的工作量,Viterbi 译码正就是基于这种想法。对于(n, k, K )卷积码,其网格图中共 2kL 种状态。由网格图的前 K-1 条连续支路构成的路径互不相交,即最初 2k_1 条路径各不相同,当接收到第 K 条支路时,每条路径都有 2 条支路延伸到第 K 级上,而第 K 级上的每两条支路又都汇聚在一个节点上。在Viterbi译码算法中,把汇聚在每个节点上的两条路径的对数似然函数累加

《信息论与信源编码》实验报告

《信息论与信源编码》实验报告 1、实验目的 (1) 理解信源编码的基本原理; (2) 熟练掌握Huffman编码的方法; (3) 理解无失真信源编码和限失真编码方法在实际图像信源编码应用中的差异。 2、实验设备与软件 (1) PC计算机系统 (2) VC++6.0语言编程环境 (3) 基于VC++6.0的图像处理实验基本程序框架imageprocessing_S (4) 常用图像浏览编辑软件Acdsee和数据压缩软件winrar。 (5) 实验所需要的bmp格式图像(灰度图象若干幅) 3、实验内容与步骤 (1) 针对“图像1.bmp”、“图像2.bmp”和“图像3.bmp”进行灰度频率统计(即计算图像灰度直方图),在此基础上添加函数代码构造Huffman码表,针对图像数据进行Huffman编码,观察和分析不同图像信源的编码效率和压缩比。 (2) 利用图像处理软件Acdsee将“图像1.bmp”、“图像2.bmp”和“图像 3.bmp”转换为质量因子为10、50、90的JPG格式图像(共生成9幅JPG图像),比较图像格式转换前后数据量的差异,比较不同品质因素对图像质量的影响; (3) 数据压缩软件winrar将“图像1.bmp”、“图像2.bmp”和“图像3.bmp”分别生成压缩包文件,观察和分析压缩前后数据量的差异; (4) 针对任意一幅图像,比较原始BMP图像数据量、Huffman编码后的数据量(不含码表)、品质因素分别为10、50、90时的JPG文件数据量和rar压缩包的数据量,分析不同编码方案下图像数据量变化的原因。 4、实验结果及分析 (1)在VC环境下,添加代码构造Huffman编码表,对比试验结果如下: a.图像1.bmp:

信息论与编码实验报告

实验一 绘制二进熵函数曲线(2个学时) 一、实验目的: 1. 掌握Excel 的数据填充、公式运算和图表制作 2. 掌握Matlab 绘图函数 3. 掌握、理解熵函数表达式及其性质 二、实验要求: 1. 提前预习实验,认真阅读实验原理以及相应的参考书。 2. 在实验报告中给出二进制熵函数曲线图 三、实验原理: 1. Excel 的图表功能 2. 信源熵的概念及性质 ()()[] ()[]())(1)(1 .log )( .) ( 1log 1log ) (log )()(10 , 110)(21Q H P H Q P H b n X H a p H p p p p x p x p X H p p p x x X P X i i i λλλλ-+≥-+≤=--+-=-=≤≤? ?????-===??????∑ 单位为 比特/符号 或 比特/符号序列。 当某一符号xi 的概率p(xi)为零时,p(xi)log p(xi) 在熵公式中无意义,为此规定这时的 p(xi)log p(xi) 也为零。当信源X 中只含有一个符号x 时,必有p(x)=1,此时信源熵H (X )为零。 四、实验内容: 用Excel 和Matlab 软件制作二进熵函数曲线。根据曲线说明信源熵的物理意义。 (一) Excel 具体步骤如下: 1、启动Excel 应用程序。 2、准备一组数据p 。在Excel 的一个工作表的A 列(或其它列)输入一组p ,取步长为0.01,从0至100产生101个p (利用Excel 填充功能)。

3、取定对数底c,在B列计算H(x) ,注意对p=0与p=1两处,在B列对应位置直接输入0。Excel中提供了三种对数函数LN(x),LOG10(x)和LOG(x,c),其中LN(x)是求自然对数,LOG10(x)是求以10为底的对数,LOG(x,c)表示求对数。选用c=2,则应用函数LOG(x,2)。 在单元格B2中输入公式:=-A2*LOG(A2,2)-(1-A2)*LOG(1-A2,2) 双击B2的填充柄,即可完成H(p)的计算。 4、使用Excel的图表向导,图表类型选“XY散点图”,子图表类型选“无数据点平滑散点图”,数据区域用计算出的H(p)数据所在列范围,即$B$1:$B$101。在“系列”中输入X值(即p值)范围,即$A$1:$A$101。在X轴输入标题概率,在Y轴输入标题信源熵。 (二)用matlab软件绘制二源信源熵函数曲线 p = 0.0001:0.0001:0.9999; h = -p.*log2(p)-(1-p).*log2(1-p); plot(p,h) 五、实验结果

实验一 香农编码和Huffman编码

实验一 香农编码和Huffman 编码 一、实验目的 进一步熟悉香农编码和Huffman 编码过程,掌握matlab 语言递归程序的设计和调试技术。 二、实验要求 1.已知信源符号个数和信源的概率分布,要求写出香农和Huffman 的代码,输出每个信源符号对应的香农和Huffman 编码的码字。 2.以一组信源码字为例,给出输出码字,并求出编码效率。 三、基本原理 ● 香农编码: 编码规则如下: 1.将信源消息符号按其出现的概率大小排列 1()p x ≥2()p x ≥···≥()n p x 2.确定满足下列不等式的整数码长Ki : 2l o g ()i p x -≤i K <2log ()i p x -+1 3.为了编成唯一可译码,计算第i 个消息的累加概率 Pi=1 1 ()i k k p x -=∑ 4.将累加概率Pi 变换成二进制数。 5.取Pi 二进数的小数点后Ki 位即为该消息符号的二进制码数。 ● Huffman 编码: 1.将n 个信源消息符号按其出现的概率大小依次排列, 1()p x ≥2()p x ≥···≥()n p x 2.取两个概率最小的字母分别配以0和1两码元,并将这两个概率相加作为一个新字母的概率,与未分配的二进符号的字母重新排队。 3.对重排后的两个概率最小符号重复步骤(2)的过程。 4.不断继续上述过程,直到最后两个符号配以0和1为止。 5.从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字。 四、实验报告内容 1.描述所用算法,给出代码。 2.与其他编码方式相比,香农和Huffman 编码各有何优缺点,其压缩效率如何?

移动通信实验报告

实验一 m序列产生及特性分析实验 一、实验目得 1.了解m序列得性质与特点; 2。熟悉m序列得产生方法; 3.了解m序列得DSP或CPLD实现方法。 二、实验内容 1。熟悉m序列得产生方法; 2.测试m序列得波形; 三、实验原理 m序列就是最长线性反馈移存器序列得简称,就是伪随机序列得一种。它就是由带线性反馈得移存器产生得周期最长得一种序列。 m序列在一定得周期内具有自相关特性.它得自相关特性与白噪声得自相关特性相似。虽然它就是预先可知得,但性质上与随机序列具有相同得性质.比如:序列中“0”码与“1”码等抵及具有单峰自相关函数特性等。 五、实验步骤 1.观测现有得m序列。 打开移动实验箱电源,等待实验箱初始化完成.先按下“菜单”键,再按下数字键“1”,选择“一、伪随机序列”,出现得界面如下所示: ?再按下数字键“1"选择“1m序列产生”,则产生一个周期为15得m序列。 2。在测试点TP201测试输出得时钟,在测试点TP202测试输出得m序列。 1)在TP201观测时钟输出,在TP202观测产生得m序列波形。

图1-1 数据波形图

实验二 WALSH序列产生及特性分析实验 一.实验目得 1。了解Walsh序列得性质与特点; 2。熟悉Walsh序列得产生方法; 3.了解Walsh序列得DSP实现方法。 二.实验内容 1.熟悉Walsh序列得产生方法; 2.测试Walsh序列得波形; 三。实验原理 Walsh序列得基本概念 Walsh序列就是正交得扩频序列,就是根据Walsh函数集而产生.Walsh函数得取值为+1或者—1。图1-3—1展示了一个典型得8阶Walsh函数得波形W1。n阶Walsh函数表明在Walsh函数得周期T内,由n段Walsh函数组成.n阶得Walsh函数集有n个不同得Walsh函数,根据过零得次数,记为W0、W1、W2等等。 t 图2-1 Walsh函数 Walsh函数集得特点就是正交与归一化,正交就是同阶不同得Walsh函数相乘,在指定得区间积分,其结果为0;归一化就是两个相同得Walsh函数相乘,在指定得区间上积分,其平均值为1。 五、实验步骤 1。观测现有得Walsh序列波形 打开移动实验箱电源,等待实验箱初始化完成. 先按下“菜单"键,再按下数字键“1”,选择“一、伪随机序列”,出现得界面如下所示:

信息论实验报告

游程编码实现有效性提高的原理及通用编码的思想 康乐203201505020 摘要:信源编码的目的是提高信息传输效率,其思想是去除消息中的冗余成分。在无失真的信源编码中,根据信源的统计特性进行编码称为统计编码,而在信源统计特性未知的情况下,就需要一种新的编码方法,称之为通用编码。本文对统计编码中的游程编码进行了分析,说明其有效性,给出其具有有效性的原理论述,对游程编码的截断效应进行了仿真;同时分析了通用编码的存在性与构造方法,还以字典码为例进行了仿真。 关键词:信源编码游程编码通用编码字典码 一、信源编码概述 通信的根本问题是将信源的输出在接收端精确的或近似的重现出来。为此需要解决两个问题。其一是信源的输出应如何描述,及如何计算它产生的信息量;其二是如何表示信源的输出,即信源编码问题。由于信源可以根据信息输出的形式分为离散信源和连续信源,因此信源编码也就可以分为离散信源和连续信源。 根据通信的要求,可以将信源编码分为无失真信源编码和限定失真的信源编码。若要求精确的重现信源的输出,就要保证信源产生的

全部信息无损的传递给信宿,这时的信源编码就是无失真信源编码。许多实际情况下,并不要求完全精确地复制出信源的输出,而且在有干扰的情况下,这也是不可能的。一般对信源-信宿要定出可接收准则或保真度准则,这就是限定失真的信源编码。 离散信源的输出可以用如下符号序列表示: 21012,,,,,U U U U U -- 其中l U 表示在第l 时刻产生的符号,l 为整数。l U 为一随机变量,它 在有限字母集{}1,k A a a =中选取。如果使用D 字母的集合 {}1,d B b b =作为码表,那么如果组成码字的码符号数目相等,我们就称之为等长编码,否则称之为非等长编码。 非等长编码则可以根据编码是否依赖信源的统计特性分为统计编码与通用编码。 二、 游程编码 2.1 游程编码概念 游程编码(RLC, Run Length Coding ),又称“运行长度编码”或“行程编码”,是一种统计编码,该编码属于无损压缩编码,是栅格数据压缩的重要编码方法。 游程编码中的游程是指字符序列中各个字符连续重复出现而形成的字符串长度,编码方法是将字符序列映射成字符串长度和位置的标志序列,那么对于M 元序列: 011{,,,}M u u u -

labview-信道编码-李聪-11211060

《信道编码》实验报告 姓名李聪罗贵阳 学号11211060 11211015 指导教师姚冬萍 时间2014年5月14日

目录 一、线性分组码原理简介 (2) 1、编码 (2) 2、译码 (2) 二、(7,4)码Labview实现 (3) 一、读取图片产生数据流 (3) 二、汉明码编码 (4) 主要模块: (4) 三、BPSK调制 (4) 四、加性高斯白噪声信道传输 (5) 五、PSK解调 (5) 六、解码 (6) 七、重构图像 (7) 三、实验中遇到的问题 (8) 四、实验心得 (9) 五、参考文献: (10)

基于Labview 的(7,4)线性分组码仿真 一、线性分组码原理简介 1、编码 令(7,4)分组码的生成矩阵为矩阵G 如下: 根据生成矩阵,输出码字可按下式计算: 所以有: 信息位 冗余位 由以上关系可以得到(7,4)汉明码的全部码字如表1所示。 表1 (7,4)汉明码的全部码字 2、译码 (7,4)汉明码的译码将输入的7位汉明码翻译成4位的信息码,并且纠正其中可能出现 1000110010001100101110001101G ???? ? ?=?????? 3210321010001100100011(,,,)(,,,)00101110001101b a a a a G a a a a ?? ?? ? ?=?=???????231013210210 b a a a b a a a b a a a =⊕⊕=⊕⊕=⊕⊕63524130 b a b a b a b a ====

的一个错误。 由于生成矩阵G 已知且G = [I k Q ] ,可以得到矩阵Q 的值 110011111101T Q P ???? ? ?==?????? 又因为T P Q =则: 101111100111P ?? ??=?? ???? 而校验矩阵H 满足 H =[P I r ] ,则: 101110011100100111001H ?? ??=?? ???? 由校正子S = BH T =(A + E )H T = EH T 可以看出校正子S 与错误图样E 是一一对 应的。通过计算校正子得到对应的错误图样,根据式子A =B + E 便可得到纠正了一位可能错误的信息位,完成解码。 二、(7,4)码Labview 实现 一、读取图片产生数据流 LabVIEW 提供了一个能够读取JPEG 格式的图像并输出图像数据的模块。提供的还原像素图.vi 完成图像数据到一维二进制数据的转换(图像数据→十进制二维数组→二进制一维数组),输出信源比特流。

信息论与编码实验报告

信息论与编码实验报告-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

实验一关于硬币称重问题的探讨 一、问题描述: 假设有N 个硬币,这N 个硬币中或许存在一个特殊的硬币,这个硬币或轻 或重,而且在外观上和其他的硬币没什么区别。现在有一个标准天平,但是无刻度。现在要找出这个硬币,并且知道它到底是比真的硬币重还是轻,或者所有硬币都是真的。请问: 1)至少要称多少次才能达到目的; 2)如果N=12,是否能在3 次之内将特殊的硬币找到;如果可以,要怎么称? 二、问题分析: 对于这个命题,有几处需要注意的地方: 1)特殊的硬币可能存在,但也可能不存在,即使存在,其或轻或重未知; 2)在目的上,不光要找到这只硬币,还要确定它是重还是轻; 3)天平没有刻度,不能记录每次的读数,只能判断是左边重还是右边重,亦或者是两边平衡; 4)最多只能称3 次。 三、解决方案: 1.关于可行性的分析 在这里,我们把称量的过程看成一种信息的获取过程。对于N 个硬币,他们 可能的情况为2N+1 种,即重(N 种),轻(N 种)或者无假币(1 种)。由于 这2N+1 种情况是等概率的,这个事件的不确定度为: Y=Log(2N+1) 对于称量的过程,其实也是信息的获取过程,一是不确定度逐步消除的过程。 每一次称量只有3 种情况:左边重,右边重,平衡。这3 种情况也是等概率 的,所以他所提供的信息量为: y=Log3 在K 次测量中,要将事件的不确定度完全消除,所以 K= Log(2N+1)/ Log3 根据上式,当N=12 时,K= 2.92< 3 所以13 只硬币是可以在3 次称量中达到

CRC编码实验实验报告

实验三 CRC编码实验实验报告 班级:通信162班 姓名:李浩坤学号:163977 实验名称:CRC编码实验实验日期:6.7 一. 实验目的 1、复习matlab的基本编写方法。 2、学习CRC编码基本流程, 学会调试循环冗余校验码编码程序。 3、根据给出的资料,掌握CRC校验码的编码原理。 二. 实验原理及内容 原理: 1.CRC码简介: 循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC,它是利用除法及余数的原理来作错误侦测(Error Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误。 2.循环冗余校验码(CRC)的基本原理: 在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式 G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 几个需要提前了解的基本概念: 1)、多项式与二进制数码 多项式和二进制数有直接对应关系:x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。可以看出:x的最高幂次为R,转换成对应的二进制数有R+1位。 多项式包括生成多项式G(x)和信息多项式C(x)。 如生成多项式为G(x)=x^4+x^3+x+1,可转换为二进制数码11011。 而发送信息位 1111,可转换为数据多项式为C(x)=x^3+x^2+x+1。 2)、生成多项式 是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。 在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。 应满足以下条件: a、生成多项式的最高位和最低位必须为1。 b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做模2除后应该使余数不为0。 c、不同位发生错误时,应该使余数不同。 d、对余数继续做模2除,应使余数循环。 3)、模2除(按位除) 模2除做法与算术除法类似,但每一位除(减)的结果不影响其它位,即不向上一位借位。所以实际上就是异或。然后再移位移位做下一位的模2减。步骤如下: a、用除数对被除数最高几位做模2减,没有借位。 b、除数右移一位,若余数最高位为1,商为1,并对余数做模2减。若余数最高位为0,商为0,除数继续右移一位。 c、一直做到余数的位数小于除数时,该余数就是最终余数。 三. 实验步骤 1.了解crc编码原理,分析理解检验crc程序的含义。 2.运行mycrc编码程序,观察结果,计算验证程序是否正确。 3.完成练习题。

信息论霍夫曼编码

信息论与编码实验报告 课程名称:信息论与编码 实验名称:霍夫曼编码 班级: 学号: 姓名:

实验目的 1、熟练掌握Huffman编码的原理及过程,并熟练运用; 2、熟练运用MATLAB应用软件,并实现Huffman编码过程。 一、实验设备 装有MATLAB应用软件的PC计算机。 二、实验原理及过程 原理: 1、将信源符号按概率从大到小的排列,令P (X1)>=P(X2)>=P(X3)......P(Xn) 2、给两个概率最小的信源符号P(Xn-1)和P(Xn)各分配一个码位“0”和“1”,将这两个信源符号合并成一个新符号,并用这两个最小的概率之和作为新符号的概率,结果得到一个只包含(n-1)个信源符号的新信源。称为信源的第一次缩减信源,用S1表示。 3、将缩减信源S1的符号仍按概率从大到小顺序排列,重复步骤2,得到只含(n-2)个符号的缩减信源S2. 4、重复上述步骤,直至缩减信源只剩两个符号为止,此时所剩两个符号的概率之和必为1。然后从最后一级缩减信源开始,依编码路径向前返回,就得到各信源符号所对应的码字。 过程: 用MATLAB编写代码实现Huffman编码其程序为: %哈夫曼编码的MA TLAB实现(基于0、1编码):

clc; clear; A=[0.3,0.2,0.1,0.2,0.2];信源消息的概率序列 A=fliplr(sort(A));%按降序排列 T=A; [m,n]=size(A); B=zeros(n,n-1);%空的编码表(矩阵) for i=1:n B(i,1)=T(i);%生成编码表的第一列 end r=B(i,1)+B(i-1,1);%最后两个元素相加 T(n-1)=r; T(n)=0; T=fliplr(sort(T)); t=n-1; for j=2:n-1%生成编码表的其他各列 for i=1:t B(i,j)=T(i); end K=find(T==r); B(n,j)=K(end);%从第二列开始,每列的最后一个元素记录特征元素在

信息论实验报告

实验报告 学院:专业:班级: 姓名:学号:实验日期: 实验名称: 实验一:唯一可译码判别准则的代码实现 实验二:霍夫曼编码的代码实现 实验目的: 实验一: 1.进一步熟悉唯一可译码判别准则; 2.掌握C 语言字符串处理程序的设计和调试技术。 实验二: 1.进一步熟悉Huffman 编码过程; 2.掌握C 语言递归程序的设计和调试技术。 实验仪器: 装有visual studio 2010 的电脑一台 实验原理: 实验一: 根据唯一可译码的判别方法,利用数据结构所学的知识,定义字符串数据类型并利用指针进行编程来实现算法。 算法:1、考察 C 中所有的码字,若Wi 是Wj 的前缀,则将对应的后缀作为一个尾随后缀码放入集合Fi+1 中; 2、考察C 和Fi 俩个集合,若Wi ∈C 是Wj∈F 的前缀或Wi ∈F 是Wj∈C 的前缀,则将相应的后缀作为尾随后缀码放入集合Fi+1 中; 3、F=∪Fi 即为码C 的尾随后缀集合; 4、若F 中出现了C 中的元素,算法终止,返回假(C 不是唯一可译码);否

则若F 中没有出现新的元素,则返回真。 实验二: 1.将q 个信源符合按概率大小递减排列; 2.用“0,1”码符号分别代表概率最小的两个信源符号,并将这两个概率最小的信源符号合并成一个,从而得到只包含q-1 个符号的新信源,称为缩减信源s 1; 3.把缩减信源s1的符号仍按概率大小递减次序排列,再将其最后两个概率最小的信源符号分别用“0”和“1”码符号表示,并且合并成一个符号,这样又形成了q-2 个信源符号的缩减信源s 2; 4.依次继续下去,直至信源符号最后只剩下两个信源符号为止,将这最后两个信源符号分别用二元码符号“0”和“1”表示; 5.然后从最后一级缩减信源开始,进行回溯,就得到各信源符号所对应的码符号序列,即对应的码字。 实验内容与步骤: 实验一: 1.已知:信源符号数和码字集合C; 2.输入:任意的一个码,码字的个数和每个具体的码字在运行时从键盘输入; 3.输出:判决(是唯一可译码/不是唯一可译码);循环(若继续判决则输入1 循环判决,否则输入0 结束运行)。 实验二: 1. 输入:信源符号个数r、信源的概率分布P; 2. 输出:每个信源符号对应的Huffman 编码的码字。 实验数据: 实验一源代码: #include #include char c[100][50]; char f[300][50]; int N,sum=0; int flag; void patterson(char c[],char d[]) { int i,j,k; for(i=0;;i++)

相关文档
最新文档