文档库 最新最全的文档下载
当前位置:文档库 › DPCM编码MATLAB实现

DPCM编码MATLAB实现

DPCM编码MATLAB实现
DPCM编码MATLAB实现

DPCM编码MATLAB实现

%本文是数字图像处理的一个源程序

%实现的功能是DPCM编码

%DPCM编码,简称差值编码,是对模拟信号幅度抽样的差值进行量化编码的调制方式

%本程序实现一阶/二阶/三阶/四阶DPCM数字信号预测

%一阶/二阶/三阶/四阶预测的区别不仅在于信号的清晰度,而更重要在于

%阶数越高,图像越光滑.

clc

clear

close all;

%从D盘导入图片,以学校风光图片为例实现DPCM

I03=imread('d:\shuxuejianmo.bmp');

%把RGB图像转化为灰度图像

I02=rgb2gray(I03);

I=double(I02);

fid1=fopen('mydata1.dat','w');

fid2=fopen('mydata2.dat','w');

fid3=fopen('mydata3.dat','w');

fid4=fopen('mydata4.dat','w');

[m,n]=size(I);

%对预测信号将边缘锁定,防止程序运行时抓不到数据

J1=ones(m,n);

J1(1:m,1)=I(1:m,1);

J1(1,1:n)=I(1,1:n);

J1(1:m,n)=I(1:m,n);

J1(m,1:n)=I(m,1:n);

J2=ones(m,n);

J2(1:m,1)=I(1:m,1);

J2(1,1:n)=I(1,1:n);

J2(1:m,n)=I(1:m,n);

J2(m,1:n)=I(m,1:n);

J3=ones(m,n);

J3(1:m,1)=I(1:m,1);

J3(1,1:n)=I(1,1:n);

J3(1:m,n)=I(1:m,n);

J3(m,1:n)=I(m,1:n);

J4=ones(m,n);

J4(1:m,1)=I(1:m,1);

J4(1,1:n)=I(1,1:n);

J4(1:m,n)=I(1:m,n);

J4(m,1:n)=I(m,1:n);

%一阶DPCM编码

for k=2:m-1

for l=2:n-1

J1(k,l)=I(k,l)-I(k,l-1);

end

end

J1=round(J1);

cont1=fwrite(fid1,J1,'int8');

cc1=fclose(fid1);

%二阶DPCM编码

for k=2:m-1

for l=2:n-1

J2(k,l)=I(k,l)-(I(k,l-1)/2+I(k-1,l)/2);

end

end

J2=round(J2);

cont2=fwrite(fid2,J2,'int8');

cc2=fclose(fid2);

%三阶DPCM编码

for k=2:m-1

for l=2:n-1

J3(k,l)=I(k,l)-(I(k,l-1)*(4/7)+I(k-1,l)*(2/7)+I(k-1,l-1)*(1/7));

end

end

J3=round(J3);

cont3=fwrite(fid3,J3,'int8');

cc3=fclose(fid3);

%四阶DPCM编码

for k=2:m-1

for l=2:n-1

J4(k,l)=I(k,l)-(I(k,l-1)/2+I(k-1,l)/4+I(k-1,l-1)/8+I(k-1,l+1)/8);

end

end

J4=round(J4);

cont4=fwrite(fid4,J4,'int8');

cc4=fclose(fid4);

%=====================================================================

%以上是DPCM编码的编码过程,为了使程序具有连贯性,将编码和解码放在同一个M文件目录下

%=====================================================================

%以下是DPCM解码

fid1=fopen('mydata1.dat','r');

fid2=fopen('mydata2.dat','r');

fid3=fopen('mydata3.dat','r');

fid4=fopen('mydata4.dat','r');

I11=fread(fid1,cont1,'int8');

I12=fread(fid2,cont2,'int8');

I13=fread(fid3,cont3,'int8');

I14=fread(fid4,cont4,'int8');

tt=1;

for l=1:n

for k=1:m

I1(k,l)=I11(tt);

tt=tt+1;

end

end

tt=1;

for l=1:n

for k=1:m

I2(k,l)=I12(tt);

tt=tt+1;

end

end

tt=1;

for l=1:n

for k=1:m

I3(k,l)=I13(tt);

tt=tt+1;

end

end

tt=1;

for l=1:n

for k=1:m

I4(k,l)=I14(tt);

tt=tt+1;

end

end

I1=double(I1);

I2=double(I2);

I3=double(I3);

I4=double(I4);

J1=ones(m,n);

J1(1:m,1)=I1(1:m,1);

J1(1,1:n)=I1(1,1:n);

J1(1:m,n)=I1(1:m,n);

J1(m,1:n)=I1(m,1:n);

J2=ones(m,n);

J2(1:m,1)=I2(1:m,1);

J2(1,1:n)=I2(1,1:n);

J2(1:m,n)=I2(1:m,n);

J2(m,1:n)=I2(m,1:n);

J3=ones(m,n);

J3(1:m,1)=I3(1:m,1);

J3(1,1:n)=I3(1,1:n);

J3(1:m,n)=I3(1:m,n);

J3(m,1:n)=I3(m,1:n);

J4=ones(m,n);

J4(1:m,1)=I4(1:m,1);

J4(1,1:n)=I4(1,1:n);

J4(1:m,n)=I4(1:m,n);

J4(m,1:n)=I4(m,1:n);

%一阶解码

for k=2:m-1

for l=2:n-1

J1(k,l)=I1(k,l)+J1(k,l-1);

end

end

cc1=fclose(fid1);

J1=uint8(J1);

%二阶解码

for k=2:m-1

for l=2:n-1

J2(k,l)=I2(k,l)+(J2(k,l-1)/2+J2(k-1,l)/2);

end

end

cc2=fclose(fid2);

J2=uint8(J2);

%三阶解码

for k=2:m-1

for l=2:n-1

J3(k,l)=I3(k,l)+(J3(k,l-1)*(4/7)+J3(k-1,l)*(2/7)+J3(k-1,l-1)*(1/7));

end

end

cc3=fclose(fid3);

J3=uint8(J3);

%四阶解码

for k=2:m-1

for l=2:n-1

J4(k,l)=I4(k,l)+(J4(k,l-1)/2+J4(k-1,l)/4+J4(k-1,l-1)/8+J4(k-1,l+1)/8);

end

end

cc4=fclose(fid4);

J4=uint8(J4);

%分区画图

figure(1)

subplot(3,2,1);

