モデルの概要
シャドウイングは伝搬路ごとに“建物からの受ける遮蔽の度合い”が異なることに起因する受信レベル(/受信信号電力)の変動であり,短区間変動や場所的変動とも呼ばれる.その特性は無線回線設計やモビリティ技術設計において重要である.
シャドウイングは,受信レベル(dB値)の短区間(10波長程度)における中央値の変動として扱われ,そのレベル分布と自己相関の特性よりモデル化される.式(1)はレベル分布のモデルであり,平均を\(m_s\)[dB],標準偏差を\(\sigma_s\)[dB]とする正規分布で与えられる.なお,\(m_s\)の値は長区間変動モデルより与えられるものである.また,\(\sigma_s\)の値は郊外地や市街地といった環境に依存するが,市街地では6~8dB程度となることが知られている.一方,式(2)は自己相関のモデルであり,相関距離\(d_c\)を定数とする指数関数で与えられる. \(d_c\)は相関値が0.5となる距離であるが,その値は周辺建物分布に依存する.市街地マクロセル環境においては測定により数十~数百mの値が報告されているが,ITU-R M.2135のチャネルモデルでは50mと定義されている.
レベル分布と自己相関関数が与えられれば,いわゆる1次自己回帰相関モデルを用いて,シャドウイング波形を生成することが可能である.具体的にはサンプルプログラムを参照されたい.結果例で示したシャドウイング波形は\(\sigma_s\)=6dBとして生成したものである.ただし,サンプリング間隔 \(\Delta d_s\)=0.1mとしている.また,結果例には生成したシャドウイングより,レベル分布と自己相関を求めた結果も示してある.それぞれ,ほぼ正規分布と指数関数となっていることが分かる.なお,これらの結果は最大移動距離\(d_{max}\)=10kmとして得られたサンプルで求めたものであり,より正規分布と指数関数に近づけるためには,更に多くのサンプルが必要である.

数式
〇レベル分布モデル
\(
p(x) = \frac{1}{\sqrt{2 \pi} \sigma_s} \exp{\left(-\frac{(x-m_s )^2}{2 \sigma_s^2}\right)}
\tag{1}
\)
〇自己相関モデル
\(
\rho_s (\Delta d)=(0.5)^{\Delta d/d_c}
\tag{1}
\)
パラメータ
〇レベル分布モデル
記号 | パラメータ説明[単位] |
\(x\) | レベル [dB] |
\(m_s\) | 平均値 [dB] |
\(\sigma_s\) | 標準偏差 [dB] |
〇自己相関モデル
記号 | パラメータ説明[単位] |
\(\Delta d\) | 2点間の距離 [m] |
\(d_c\) | 相関距離 [m] |
計算例

プログラム例
以下、C言語のプログラム例を記載する。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
void main()
{
void shadowing (); /* シャドウイングの生成関数 */
double ds; /* サンプリング間隔 [m] */
double sig; /* 標準偏差 [dB] */
double dc; /* 相関距離 [m] */
double dmax; /* 最大移動距離 [m] */
int N; /* サンプル数 */
double Ps[100000]; /* 受信レベル [dB] */
double mean;
double st_div;
int i,j;
/* パラメータの入力 */
ds=0.1;
dmax=10000.;
N=(int)(dmax/ds);
sig=6.;
dc=10.;
shadowing (N,Ps,sig,ds,dc); /* シャドウイングの計算 */
/* 出力 */
printf(“i d P[dB]\n”);
for(i=0;i<N;i++){
printf(“%d %.1lf %lf\n”,i,(double)i*ds,Ps[i]);
}
/* 統計値(平均と標準偏差) */
Mean=0.; St_div=0.;
For(i=0;i<N;i++){
mean+=Ps[i];
st_div+=Ps[i]*Ps[i];
}
Mean/=(double)N;
St_div-=mean*mean*(double)N;
St_div=sqrt(st_div/(double)(N-1));
Printf(“m=%lf st=%lf\n”,mean,st_div);
}
void shadowing (N,Ps,sig,ds,dc)
int N;
double *Ps;
double sig; /* dB */
double ds; /* m */
double dc; /* m */
{
int i,j;
long seed;
void srand48();
double drand48();
double x,y,mx,my,sx,sy,p,u1,u2;
double rs;
double s1,s2;
mx=0.; my=0.;
sx=sig; sy=sig;
p=0.;
rs=pow(0.5,ds/dc);
seed=3l;
srand48(seed);
for(i=0;i<N;i++){
u1=drand48();
u2=drand48();
/* Box-Muller’s method */
x=mx+sx*sqrt(-2.*log(u1))*(sqrt(1.-p*p)*cos(2.*M_PI*u2)
+p*sin(2*M_PI*u2));
y=my+sy*sqrt(-2.*log(u1))*sin(2*M_PI*u2);
if(i==0){
s1=x;
Ps[i]=s1;
}else{
s1=Ps[i-1];
s2=rs*s1+sqrt(1.-rs*rs)*x;
Ps[i]=s2;
}
}
}
※正規乱数の生成にはボックス=ミュラー法(Box-Muller‘s method)を使用.