반응형

https://www.thethingsnetwork.org/docs/lorawan/regional-parameters/

 

Regional Parameters

We are building a global open free crowdsourced long range low power IoT data network

www.thethingsnetwork.org

 

LoRa는 기본적으로 지역마다 사용하는 주파수 대역, Duty Cycle이 다르다. 

우리나라는 KR920에 해당하며, SKT Telecom이 선두주자로 LoRa를 개발하고 있다. 아래 기술 요구사항을 참고하였습니다. 구현에 있어 중요하다고 생각하는 부분을 아래에 정리합니다.

SKT, 저전력 IoT LoRa 디바이스 기술 요구사항(LoRa-1.8), 2016년 8월
  1.  대한민국 무선설비규칙 917~923.5 ㎒ 무선설비 기술기준 표준규격에 따라 중심주파수 및 공중선 전력 등 상응하는 최신 표준규격을 모두 준수하여야 한다.
  2. 각 주파수 대역 내 각 채널의 대역폭은 125 ㎑를 지원해야 하며, 지원 가능한 채널 대역폭을 소프트웨어/파라미터으로 설정 가능하여야 한다.
  3. 디바이스의 하향링크(RX1) 채널 주파수 위치가 가장 최근 상향링크 송신한 채널 주파수 위치가 되도록 동작할 수 있어야 하고, 재전송(RX2) 채널 주파수 위치 및 Spreading Factor, Data Rate 은 소프트웨어/파라미터으로 설정 가능하여야 한다.

KR920

25 채널은 RX2 윈도우 Downlink 전용 

26, 27, 28 채널은 RX1 윈도우 Uplink/Downlink 사용 (Default)

29, 30, 31, 32 채널은 RX1 윈도우 Uplink/Downlink 사용 (Extra)

 

25 채널은 Uplink 이 후 Downlink가 없을 시, RX2(25채널) 윈도우를 통해 Downlink

 

구현 시 위 규격을 지켜야 한다.

 

위 Channel Freq가 Join_Accept 메세지의 CFList이다.

728x90
반응형
반응형

https://www.thethingsnetwork.org/docs/lorawan/end-device-activation/

 

End Device Activation

Every end device must be registered with a network before sending and receiving messages. This procedure is known as activation. There are two activation methods available: Over-The-Air-Activation (OTAA) - the most secure activation method for end devices.

www.thethingsnetwork.org

  • Over-The-Air-Activation (OTAA) - the most secure activation method for end devices. Devices perform a join procedure with the network, during which a dynamic device address is assigned and security keys are negotiated with the device.
  • Activation By Personalization (ABP) - requires hardcoding the device address as well as the security keys in the device. ABP is less secure than OTAA and also has the downside that devices can not switch network providers without manually changing keys in the device.

OTAA와 ABP의 차이는 인증방식이다.

 

ABP는 사전에 Application_Key, Network_Key를 가지고, 하나의 채널을 Default로 고정하여 사용한다. 그러므로 Join_Request, Join_Accept 과정이 필요하지 않는다.

 

반면 OTAA는 ABP와 달리 네트워크 첫 진입 시  Join_Request, Join_Accept 를 주고 받으며, 인증을 받는다. 아래 그림은 OTAA 메세지 흐름을 설명한다. 

OTAA Message Flow

 

End_Device가 Join_Request 메세지를 업링크(Up_Link)한다. Application_Server가 Join_Request에 대한 세션 키를 생성하면 Join_Accept 메세지를 End_Device로 다운링크(Down_Link)한다. (이는 기본적으로 Class_A로, End_Device 주도방식이다.)

 

여기서 Join_Accept 메세지 안의 CFList가 중요하다. 

CFList(16bytes) – contains the optional list of channel frequencies to be used for the end device 

 

Join_Accept 메세지 안에는 End_Device가 Channel_Frequency를 사용할  CFList가 들어 있다. 여기서 ABP와 큰 차이점을 가진다. ABP는 하나의 Channel_Frequency를 사용한다면, OTAA는 CFList를 통해 Channel_Frequency가 바뀐다.

 


MBED 구현 부분이다. 

https://github.com/ARMmbed/mbed-os-example-lorawan

 

GitHub - ARMmbed/mbed-os-example-lorawan: Simple LoRaWAN example application for mbed OS

Simple LoRaWAN example application for mbed OS. Contribute to ARMmbed/mbed-os-example-lorawan development by creating an account on GitHub.

github.com

 

mbed_app.json 파일 안에 OTAA와 ABP 설정 관련된 부분을 설명한다.

 

  • For OTAA
"lora.device-eui": "{ YOUR_DEVICE_EUI }",
"lora.application-eui": "{ YOUR_APPLICATION_EUI }",
"lora.application-key": "{ YOUR_APPLICATION_KEY }"​
  • For ABP
"lora.over-the-air-activation": false,

"lora.appskey": "{ YOUR_APPLICATION_SESSION_KEY }",
"lora.nwkskey": "{ YOUR_NETWORK_SESSION_KEY }",
"lora.device-address": " YOUR_DEVICE_ADDRESS_IN_HEX  "

ABP를 사용하기 위해선 OTAA를 꺼야 한다. 

 

 

728x90
반응형
반응형

안녕하세요.

 

오늘부터 LoRa 관련하여 포스팅을 시작하겠습니다.

 

TTN(The Things Network)에서 제공하는 자료를 기반으로 LoRa 기초를 다지기 좋습니다.

https://www.thethingsnetwork.org/docs/lorawan/

 

LoRaWAN®

Learn about LoRaWAN: the secure messaging protocol used by The Things Network

www.thethingsnetwork.org

 

사물인터넷의 발전으로 초소형 통신장치 수요가 증가함에 따라, 기존에 IoT를 위하여 대표적으로 활용되던 WiFi, BLE, Zigbee와 같은 근거리 네트워크가 발전되었습니다.

 

하지만 장거리를 필요로 하는 서비스에는 부적합하여 저전력*장거리 통신 기술인 LPWAN (Low Power Wide Area Network)에 대한 많은 연구가 진행 중입니다. 

 

LPWAN은 아래와 같은 종류들이 있습니다.

 

면허 대역 : NB-IoT (LG)

비면허 대역 : LoRa (SKT), Sigfox

LPWA기반 광역 IoT기술 및 표준화 (Wide Range IoT Technology and Standardization based on LPWA)
https://ettrends.etri.re.kr/ettrends/158/0905002120/

저는 LPWAN 중에서도 LoRa에 대해 포스팅합니다.

( 한국에서는 대표적으로 LoRa를 다루는 곳은 SKT 텔레콤과 한전 KDN이 있습니다. )

 


LoRa : 장거리 저전력 무선 플랫폼으로서 (한국에서) 920MHz 대역의 주파수를 사용하는 무선통신 기술.

LoRaWAN : LoRa 무선 통신 기술을 이용한 광역 네트워크 

LoRa의 특징을 말하기 앞서 이 글에 가장 중요하다고 생각되는 부분은 LoRa와 LoRaWAN의 차이입니다.

 

LoRa는 물리(Physical) 계층에 속하며 Semtech이 보유한 무선 통신 기술입니다. 

LoRaWAN은 링크(Mac) 계층에 속하며 LoRa Alliance가 이를 규정하고 있습니다. 

 

그래서 LoRaWAN을 구현할 때는 Semtech 문서와 LoRa Alliance 문서를 참고하여야 합니다.

 

https://lora-alliance.org/lorawan-for-developers/

 

LoRaWAN for Developers - LoRa Alliance®

The LoRaWAN® is a Low Power Wide Area (LPWA) end-to-end system architecture designed to wirelessly connect battery operated ‘things’ to the internet in regional, national or global networks. The architecture […]

lora-alliance.org

 

Link Layer
Regional Parameters


LoRa의 대표 특징은

  1. Low Power (저전력)
  2. Long Range (장거리)
  3. License free spectrum (주파수 스펙트럼 무료 라이센스)
  4. 변조 방식 : CSS (Chirp Spread Spectrum)

LoRaWAN 대표 특징은

  1. 변조 방식 : CSS, FSK
  2. 접속 절차 : OTAA(Over-The-Air-Activation), ABP(Activation By Personalization)
  3. Class : Class A, Class B, Class C
  4. 단일 홉 (one-hop) Star topology
  5. 네트워크 보안 : AES 128 암호화
  6. 세션 키 : 네트워크 세션 키, 어플리케이션 세션 키