imshow(I03);

%隐藏坐标轴和边框,以免坐标轴与标题重叠

axis off

box off

title('原始图像','fontsize',11,'fontname','隶体');

subplot(3,2,2);

imshow(I02);

axis off

box off

title('灰度图像','fontsize',11,'fontname','隶体');

subplot(3,2,3);

imshow(J1);

axis off

box off

title('一阶预测','fontsize',11,'fontname','隶体');

subplot(3,2,4);

imshow(J2);

axis off

box off

title('二阶预测','fontsize',11,'fontname','隶体');

subplot(3,2,5);

imshow(J3);

axis off

box off

title('三阶预测','fontsize',11,'fontname','隶体');

subplot(3,2,6);

imshow(J4);

axis off

box off

title('四阶预测','fontsize',11,'fontname','隶体');

% 学会DPCM编码必须彻底了解DPCM编码原理

% DPCM编码是数字图形处理的一项应用

% Removing all variables, functions, and MEX-files from memory, leaving the % workspace empty.

clear all

% Deleting all figures whose handles are not hidden.

close all

% Deleting all figures including those with hidden handles.

close all hidden

% Clearing all input and output from the Command Window display giving us a clean screen. clc

% Opening the file 'TEOTH.mp3' in the read access mode.

fid = fopen ('TEOTH.mp3','r');

% Generating the input signal 'm(t)' by reading the binary data in 16 bit

% integer format from the specified file and writing it into a matrix

% 'm(t)' and the number of elements successfully read is returned into an

% output argument 'count'.

[m,count] = fread (fid,'int16');

% Redefining the count for efficiency.

count = 8500;

% Setting the sampling frequency.

% because the audio signal has a maximum frequency of 4K and according to

% Nyquist criteria, we get the following sampling frequency.

Fs = 8000;

% Setting the sampling instant.

Ts = 1;

% Setting the number of samples to be used.

No_Samples = (2*Fs)+Ts;

% Define the time vector for the calculations.

time = [1:Fs/64];

% Calculating maximum value of the input signal 'm(t)'.

Mp = max (m)

% Setting number of bits in a symbol.

bits = 5;

% Number of levels of uniform quantization.

levels = 2^bits;

% Calculating the bit rate.

bit_rate = 8000*bits;

% Since the DPCM is implemented by the linear predictor (transversal % predictor) Hence setting up the prediction coefficient 'alpha'.

alpha = 0.45;

% Transmitting the difference.

% Since there is no estimated value before the first sample so we get diff_sig(1) = m(1);

% Calculating the rest of the values of the difference signal with the help % of coefficient.

for k = 2:count,

diff_sig(k) = m(k) - alpha*m(k-1);

end

% Calculating maximum value of the input signal 'diff_sig(t)',i.e, to be

% quantized.

Dp = max (diff_sig)

% Calculating the step size of the quantization.

step_size = (2*Mp)/levels

% Quantizing the difference signal.

for k = 1:No_Samples,

samp_in(k) = m(k*Ts);

quant_in(k) = samp_in(k)/step_size;

error(k) = (samp_in(k) - quant_in(k))/No_Samples;

end

% quant_in = diff_sig/step_size;

% Indicating the sign of the input signal 'm(t)' and calculating the % quantized signal 'quant_out'.

signS = sign (m);

quant_out = quant_in;

for i = 1:count,

S(i) = abs (quant_in(i)) + 0.5;

quant_out(i) = signS(i)*round(S(i))*step_size;

end

% Decoding the signal using the quantized difference signal.

s_out = quant_out;

s_out(1) = quant_out(1);

for k = 2:count,

s_out(k) = quant_out(k) + alpha*s_out(k-1);

end

% Calculating the quantization noise 'Nq'.

Nq = (((step_size)^2)/12)*((Mp/Dp)^2)

% Calculating signal to noise ratio 'SNR'.

SNR = 1.5*(levels^2)

SNR_db = 10*log10(SNR)

% Plotting the input signal 'm(t)'.

%figure;

subplot(4,1,1);

plot(time,m(time),time,s_out(time),'r');

title('Input Speech Signal');

xlabel('Time');

ylabel('m(t)');

grid on;

% Plotting the quantized signal 'quant_in(t)'.

%figure;

subplot(4,1,2);

stem(time,quant_in(time),'r');

title('Quantized Speech Signal');

xlabel('Time');

ylabel('Levels');

grid on;

% Plotting the DPCM signal 's_out(t)'.

%figure;

subplot(4,1,3);

plot(time,s_out(time));

title('Decoded DPCM Speech Signal');

xlabel('Time');

ylabel('Dq(t)');

grid on;

% Plotting the error signal 'error(t)'.

subplot(4,1,4);

plot(time,error(time));

title('Error Signal');

xlabel('Time');

ylabel('Error(t)');

grid on;

% Removing all variables, functions, and MEX-files from memory, leaving the % workspace empty.

clear all

clear all

close all

%Solicitatipo de se馻l a muestrear

opcion = input('Escriba 1 siquierecodificar se馻l de audio o 2 siquierecodificarotra: ')

%abre se馻l seleccionadapor el usuario

if opcion==1;

t_input = input('escriba el tiempo en segundosquedeseegrabar el audio: ');

m = wavrecord(t_input*30000,30000,'int16');

%fid = fopen ('sonido.wav','r');

%m = fread (fid,'int16');

ini_cuenta = 10;

end

if opcion==2;

t = input('escriba el vector de tiempopara la se馻l: ');

m = input('escriba la se馻l quedeseecodificar f(t): ');

ini_cuenta = 2;

end

%Solicitafrecuencia de muestreo y niveles de cuantizacion

Fs = input('escriba la frecuencia de muestreo: ');

levels = input('escriba los niveles de cuantizacion: ');

Mp = max (m) %Calcula el nivel m醲imo de la se馻l

step_size = (Mp*2)/levels %Incremento entre cadanivel de cuant

particion = [-Mp:step_size:Mp]; %vector de particion (cuant)

%particion = [0:step_size:2*Mp];

Ts = 1;

longitud_m = length(m);

inc_muestreo = longitud_m/Fs;

red_inc_muestreo = floor(inc_muestreo);

No_samples = (red_inc_muestreo*Fs)+1; %Numero de muestras,

%Muestreo

for k=ini_cuenta:No_samples

if k == ini_cuenta

samp_in(k-1) = 0;

ind_pcm = 1

end

