今天是大尺度衰落下的路径损耗问题的最后一节,这一节主要介绍书中的IEEE 802.16d模型。
本科期间学习专业课当中,大家也经常会听到IEEE 802.**模型这个名词,但一直不知道这个具体是个什么东西。IEEE 802 指IEEE标准中关于局域网和城域网的一系列标准。更确切的说,IEEE 802标准仅限定在传输可变大小数据包的网络。其中最广泛使用的有以太网、令牌环、无线局域网等。这一系列标准中的每一个子标准都由委员会中的一个专门工作组负责。大家听到的最多就是IEEE 802.11(无线局域网)。IEEE 802中定义的服务和协议限定在OSI七层模型中的最低两层(即物理层和数据链路层)。以下是IEEE802的全部标准,有兴趣的可以看一下。(转自维基百科)
回归正题,IEEE802.16d模型属于对数正态阴影路径损耗模型,在第一节已经提到了一些关于对数正态阴影路径损耗模型的相关内容。IEEE802.16d也会涉及到自由空间以及不同环境下的一个路径损耗。在《MIMO-OFDM无线通信技术及MATLAB实现》中根据郊区宏蜂窝中发射机以及接收机之间障碍物的密度,分为三个类型。具体公式以及分类可以参照原书。下面是IEEE802.16d路径损耗模型的函数。
function PL=PL_IEEE80216d(fc,d,type,htx,hrx,corr_fact,mod)
% IEEE 802.16d model
% Input - fc : carrier frequency
% d : between base and terminal
% type : selects 'A', 'B', or 'C'
% htx : height of transmitter
% hrx : height of receiver
% corr_fact: if shadowing exists, set to 'ATnT' or 'Okumura'. Otherwise, 'NO'
% mod : set to 'mod' to get the modified IEEE 802.16d model
% output - PL : path loss [dB]
Mod='UNMOD';
if nargin>6
Mod=upper(mod);%字符串的所有小写字母转换成大写字母
end
if nargin==6&&corr_fact(1)=='m'
Mod='MOD';
corr_fact='NO';
elseif nargin<6
corr_fact='NO';
if nargin==5&&hrx(1)=='m'
Mod='MOD';
hrx=2;
elseif nargin<5
hrx=2;
if nargin==4&&htx(1)=='m'
Mod='MOD';
htx=30;
elseif nargin<4
htx=30;
if nargin==3&&type(1)=='m'
Mod='MOD';
type='A';
elseif nargin<3
type='A';
end
end
end
end
d0 = 100;
Type = upper(type);
%不符合A,B,C中任意一种情况
if Type~='A'&& Type~='B'&&Type~='C'
disp('Error: The selected type is not supported');
return;
end
%阴影衰落情况进行讨论
switch upper(corr_fact)
case 'ATNT'
Cf=6*log10(fc/2e9);
C_Rx=-10.8*log10(hrx/2);
case 'OKUMURA'
Cf=6*log10(fc/2e9);
if hrx<=3
C_Rx=-10*log10(hrx/3);
else
C_Rx=-20*log10(hrx/3);
end
case 'NO'
Cf=0;
C_Rx=0;
end
%对A,B,C三种模型进行讨论
if Type=='A'
a=4.6;
b=0.0075;
c=12.6;
elseif Type=='B'
a=4;
b=0.0065;
c=17.1;
else
a=3.6;
b=0.005;
c=20;
end
lamda=3e8/fc;
gamma=a-b*htx+c/htx;
d0_pr=d0;
if Mod(1)=='M'
d0_pr=d0*10^-((Cf+C_Rx)/(10*gamma));
end
A = 20*log10(4*pi*d0_pr/lamda) + Cf + C_Rx;
for k=1:length(d)
if d(k)>d0_pr
PL(k) = A + 10*gamma*log10(d(k)/d0);
else
PL(k) = -10*log10((lamda/(4*pi*d(k)))^2);
end
end
这个函数代码相对较为复杂,主要输入参量也进行了一部分的调整。相对于之前的大尺度衰落模型更加复杂一点,但也可以面对更多挑战。代码变量涉及修正后的未修正的模型。(主要增加了一个参考距离)。下面是最终的一个仿真图。
为了方便对比,我将两幅图放在了一个figure下,可以更加直观的观察出,修正后的模型不连续的现象消失了。对比修正前有着更好的环境建模。