CP length & OFDM symbol length calculator in 5G
OFDM symbol은 OFDM signal이 들어있는 time duration을 말한다. 그리고 CP = Cyclic Prefix는 OFDM symbol안에 들어있는 OFDM signal의 뒷부분을 그대로 복사해다가 붙여넣기한 signal이다. CP가 무엇인지, 왜 필요한지, 등은 따로 포스팅하고 여기서는 CP length와 OFDM symbol length를 구하는데에 집중하려고 한다.
5G에서 CP length와 OFDM symbol length에 대한 정의는 3GPP TS 38.211 chapter 5.3.1에서 아래와 같이 확인할 수 있다. Chapter 제목에서 알 수 있듯이 PRACH를 제외한 physical channel들에 대한 내용이고, PRACH에 대해선 5.3.2에서 확인할 수 있다. 그럼 아래의 표준 내용을 기준으로 subframe안에서의 각 CP length와 OFDM symbol length를 Python으로 한번 구해보자.
하나의 OFDM symbol은 앞쪽에 CP와 뒷쪽에 data OFDM signal로 구성된다. 먼저 아래의 것들을 계산하려고 한다.
- $ N_u^{\mu} $ : CP를 제외한 OFDM symbol length
- $ N_{CP,l}^{\mu} $ : $ l $ 번째 OFDM symbol의 CP length
- $ t_{start,l}^{\mu} $ : 각 $ l $ 번째 OFDM symbol의 starting position
여기서, $ \kappa $는 38.211 4.1에 정의되어 있는 것처럼 64로 constant value이다.
다음은 Python으로 3GPP standard에서 정의한 위의 수식을 그대로 옮겨놓은 것이다.
kappa = 64
N_f = 4096
Delta_f_max = 480000 # Hz
T_c = 1000000 / (Delta_f_max * N_f) # us (microsecond)
# Get N_CP for normal CP
def GetNCPNormalCP(mu, l, cp_type):
kappa = 64
if cp_type == 0: # normal CP
if l == 0 or l == 7 * (2 ** mu):
N_CP_l_mu = 144 * kappa * (2 ** (-mu)) + 16 * kappa
else:
N_CP_l_mu = 144 * kappa * (2 ** (-mu))
elif cp_type == 1: # extended CP
N_CP_l_mu = 512 * kappa * (2 ** (-mu))
return N_CP_l_mu
# Get the starting position of OFDM symbol l for subcarrier spacing configuration mu in a subframe
# TS 38.211 5.3.1
# - mu = subcarrier spacing configuration
# - l = OFDM symbol index (0 ~ ...)
# - cp_type = 0: normal CP, 1: extended CP
def GetOFDMSymbolStartPosition(mu, l, cp_type):
if l == 0:
return 0
else:
N_CP_l_mu = GetNCPNormalCP(mu, l - 1, cp_type)
N_u_mu = 2048 * kappa * (2 ** (-mu))
return GetOFDMSymbolStartPosition(mu, l-1, cp_type) + ((N_u_mu + N_CP_l_mu) * T_c)
if __name__ == '__main__':
mu = 0
cp_type = 0 # normal CP
if cp_type == 0:
num_symbol_per_subframe = 14 * (2 ** (mu))
else:
num_symbol_per_subframe = 12 * (2 ** (mu))
for l in range(num_symbol_per_subframe):
print(f"Starting point of OFDM symbol index#{l}: {GetOFDMSymbolStartPosition(mu, l, cp_type):3.3f} usec")
print(f"Starting point of OFDM symbol index#0 of next subframe: {GetOFDMSymbolStartPosition(mu, num_symbol_per_subframe, cp_type):3.3f} usec")
for l in range(num_symbol_per_subframe):
print(f"Duration of OFDM symbol index#{l:3d}: {GetOFDMSymbolStartPosition(mu, l + 1, cp_type) - GetOFDMSymbolStartPosition(mu, l, cp_type):3.3f} usec\
CP length: {GetNCPNormalCP(mu, l, cp_type) * T_c:3.3f} usec\t\tOFDM symbol length: {(2048 * kappa * (2 ** (-mu))) * T_c:3.3f} usec")
코드에서 "mu"와 "cp_type"을 수정해서 원하는 numerology에 대한 CP length / OFDM symbol length를 구할 수 있다.
mu = 0, 즉 SCS 15 kHz에 대해서 하나의 subframe안에 들어있는 모든 OFDM symbol의 길이를 구해보면 아래와 같이 나오는 것을 볼 수 있다.
Starting point of OFDM symbol index#0: 0.000 usec
Starting point of OFDM symbol index#1: 71.875 usec
Starting point of OFDM symbol index#2: 143.229 usec
Starting point of OFDM symbol index#3: 214.583 usec
Starting point of OFDM symbol index#4: 285.938 usec
Starting point of OFDM symbol index#5: 357.292 usec
Starting point of OFDM symbol index#6: 428.646 usec
Starting point of OFDM symbol index#7: 500.000 usec
Starting point of OFDM symbol index#8: 571.875 usec
Starting point of OFDM symbol index#9: 643.229 usec
Starting point of OFDM symbol index#10: 714.583 usec
Starting point of OFDM symbol index#11: 785.938 usec
Starting point of OFDM symbol index#12: 857.292 usec
Starting point of OFDM symbol index#13: 928.646 usec
Starting point of OFDM symbol index#0 of next subframe: 1000.000 usec
Duration of OFDM symbol index# 0: 71.875 usec CP length: 5.208 usec OFDM symbol length: 66.667 usec
Duration of OFDM symbol index# 1: 71.354 usec CP length: 4.688 usec OFDM symbol length: 66.667 usec
Duration of OFDM symbol index# 2: 71.354 usec CP length: 4.688 usec OFDM symbol length: 66.667 usec
Duration of OFDM symbol index# 3: 71.354 usec CP length: 4.688 usec OFDM symbol length: 66.667 usec
Duration of OFDM symbol index# 4: 71.354 usec CP length: 4.688 usec OFDM symbol length: 66.667 usec
Duration of OFDM symbol index# 5: 71.354 usec CP length: 4.688 usec OFDM symbol length: 66.667 usec
Duration of OFDM symbol index# 6: 71.354 usec CP length: 4.688 usec OFDM symbol length: 66.667 usec
Duration of OFDM symbol index# 7: 71.875 usec CP length: 5.208 usec OFDM symbol length: 66.667 usec
Duration of OFDM symbol index# 8: 71.354 usec CP length: 4.688 usec OFDM symbol length: 66.667 usec
Duration of OFDM symbol index# 9: 71.354 usec CP length: 4.688 usec OFDM symbol length: 66.667 usec
Duration of OFDM symbol index# 10: 71.354 usec CP length: 4.688 usec OFDM symbol length: 66.667 usec
Duration of OFDM symbol index# 11: 71.354 usec CP length: 4.688 usec OFDM symbol length: 66.667 usec
Duration of OFDM symbol index# 12: 71.354 usec CP length: 4.688 usec OFDM symbol length: 66.667 usec
Duration of OFDM symbol index# 13: 71.354 usec CP length: 4.688 usec OFDM symbol length: 66.667 usec
SCS가 15 kHz이므로 아래표에 의해서 한 subframe에 symbol을 14개가 존재한다. 그리고 CP length를 구하는 수식을 보면, numerology가 뭐든 half subframe (0.5ms)마다 맨 앞의 symbol은 다른 symbol에 비해 CP length가 $ 16 \kappa $ 만큼 더 길다.
Python의 output을 보면 모든 symbol이 OFDM data signal length는 66.667usec로 같지만, OFDM symbol index #0와 #7의 CP length만 5.208usec로 다른 symbol의 CP length(=4.688usec)보다 길다.
CP : Cyclic Prefix
OFDM : Orthogonal Frequency Division Multiplexing
'5G NR' 카테고리의 다른 글
Public and Private 5G 주파수 현황 (0) | 2021.03.25 |
---|---|
통신규격/표준의 목적 (0) | 2021.02.25 |
Fallback / Non-fallback DCI의 뜻 (0) | 2021.02.21 |
사용 가능한 HARQ process는 몇 개인가? (ft. 조사하는 방법) (8) | 2021.01.27 |
5G Sampling Time (Tc) (2) | 2021.01.25 |
댓글
이 글 공유하기
다른 글
-
Public and Private 5G 주파수 현황
Public and Private 5G 주파수 현황
2021.03.25 -
통신규격/표준의 목적
통신규격/표준의 목적
2021.02.25 -
Fallback / Non-fallback DCI의 뜻
Fallback / Non-fallback DCI의 뜻
2021.02.21 -
사용 가능한 HARQ process는 몇 개인가? (ft. 조사하는 방법)
사용 가능한 HARQ process는 몇 개인가? (ft. 조사하는 방법)
2021.01.27