当年matlab的一个很简单的课程实验,现在拿出来分享一下:
一、特殊N维连续信源的熵
1、均匀分布的连续信源:
1.1一维:
1.2N维
若N维随机变量X=(X1,X2....XN)中各分量彼此统计独立,且分别在[a1,b1]、[a2,b2].....[aN,bN]的区域内均匀分布,则信源熵为:
因此只要知道各随机变量的取值区间,分别求出各个变量在各自区间内均匀分布时的相对熵,再将这些相对熵进行累加求和,就能计算出多维连续信源的相对熵。
实现代码;
%%特殊N维连续信源的熵
%均匀分布
clc;
clear;
N = input('连续信源维数N=');%信源维数
H = 0;%N维连续信源的熵
for i=1:N
x = input('均匀分布区间=');
h = log2(max(x)-min(x));%一维连续信源的熵
H = H+h;
end
fprintf('N维连续信源熵H(x)=%4.2f\n',H);
结果:
2、无记忆N维高斯连续信源的熵
设N维高斯连续信源是无记忆信源,即随机变量之间不相关,此时协方差矩阵[M]的行列式为0,因此信源的相对熵为:
上式表明,N维高斯信源是由N个相互统计独立的、方差为𝜎𝑖2的高斯连续随机变量组成的N维无记忆高斯信源,其中每个高斯随机变量的相对熵为。
单维连续信源的最大相对熵定理表明,在一定限制条件下,相对熵存在最大值。
对于N维连续信源,最大相对熵定理同样成立。
最大多维相对熵定理表明:
1、在取值区间限定为N维区域体积的条件下,均匀分布的N维连续信源的相对熵达到最大值,其最大值仅取决于取值区间。
2、在协方差矩阵[M]限定的条件下,高斯分布的N维连续信源的相对熵达到最大值,其最大值仅取决于协方差矩阵[M]。
3、在随机变量的方差限定的条件下,无记忆高斯信源的相对熵达到最大值,其最大值仅取决于方差。
clc;
clear;
H = 0;
N = input('请输入信源维数N=');
x = input('请以数组的形式依次输入N个高斯随机变量的方差=');
for i=1:N
h = 0.5*log(2*pi*exp(1)*x(i));
H = H +h;
end
fprintf('N维无记忆高斯连续信源的相对熵为:h(x)=%4.5f',H);
结果:
二、N维连续信道的平均互信息量
X与Y的平均互信息量定义为
实验结果:例如,已知4维无记忆连续信道的输入随机变量X的概率密度函数为p(x)及其输入区间。信道的传递概率密度函数及信道输出随机变量Y的输出区间都给出。则该连续信源的相对熵计算结果如图4-2-1所示。图4-2-14维连续信道的平均互信息量
clear
clc
syms x y;
N = input('请输入连续无记忆信源和连续无记忆信道的扩展次数N:');
px = input('输入信源的输入概率密度函数:');
parameterx = input('请输入信源的取值区间[a b] = ');
a = parameterx(1);
b = parameterx(2);
py_x = input('信道传递概率密度函数:');
parametery = input('请输入y的取值区间[m n] = ');
m = parametery(1);
n = parametery(2);
pxy=px*py_x;
q1 = int(pxy,x,a,b);
px_y = px*py_x/q1;
fun = @(x,y) pxy*log2(pxy/(px*q1));
res = int(fun,x,a,b);
res2 = int(res,y,m,n)*N;
fprintf("平均互信息量为I(X,Y)= %8.7f (比特/自由度)\n",res2);
结果
三、信道容量
1、信道容量公式
clc;
clear;
W = input('信道带宽W=');
S = input('信号平均功率S=');
N = input('噪声功率N=');
C = W*log2(1+S/N);
fprintf('信道容量C=%4.8f\n',C);
结果:
2、增加信道容量的两种方式验证
%高斯信道容量仿真
pn0_db=-20:0.1:30;
pn0=10.^(pn0_db./10);
capacity=3000.*log2(1+pn0/3000);
pause;
clf;
semilogx(pn0,capacity)
title('Capacity vs. P/N0 in an AWGN channel');
xlabel('P/N0')
ylabel('Capacity (bits/second)');
clearw=[1:10,12:2:100,105:5:500,510:10:5000,5025:25:20000,20050:50:100000];
pn0db=25;
pn0=10^(pn0db/10);
capacity=w.*log2(1+pn0./w);
pause;
clf;
semilogx(w,capacity);
title('Capacity vs. bandwidth in an AWGN channel'); xlabel('Bandwidth (Hz)');
ylabel('Capacity (bits/second)');
结果:
代码:
%信道容量、信噪比和带宽三者间关系
w=[1:5:20,25:20:100,130:50:300,400:100:1000,1250:250:5000,5500:500:10000];pn0_db=[-20:1:30];
pn0=10.^(pn0_db/10);
for i=1:45
for j=1:51
c(i,j)=w(i)*log2(1+pn0(j));
end
end
[w,pn0_db]=meshgrid(w,pn0_db);
surf(w,pn0_db,c');
title('Capacity vs. bandwidth and SNR');
结果: