2022. 7. 15. 23:44

30일엔딩

2021. 11. 11. 12:53

NR Frame Structure

 

 

 

Frame: fixed length of 10ms, frame number range: 0~1023.

Subframe: length is fixed to 1ms, subframe number range: 0~9.

Slot: when Normal CP is used, the length is 14 symbols. Since the symbol length is not fixed, the time slot length is also not fixed.

Symbols: length is not fixed and related to SCS.

 

- 추가 참고할만한 링크 : https://jb-story.tistory.com/348

2021. 11. 11. 12:15

MAC Layer 와 MAC Scheduler (LTE 기준)

MAC Layer
1. HARQ 재전송 제어 (HARQ Retransmission control)
2. Logical Channel Multiplexing and Priority handling

이러한 기능은 실제 MAC Scheduler에서 처리됨

또한 아래 기능도 수행함
3. Dynamically Decide modulation scheme 

MAC 스케줄러는 UE로 부터 전송되는 
CQI (Channel Quality Indicator)이라는 채널 상태 정보 메시지를 통해
수신 받아 무선 채널 품질에 대한 정보를 얻음
이때 채널 품질에 따라 사용할 변조 방식을 결정합니다. (16개)

이제 DLSCH 또는 User Plane Channel의 데이터에는
외부 채널 품질에 관계없이 사용자에게 수행되어야 하는 User Traffic이 포함됩니다.

Coverage가 좋지 않으면 Network는 QPSK를 사용합니다. (Weak signal 시)
그렇지 않으면 16QAM, 64QAM 등과 같은 더 높은 변조 방식을 사용합니다. (Full Signal 시)

그러나 신호 채널(signaling traffic)은 신뢰성 높은 전송이 필요하기 때문에
가장 강력한 변조방식으로 간주되는 QPSK를 사용합니다.

MAC Scheduler는 또한 전송할 UE를 결정해야 합니다.
4. Which are the terminals to transmit
5. Transmit set of resource block for DL data to different terminals
6. the selection of Transport Block size

위의 3가지 기능은 PHY 계층에서 구현됩니다.
MAC Scheduler는 구현을 위한 대부분의 결정을 내립니다.
(Modulation Scheme,, Antenna & Resource Assignement)

Logical Channel은 데이터의 유형과 목적이 무엇인지 알려줍니다.
(PCCH, BCCH, CCCH, DCCH, MCCH, DTCH, MTCH)
페이징, 브로드캐스팅 등과 같은 Transport Channel은 데이터가 전송되는 방식을 결정합니다.
Transport Block의 size를 할당하고 사용할 변조 방식을 동적으로 결정합니다.
Physical Channel은 Resource Element가 정확히 어디에 있는지 알고 있습니다.
신호 처리를 처리하므로 데이터가 얼마나 정확하게 전송되는지 알고 있습니다.


따라서 간단히 말해서 우리는 전송할 위치와 전송 방법을 알지 않고 데이터를 전송할 수 없으며
(We cannot transmit the data without knowing WHERE to transmit and HOW it should be transmitted)
데이터가 무엇인지 알지 않고 데이터를 전송하는 방법을 결정할 수 없습니다.
(We cannot decide HOW a data should be transmitted without knowing WHAT is the data)

따라서 결론은
Logical (WHAT) -> Transport (HOW) -> Physical (Where)


- 참조 자료 : https://www.youtube.com/watch?v=acjy_sBsw0w

2018. 8. 9. 01:13

Batch Normalization

2018. 3. 29. 01:36

최대공약수, 최소공배수

// 최대 공약수
int GCD(int p, int q)
{
 if (q == 0) return p;
 return GCD(q, p%q);
}

 

 

// 최소 공배수

int LCM(int p, int q)
{
 int gcd = GCD(p, q);
 return p*q / gcd;
}

2018. 3. 28. 01:04

bitmask 작성 방법

#include <stdio.h>

#define TODIGIT(x) ((x)>'9'?(x)-'A'+10:(x)-'0')
#define MAX_SIZE (8)

int inputArr[MAX_SIZE] = {6,13,5,1,6,9,2,3};

 

 

int encyption(int* arr, int size)
{
 int ptr = arr[0];

 for (int i = 1; i < MAX_SIZE; i++)
 {
        ptr = (ptr << 4) | arr[i];
 }
 
 return ptr;
}

 

 

int decyption(int pack_data, int k)
{
 int  n = k * 4;
 unsigned  mask = 0xf;
 mask <<= n;
 return ((pack_data & mask) >> n);
}

 


