【파이썬, MATLAB】 레일리 페이딩 통신로에서의 시뮬레이션 방법
즉, 잡음이 존재하지 않는 경우, 수신 신호 $y_k$는 레일리 분포에 따른 난수 $r_k$와 균일 분포에 따른 난수 $\theta_k$를 이용하여 다음과 같이 나타낼 수 있습니다.
y_k = r_k e^{j\theta_k} x_k
그렇다면 레일리 페이딩 통신로에서 시뮬레이션을 실행하기 위해서는 $r_k$와 $\theta_k$라는 난수를 생성하여 위와 같은 계산을 하면 좋을까요?
그래도 아마도 할 수 있지만 시간을 크게 낭비 할 수 있습니다.
왜냐하면 $r_k e^{j\theta_k}$ 대신 평균 0, 분산 1의 복소 가우스 분포에 따른 난수 $h_k$를 곱하면 좋기 때문입니다.
우선 그 코드를 붙입니다.
import matplotlib.pyplot as plt
from numpy.random import *
import numpy as np
symbol_length = 256000 # 各送信アンテナから送るシンボルの数
M = 2 # 送信アンテナ数
N = 2 # 受信アンテナ数
TX_bit = randint(0, 2, (M, symbol_length)) # ビット列の生成
# BPSK変調
TX_BPSK = np.zeros(TX_bit.shape)
TX_BPSK[TX_bit == 0] = -1
TX_BPSK[TX_bit == 1] = 1
RX_BPSK = np.zeros([N, symbol_length]) + 1j * np.zeros([N, symbol_length])
for i in range(symbol_length):
# 見通し外の無線通信路(レイリーフェージング通信路)に対応する通信路行列の生成
H = (randn(N, M) + 1j * randn(N, M)) * 1 / np.sqrt(2)
# 送信
temp = np.dot(H, np.reshape((TX_BPSK[:, i]), (M, 1)))
RX_BPSK[:, i] = np.reshape(temp, N)
plt.hist(np.abs(RX_BPSK[0, :]), bins=1000)
plt.title('Histogram of r')
plt.show()
plt.hist((1j * np.log(RX_BPSK[0, :])).real, bins=1000)
plt.title('Histogram of theta')
plt.show()
중요한 것은 중간에
H = (randn(N, M) + 1j * randn(N, M)) * 1 / np.sqrt(2)
입니다. 이것은 평균 0, 분산 1의 복소 가우스 분포를 따르는 난수를 생성하는 부분입니다.
그 결과,
히스토그램이 출력됩니다. 확실히 진폭값은 레일리 분포에, 위상의 회전 각도는 균일 분포를 따르는 것을 알 수 있을까 생각합니다.
위의 예에서는 각 시간 $i$에서 통신로 상태가 리셋되는 시뮬레이션을 하고 있습니다만, 실제로는 충분히 짧은 사이에서는 통신로 상태는 변동하지 않는다고 하는 가정을 두고 for문을 사용하지 않고
H = (randn(N, M) + 1j * randn(N, M)) * 1 / np.sqrt(2)
RX_BPSK = np.dot(H,TX_BPSK)
라고 하는 형태로 수신 심볼을 계산하는 쪽이 많을까 생각합니다.
이 방법으로 진폭이 레일리 분포를 따를 수 있다는 증거
우선은
h_k = r_k e^{j\theta_k} = a_k + jb_k
합니다. 우리의 목표는 $f_{r_k}(x)$라는 확률 밀도 함수를 구하는 것이므로 $r_k = (a_k^2 + b_k^2)^{\frac{1}{2}}$ ,
\begin{align}
f_{r_k}(x) &= f_{ (a_k^2 + b_k^2)^{\frac{1}{2}} }(x) \\
&= \frac{d}{dx} P( (a_k^2 + b_k^2)^{\frac{1}{2}} < x) \\
&= \frac{d}{dx} P( a_k^2 + b_k^2 < x^2) \\
& = 2xf_{a_k^2 + b_k^2}(x^2)
\end{align}
라는 느낌으로 변형해 갑니다. $a_k$, $b_k$는 각각 독립적인 평균 0, 분산 1/2의 가우스 분포를 따르므로 ${a_k^2}\sim b_k^2\sim {{\rm N}\left(0,\frac {1}{2}\right)^2}\sim{\Gamma\left(\frac{1}{2},1\right)}$입니다.
또한 감마 분포의 재생성에서 $a_k^2 + b_k^2\sim\Gamma\left(\frac{1}{2}+\frac{1}{2},1\right) =\Gamma\left (1,1\right) $가 되는 것을 생각하면,
\begin{align}
f_{a_k^2 + b_k^2 }(x) &= f_{ \Gamma\left( 1,1\right) }(x) = e^{-x}
\end{align}
됩니다. 이것을 $f_{r_k}(x)$ 식에 대입하면,
\begin{align}
f_{r_k }(x) &= 2xe^{-x^2}
\end{align}
이것은 $\mathbb{E}[r_k^2]=1$, 즉 전력이 저장된다는 조건부 레일리 분포에 따른 난수의 확률 밀도 함수입니다.
Reference
이 문제에 관하여(【파이썬, MATLAB】 레일리 페이딩 통신로에서의 시뮬레이션 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Seiji_Tanaka/items/8bef0deefb661d36abbe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)