residuo = rem(k,red_inc_muestreo);

if residuo == 0

samp_in(k) = m(k);

elseifresiduo ~= 0

samp_in(k) = samp_in(k-1);

end

end

%Cuantizacion

quant = quantiz(samp_in,particion);

pcm_cad = dec2bin(quant)

ind_pcm = 1;

%Genera codigobinario de PCM

for h=ini_cuenta:No_samples

residuo = rem(h,red_inc_muestreo);

if residuo == 0

PCM(ind_pcm) = str2num(pcm_cad(h,:));

ind_pcm = ind_pcm+1;

end

end

subplot(2,2,1); plot(m); title('se馻l anal骻ica'); xlabel('tiempo'); ylabel('amplitud'); subplot(2,2,2); stairs(samp_in); title('se馻l muestreada'); xlabel('tiempo'); ylabel('amplitud'); subplot(2,2,3); plot(quant); title('se馻l cuantizada'); xlabel('tiempo'); ylabel('niveles de cuantizacion');

DPCM预测编码的MATLAB原代码: 收藏

DPCM预测编码原代码:

i1=imread('3.jpg');

i1=rgb2gray(i1);

i1=imcrop(i1,[20 20 160 160]);

i=double(i1);

[m,n]=size(i);

p=zeros(m,n);

y=zeros(m,n);

y(1:m,1)=i(1:m,1);

p(1:m,1)=i(1:m,1);

y(1,1:n)=i(1,1:n);

p(1,1:n)=i(1,1:n);

y(1:m,n)=i(1:m,n);

p(1:m,n)=i(1:m,n);

p(m,1:n)=i(m,1:n);

y(m,1:n)=i(m,1:n);

for k=2:m-1;

for l=2:n-1;

y(k,l)=(i(k,l-1)/2+i(k-1,l)/4+i(k-1,l-1)/8+i(k-1,l+1)/8);

p(k,l)=round(i(k,l)-y(k,l));

end

end

p=round(p);

subplot(3,2,1),imshow(i1);title('原灰度图像');

subplot(3,2,2),imshow(y,[0 256]);title('利用三个相邻块线性预测后的图像'); subplot(3,2,3),imshow(abs(p),[0 1]);title('编码的绝对残差图像');

j=zeros(m,n);

j(1:m,1)=y(1:m,1);

j(1,1:n)=y(1,1:n);

j(1:m,n)=y(1:m,n);

j(m,1:n)=y(m,1:n);

for k=2:m-1;

for l=2:n-1;

j(k,l)=p(k,l)+y(k,l);

end

end

for r=1:m

for t=1:n

d(r,t)=round(i1(r,t)-j(r,t));

end

end

subplot(3,2,4),imshow(abs(p),[0 1]);title('解码用的残差图像');

subplot(3,2,5),imshow(j,[0 256]);title('使用残差和线性预测重建后的图像'); subplot(3,2,6),imshow(abs(d),[0 1]);title('解码重建后图像的误差');

信息论与编码

滨江学院 《信息论与编码》课程论文题目香农编码及其应用改善 院系电子工程系 专业班级通信班 学生姓名 学号 教师杨玲 成绩 二O一四年十二月二十二日

香农编码及其应用改善 摘要:香农编码作为变长信源编码的重要方法之一,具有重要的理论指导意义,但其在实际应用中存在效率较低的缺点。本文对香农编码方法进行阐述,及运用MATLAB实现香农编码操作,并找出香农编码的不足,针对其缺陷,通过判断码字之间是否互为前缀来确定码字的方法对其编码算法进行了优化,给出了优化算法的实现步骤。最后,通过具体实例分析得出本文提出的改善算法能有效地提高编码效率。 关键词:香农码方法;MATLAB;编码效率;优化编码;

引言:1948年,美国工程师香农在贝尔实验室杂志上发表了长文《通讯的数学原理》他用概率测度和数理统计的方法系统地讨论了通信的基本问题,得出了几个重要而带有普遍意义的结论,并由此奠定了现代信息论的基础。香农编码理论揭示了在通信系统中,采用适当的编码后能够实现高效率和高可靠地传输信息的规律,并给出了相应的信源编码定理和信道编码定理。从数学观点看,这些定理是最优编码的存在定理。它们给出了编码的性能极限,在理论上阐明了通信系统中各种因素的相互关系,为寻找最佳通信系统提供了重要的理论依据。 在多媒体数据的传输和存储过程中,为了确保通信的顺利进行,必须要通过信源编码技术必须对多媒体信息进行压缩处理。香农编码技术作为变长信源编码的重要方法之一,具有重要的理论指导意义。但由于在香农编码的过程中先限定每个码字的码长,以至于在码字的选取中是以每个码字的码长作为先决条件而不考虑各个码字之间的相关性,因此编出的码字往往存在较大的冗余,影响了整个通信系统的传输效率。就这一缺陷,本文提出了通过剔除先限定每个码字的码长这一过程,通过判断码字之间是否互为前缀来确定码字的方法对其编码算法进行了改善。 1.香农编码的方法 在写香农编码之前先简单介绍下信源编码: 编码分为信源编码和信道编码,其中信源编码又分为无失真和限失真。由于这些定理都要求符号数很大,以便其值接近所规定的值,因而这些定理被称为极限定理。一般称无失真信源编码定理为第一极限定理;信道编码定理(包括离散和连续信道)称为第二极限定理;限失真信源编码定理称为第三极限定理。完善这些定理是香农信息论的主要内容。 信源编码的基础是信息论中的两个编码定理:无失真编码定理和限失真编码地宫里,前者是可逆编码的基础。可逆是指当信源符号转换成代码后,可从代码无失真的恢复原信源符号。当已知信源符号的概率特性时,可计算它的符号熵,这表示每个信源符号所载有的信息量。编码定理不但证明了必定存在一种编码方法,可使代码的平均长度可任意接近但不低于符号熵,而且还阐明达到这目标的途径,就是使概率与码长匹配。无失真编码或可逆编码只适用于离散信源。本节讨论离散信源编码。首先从无失真编码定理出发,重点讨论以香农码为代表的最

《信息论与编码》教学大纲

