[LTE/NR] 타이밍 어드밴스 (Timing Advance)

Timing Advance는 Subframe이 도착하는 시간을 조절하기 위해서 사용된다. 만약 기지국(eNodeB)에서 떨어져 있는 거리가 다른 여러 단말(UE)에서 신호를 보내면 서로 다른 시간에 도착하게 된다. 이러한 경우 Signal Interference가 발생해서 신호를 제대로 파악하기 어려워진다. Timing 문제를 해결하기 위해서 PUSCH/PUCCH/SRS와 같이 Uplink 신호를 사용해서 Timing을 지속해서 측정한다. 간단히 설명하면 PUSCH 신호의 도착 시각이 다소 빠르다고 판단되면 해당 단말(UE)에… Read More »

[C/C++/AVX] 이동 평균 (Moving Average) 성능 비교

이동 평균(Moving Average: MA)을 계산하기 위해서는 주어진 기준점에서 정해진 MA Window 크기(개수)만큼 수를 더해서 Window 크기로 나누기를 해주면 된다. 그림 1은 MA 계산을 하기 위한 식이다. C/C++을 사용해서 특정 Array의 첫 번째 Index의 Moving Average를 구한다면 MA Window 크기(개수)만큼 숫자를 더해서 MA 값을 구한다 (편의상 나누기 연산을 수행하지 않았다). 다음 Index의 MA 값을 구할 때는… Read More »

[C/C++] 가변 인자 사용 방법 (Variable Length Argument)

실험 환경 OS: Ubuntu 18.04 g++: 7.5.0 C/C++에서 함수를 만들 때 인자의 개수가 정해져 있지 않은 경우 가변 인자를 사용해서 편리하게 함수를 제작할 수 있다. 저의 경우 Debug를 위한 나만의 Printf를 제작하는 과정에서 사용하였다. 가변 인자 사용방법에 대해서 간단히 정리해보았다. 사용 방법 함수 인자 부분에 “…” 을 추가함 예: mkFindMin(int numArg, …) {} va_list( )를… Read More »

[LTE/NR] Youtube 강의 정리 (NPTEL)

통신 관련 강의를 찾아보다가 Youtube에 괜찮은 강의가 있어서 정리해보았습니다. 강의를 보면서 각 강의에서 설명하는 내용과 공부가 필요한 내용을 정리하였습니다. 출처 1은 Youtube 동영상 강의 주소이고, 출처 2는 영어 강의 스크립트를 다운받을 수 있는 사이트입니다. 혹시 영어 강의가 아니면서 괜찮은 강의가 있으면 공유 부탁드립니다! Lecture 01: Overview of Cellular Systems – Part 1 주소 https://www.youtube.com/watch?v=f2wlHL1Sok8&t=2697s 내용… Read More »

[C/C++] 레퍼런스(참조자) vs. 포인터 (Reference vs. Pointer)

전문가를 위한 C++(출처1) 책을 읽다가 Reference(레퍼런스, 참조) 변수에 대해서 알게 되어서 정리하였다. 개인적인 느낌이지만 Reference 변수를 잘 사용하면 Pointer를 사용할 때 보다 실수를 적게 하면서 프로그램을 작성할 수 있을 것 같다. Pointer와 Reference 변수를 선언해서 사용하는 방법은 아래와 같다. 기본적으로 함수를 호출하면 변수를 복사해서 사용한다. 하지만 Pointer와 Reference를 사용하면 변수를 복사하지 않고 참조 전달 방식(Pass… Read More »

[Linux] Git SSH Local 서버 만들기

실험 환경 OS: Ubuntu 18.04 github, gitlab등을 사용하지 않으면서 간단히 git 서버를 만드는 방법에 대해서 정리해보았다. 사실 크게 사용할 일이 없기는 한데 외부 인터넷 접속이 어려운 회사 내부에서 사용하거나 개인 서버를 가지고 싶을 때 사용하면 유익한 것 같다. SSH Git 서버 구축하는 방법과 Web Git 서버 구축하는 방법이 있다. 저의 경우 SSH Git 서버만 사용하면… Read More »

[SSE/AVX Vectorization] 02-Detect System Capabilities

목차: [Series 01] Index & Overview (Link)이전 글: [Series 01] Index & Overview (Link)다음 글: [Series 03] TBD (Link) 지난번에 작성한 글에서 SSE와 AVX에 대해서 짧게 정리를 하였다. 간단히 설명하면 Vector (SIMD) 연산을 수행하기 위해서 CPU에 추가된 Instruction Set이다. 상세한 글은 출처 1에서 확인 할 수 있다. 이번 글에서는 CPU가 SSE/AVX를 지원하는지 확인하는 방법, GCC를 사용해서 SSE/AVX… Read More »

[Linux-Ubuntu] XRDP 설치 및 사용하기 (Install X? Remote Desktop Protocol)

실험환경: Ubuntu 18.04 XRDP는 Microsoft Remote Desktop Protocol (RDP) 기능을 다른 OS에서도 사용할 수 있도록 해주는 Protocol이다. 상세한 설명은 출처 1 영문 위키피디아에서 확인 할 수 있다. 개인적으로 사용하는 방법에만 관심이 있어서 해당 Protocol에 대해서 추가로 공부를 하지는 않았다. 보통 위와 같이 설정한 다음 Window Remote Desktop 프로그램을 사용해서 리눅스에 접속을 할 수 있다고 한다.… Read More »

[LTE/NR] Channel Model

주의 (Caution) 제가 작성한 다른 글에서도 틀린 내용이 존재할 수도 있지만, 특히 LTE/NR에 대해서는 지식이 없어서 틀린 내용이 더 많이 있을 수도 있습니다. 제가 이해하기 위해서 구글에서 찾은 내용을 정리한 글입니다. 혹시나 틀린 내용을 알려주시면 정말 감사하겠습니다. What is Channel? (출처 1) Channel이란 통신 신호가 지나가는 통로를 의미하는 것으로 판단된다. 예를 들어서 컴퓨터 간에 케이블로… Read More »

[Linux] CMake 명령어 정리 (CMake Commands)

CMake에 대해서 정리해보려고 했는데 출처 1, 2에 설명이 정말 잘 정리되어 있어서 개인적으로 사용하는(사용해본) 명령어만 정리해보았다. 대부분 출처 1, 2에서 발취한 내용이다. CMake 최소 지원 버전 선택하기 (CMAKE_MINIMUM_REQUIRED) CMake 지원 최소 버전을 명시할 때 사용한다. 보통 CMakeLists.txt 파일 제일 처음에 작성한다. VER: CMake 최소 버전 File 및 Folder 위치 정보 변수에 저장하기 (GET_FILENAME_COMPONENT) File 및… Read More »