장점은

        1. 네트워크가 구축되어 있지 않은 야외 나 네트워크 구축이 힘든 실내 환경에 활용 가능
        2. 낮은 사용료와 저렴한 초기 구축비
        3. 단순한 접속 절차 (OTAA, ABP)로 대량의 단말기(End Device) 간단하게 수용 가능
        4. End Device가 복수의 기지국에 접속 가능하여 최적의 경로로 네트워크에서 단말기로 데이터 전송이 가능
        5. Sensitivity 특성이 좋아서 신호 간섭에 강하고 최적의 주파수 활용도를 제공
        6. LoRa는 기기간 동기를 맞출 필요가 없고, 채널에 대한 모니터링이 필요 X

위와 같이 볼 수 있습니다.

 

간단히 이 정도로 소개하며, 이제부터 하나하나 자세히 포스팅 해나가도록 하겠습니다.

728x90
반응형
반응형

안녕하세요. 

 

오늘부터 AVR Kut-128_comm_board를 이용한 Bluetooth 통신에 대해 차근차근 포스팅하겠습니다.

 

개발환경은 CodeVision Evaulation을 사용했습니다.

http://www.hpinfotech.ro/cvavr-download.html

 

Kut-128_comm_board
kut128_comm_board_manual.pdf
1.80MB
CodeVision

( 위 CodeVision Evaluation을 설치하시면 드라이버가 자동으로 설치됩니다. )

 

블루투스 모듈 블루투스 4.0 BLE 모듈 (DIP) [SZH-BTBA-002]를 사용했습니다.

블루투스 4.0 BLE 모듈 (DIP) [SZH-BTBA-002]

 

스마트폰 어플은 nRF Connect for Mobile을 사용했습니다. (Android)

nRF Connect for Mobile

 

  • Kut-128_comm_board
  • CodeVision Evaulation
  • 블루투스 4.0 BLE 모듈 (DIP) [SZH-BTBA-002]
  • nRF Connect for Mobile

 

보드는 위 매뉴얼(. pdf)을 참고하면 됩니다. 

 


 

첫 번째 글은 블루투스 모듈의 동작에 대해 설명하겠습니다. 

 

블루투스의 무선 통신은 4핀만 있으면 됩니다. 하지만 연결 해제 등 다양한 동작을 위해 STATE 단자와 EN 단자도 같이 사용하겠습니다.

 

  • 통신을 위한 RX(Receive : 수신), TX(Transport : 송신) 
  • 전원을 위한 VCC(5V), GND
  • 블루투스의 연결 상태를 확인하기 위한 출력부 STATE
  • 블루투스가 다른 기기와 연결되어 있을 때, 강제로 끊기 위한 입력부 EN
VCC:  input power supply 3.3~6V, Prohibit more than 7V
GND: Ground
TX:  transport
RX:  receive  
State: when bluetooth is connected , output "High level", "no conntected"  output "low level"
en:when module is connected, give a high level to "EN",the module will disconnected

https://www.devicemart.co.kr/goods/view?no=1322018

 

CC2541 블루투스 4.0 BLE 모듈 (DIP) [SZH-BTBA-002]

Master Mode, Transparent Transmission (Slave Mode 미지원) / UART 인터페이스, SPP 블루투스 직렬포트 프로토콜 지원 / 3V / 대기전력 : 90uA ~ 400uA / IOS, iBeacon, 안드로이드 4.3 호환 / MFI 불필요 / 15.5mm * 37.3mm (PCB)/★

www.devicemart.co.kr

 

 


 

동작의 구현에 대해 설명하겠습니다.

 

  1.  블루투스 디바이스가 다른 기기와의 연결 상태를 확인. (연결되어 있다면 연결 강제 끊기, 다른 기기와 연결되어 있으면 전송 모드이기 때문에, AT 명령어가 통하지 않음)
  2. 블루투스 디바이스에게 AT 명령어를 전송하여 디바이스가 살아 있는지 확인
  3. 블루투스 디바이스의 이름을 사용자가 원하는 Name 서비스로 변경 후, 디바이스 리셋 (다른 기기와 연결 준비가 되어 있는 상태)
  4. 스마트폰에서 블루투스와 연결하면, 간단한 통신 확인을 위해 매 1씩 증가하는 변수 cnt를 전송하여 스마트폰에서 cnt가 1씩 증가하는지 확인.
