Nakagami-m分布
这个分布其实挺难搞懂真正原理的,最基础的就是需要的时候要会用。
无线信道中产生分布为Nakagami的信道
在通信系统中,计算功率,速率都会用到
∣
h
∣
2
|h|^2
∣h∣2,当
∣
h
∣
|h|
∣h∣满足-
N
a
k
a
g
a
m
i
(
m
,
Ω
)
Nakagami(m,\Omega)
Nakagami(m,Ω)分布时,模值的平方
∣
h
∣
2
|h|^2
∣h∣2恰巧服从gamma分布~
G
a
m
m
a
(
k
,
θ
)
Gamma(k , \theta)
Gamma(k,θ),因此可以利用python中关于gamma的函数对其进行操作,很简单。
转换关系,其中
k
=
m
,
θ
=
Ω
/
m
k=m,\theta=\Omega/m
k=m,θ=Ω/m
m = 2
Omega=1
h = np.random.gamma(2, Omega/m) # 生成信道随机数
下面详细介绍Nakagami和Gamma分布。
Nakagami-m分布
这个分布最早是在1960年被提出,被用于模拟无线通信中的衰落信道。
特征
1、概率密度函数PDF(Probability Density Function)
f
(
x
;
m
,
Ω
)
=
2
m
m
Γ
(
m
)
Ω
m
x
2
m
−
1
exp
(
−
m
Ω
x
2
)
,
∀
x
≥
0.
w
h
e
r
e
(
m
≥
1
2
,
Ω
>
0
)
f(x ; m, \Omega)=\frac{2 m^{m}}{\Gamma(m) \Omega^{m}} x^{2 m-1} \exp \left(-\frac{m}{\Omega} x^{2}\right), \forall x \geq 0. \\ where( m\geq \frac{1}{2},\Omega>0)
f(x;m,Ω)=Γ(m)Ωm2mmx2m−1exp(−Ωmx2),∀x≥0.where(m≥21,Ω>0)
参数
m
m
m and
Ω
\Omega
Ω
m
=
(
E
[
X
2
]
)
2
Var
[
X
2
]
m=\frac{\left(\mathrm{E}\left[X^{2}\right]\right)^{2}}{\operatorname{Var}\left[X^{2}\right]}
m=Var[X2](E[X2])2and,
Ω
=
E
[
X
2
]
\Omega = E[X^2]
Ω=E[X2]
下图是概率密度函数图,其中的
u
u
u就是
m
m
m,是shape parameter-形状参数,越大就越高;
w
w
w就是
Ω
\Omega
Ω,是controlling spread控制扩散参数,越大就越散。
2、累积密度函数CDF(Cumulation Density Function)
F
(
x
;
m
,
Ω
)
=
γ
(
m
,
m
Ω
x
2
)
Γ
(
m
)
F(x ; m, \Omega)=\frac{\gamma\left(m, \frac{m}{\Omega} x^{2}\right)}{\Gamma(m)}
F(x;m,Ω)=Γ(m)γ(m,Ωmx2)
CDF就是PDF的积分,PDF就是CDF的导数。
4、无线信道参数设计
在无线信道中,
m
m
m可以根据自己的需求来设置,只要大于0.5即可。
m
=
0.5
m=0.5
m=0.5时是单边高斯分布,
m
=
1
m = 1
m=1时是瑞利分布,
m
=
∞
m = ∞
m=∞时是随机信道。
Ω
\Omega
Ω表示信道增益平方的期望,即
Ω
=
E
[
∣
h
∣
2
]
\Omega = E[|h|^2]
Ω=E[∣h∣2]。
5、综合各函数表
下表是Nakagami分布的各种函数表
Gamma分布
Nakagami和Gamma分布可以相互转换。信道增益 ∣ h ∣ |h| ∣h∣- N a k a g a m i ( m , Ω ) Nakagami(m,\Omega) Nakagami(m,Ω)时,那么它的模值的平方 ∣ h ∣ 2 |h|^2 ∣h∣2~ G a m m a ( k , θ ) Gamma(k , \theta) Gamma(k,θ),其中 k = m , θ = Ω / m k=m,\theta=\Omega/m k=m,θ=Ω/m
代码
1、验证随机生成的数和PDF的关系
from scipy.stats import nakagami
import matplotlib.pyplot as plt
# 参数设计:
nu = 2
# 计算参数均值方差
mean, var, skew, kurt = nakagami.stats(nu, moments='mvsk')
# 显示概率密度函数(pdf):
x = np.linspace(nakagami.ppf(0.01, nu,loc=0, scale=1), nakagami.ppf(0.99, nu,loc=0, scale=1), 100) # 设定一个边界
plt.plot(x, nakagami.pdf(x, nu), 'r-', lw=1.2, alpha=0.6, label='nakagami pdf')
# 生成随机数
r = nakagami.rvs(nu, loc=0, scale=1, size=1000) # 这里的omega为1,可以修改scale,改变omega
# 并比较直方图:
plt.hist(r, density=True, histtype='stepfilled', alpha=0.2)
plt.legend(loc='best', frameon=False)
plt.show()
其中,nakagami.pdf(x, m) = f ( x ; m , Ω = 1 ) = 2 m m Γ ( m ) x 2 m − 1 exp ( − m x 2 ) , f(x ; m, \Omega=1)=\frac{2 m^{m}}{\Gamma(m) } x^{2 m-1} \exp \left(-mx^{2}\right), f(x;m,Ω=1)=Γ(m)2mmx2m−1exp(−mx2),
也就是说这个里面的公式计算出来的PDF默认 Ω = 1 \Omega=1 Ω=1,所以,要是想要自己产生一个随机数,还要变形一下。