《信息论与编码》教学大纲 一课程简介 课程编号:04254002 课程名称:信息论与编码Informatics & Coding 课程类型:基础课必修课 学时:32 学分:2 开课学期:第六学期 开课对象:通信、电子专业 先修课程:概率论与数理统计、信号与系统、随机信号原理。 参考教材:信息论与编码,陈运,周亮,陈新,电子工业出版社,2002年8月 二课程性质、目的与任务 信息论在理论上指出了建立最佳编码、最佳调制和最佳接收方法的最佳系统的理论原则,它对通信体制和通信系统的研究具有指导意义。提高信息传输的可靠性和有效性始终是通信工作所追求的目标。因此,信息论与编码是从事通信、电子系统工程的有关工程技术人员都必须掌握的基本理论知识。 内容提要:本课程包括狭义相对论和提高通信可靠性的差错控制编码理论。信息论所研究的主要问题是在通信系统设计中如何实现有效性和可靠性。 三教学基本内容与基本要求 本课程总学时为32。其中理论教学为28,实验学时为4。 主要的理论教学内容包括:离散信源和连续信源的熵、条件熵、联合熵和平均互信息量的概念及性质;峰值功率受限和平均功率受限下的最大熵定理和连续信源熵的变换;变长码的霍夫曼编码方法,熟悉编码效率和平均码长的计算;最大后验概率准则和最大似然译码准则等。 实验内容主要包括:离散无记忆信道容量的迭代算法,循环码的编译码。 四教学内容与学时分配 第3章离散信源无失真编码

第6章网络信息论 (教学要求:A—熟练掌握;B—掌握;C—了解) 五实习、实验项目及学时分配 1.离散无记忆信道容量的迭代算法2学时 要求用Matlab编写计算离散信道容量的实用程序并调试成功,加深对信道容量的理解。 2.循环码的编译码2学时 要求用Matlab编写程序,用软件完成循环码的编译码算法。 六教学方法与手段 常规教学与多媒体教学相结合。

信息论与编码实验程序与结果图(matlab)

信源熵实验程序: clc; close all; clear; linwidd=1 fontt=20 p0=0; pd=1; N=20 p=linspace(p0,pd,N); I=-log2(p); plot(p,I,'k'); title('I=-log2(p)函数图'); xlabel('p');ylabel('I'); clc; close all; clear; linwidd=1 fontt=20 p0=0; pd=1; N=20 p=linspace(p0,pd,N); H=-p.*log2(p)-(1-p).*log2(1-p); plot(p,H,'k'); title('H=-p.*log2(p)-(1-p).*log2(1-p)函数图'); xlabel('p');ylabel('H'); 信道容量实验程序: clc; close all; clear; linwidd=1 fontt=20 p0=0; pd=1; N=20 p=linspace(p0,pd,N); r=4 c=log2(r)+(1-p).*log2(1-p)+p.*log2(p/(r-1)); plot(p,c,'k'); title('强对称信道容量数值模拟图');

有噪信道编码--费诺不等式程序:结果图clc;close all;clear; r=3;p0=0.00001;pd=0.99999;N=2000; p=linspace(p0,pd,N); q=1-p; H=-p.*log2(p)-q.*log2(q); hold on HH=H+p.*log2(r-1) title('费诺不等式示意图');box on xlabel('PE'); ylabel('H(X/Y)'); plot(p,HH,'k:') hold on hold on fill([p,1],[HH,0],[0.6,0.6,0.6]) stem((r-1)/r,1.59,'--.r') text(0.66,1.6,'最大值') 香农编码程序: clc;clear all;close all; p=[0.2 0.19 0.18 0.17 0.15 0.1 0.01]; if sum(p)<1||sum(p)>1 error('输入概率不符合概率分布') end [p index]=sort(p,'descend'); n=length(p); pa=zeros(n,1); for ii=2:n pa(ii)=pa(ii-1)+p(ii-1); end k=ceil(-log2(p));%码字长度计算 c=cell(1,n);%生成元胞数组,用来存不同长度的码字 for ii=1:n c{ii}=''; tmp=pa(ii); for jj=1:k(ii) tmp=tmp*2; if tmp>=1 tmp=tmp-1; %c{ii}{jj}='1'; c{ii}=[char(c{ii}),'1']; else %c{ii}{jj}='0'; c{ii}=[char(c{ii}),'0']; end end end c(index)=c;%换回原来的顺序 codelength=zeros(1,n);%码长初始化 for ii=1:n fprintf(['第',num2str(ii),'个消息对应为']); disp(c{ii});%显示码字 codelength(ii)=length(c{ii});% end n_average=sum(codelength.*p) %平均码长 fprintf('平均码长为');disp(n_average); H=-sum(p.*log2(p)); fprintf('信源熵');disp(H); x=H/(n_average.*log2(2)) fprintf('编码效率');disp(x); figure h=stem(1:n,codelength);% axis([0 n+1 0 n+1]); set(h,'MarkerFaceColor','blue','linewidth',2) 实验结果 第1 个消息对应为000 第2个消息对应为001 第3个消息对应为011 第4个消息对应为100 第5个消息对应为101 第6个消息对应为1110 第7个消息对应为1111110 n_average = 3.1400 平均码长为 3.1400 信源熵 2.6087 x =0.8308 编码效率 0.8308

信息论编码实验一MATLAB的基本操作