728x90
반응형
반응형

안녕하세요. 오늘은 Indoor Positioning에서 [cm]단위의 오차를 내는 UWB 관련 논문에 이야기하겠습니다. 

 

coding-yoon.tistory.com/136?category=910542

 

[무선 통신] Bluetooth Low Energy(BLE) 1. Physical Layer

microchipdeveloper.com/wireless:start Wireless Communications - Developer Help Microchip offers a broad portfolio of wireless solutions which are cost effective and very easy to implement. Depending..

coding-yoon.tistory.com

BLE는 기기간 수신신호세기(RSSI)를 이용해 Indoor Positioning을 하는 방면, UWB는 nanosecond(10e-9)의 길이를 갖는 매우 짧은 펄스를 이용하여 통신하는 방식입니다. 

 

시간 분해능이 매우 높아 최단 경로와 다중 경로간의 신호구별을 용이하여 수 cm이내의 정확도로 거리 측정이 가능하고 낮은 전력 밀도로 저전력 대용량 데이터 전송이 가능합니다. 

 

 

대표적으로 TWR(Two Way Ranging) 방식으로 Distance를 추정합니다. 

 

t_round A : 노드 A가 거리측적용 메세지를 송신한 순간부터 노드 B의 응답 메세지를 수신했을 때의 시간, 즉 거리 측정                 메세지의 왕복시간(Round Trip Time : RTT)

t_reply B : 노드 B의 응답시간 또는 처리 시간(Processing Time)

t_p : 거리 측정 메세지의 단방향 도달 시간

TOA = t_p, C : 전파속도, 광속도(3e8)

 

일반 TWR은 두 기기간의 하드웨어적 차이로 인해 시간 측정이 달라 TOA에 오차가 발생할 수 있어, SDS-TWR 등 많은 방식이 존재합니다.

< [UWB] IEEE 802.15.4a UWB 기반 실내 위치측정 시스템의 설계 및 구현 > 

 

 

기본적으로 UWR을 이용하여 거리를 구하는 방법을 알아보았으며, Non-Line of Sight 에 대해 알아보겠습니다. 

 

ieeexplore.ieee.org/document/9108193

 

UWB NLOS/LOS Classification Using Deep Learning Method

Ultra-Wide-Band (UWB) was recognized as its great potential in constructing accurate indoor position system (IPS). However, indoor environments were full of complex objects, the signals might be reflected by the obstacles. Compared with the Line-Of-Sight (

ieeexplore.ieee.org

 

논문의 아이디어는 UWB LOS/NLOS 분류를 딥러닝을 통해 성능을 향상시키는 것입니다. 

(Line of Sight, Non-Line of Sight)

 

실내 환경은 다양한 장애물(책상, 캐비넷, 책장 등)으로 가득차있으며, 이 장애물을 통해 UWB 신호는 반사될 수 있으며, 신호 수신은 직접 수신 된 신호에 비해 거리 정보에 더 긴 전송 시간을 가져오고 추가적인 Time-varying bias를 유발합니다. 

cf) UWB 신호의 오차는 대게 양의 값(+)을 가집니다. UWB 신호는 Nanosecond 단위로 시간측정 방식이기 때문에, 신호가 반사되면 지연 시간이 더해져 오차로 발생하기 때문입니다.

 

반사를 통해 오차를 일으킨 NLOS를 제거하면, 정확한 거리를 구할 수 있습니다. 

 

가장 직접적인 접근 방식은 UWB 신호 전파 경로 손실 모델 또는 CIR (Channel Impulse Response)을 기반으로 NLOS / LOS 신호 특성을 분석하는 것입니다.

 

위 논문은 Doctor Klemen Bregar providing the UWB NLOS/LOS open source data 를 이용

github.com/ewine-project/UWB-LOS-NLOS-Data-Set

 

ewine-project/UWB-LOS-NLOS-Data-Set

Repository with UWB data traces representing LOS and NLOS channel conditions in 7 different indoor locations. - ewine-project/UWB-LOS-NLOS-Data-Set

github.com

 

이 포스팅은 두 편을 걸쳐 진행됩니다. ( 1편 : 오픈소스 데이터셋 전처리, 2편 : 논문 기반 네트워크를 통해 학습 )

 