void main()
{
 int pack_num = encyption(inputArr, MAX_SIZE);

 printf("pack data %d \n", pack_num);

 

 for (int idx = MAX_SIZE - 1; idx >= 0; idx--)
 {
  int tmp = decyption(pack_num, idx);
  printf("%d : %d \n", idx, tmp);
 }
 
 printf("\n");
}

2018. 3. 27. 23:23

little endian에서의 Structure 2진수 출력

#include <stdio.h>

 

typedef struct {
  char a;
  char b;
  int c;
} NODE_t;

 

void printBinary(char i)
{
 int j;
 for (j = 7; j >= 0; j--)
 {
  printf("%d", (i >> j) & 1);
 }
 printf(" ");
}

 

void run5()
{
 char *ptr;   
 int idx;

    NODE_t node;
 node.a = 0x65;
 node.b = 0xf0;
 node.c = 0x01020304;

 ptr = (char *)&node;

 for (idx = 0; idx < sizeof(NODE_t); idx++)
 {
  printBinary(*ptr++);
 }
}

2018. 3. 27. 22:55

little endian -> big endian

#include <stdio.h>

 

void change(int * n) //general way

{
 char *p = (char *)n;
 char t;
 t = p[0], p[0] = p[3], p[3] = t;
 t = p[1], p[1] = p[2], p[2] = t;
}

 

void change(int *n)
{
 printf("%d\n", (*n << 24));                    

 //   0100 0000 0000 0000 0000 0000 0000 0000 (0x04000000)


 printf("%d\n", ((*n << 8) & 0xff0000));      

//    0000 0010 0000 0011 0000 0100 0000 0000 (0x02030400)

// & 0000 0000 1111 1111 0000 0000 0000 0000 (0x00ff0000) 

//    0000 0000  0000 0011 0000 0000 0000 0000 (0x00030000)

 


 printf("%d\n", ((*n >> 8) & 0xff00) );        

//    0000 0000 0000 0001 0000 0010 0000 0011    (0x00010203)

// & 0000 0000 0000 0000 1111 1111 0000 0000    (0x0000ff00)

//    0000 0000 0000 0000 0000 0010 0000 0000    (0x00000200)


 printf("%d\n", (*n >> 24));                    

//    0000 0000 0000 0000 0000 0000 0000 0001    (0x00000001)


 *n = (*n << 24) | ((*n << 8) & 0x00ff0000) | ((*n >> 8) & 0x0000ff00) | (*n >> 24);
}

 

main()
{
 int xData = 0x01020304;
 char *ptr = (char*)&xData;

 printf("x = %d%d%d%d\n", ptr[0], ptr[1], ptr[2], ptr[3]);
 change1(&xData);
 printf("x = %d%d%d%d\n", ptr[0], ptr[1], ptr[2], ptr[3]);
}

2015. 12. 2. 00:40

이진 탐색

#include <iostream>
#include <stdlib.h>

using namespace std;

class BINARY{
    private:
       
    public:
       int find(int*,int,int,int);
};   

 

int BINARY::find(int* arrs, int start,int end, int data)
{
    int middle;
    middle = (start + end) / 2;
    if(start < end)
    {
        if(arrs[middle] < data)
                start = middle + 1;
        else if(arrs[middle] > data)
                end = middle - 1;
        else if(arrs[middle] == data)
                return middle;
        return find(arrs, start,end, data);
    }
    return -1;   
}   


int main()
{
    int arr[10] = {111,124,345,366,388,566,777,889,1000,1002};
    int dex;
    BINARY b;
    dex = b.find(arr,0,10,566);
    if(dex == -1) cout<<"없음"<<endl;
    else cout<<dex<<endl;
   
    system("pause");
    return 0;
}   

2015. 12. 2. 00:39

삽입정렬

#include <iostream>
#define SIZE 10

using namespace std;

int main()
{
    int a[SIZE] = {45,2,46,87,34,12,34,5,9,100};  
    int i;
   
    for(i = 0 ; i < SIZE ; i++)
    {
          int Current = i;// 4
          int Temp = a[i];// 34
          for(; (Current > 0) && (a[Current-1] > Temp) ; Current--){
                 a[Current] = a[Current-1];
                 cout<<"("<<a[Current]<<")"<<endl;
                 }
          a[Current] = Temp;
         
    }
   
    for(int j = 0 ; j < SIZE ; j++)
    {
          cout<<a[j]<<endl;
    }
   
    system("pause");
    return 0;
}