实验一 MATLAB 的基本操作 一、实验目的 1、掌握Matlab 软件使用的基本方法; 2、熟悉Matlab 的数据表示、基本运算方法; 3、熟悉Matlab 绘图命令及基本绘图控制。 二、实验仪器与软件 1、PC 机 1台 2、MATLAB7.0环境 三、实验原理 MATLAB 环境是一种为数值计算、数据分析和图形显示服务的交互式的环境。MATLAB 有3种窗口,即:命令窗口(The Command Window )、m-文件编辑窗口(The Edit Window )和图形窗口(The Figure Window ),而Simulink 另外又有Simulink 模型编辑窗口。 1、命令窗口(The Command Window ) 当MATLAB 启动后,出现的最大的窗口就是命令窗口。用户可以在提示符“>>”后面输入交互的命令,这些命令就立即被执行。 在MATLAB 中,一连串命令可以放置在一个文件中,不必把它们直接在命令窗口内输入。在命令窗口中输入该文件名,这一连串命令就被执行了。因为这样的文件都是以“.m ”为后缀,所以称为m-文件。 2、m-文件编辑窗口(The Edit Window ) 我们可以用m-文件编辑窗口来产生新的m-文件,或者编辑已经存在的m-文件。在MATLAB 主界面上选择菜单“File/New/M-file ”就打开了一个新的m-文件编辑窗口;选择菜单“File/Open ”就可以打开一个已经存在的m-文件,并且可以在这个窗口中编辑这个m-文件。如,计算3 [(12)34)]2+?-÷,只需在提示符“>>”后输入“((1+2)*3-4)/2^3”,然后按Enter 键。该命令行涉及加、减、乘、除及幂运算符,MATLAB 运算的执行次序遵循的优先规则为:从左到右执行;幂运算具有最高的优先级,乘法和除法具有相同的次优先级,加法和减法有相同的最低优先级;使用括号可以改变前述优先次序,并由最内层括号向外执行。 3、常用命令 MATLAB 可以把多条命令放在同一行,各命令之间用逗号“,”或分号“;”隔开,逗号告诉MATLAB 系统显示本命令的结果,分号告诉系统取消结果的显示(只是不显示,该命令行仍正常执行)。 clear 命令 若想清除MATLAB 当前工作空间中所有定义过的变量,使用clear 命令;若只想清除其中某几个变量,只需在命令clear 后写入变量的名称即可,如想清除变量x 、y ,在“>>”后键入“clear x y ”即可。 help 命令 在MA TLAB 命令窗口使用help 命令寻求帮助。例如, >> help ceil ? lookfor 命令 lookfor 命令来查询根据用户提供的关键字搜索到的相关函数,然后再使用help 命令与其配合使用,可了解查询到的确切函数的具体用法。 常用的数学函数如表1所示。 表1 常用数学函数表 函数 功能 函数 功能 sin(x) 正弦函数 asin(x) 反正弦函数

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

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

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

信息论与编码实验报告

实验一 绘制二进熵函数曲线(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) 五、实验结果

信息论与编码实验1-3

实验一 关于信源熵的实验 班级:电子131501 姓名:赵英凯 学号:201315020137 时间:2016.5.22

一、实验目的 1. 掌握离散信源熵的原理和计算方法。 2. 熟悉matlab 软件的基本操作,练习使用matlab 求解信源的信息熵。 3. 自学图像熵的相关概念,并应用所学知识,使用matlab 求解图像熵。 二、实验原理 1. 离散信源相关的基本概念、原理和计算公式 产生离散信息的信源称为离散信源。离散信源只能产生有限种符号。随机事件的自信息量I(xi)为其对应的随机变量xi 出现概率对数的负值。 即: I (xi )= -log2p ( xi) 随机事件X 的平均不确定度(信源熵)H(X)为离散随机变量 xi 出现概率的数学期望,即: 2.二元信源的信息熵 设信源符号集X={0,1} ,每个符号发生的概率分别为p(0)= p,p(1)= q,p+ q =1,即信源的概率空间为:

则该二元信源的信源熵为: H( X) = - plogp–qlogq = - plogp –(1 - p)log(1- p) 即:H (p) = - plogp –(1 - p)log(1- p) 其中 0 ≤ p ≤1 3. MATLAB二维绘图 用matlab 中的命令plot( x , y) 就可以自动绘制出二维图来。例1-2,在matlab 上绘制余弦曲线图,y = cos x ,其中 0 ≤ x ≤2 >>x =0:0.1:2*pi; %生成横坐标向量,使其为 0,0.1,0.2,…, 6.2 >>y =cos(x ); %计算余弦向量 >>plot(x ,y ) %绘制图形 4. MATLAB求解离散信源熵 求解信息熵过程: 1) 输入一个离散信源,并检查该信源是否是完备集。 2) 去除信源中符号分布概率为零的元素。 3) 根据平均信息量公式,求出离散信源的熵。 5. 图像熵的相关知识 图像熵是一种特征的统计形式,它反映了图像中平均信息量的多少。

费诺编码的matlab实现

信息论与编码实验费诺编码的matlab实现 学院:---- 班级:---- 姓名:---- 学号:----

摘要: 用预先规定的方法将文字、数字或其他对象编成数码,或将信息、数据转换成规定的电脉冲信号。编码在电子计算机、电视、遥控和通讯等方面广泛使用。其中费诺编码有广泛的应用,通过本次实验,了解编码的具体过程,通过编程实现编码,利用matlab实现费诺编码。 关键字:信息论,费诺编码,matlab 正文: 费诺编码也是一种常见的信源编码方法。信源符号以概率递减的次序排列进来,将排列好的信源符号划分为两大组,使第组的概率和近于相同,并各赋于一个二元码符号”0”和”1”.然后,将每一大组的信源符号再分成两组,使同一组的两个小组的概率和近于相同,并又分别赋予一个二元码符号.依次下去,直至每一个小组只剩下一个信源符号为止.这样,信源符号所对应的码符号序列则为编得的码字. 费诺编码的matlab实现 编码如下: clc; clear; A=[0.4,0.3,0.1,0.09,0.07,0.04]; A=fliplr(sort(A));%降序排列 [m,n]=size(A); for i=1:n B(i,1)=A(i);%生成B的第1列 end %生成B第2列的元素 a=sum(B(:,1))/2; for k=1:n-1 if abs(sum(B(1:k,1))-a)<=abs(sum(B(1:k+1,1))-a) break; end end for i=1:n%生成B第2列的元素 if i<=k B(i,2)=0; else B(i,2)=1; end end %生成第一次编码的结果 END=B(:,2)'; END=sym(END); %生成第3列及以后几列的各元素

香农费诺编码的matlab的实现

信息论与编码作业香农--费诺编码的matlab实现 班级: 姓名: 学号:

摘要: 将文字、数字或其他对象编成数码,或将信息、数据转换成规定的电脉冲信号。编码在电子计算机、电视、遥控和通讯等方面广泛使用。其中费诺编码有广泛的应用,通过本次设计,了解编码的具体过程,通过编程实现编码,利用matlab实现费诺编码。 关键字:信息论,费诺编码,matlab 正文: 费诺编码也是一种常见的信源编码方法。信源符号以概率递减的次序排列进来,将排列好的信源符号划分为两大组,使第组的概率和近于相同,并各赋于一个二元码符号”0”和”1”.然后,将每一大组的信源符号再分成两组,使同一组的两个小组的概率和近于相同,并又分别赋予一个二元码符号.依次下去,直至每一个小组只剩下一个信源符号为止.这样,信源符号所对应的码符号序列则为编得的码字. 香农--费诺编码的matlab实现 编码如下: clc; clear; N=input('N=');%输入信源符号的个数 for i=1:N fprintf('第%d个',i); A(i)=input('p=');%输入信源符号概率分布矢量,p(i)<1 if A(i)<=0 error('不符合概率分布') end end A=fliplr(sort(A));%降序排列 [m,n]=size(A); for i=1:n B(i,1)=A(i);%生成B的第1列 end %生成B第2列的元素 a=sum(B(:,1))/2; for k=1:n-1 if abs(sum(B(1:k,1))-a)<=abs(sum(B(1:k+1,1))-a) break; end end for i=1:n%生成B第2列的元素 if i<=k