Doctor Klemen Bregar providing the UWB NLOS/LOS open source data를 딥러닝을 위해 전처리 과정이 필요합니다. 

 

오픈소스 데이터 구성

오픈소스는 csv, 데이터를 불러오는 모듈로 구성되어 있습니다. 

4년 전 데이터이므로 pandas 버전 오류 해결을 위해 uwb_dataset.py를 약간 변경했습니다.

 

uwb_dataset.py

"""
Created on Feb 6, 2017
@author: Klemen Bregar 
"""

import os
import pandas as pd
from numpy import vstack


def import_from_files():
    """
        Read .csv files and store data into an array
        format: |LOS|NLOS|data...|
    """
    rootdir = '../dataset/'
    output_arr = []
    first = 1
    for dirpath, dirnames, filenames in os.walk(rootdir):
        for file in filenames:
            filename = os.path.join(dirpath, file)
            print(filename)
            output_data = [] 
            # read data from file
            df = pd.read_csv(filename, sep=',', header=0)
            # ------------------------ update Mar 3, 2021 ----------------------------- #
            columns_name = df.columns.values
            # ------------------------ update Mar 3, 2021 ----------------------------- #
            

            # ------------------------ update Mar 3, 2021 ----------------------------- #
            # input_data = df.as_matrix()
            # df.as_matrix() was depriciated after the version 0.23.0 use df.values()
            input_data = df.values
            
            # ------------------------ update Mar 3, 2021 ----------------------------- #
            
            # append to array
            if first > 0:
                first = 0
                output_arr = input_data
            else:
                output_arr = vstack((output_arr, input_data))
    
    return columns_name, output_arr

if __name__ == '__main__':

    # import raw data from folder with dataset
    print("Importing dataset to numpy array")
    print("-------------------------------")
    data = import_from_files()
    print("-------------------------------")
    # print dimensions and data
    print("Number of samples in dataset: %d" % len(data))
    print("Length of one sample: %d" % len(data[0]))
    print("-------------------------------")
    print("Dataset:")
    print(data)

 

1. Load UWB data

import numpy as np
import pandas as pd
import uwb_dataset

# import raw data
data = uwb_dataset.import_from_files()

# divide CIR by RX preable count (get CIR of single preamble pulse)
# item[2] represents number of acquired preamble symbols
for item in data:
	item[15:] = item[15:]/float(item[2])

print("\nColumns :", columns.shape, sep=" ")
print("Data :", data.shape, sep=" ")
print(type(data))

 

2. Create UWB(CIR) Pandas Dataframe

cir_n = len(columns[15:])

print("Columns :", columns, sep=" ")
print("Channel Inpulse Response Count :", cir_n, sep=" ")

df_uwb = pd.DataFrame(data=data, columns=columns)
print("Channel 2 count :", df_uwb.query("CH == 2")['CH'].count())
print("Null/NaN Data Count : ", df_uwb.isna().sum().sum())
df_uwb.head(3)

# LOS/NLOS Count
los_count = df_uwb.query("NLOS == 0")["NLOS"].count()
nlos_count = df_uwb.query("NLOS == 1")["NLOS"].count()

print("Line of Sight Count :", los_count)
print("Non Line of Sight Count :", nlos_count)

# Columns CIR Extract
df_uwb_data = df_uwb[["CIR"+str(i) for i in range(cir_n)]]
print("UWB DataFrame X for Trainndarray shape : ",df_uwb_data.values.shape)
df_uwb_data.head(5)

 

Columns : Sampling 1016 CIR

LOS : 21000, NLOS : 21000  Pandas Dataframe 

 

다음 글은 생선된 위 데이터 프레임을 이용해 논문에 제시된 CNN+LSTM 모델을 Pytorch로 구현하겠습니다.

coding-yoon.tistory.com/139

 

[무선 통신] UWB LOS/NLOS Classification Using Deep Learning Method (2)

안녕하세요. WB LOS/NLOS Classification Using Deep Learning Method(1)에서 UWB CIR Dataset을 생성하였다면, 2편으로 논문에서 제시한 CNN_LSTM 네트워크를 약간 변형하여 구성하겠습니다. coding-yoon.tistory..

coding-yoon.tistory.com

 

728x90
반응형

+ Recent posts