求一维序列的信息熵

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

求一维序列的信息熵(香浓熵)的matlab程序实例
目录
求一维序列的信息熵(香浓熵)的matlab程序实例 (1)
引言 (1)
测试程序 (2)
额外信息上代码 (4)
实验一:计算离散信源的熵 (5)
一、实验设备 (5)
二、实验目的 (5)
三、实验内容 (5)
四、实验报告要求 (5)
习题 (6)
引言
对于一个二维信号,比如灰度图像,灰度值的范围是0-255,因此只要根据像素灰度值(0-255)出现的概率,就可以计算出信息熵。

但是,对于一个一维信号,比如说心电信号,数据值的范围并不是确定的,不会是(0-255)这么确定,如果进行域值变换,使其转换到一个整数范围的话,就会丢失数据,请高手指点,怎么计算。

比如数字信号是x(n),n=1~N
(1)先用Hist函数对x(n)的赋值范围进行分块,比如赋值范围在0~10的对应第
一块,10~20的第二块,以此类推。

这之前需要对x(n)做一些归一化处理
(2)统计每一块的数据个数,并求出相应的概率
(3)用信息熵公式求解
以上求解方法获得的虽然是近似的信息熵,但是一般认为,这么做是没有问题的
求一维序列的信息熵的matlab程序代码如下:(已写成调用的函数形式)
测试程序
%% 将下面程序拷贝保存成m文件,直接运行就行,不需要分开保存function cal_entropy()%主程序
clear
clc
close all
fs=12000;
N=12000;
T=1/fs;
t=(0:N-1)*T;
ff=104;
sig=0.5*(1+sin(2*pi*ff*t)).*sin(2*pi*3000*t)+rand(1,length(t));
Hx=yyshang(sig,10)
%% 求一维离散序列信息熵matlab代码(子函数)
functionHx=yyshang(y,duan)
%不以原信号为参考的时间域的信号熵
%输入:maxf:原信号的能量谱中能量最大的点
%y:待求信息熵的序列
%duan:待求信息熵的序列要被分块的块数
%Hx:y的信息熵
%duan=10;%将序列按duan数等分,如果duan=10,就将序列分为10等份x_min=min(y);
x_max=max(y);
maxf(1)=abs(x_max-x_min);
maxf(2)=x_min;
duan_t=1.0/duan;
jiange=maxf(1)*duan_t;
% for i=1:10
% pnum(i)=length(find((y_p>=(i-1)*jiange)&(y_p<i*jiange)));
% end
pnum(1)=length(find(y<maxf(2)+jiange));
for i=2:duan-1
pnum(i)=length(find((y>=maxf(2)+(i-1)*jiange)&(y<maxf(2)+i*jiange))); end
pnum(duan)=length(find(y>=maxf(2)+(duan-1)*jiange));
%sum(pnum)
ppnum=pnum/sum(pnum);%每段出现的概率
%sum(ppnum)
Hx=0;
for i=1:duan
ifppnum(i)==0
Hi=0;
else
Hi=-ppnum(i)*log2(ppnum(i));
end
Hx=Hx+Hi;
end
额外信息上代码
%% 为了方便以后查找,在这里把MATLAB中求信息熵的代码写下来,也方便大家查看。

clear;
clc;
close all;
ImageData=imread('lena.jpg');
ifndims(ImageData) == 3
figure;
imshow(ImageData);
title('您选择的是RGB图,将转换为灰度图!');
ImageData = rgb2gray(ImageData); %如果是真彩色图,就将其装换为灰度图
end
p = imhist(ImageData(:));
p(p==0) = [ ];
p = p ./numel(ImageData);
H1 = -sum(p.*log2(p))
% 在这里Y是指的输出图像。

H指的是信息熵。

实验一:计算离散信源的熵
一、实验设备
1、计算机
2、软件:Matlab
二、实验目的
1、熟悉离散信源的特点;
2、学习仿真离散信源的方法
3、学习离散信源平均信息量的计算方法
4、熟悉Matlab 编程;
三、实验内容
1、写出计算自信息量的Matlab 程序
2、写出计算离散信源平均信息量的Matlab 程序。

3、掌握二元离散信源的最大信息量与概率的关系。

4、将程序在计算机上仿真实现,验证程序的正确性并完成习题。

四、实验报告要求
简要总结离散信源的特点及离散信源平均信息量的计算,写出习题的MA TLAB实现语句。

信息论基础:
自信息的计算公式
Matlab实现:I=log2(1/p) 或I=-log2(p)
熵(平均自信息)的计算公式
Matlab实现:HX=sum(-x.*log2(x));或者h=h-x(i)*log2(x(i));
习题
1. 甲地天气预报构成的信源空间为:
乙地信源空间为:
求此两个信源的熵。

求各种天气的自信息量。

答案:
%% 甲地天气预报构成的信源空间,乙地信源空间,求此两个信源的熵。

求各种天气的自信息量
clear
clc
close all
p1=[1/2,1/4,1/8,1/8];%p1代表甲信源对应的概率
p2=[7/8,1/8];%p2代表乙信源对应的概率
H1=0.0;
H2=0.0;
I=[];
J=[];
for i=1:4
H1=H1+p1(i)*log2(1/p1(i));
I(i)=log2(1/p1(i));
end
disp('自信息量分别为:');
I
disp('H1信源熵为:');
H1
for j=1:2
H2=H2+p2(j)*log2(1/p2(j));
J(j)=log2(1/p2(j));
end
disp('自信息量分别为:');
J
disp('H2信源熵为:'); H2。

相关文档
最新文档