信息论与编码课程作业_huffman编码的matlab_实现

信息论与编码课程作业 ——霍夫曼编码求信源熵和存储前后的信息量的变化 一:设计目的: 1、学习离散信源平均信息量的计算方法。 2、理解和掌握huffman 编码的基本原理,实现对信源符号的huffman 编码 3、熟悉 Matlab 编程; 二:设计原理和思路 1.信源熵的计算: 公式: 21()log a I a p = Matlab 实现:I=log2(1/p) 或I=-log2(p) 熵(平均自信息)的计算公式 22111()log log q q 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’。

基于MATLAB的信道编码分析

题目:基于MATLAB的通信系统仿真 ———信道编码对通信系统性能的影响 专业:通信工程 姓名:崔校通 学号:201300484316 日期: 2016.12.22

目录 一、引言 (2) 二、信道编码理论 (2) 2.1、信道编码的目的 (2) 2.2、信道编码的实质 (3) 2.3、信道编码公式 (3) 三、线性分组码的编译码原理 (3) 3.1、线性分组码的基本概念 (3) 3.2、生成矩阵和校验矩阵 (4) 四、MATLAB仿真 (5) 4.1仿真 (5) 4.1.1原理说明 (5) 4.1.2各子函数说明 (5) 4.2仿真源程序 (5) 4.2.1信道编码 (5) 4.2.2信道解码 (6) 4.2.3交织 (6) 4.2.4解交织 (7) 4.2.5信道衰落 (7) 六程序及仿真图 (8) 1、file1:信道编码对通信系统性能的影响,有无信道编码的影响 (8) 2、file2:在周期性深衰落的信道条件下,交织对通信系统性能的影响 (10) 3、file3:在交织条件下,不同时长的周期性深衰落对系统性能影响的比较 (13)

基于MATLAB的通信系统仿真 ———信道编码对通信系统性能的影响摘要:简述信道编码理论,详细说明分组码的编译原理、实现方法及检错纠错能力,用MATLAB仿真有无信道编码条件下对通信系统性能的影响及信道编码在不同信道下对通信系统性能的影响,如AWGN信道和深衰落信道。 关键词:信道编码、分组码、MATLAB仿真、性能 一、引言 提高信息传输的有效性和可靠性始终是通信技术所追求的目标,而信道编码能够显著的提升信息传输的可靠性。1948年,信息论的奠基人C.E.Shannon在他的开创性论文“通信的数学理论”中,提出了著名的有噪信道编码定理.他指出:对任何信道,只要信息传输速率R不大于信道容量C, 就一定存在这样的编码方法:在采用最大似然译码时,其误码率可以任意小.该定理在理论上给出了对给定信道通过编码所能达到的编码增益的上限,并指出了为达到理论极限应采用的译码方法.在信道编码定理中,香农提出了实现最佳编码的三个基本条件:(1 )采用随机编译码方式; (2 )编码长度L→∞ , 即分组的码组长度无限; (3)译码采用最佳的最大似然译码算法。 二、信道编码理论 2.1、信道编码的目的 在数字通信系统中由于信道内存在加性噪声及信道传输特性不理想等容易造成码间串扰同时多用户干扰、多径传播和功率限制等也导致错误译码。为了确保系统的误比特率指标通常采用信道编码。信道编码是为了保证信息传输的可靠性、提高传输质量而设计的一种编码。它是在信息码中增加一定数量的多余码元,使码字具有一定的抗干扰能力。

信息论与编码实验1

信息论与编码实验1 实验一关于信源熵的实验班级:电子131501 姓名:赵英凯学号:201315020137时间:一、实验目的 1. 掌握离散信源熵的原理和计算方法。 2. 熟悉matlab 软件的基本操作,练习使用matlab 求解信源的信息熵。 3. 自学图像熵的相关概念,并应用所学知识,使用matlab 求解图像熵。 二、实验原理 1. 离散信源相关的基本概念、原理和计算公式产生离散信息的信源称为离散信源。离散信源只能产生有限种符号。随机事件的自信息量I为其对应的随机变量xi 出现概率对数的负值。即:I = -log2p ( xi) 随机事件X 的平均不确定度H为离散随机变量xi 出现概率的数学期望,即:? 2.二元信源的信息熵

设信源符号集X={0,1} ,每个符号发生的概率分别为p(0)= p,p(1)= q,p+ q =1,即信源的概率空间为:?则该二元信源的信源熵为:H( X) = - plogp–qlogq = - plogp –(1 - p)log(1- p) 即:H (p) = - plogp –(1 - p)log(1- p)其中0 ≤ p ≤1 3. MATLAB 二维绘图用matlab 中的命令plot( x , y) 就可以自动绘制出二维图来。例1-2,在matlab 上绘制余弦曲线图,y = cos x ,其中0 ≤ x ≤ 2?。>>x =0::2*pi;%生成横坐标向量,使其为0,,,…,>>y =cos(x );%计算余弦向量>>plot(x ,y ) %绘制图形 4. MATLAB求解离散信源熵求解信息熵过程:1) 输入一个离散信源,并检查该信源是否是完备集。2) 去除信源中符号分布概率为零的元素。 3) 根据平均信息量公式,求出离散信源的熵。 5. 图像熵的相关知识图像熵是一种特征的统计形式,它反映

信息论与编码实验报告

中南大学 信息论编码实验报告 题目信息论编码 学生姓名汤思远 指导教师张祖平 学院信息院 学号 090912052 专业班级电子1班 完成时间 14/12/5

