글 작성자: astrocosmos

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으로 한번 구해보자.

3GPP TS 38.211 chapter 5.3.1

하나의 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 $ 만큼 더 길다.

3GPP TS 38.211 Table 4.3.2-1 and 4.3.2-2

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

 


 

Work Programme - Work Item Detailed Report

Title 5G; NR; Physical channels and modulation (3GPP TS 38.211 version 15.7.0 Release 15) NR; Physical channels and modulation 

portal.etsi.org

 

728x90