LoRa - 5. LoRa 데이터 분석 및 최적화 (5-1. 데이터 전송 속도 및 신뢰성 분석)

2025. 2. 25. 12:49프로그래밍/시스템

🔹 5-1. 데이터 전송 속도 및 신뢰성 분석

LoRaWAN은 장거리 저전력 통신 기술이지만, 환경과 설정에 따라 신호 강도와 데이터 전송 속도가 달라질 수 있습니다.
이 섹션에서는 LoRa 신호 강도(RSSI, SNR) 분석 및 최적화, 데이터 속도에 영향을 주는 SF(Spreading Factor)와 BW(Bandwidth) 조정 실습을 다룹니다.


📌 1. 신호 강도 측정 및 최적화 (RSSI, SNR)

LoRa 통신 품질을 평가하려면 RSSI(수신 신호 강도)와 SNR(신호 대 잡음비) 를 측정해야 합니다.
이 값들은 LoRa 네트워크의 데이터 전송 성공률과 신뢰성을 결정하는 핵심 요소입니다.

✅ 1-1. RSSI (Received Signal Strength Indicator)

  • RSSI는 수신 신호의 강도를 나타내는 값 (dBm 단위)
  • 값이 작을수록(- 값이 클수록) 신호가 약함
  • LoRa RSSI 범위: -30 dBm(강한 신호) ~ -120 dBm(약한 신호)

🔹 RSSI 해석 기준

RSSI 값 신호 품질 설명
-30 ~ -70 dBm 매우 강함 최적의 신호
-70 ~ -90 dBm 중간 양호한 신호, 장거리 가능
-90 ~ -120 dBm 약함 통신 불안정, 패킷 손실 가능

RSSI 최적화 방법

  • 안테나 방향을 조정하여 신호 수신 최적화
  • 게이트웨이를 장애물 없는 장소(옥상, 탑)로 이동
  • LoRa 모듈과 게이트웨이 간 거리를 조절하여 최적 신호 찾기

✅ 1-2. SNR (Signal-to-Noise Ratio, 신호 대 잡음비)

  • SNR은 신호와 노이즈(잡음) 간 비율을 측정하는 값 (dB 단위)
  • SNR 값이 클수록 신호 품질이 좋음
  • LoRa SNR 범위: -20 dB(노이즈 많음) ~ +10 dB(양호한 신호)

🔹 SNR 해석 기준

SNR 값 신호 품질 설명
+5 dB ~ +10 dB 최적 신호 강함, 데이터 전송 신뢰도 높음
0 dB ~ +5 dB 양호 안정적인 통신 가능
-5 dB ~ 0 dB 중간 패킷 손실 가능성 있음
-20 dB ~ -5 dB 나쁨 데이터 전송 실패 가능성 높음

SNR 최적화 방법

  • 신호 간섭이 적은 환경에서 테스트 진행
  • 송수신 모듈 간 거리 조정
  • 대역폭(BW)과 확산 계수(SF)를 최적화하여 신호 품질 개선

✅ 1-3. RSSI, SNR 값 측정하기 (Arduino 코드 예제)

아래 코드를 실행하면 LoRa 모듈이 수신한 데이터의 RSSI와 SNR 값을 측정하여 출력합니다.

#include <SPI.h>
#include <LoRa.h>

#define SS 10
#define RST 9
#define DI0 2

void setup() {
  Serial.begin(9600);
  while (!Serial);
  LoRa.setPins(SS, RST, DI0);

  if (!LoRa.begin(920E6)) { // 한국 주파수
    Serial.println("LoRa 초기화 실패");
    while (1);
  }
  Serial.println("LoRa 초기화 성공");
}

void loop() {
  int packetSize = LoRa.parsePacket();
  if (packetSize) {
    Serial.print("수신된 메시지: ");
    while (LoRa.available()) {
      Serial.print((char)LoRa.read());
    }
    Serial.println();
    
    // RSSI 및 SNR 값 출력
    Serial.print("RSSI: ");
    Serial.println(LoRa.packetRssi());
    Serial.print("SNR: ");
    Serial.println(LoRa.packetSnr());
  }
}

이 코드를 실행하면, 수신된 LoRa 데이터와 함께 RSSI, SNR 값을 확인 가능
RSSI 값이 -100 dBm 이하로 떨어지면, 신호가 약해 패킷 손실 가능성이 높음


📌 2. 데이터 전송 속도 조정 (SF, BW 실습)

LoRaWAN의 데이터 전송 속도는 SF(Spreading Factor, 확산 계수)와 BW(Bandwidth, 대역폭) 에 의해 결정됩니다.
이 값을 조정하면 전송 거리와 속도를 최적화할 수 있습니다.


✅ 2-1. SF(Spreading Factor, 확산 계수)

  • SF 값이 크면 장거리 통신 가능, 하지만 전송 속도는 느려짐
  • SF 값이 작으면 빠른 데이터 전송 가능, 하지만 전송 거리가 짧아짐

🔹 SF 값에 따른 전송 속도 및 거리

SF 값 전송 속도 최대 통신 거리 전력 소비
SF7 매우 빠름 짧음 (~2km) 낮음
SF9 보통 중간 (~5km) 중간
SF12 매우 느림 최장 (~20km) 높음

장거리 통신을 원하면 SF12 사용 (단, 속도가 느려짐)
빠른 데이터 전송을 원하면 SF7 사용 (단, 거리는 짧아짐)


✅ 2-2. BW(Bandwidth, 대역폭)

  • BW 값이 크면 전송 속도가 증가하지만, 신호 감도가 낮아짐
  • BW 값이 작으면 전송 속도는 감소하지만, 신호 감도가 향상됨

🔹 BW 값에 따른 성능 비교

BW 값 (kHz) 전송 속도 신호 감도
500 kHz 빠름 낮음
250 kHz 보통 중간
125 kHz 느림 높음

도심에서 간섭을 줄이려면 BW 125 kHz 설정
빠른 데이터 처리가 필요하면 BW 500 kHz 설정


✅ 2-3. SF, BW 조정 실습 코드

아래 코드를 실행하면 SF와 BW 값을 설정하여 LoRa 성능을 조정할 수 있습니다.

#include <SPI.h>
#include <LoRa.h>

#define SS 10
#define RST 9
#define DI0 2

void setup() {
  Serial.begin(9600);
  while (!Serial);
  LoRa.setPins(SS, RST, DI0);

  if (!LoRa.begin(920E6)) {
    Serial.println("LoRa 초기화 실패");
    while (1);
  }

  LoRa.setSpreadingFactor(10); // SF7 ~ SF12 설정 가능
  LoRa.setSignalBandwidth(125E3); // 125 kHz, 250 kHz, 500 kHz 설정 가능

  Serial.println("LoRa 초기화 성공");
}

void loop() {
  LoRa.beginPacket();
  LoRa.print("테스트 메시지");
  LoRa.endPacket();
  delay(5000);
}

SF와 BW 값을 변경하면서 신호 거리 및 속도 최적화 가능
환경에 따라 SF와 BW 값을 조정하여 최적의 성능 확보


📌 정리 (데이터 전송 속도 및 신뢰성 분석 요약)

요소  역할 최적화 방법
RSSI 수신 신호 강도 안테나 위치 조정, 장애물 회피
SNR 신호 대 잡음비 간섭이 적은 환경에서 통신
SF 확산 계수 SF7(빠름), SF12(장거리)
BW 대역폭 BW 125kHz(감도↑), BW 500kHz(속도↑)

RSSI와 SNR을 모니터링하여 신호 품질 최적화
SF와 BW 값을 조정하여 데이터 전송 속도와 거리 최적화