实验一 关于信源熵的实验 一、实验目的 1. 掌握离散信源熵的原理和计算方法。 2. 熟悉matlab 软件的基本操作,练习使用matlab 求解信源的信息熵。 3. 自学图像熵的相关概念,并应用所学知识,使用matlab 或其他开发工具 求解图像熵。 4. 掌握Excel 的绘图功能,使用Excel 绘制散点图、直方图。 二、实验原理 1. 离散信源相关的基本概念、原理和计算公式 产生离散信息的信源称为离散信源。离散信源只能产生有限种符号。 随机事件的自信息量I (x i )为其对应的随机变量x i 出现概率对数的负值。即: I (x i )= -log 2 p (x i ) 随机事件X 的平均不确定度(信源熵)H (X )为离散随机变量x i 出现概率的数学期望,即: ∑∑-==i i i i i i x p x p x I x p X H )(log )()()()( 2. 信源的信息熵 设信源符号集X ={a1,a2,…,ar},每个符号发生的概率分别为p (a1)=p 1,p (a2)=p 2,…,p (ar),即信源的概率空间为 ,?? ????=??????)(...... )2(2 )1(1ar p ar a p a a p a P X 则该信源的信源熵为: H (X ) = - p (a1) log p (a1) –p (a2) log p (a2) –…–p (ar) log p (ar)

信息论与编码实验报告

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

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

实验序号:02 实验项目名称:离散信道及其信道容量

结论: 1、当输入和输出符号个数相同,且都等于r 时,则此信道称为强对称信道或均匀信道; 2、这类信道中总的错误概率为 p ,对称地平均分配给r-1个输出符号。 实验内容二: 平均互信息I (X ;Y )是凸函数的论文 一、 问题: 由信源的概率分布P (Y )=对x 求和P (X )*P(Y|X)和平均互信息I(X;Y)=对x,y 求和p(x)*P(y|x)*logP(y|x)/P(y)可知,平均互信息只与信源的概率分布和信道的传递概率有关,但是它们之间有种什么关系? 二、 证明 定理一:平均互信息I(X;Y)是输入信源的概率分布P(x)的形函数(上凸函数) 解: 根据上凸函数的定义来证明,先固定信道,即信道的传递概率P(y|x)是固定的。那么平均互信息I(X;Y)将只是P(x)的函数,简写成I[P(x)]。 现选择输入信源X 的两种已知的概率分布P1(x)和P2(x)。其对应的联合分布概率为P1(xy)=P1(x)P(y|x)和P2(xy)=P2(x)P(y|x),因而信道输出端的平均互信息分别为I[P1(x)]和I[P2(x)]。再选择输入变量X 的另一种概率分布P(x),令01θ <<,和1θθ+=,而P(x)= 12()()P x P x θθ+,因而得其相应的平均互信息为I[P(x)]。 根据平均互信息的定义得 1212,,,12[()][()][()] (|)(|)(|)()log ()log ()log () ()()x y x y x y I P x I P x I P x P y x P y x P y x P xy P xy P xy P y P y P y θθθθ+-=+-∑∑∑

信息论与编码实验四(DOC)

华侨大学工学院 实验报告 课程名称:信息论与编码 实验项目名称:实验四线性分组码 学院:工学院 专业班级:信息工程(微波通信方向) 姓名: 学号:1195111016 指导教师:傅玉青 年月日

预习报告 一、实验目的 (1)掌握MATLAB语言实现线性分组码编码算法的方法 (2)练习用MATLAB的工具箱Simulink设计线性分组码电路图的能力。 二、实验仪器 1、计算机 2、编程软件MATLAB6.5 三、实验原理 线性分组码是一类奇偶校验码,它可以由(n,k)形式表示。编码器将一个k 比特信息分组(信息矢量)转变为一个更长的由给定元素符号集组成的n比特编码分组。当这个符号集包含两个元素(0和1),与二进制相对,称为二进制编码。 分组码是对每段k 位长的信息组,以一定规则增加 r = n - k个检验元,组成长为n 的序列:( cn-1,cn-2, . . . , c1,c 0) ,称这个序列为码字。在二进制情况下,信息组总共有2 k 个( q 进制为q k个) ,因此通过编码器后,相应的码字也有2^k 个。称这2^k 个码字集合为( n , k) 分组码。n长序列的可能排列总共有 2^n 种。称被选取的2^k 个 n重为许用码组,其余 2^n - 2^k 个为禁用码组。称R = k / n为码率. 对于长度为n的二进制分组码,可以表示成(n,k),通常用于前向纠错。在分组码中,监督位加到信息位之后,形成新码,在编码中,k个信息位,被编为n位长度,(n-k)个监督码的作用是实现检错和纠错。 k 比特信息形成2^k个不同的信息序列,称为k元组(k比特序列),同样,n 比特可以形成2^n个序列,称为n元组。编码过程就是将每个k元组映射到2^n个n元组中的一个。分组码是一一对应的编码,即2^k个k元组唯一映射到2^k个2元组,映射可以通过一个查询表实现。对于线性码,映射当然是线性的。

信息论与编码课程设计(哈夫曼编码的分析与实现)

吉林建筑大学 电气与电子信息工程学院信息理论与编码课程设计报告 设计题目:哈夫曼编码的分析与实现专业班级:电子信息工程101 学生姓名: 学号: 指导教师:吕卅王超 设计时间:2013.11.18-2013.11.29

一、设计的作用、目的 《信息论与编码》是一门理论与实践密切结合的课程,课程设计是其实践性教学环节之一,同时也是对课堂所学理论知识的巩固和补充。其主要目的是加深对理论知识的理解,掌握查阅有关资料的技能,提高实践技能,培养独立分析问题、解决问题及实际应用的能力。 通过完成具体编码算法的程序设计和调试工作,提高编程能力,深刻理解信源编码、信道编译码的基本思想和目的,掌握编码的基本原理与编码过程,增强逻辑思维能力,培养和提高自学能力以及综合运用所学理论知识去分析解决实际问题的能力,逐步熟悉开展科学实践的程序和方法 二、设计任务及要求 通过课程设计各环节的实践,应使学生达到如下要求: 1. 理解无失真信源编码的理论基础,掌握无失真信源编码的基本方法; 2. 掌握哈夫曼编码/费诺编码方法的基本步骤及优缺点; 3. 深刻理解信道编码的基本思想与目的,理解线性分组码的基本原理与编码过程; 4. 能够使用MATLAB 或其他语言进行编程,编写的函数要有通用性。 三、设计内容 一个有8个符号的信源X ,各个符号出现的概率为: 编码方法:先将信源符号按其出现的概率大小依次排列,并取概率最小的字母分别配以0和1两个码元(先0后1或者先1后0,以后赋值固定),再将这两个概率相加作为一个新字母的概率,与未分配的二进制符号的字母重新排队。并不断重复这一过程,直到最后两个符号配以0和1为止。最后从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即为对应的码字。 哈夫曼编码方式得到的码并非唯一的。在对信源缩减时,两个概率最小的符号合并后的概率与其他信源符号的概率相同时,这两者在缩减中的排序将会导致不同码字,但不同的排序将会影响码字的长度,一般讲合并的概率放在上面, 12345678,,,,, ()0.40.180.10.10.070.060.050.04X x x x x x x x x P X ????=????????

信息论与编码心得体会

竭诚为您提供优质文档/双击可除信息论与编码心得体会 篇一:信息论与编码心得体会 通信工程134班刘钰安6102213946信息论与编码学习体会 篇二:信息论与编码课程设计报告 信息论与编码课程设计报告 设计题目:统计信源熵与香农编码 专业班级学号学生姓名指导教师教师评分 20xx年3月24日 目录 一、设计任务与要求................................................. 2二、设计思路................................................. ......2三、设计流程图................................................. ....3四、程序运行及结果.................................................

5五、心得体会................................................. ......6参考文献................................................. .........6附录:源程序................................................. . (7) 一、设计任务与要求 1、统计信源熵 要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。2、香农编码 要求:任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。 二、设计思路 1、统计信源熵: 统计信源熵就是对一篇英文文章(英文字母数为n),通过对其中的a,b,c,d/a,b,c,d.....(不区分大小写)统计每 个字母的个数n,有这个公式p=n/n可得每个字母的概率,最后又信源熵计算公式h(x)=p(xi)logp(xi) i1n , 可计算出信源熵h,所以整体步骤就是先统计出英文段

信息论与编码心得体会

信息论与编码心得体会

信息论与编码心得体会 篇一: 通信工程134班刘钰安 6102213946 信息论与编码学习体会 篇二:信息论与编码课程设计报告 信息论与编码课程设计报告 设计题目:统计信源熵与香农编码 专业班级学号学生姓名指导教师教师评分 20XX年3月24日 目录 一、设计任务与要求................................................. 2 二、设计思路................................................. ...... 2 三、设计流程图................................................. .... 3 四、程序运行及结果................................................. 5 五、心得体会................................................. ...... 6 参考文

献 ................................................ .......... 6 附录:源程序................................................. . (7) 一、设计任务与要求 1、统计信源熵 要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。 2、香农编码要求:任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。 二、设计思路 1、统计信源熵: 统计信源熵就是对一篇英文文章(英文字母数为N),通过对其中的a,b,c,d/A,B,C,D.....统计每个字母的个数n,有这个公式P=n/N可得每个字母的概率,最后又信源熵计算公式H(x)=??plogp i?1n 可计算出信源熵H,所以整体步骤就是先统计出英文段落的总字符数,在统计每个字符的个数,即每遇到同一个字符就++1,直到算出每个字符的个数,进而算出每个字符的概率,再由信源熵计算公式计算出信源熵。 2、香农编码:香农编码主要通过一系列步骤支出平均码长与信源之

信息论与编码matlab

信息论实验报告 姓名胡小辉 班级电子信息工程0902 学号 0909091112

1.实验目的 1、掌握哈夫曼编码、费诺编码、汉明码原理; 2、熟练掌握哈夫曼树的生成方法; 3、学会利用matlab、C语言等实现Huffman编码、费诺编码以及hamming编码。 2.实验原理 Huffman编码: 哈夫曼树的定义:假设有n个权值,试构造一颗有n个叶子节点的二叉树,每个叶子带权值为wi,其中树带权路径最小的二叉树成为哈夫曼树或者最优二叉树; 实现Huffman编码原理的步骤如下: 1. 首先将信源符号集中的符号按概率大小从大到小排列。 2. 用0和1表示概率最小的两个符号。可用0表示概率小的 符 号,也可用1表示概率小的符号,但整个编码需保持一致。 3. 将这两个概率最小的符号合并成一个符号,合并符号概率 为 最小概率之和,将合并后的符号与其余符号组成一个N-1的新信源符号集,称之为缩减符号集。 4. 对缩减符号集用步骤1,2操作 5. 以此类推,直到只剩两个符号,将0和1分别赋予它们。 6. 根据以上步骤,得到0,1赋值,画出Huffman码树,并从 最 后一个合并符号回朔得到Huffmaan编码。 费诺编码: 费诺编码的实现步骤: 1、将信源消息符号按其出现的概率大小依次排列:。

2、将依次排列的信源符号按概率值分为两大组,使两个组的 概率之和近似相同,并对各组赋予一个二进制码元“0”和“1”。 3、将每一大组的信源符号再分为两组,使划分后的两个组的 概率之和近似相同,并对各组赋予一个二进制符号“0”和“1”。 4、如此重复,直至每个组只剩下一个信源符号为止。 5、信源符号所对应的码字即为费诺码。 hamming编码: 若一致监督矩阵H 的列是由不全为0且互不相同的所有二进制m(m≥2的正整数)重组成,则由此H矩阵得到的线性分组码称为[2m-1,2m-1-m,3]汉明码。 我们通过(7,4)汉明码的例子来说明如何具体构造这种码。设分组码(n,k)中,k = 4,为能纠正一位误码,要求r≥3。现取r=3,则n=k+r=7。我们 用a 0a l a 2 a 3 a 4 a 5 a 6 表示这7个码元,用S 1 、S 2 、S 3 表示由三个监督方程式计算得到的校 正子,并假设三位S 1、S 2 、S 3 校正子码组与误码位置的对应关系如表1所示。 表1 校正子和错码位置关系 由表可知,当误码位置在a 2、a 4 、a 5 、a 6 时,校正子S 1 =1;否则S 1 =0。因此有S 1 =a 6⊕a 5 ⊕a 4 ⊕a 2 ,同理有S 2 =a 6 ⊕a 5 ⊕a 3 ⊕a 1 和S 3 =a 6 ⊕a 4 ⊕a 3 ⊕a 。在编码时a 6 、 a 5、a 4 、a 3 为信息码元,a 2 、a 1 、a 为监督码元。则监督码元可由以下监督方程唯 一确定 a 6⊕a 5 ⊕a 4 ⊕a 2 = 0 a 6⊕a 5 ⊕a 3 ⊕a 1 = 0 (1.1.1) a 6⊕a 4 ⊕a 3 ⊕a 0 = 0

相关文档
相关文档 最新文档