【파이썬, MATLAB】 레일리 페이딩 통신로에서의 시뮬레이션 방법

9863 단어 파이썬수학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$, 즉 전력이 저장된다는 조건부 레일리 분포에 따른 난수의 확률 밀도 함수입니다.

좋은 웹페이지 즐겨찾기