香农编码C程序及演示结果

香农编码C程序及演示结果
香农编码C程序及演示结果

香农编码

功能简介:首先输入信源符号的个数,然后输入各个信源符号的概率。(概率之和等于1)主程序:李松林

#include 湖北师范学院#include

#define G 20

float a[G]={0},P[G]={0},tmp=0,m[G]={0},k=0,H=0;

int K[G]={0},i,j,N,s[G][G];

void main()

{

loop:printf("请输入信源符号个数N:");

scanf("%d",&N);

for(i=0;i

{

scanf("%f",&a[i]);

tmp+=a[i];

}

if(tmp<0.9999||tmp>1.0001)

{

printf("输入的数据不符合要求,请重新输入\n");

tmp=0;

goto loop;

}

else

{

for(i=0;i

for(j=i+1;j

{

if(a[i]

{

tmp=a[i];

a[i]=a[j];

a[j]=tmp;

}

}

for(i=1;i

for(j=0;j

P[i]+=a[j];

for(i=0;i

{

m[i]=-log10(a[i])/log10(2.0); //求出-log p(ai)并保存在数组m里

for(j=0;j<10;j++) //对存在数组m里的数进行取整(取不小于这个数的最小整数)

{

if(m[i]==j)

{

K[i]=j;

break;

}

if(m[i]>j&&m[i]

{

K[i]=j+1;

break;

}

}

}

for(i=0;i

{

tmp=P[i];

for(j=0;j

{

tmp=tmp*2;

if(tmp<1)

s[i][j]=0;

else

{

s[i][j]=1;

tmp=tmp-1;

}

}

}

for(i=0;i

{

H+=a[i]*m[i]; //求信源熵

k+=a[i]*K[i]; //求平均码长

}

printf("信源消息符号ai 符号概率p(ai) 累加概率Pi -log p(ai) 码字长度Ki 码字\n");

for(i=0;i

{

printf("

a%d %-4.2f %-4.2f %-4.2f %d ",i+1,a[i],P[i],m[i],K[i]);

for(j=0;j

printf("%d",s[i][j]);

printf("\n");

}

printf("信源熵H=%5.3f bit/符号香农码的平均码长k=%5.3f 码元/符号编码效率n=%4.1f%% \n",H,k,100*(H/k));

}

}

第一次输入:6 0.32 0.22 0.18 0.16 0.08 0.04

结果:

第二次输入:7 0.20 0.19 0.18 0.17 0.15 0.10 0.01

结果:

第三次输入:8 0.1 0.18 0.4 0.05 0.06 0.1 0.07 0.04

结果:

实验四_香农编码

实验名称:实验四香农编码 一、实验目的: 加深对香农公式的理解及其具体的实现过程。 二、实验内容与原理: 内容:计算二进制香农编码 三、实验步骤 1.分析香农公式的算法 2.将香农公式的流程转换为具体的代码 四、实验数据及结果分析(可附程序运行截图) 编码的结果: 平均码长和编码效率: 五、代码附录 clear; % c = strcat(a,b)字符串连接 p=[0.25 0.25 0.2 0.15 0.1 0.05]; P=fliplr(sort(p));%按大到小排序 Pa=[0;0];

%累加和的定义----第一行为累加和,第二行为Ki %求累加和 for x=1 for y=1:1:5 %Pa(x,y)=1; Pa(x,y+1)=P(x,y)+ Pa(x,y); end end %ceil 是取向离它最近的大整数圆整 for i=2 for j=1:1:6 Pa(i,j)=ceil( -log2(P(1,j)) ); end end %信源熵 H=0;L=0; for i=1:1:6 H=H-P(i)*log2(P(i)); L=L+P(i)*Pa(2,i); end u=H/L; disp('平均码长:;'); disp(L); disp('编码效率:'); disp(u); %求各符号的编码 temp=[];%临时的编码值:1:6 for m=1:1:6 fprintf('a(%d):',m); for n=1:1:abs(Pa(2,m)) temp(m,n)=Pa(1,m)*2; if temp(m,n)>=1 O(m,n)=1; Pa(1,m)=temp(m,n)-1; else O(m,n)=0; Pa(1,m)=temp(m,n); end fprintf('%d',O(m,n)); end fprintf('\n');

信息论实验报告-

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

实验一香农编码一、程序设计的流程图 二、程序清单 #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

曼彻斯特码原理与应用

曼彻斯特码 1 曼彻斯特原理介及其编码规则 (1) 2 曼彻斯特码的各方面应用 (3) 3 曼彻斯特码与差分曼彻斯特码 (5) 1 曼彻斯特原理介及其编码规则 Manchester编码是一种常用的基带信号编码。它具有内在的时钟信息,因而能使网络上的每一个系统保持同步。在Manchester编码中,时间被划分为等间隔的小段,其中每小段代表一位数据。每一小段时间本身又分为两半,前半个时间段所传信号是该时间段传送比特值的反码,后半个时间段传送的是比特值本身。可见在一个时间段内,其中间点总有一次信号电平的变化,因此携带有信号传送的同步信息而不需另外传送同步信号。 Manchester编码采用电平由高到低变化的下降沿代表0,电平由低到高变化的上升沿代表1;发送和接收的同步工作方式保证了信息传递的方便和可靠。 为了减少控制器与位置反馈单元之间的连线数目,信息的传递可采用两根线的串行方式。发送端和接收端的同步靠信息脉冲串之前的同步脉冲串来实现。 在电信领域,曼彻斯特码,(也称作相位码或者PE)是一种数据通讯线性码,它的每一个数据比特都是由至少一次电压转换的形式所表示的曼彻斯特编码被因此被认为是一种自定时码。自定时意味着数据流的精确同步是可行的。每一个 图1 二进制码和曼彻斯特码对比图 比特都准确的在一预先定义时间时期的时间中被传送。但是,今天有许许多多的复杂的编码方法(例如8B/10B编码),在达到同等目的情况下只需要更少带宽负荷并且只有更少的同步信号相位模糊。

二进制码与曼彻斯特码波形的对比关系如图1所示。 在曼彻斯特编码中,用电压跳变的相位不同来区分1和0,即用正的电压跳变表示0,用负的电压跳变表示1。因此,这种编码也称为相应编码。由于跳变都发生在每一个码元的中间,接收端可以方便地利用它作为位同步时钟,因此,这种编码也称为自同步编码。 用于数字基带传输的码型种类较多,Manchester码是其中常用的一种。Manchester码是一种用跳变沿(而非电平)来表示要传输的二进制信息(0或1),一般规定在位元中间用下跳变表示“1”,用上跳变表示“0”. 曼彻斯特编码被被认为是一种自定时码自定时意味着数据流的精确同步是可行的。每一个比特都准确的在一预先定义时间时期的时间中被传送。 在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作时钟信号,又作数据信号;从高到低跳变表示"1",从低到高跳变表示"0"。还有一种是差分曼彻斯特编码,每位中间的跳变仅提供时钟定时,而用每位开始时有无跳变表示"0"或"1",有跳变为"0",无跳变为"1"。 曼彻斯特编码提供了一种简单的方法在长时间段内没有电平跳变的情况下,仍然能够对任意的二进制序列进行编码,并且防止在这种情况下同步时钟信号的丢失以及防止低通模拟电路中低频直流飘移所引起的比特错误。如果保证传送的编码交流信号的直流分量为零并且能够防止中继信号的基线漂移,那么很容易实现信号的恢复和防止能量的浪费。曼彻斯特码具有丰富的位定时信息。 在物理层的同步时钟编码技术用来将时钟和数据编码统一在一个同步比特数据流中。在这项技术中,在电缆上被传送的真实二元数据不是以一连串的逻辑序列1或者0来表示的(这项技术也是一种不归零码NRZ)。这些要传送的数据比特被转换成一个略微不同格式,比起直接用二进制码(i.e. NRZ)来有许多的优势。 在曼彻斯特编码方案中,比特周期中间的0到1跳变表示逻辑0,比特周期中间的1到0的跳变表示逻辑1。注意信号跳变不一定在‘bitboundaries’比特边界(一个比特和另外一个比特)之间的分界线,但是总是发生在每个比特的中间位置.曼彻斯特编码的规则列出如下表1所示。

香农编码--信息论大作业

香农编码--信息论大作业-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

信息论与编码课程大作业 题目:香农编码 学生姓名: ****** 学号: &********** 专业班级: ******************* 2013 年 5 月 10 日

香农编码 1.香农编码的原理/步骤 香农第一定理指出了平均码长与信源之间的关系,同时也指出了可以通过编码使平均码长达到极限值,这是一个很重要的极限定理。如何构造这种码?香农第一定理指 出,选择每个码字的长度K i将满足式I(x i)≤K i<I p(x i)+1就可以得到这种码。这种编码方法就是香农编码。 香农编码步骤如下: (1)将信源消息符按从大到小的顺序排列。 (2)计算p[i]累加概率; (3)确定满足自身要求的整数码长; (4)将累加概率变为二进制数; (5)取P[i]二进制数的小数点后Ki位即为该消息符号的二进制码字。 2. 用C语言实现 #include #include #include #define max_CL 10 /*maxsize of length of code*/ #define max_PN 6 /*输入序列的个数*/ typedef float datatype; typedef struct SHNODE { datatype pb; /*第i个消息符号出现的概率*/ datatype p_sum; /*第i个消息符号累加概率*/ int kl; /*第i个消息符号对应的码长*/ int code[max_CL]; /*第i个消息符号的码字*/ struct SHNODE *next; }shnolist; datatype sym_arry[max_PN]; /*序列的概率*/ void pb_scan(); /*得到序列概率*/ void pb_sort(); /*序列概率排序*/ void valuelist(shnolist *L); /*计算累加概率,码长,码字*/ void codedisp(shnolist *L); void pb_scan() {

香浓编码实验报告

香农编码实验报告 姓名:徐以刚 学号: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)

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

实验二 香农编码的计算与分析 一、[实验目的] 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 =

曼彻斯特解码原则+125K EM4100系列RFID卡解码源程序分析

曼彻斯特解码原则+125K EM4100系列RFID卡解码源程序分析 曼彻斯特解码原则 1.曼彻斯特编码 曼彻斯特编码(Manchester Encoding),也叫做相位编码(PE),是一个同步时钟编码技术,被物理层使用来编码一个同步位流的时钟和数据。曼彻斯特编码被用在以太网媒介系统中。曼彻斯特编码提供一个简单的方式给编码简单的二进制序列而没有长的周期没有转换级别,因而防止时钟同步的丢失,或来自低频率位移在贫乏补偿的模拟链接位错误。在这个技术下,实际上的二进制数据被传输通过这个电缆,不是作为一个序列的逻辑1或0来发送的(技术上叫做反向不归零制(NRZ))。相反地,这些位被转换为一个稍微不同的格式,它通过使用直接的二进制编码有很多的优点。 曼彻斯特编码,常用于局域网传输。在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作时钟信号,又作数据信号;从高到低跳变表示"1",从低到高跳变表示"0"。还有一种是差分曼彻斯特编码,每位中间的跳变仅提供时钟定时,而用每位开始时有无跳变表示"0"或"1",有跳变为"0",无跳变为"1"。 对于以上电平跳变观点有歧义:关于曼彻斯特编码电平跳变,在雷振甲编写的<<网络工程师教程>>中对曼彻斯特编码的解释为:从低电平到高电平的转换表示1,从高电平到低电平的转换表示0,模拟卷中的答案也是如此,张友生写的考点分析中也是这样讲的,而《计算机网络(第4版)》中(P232页)则解释为高电平到低电平的转换为1,低电平到高电平的转换为0。清华大学的《计算机通信与网络教程》《计算机网络(第4版)》采用如下方式:曼彻斯特编码从高到低的跳变是0 从低到高的跳变是1。 两种曼彻斯特编码是将时钟和数据包含在数据流中,在传输代码信息的同时,也将时钟同步信号一起传输到对方,每位编码中有一跳变,不存在直流分量,因此具有自同步能力和良好的抗干扰性能。但每一个码元都被调成两个电平,所以数据传输速率只有调制速率的1/2。 就是说主要用在数据同步传输的一种编码方式。 【在曼彻斯特编码中,用电压跳变的相位不同来区分1和0,即用正的电压跳变表示0,用负的电压跳变表示1。因此,这种编码也称为相应编码。由于跳变都发生在每一个码元的中间,接收端可以方便地利用它作为位同步时钟,因此,这种编码也称为自同步编码。】 2. 曼彻斯特编码(Manchester Encoding),也叫做相位编码(PE);常用于局域网传输。在曼

香农编码实验报告

湖南大学 信息科学与工程学院 实验报告 实验名称香农编码 课程名称信息论与编码1、实验目的

(1)进一步熟悉Shannon 编码算法; (2)掌握C 语言程序设计和调试过程中数值的进制转换、数值与字符串之间的转换等 技术。 2、实验要求 (1)输入:信源符号个数q 、信源的概率分布p ; (2)输出:每个信源符号对应的Shannon 编码的码字。 3、Shannon 编码算法 1:procedure SHANNON(q,{P i }) 2: 降序排列{P i } 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 后缺少赋值符号使之不能通过编译 纠错:添加上赋值符号 3、error C2018: unknown character '0xa1' 原因:有不能被识别的符号 纠错:在错误处将不能识别的符号改为符合C 语言规范的符号 4、error C2021: expected exponent value, not ' ' 1 1()i k k p s -=∑

实验一 香农编码和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 编码各有何优缺点,其压缩效率如何?

香农编码实验报告

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

目录 一、香农编码 (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 -=∑

信息论与编码实验报告.

本科生实验报告 实验课程信息论与编码 学院名称信息科学与技术学院 专业名称通信工程 学生姓名 学生学号 指导教师谢振东 实验地点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

曼彻斯特编码

曼彻斯特编码(Manchester Encoding),也叫做相位编码(PE),是一个 曼彻斯特编码 同步时钟编码技术,被物理层使用来编码一个同步位流的时钟和数据。曼彻斯特编码被用在以太网媒介系统中。曼彻斯特编码提供一个简单的方式给编码简单的二进制序列而没有长的周期没有转换级别,因而防止时钟同步的丢失,或来自低频率位移在贫乏补偿的模拟链接位错误。在这个技术下,实际上的二进制数据被传输通过这个电缆,不是作为一个序列的逻辑1或0来发送的(技术上叫做反向不归零制(NRZ))。相反地,这些位被转换为一个稍微不同的格式,它通过使用直接的二进制编码有很多的优点。 曼彻斯特编码,常用于局域网传输。在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作时钟信号,又作数据信号;从高到低跳变表示"1",从低到高跳变表示"0"。还有一种是差分曼彻斯特编码,每位中间的跳变仅提供时钟定时,而用每位开始时有无跳变表示"0"或"1",有跳变为"0",无跳变为"1"。 对于以上电平跳变观点有歧义:关于曼彻斯特编码电平跳变,在雷振甲编写的<<网络工程师教程>>中对曼彻斯特编码的解释为:从低电平到高电平的转换表示1,从高电平到低电平的转换表示0,模拟卷中的答案也是如此,张友生写的考点分析中也是这样讲的,而《计算机网络(第4版)》中(P232页)则解释为高电平到低电平的转换为1,低电平到高电平的转换为0。清华大学的《计算机通信与网络教程》《计算机网络(第4版)》采用如下方式:曼彻斯特编码从高到低的跳变是 0 从低到高的跳变是 1。 两种曼彻斯特编码是将时钟和数据包含在数据流中,在传输代码信息的同时,也将时钟同步信号一起传输到对方,每位编码中有一跳变,不存在直流分量,因此具有自同步能力和良好的抗干扰性能。但每一个码元都被调成两个电平,所以数据传输速率只有调制速率的1/2。 [编辑本段] 编码方式 就是说主要用在数据同步传输的一种编码方式。 【在曼彻斯特编码中,用电压跳变的相位不同来区分1和0,即用正的电压跳变表示0,用负的电压跳变表示1。因此,这种编码也称为相位编码。由于跳变都发生在每一个码元的中间,接收端可以方便地利用它作为位同步时钟,因此,这种编码也称为自同步编码。】 【关于数据表示的约定】 事实上存在两种相反的数据表示约定。 第一种是由G. E. Thomas, Andrew S. Tanenbaum等人在1949年提出的,它规定0是由低-高的电平跳变表示,1是高-低的电平跳变。 第二种约定则是在IEEE 802.4(令牌总线)和低速版的IEEE 802.3 (以太网)中规定, 按照这样的说法, 低-高电平跳变表示1, 高-低的电平跳变表示0。 由于有以上两种不同的表示方法,所以有些地方会出现歧异。当然,这可以在差分曼彻斯特编码(Differential Manchester encoding)方式中克服. 曼切斯特和差分曼切斯特编码是原理基本相同的两种编码,后者是前者的改进。他们的特征是在传输的每一位信息中都带有位同步时钟,因此一次传输可以允许有很长的数据位。 曼切斯特编码的每个比特位在时钟周期内只占一半,当传输“1”时,在时钟周期的前一半为高电平,后一半为低电平;而传输“0”时正相反。这样,每个时钟周期内必有一次跳变,这种跳变就是位同步信号。

信息论实验报告香农编码

目录 实验目的: (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>geshu; cout<<"请按照先后顺序输入符号"<>fuhao[i]; cout<<"请输入各相应符号的概率"<>gailv[j]; InsertSort( gailv,fuhao, geshu); for(z=0;z=1)

曼彻斯特编解码器

工具软件实训报告 项目名称:曼彻斯特编解码器指导老师: 系科: 专业: 姓名: 学号:

目录: 一:实训要求 (3) 二:实训原理 (3) 三:实训思路 (4) 四:实训步骤 (4) 五:原理图、仿真结果图以及结论分析 (5) 1.曼彻斯特编解码器(实现16bit数据的编解码) (5) 1.1曼彻斯特编解码器电路原理图: (5) 1.2模块详解 (6) 1.3仿真图以及分析 (10) 六:个人总结 (11)

一:实训要求 (1)通过学习原理图输入设计的方法掌握使用工具软件Quartus Ⅱ设计小型数字电路; (2)查阅文献,了解曼彻斯特编解码器的基本原理,并提出在Quartus Ⅱ软件环境下用VHDL进行仿真的方案。 (3)完成设计对编码器的要求:能够对输入的16bit数据进行曼彻斯特编码,输入有时钟、使能、16bit并行数据、写信号等;输出有编码结束和曼彻斯特编码信号(都为1位信号)等。 (4)完成设计对解码器要求:能够把输入的串行曼彻斯特码解码成原先的并行数据,输入有时钟、曼彻斯特码输入(1bit)、使能信号等,输出有提取的同步时钟信号、解码完成(1bit),并行数据(16bit)等。 二:实训原理 曼彻斯特编码,也叫做相位编码(PE),是一个同步时钟编码技术,在以太网媒介系统中,被物理层使用来编码一个同步位流的时钟和数据。它的每一个数据比特都是由至少一次电压转换的形式所表示的。在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作为时钟信号,又作为数据信号。按照曼彻斯特码在IEEE 802.4(令牌总线)以及IEEE 802.3 (以太网)中的规定,本次实训将从高电平到低电平的

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

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

年月日 目录 实验一信源熵值的计算 (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]);

曼彻斯特码

曼彻斯特码Manchester code (又称裂相码、双向码),一种用电平跳变来表示1或0的编码,其变化规则很简单,即每个码元均用两个不同相位的电平信号表示,也就是一个周期的方波,但0码和1码的相位正好相反。 其对应关系为: 0--》01 1--》10 信码0 1 0 0 1 0 1 1 0 双向码01 10 01 01 10 01 10 10 01 曼彻斯特编码是一种自同步的编码方式,即时钟同步信号就隐藏在数据波形中。在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作时钟信号,又作数据信号;从高到低跳变表示"1",从低到高跳变表示"0"。还有一种是差分曼彻斯特编码,每位中间的跳变仅提供时钟定时,而用每位开始时有无跳变表示"0"或"1",有跳变为" 0",无跳变为"1"。 两种曼彻斯特编码是将时钟和数据包含在数据流中,在传输代码信息的同时,也将时钟同步信号一起传输到对方,每位编码中有一跳变,不存在直流分量,因此具有自同步能力和良好的抗干扰性能。但每一个码元都被调成两个电平,所以数据传输速率只有调制速率的1/2。 曼彻斯特编码 曼彻斯特编码(Manchester Encoding),也叫做相位编码(PE),是一个同步时钟编码技术,被物理层使用来编码一个同步位流的时钟和数据。曼彻斯特编码被用在以太网媒介系统中。曼彻斯特编码提供一个简单的方式给编码简单的二进制序列而没有长的周期没有转换级别,因而防止时钟同步的丢失,或来自低频率位移在贫乏补偿的模拟链接位错误。在这个技术下,实际上的二进制数据被传输通过这个电缆,不是作为一个序列的逻辑1或0来发送的(技术上叫做反向不归零制(NRZ))。相反地,这些位被转换为一个稍微不同的格式,它通过使用直接的二进制编码有很多的优点。 曼彻斯特编码,常用于局域网传输。在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作时钟信号,又作数据信号;从低到高跳变表示"0",从高到低跳变表示"1"。还有一种是差分曼彻斯特编码,每位中间的跳变仅提供时钟定时,而用每位开始时有无跳变表示"0"或"1",有跳变为"0",无跳变为"1"。 对于以上电平跳变观点有歧义:关于曼彻斯特编码电平跳变,在雷振甲编写的<<网络工程师教程>>中对曼彻斯特编码的解释为:从低电平到高电平的转换表示1,从高电平到低电平的转换表示0,模拟卷中的答案也是如此,张友生写的考点分析中也是这样讲的,而《计算机网络(第4版)》中(P232页)则解释为高电平到低电平的转换为1,低电平到高电平的转换为0。清华大学的《计算机通信与网络教程》《计算机网络(第4版)》采用如下方式:曼彻斯特编码从高到低的跳变是 1 从低到高的跳变是0。

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

实验二 香农编码得计算与分析 一、[实验目得] 1、理解香农第一定理指出平均码长与信源之间得关系。 2、加深理解香农编码具有得重要理论意义。 3、掌握Shannon 编码得原理。 4、掌握Shannon 编码得方法与步骤。 5、熟悉shannnon 编码得各种效率 二、[实验环境] windows XP,MATLAB 7 三、[实验原理] 香农第一定理: 设离散无记忆信源为 熵为H(S),其N 次扩展信源为 熵为H(S N )。码符号集X=(x1,x2,…,xr)。先对信源进行编码,总可以找到一种编码方法,构成惟一可以码,使S 中每个信源符号所需得平均码长满足: 当N 时 就是平均码长 就是对应得码字长度 四、[实验内容] 1、根据实验原理,设计shannon 编码方法,在给定 条件下,实现香农编码并算出编码效率。 2、请自己构造两个信源空间,根据求Shannon 编码结果说明其物理意义。 五、[实验过程] 每个实验项目包括:1)设计思路2)实验中出现得问题及解决方法; 要求: 1)有标准得实验报告 (10分) S P s1 s2 s3 s4 s5 s6 s7 0、01 0、17 0、19 0、10 0、15 0、=

2)程序设计与基本算法合理(30分) 3)实验仿真具备合理性(30分) 4)实验分析合理(20分) 5)能清晰得对实验中出现得问题进行分析并提出解决方案(10分) 附录: 程序设计与算法描述参考 (1))按降序排列概率得函数 %[p,x]=array(P)为按降序排序得函数% %P为信源得概率矢量,x为概率元素得下标矢量% %P为排序后返回得信源得概率矢量% %x为排序后返回得概率元素得下标矢量% %******************************% function[p,x]=array(P) n=length(P); X=1:n; P=[P;X]; for i=1:n max=P(1,i); maxN=i; MAX=P(:,i); for j=i:n if(max1) if (i

相关文档
最新文档