← Tüm projeler

Proje 01 · 2026

LoRaSim: SX1276 LoRa Haberleşme Simülatörü

SX1276 tabanlı LoRa vericiler ve alıcılar arasındaki haberleşme kalitesini; kanal, mesafe, hareket ve trafik koşulları altında inceleyen simülatör.

Rol
Tek geliştirici
Dil
Python 3.11+
Arayüz
PySide6, PyQtGraph
Lisans
MIT
Kaynak
GitHub ↗

01.1Özet

Bir LoRa bağlantısının sahada ne kadar iyi çalışacağı; spreading factor, bant genişliği, gönderim gücü, mesafe, ortam ve ağdaki diğer cihazlar gibi birçok etkene bağlı. Her kombinasyonu donanımla denemek zaman alıyor, bazı durumları (hareketli cihazlar, yoğun trafik, girişim) tekrarlanabilir biçimde kurmak ise neredeyse imkânsız.

LoRaSim bu soruları bilgisayarda yanıtlamak için yazdığım bir simülatör. SX1276 modülünün parametreleriyle çalışıyor; vericileri, kanalı ve alıcıları ayrık olay tabanlı bir motorda modelliyor, sonuçları canlı grafiklerle gösteriyor ve CSV, JSON, PNG ya da PDF rapor olarak kaydediyor. Grafik arayüzün yanında aynı motoru kullanan bir komut satırı arayüzü de var.

Arayüz: Sol tarafta parametre panelleri, ortada canlı RSSI, SNR, paket durumu, PER, throughput, gecikme ve cihaz konumu grafikleri.
Şekil 1Arayüz — Sol tarafta parametre panelleri, ortada canlı RSSI, SNR, paket durumu, PER, throughput, gecikme ve cihaz konumu grafikleri.

01.2Mimari

LoRaSim mimari diyagramı Arayüz / CLI PySide6 · argparse SimConfig doğrulama · JSON Olay zamanlayıcı heapq · tek seed Metrikler PER · RSSI · enerji Vericiler trafik · ACK · DC Kanal kayıp · sönümleme paket PHY modeli link-level / CSS Dışa aktarma CSV · JSON · PDF kayıt

Arayüz ve komut satırı aynı SimConfig nesnesini üretiyor; doğrulama kuralları ve hata mesajları tek yerde. Motor, tüm rastgeleliği tek bir seed'den türetiyor: aynı ayarlar ve aynı seed, arayüzde de komut satırında da birebir aynı sonucu veriyor. Arayüzde motor ayrı bir iş parçacığında çalışıyor, kayıtlar 200 ms'de bir ekrana aktarılıyor.

01.3Fiziksel katman modelleri

Simülatörde iki model var ve arayüzden seçilebiliyor:

  • Link-level model: dalga şekli üretmeden link bütçesi, yol kaybı, SNR ve hassasiyetten paket kararını veriyor. Sembol hata olasılığı LoRa'nın evreuyumsuz ortogonal modülasyon eşdeğerinden sayısal olarak hesaplanıyor; header ve interleaver blokları, Hamming düzeltmesi ve CRC-16 kontrolü gerçekten uygulanıyor. Çok cihazlı ve uzun simülasyonlar için bu model kullanılıyor.
  • CSS fiziksel katman modeli: preamble, sync word, SFD, header ve payload'dan oluşan gerçek chirp dalga şeklini üretiyor, kanal etkilerini sinyale uyguluyor; alıcı frekans kaymasını preamble'dan kestirip düzeltiyor ve dechirp + FFT ile çözüyor. Link-level modelden SF7'de yaklaşık 25, SF12'de yaklaşık 270 kat yavaş.

İki model birbirini doğrulamak için kullanıldı: aynı SNR noktalarında PER eğrileri örtüşüyor, CSS modelinde ölçülen SER de teorik eğriyi izliyor.

Model karşılaştırması: SF9; solda iki modelin PER–SNR eğrileri, sağda CSS modelinde ölçülen SER ile teorik SER.
Şekil 2Model karşılaştırması — SF9; solda iki modelin PER–SNR eğrileri, sağda CSS modelinde ölçülen SER ile teorik SER.

01.4Özellikler

LoRa ayarlarıSF7–SF12; 125 / 250 / 500 kHz; CR 4/5–4/8; güç, frekans (137–1020 MHz), payload, CRC; preamble, implicit header, sync word, IQ inversion, LDRO
OrtamlarSerbest uzay, açık alan, kırsal, kentsel, yoğun kentsel, kapalı alan
KanalSerbest uzay ve log-distance yol kaybı, AWGN, gölgeleme, Rayleigh/Rician sönümleme, çok yollu yayılım (COST 207, ITU Indoor A), zamana bağlı kanal, Doppler, kristal frekans kayması, harici girişim
ÇakışmalarCapture effect: aynı SF'de 6 dB eşiği, farklı SF'ler için SIR eşik matrisi
AğÇoklu verici ve alıcı; mesafe, kartezyen veya rastgele yerleşim; half-duplex
HareketSabit hız ve yön, rastgele yürüyüş, rota, dairesel
TrafikACK ve tekrar gönderim, gönderim kuyruğu, duty-cycle kontrolü (uyar / zorla)
ÖlçümlerBER, SER, PER, paket kaybı, RSSI, SNR, throughput, gecikme, ACK başarısı, duty-cycle ihlali, SX1276 akımlarına göre enerji, başarılı haberleşme mesafesi
AnalizOrtam, mesafe, güç ve SF taramaları; link-level ↔ CSS karşılaştırması
ÇıktılarCSV, JSON, PNG, PDF rapor

01.5Analiz

Analiz sekmesi ve --sweep seçeneği, tek bir parametreyi değiştirip diğerlerini sabit tutarak taramalar yapıyor. Taramanın her noktası aynı seed ile çalıştığı için noktalar arasındaki fark rastgelelikten değil, değiştirilen parametreden geliyor.

Ortam karşılaştırması: 2 km mesafede altı ortam profili için başarı oranı, ortalama SNR ve throughput.
Şekil 3Ortam karşılaştırması — 2 km mesafede altı ortam profili için başarı oranı, ortalama SNR ve throughput.
python -m lorasim --sweep environment --distance 2000 --png ortam.png
python -m lorasim --max-range 0.9 --env rural --sf 10
python -m lorasim --compare-models --sf 9 --png modeller.png

01.6Doğrulama

Projede 270'ten fazla otomatik test var. Testler airtime ve hassasiyet hesaplarını, SER modelinin Monte Carlo ile doğrulanmasını, kanal etkilerini, çoklu cihaz ve çakışma davranışını, ACK ve duty-cycle mantığını, CSS modülasyonunu, uzun süreli çalışmada bellek kararlılığını ve arayüzü kapsıyor. Planda tanımladığım on başarı kriterinin her biri ayrı bir testle sınanıyor. Testler her push'ta GitHub Actions üzerinde Python 3.11 ve 3.12 ile çalışıyor.

01.7Sonuçlar ve öğrenilenler

  • Veri sayfasındaki SNR eşikleri, teorik hata modelinden 0,5–2,5 dB daha kötümser. Bu yüzden simülasyonda paket kaybını çoğunlukla hassasiyet eşiği belirliyor; teorik SER eğrisi tek başına iyimser sonuç veriyor.
  • Ortam profilleri literatürdeki tipik değerlerden alındı ve sahada ölçülerek kalibre edilmedi. Her değer arayüzden değiştirilebiliyor; gerçek bir kurulum için önce saha ölçümüyle ayarlanmaları gerekiyor.
  • İki farklı yaklaşımla yazılmış iki modelin aynı sonucu vermesi, ikisindeki hataları da yakalamanın en etkili yolu oldu.
  • CI'da, testler geçtiği hâlde Linux + Python 3.11'de sürecin kapanışta çöktüğü görüldü. Sebebi PySide6 6.12.0'daki bir referans sayımı hatasıydı (None döndüren her çağrı); bu sürüm bağımlılıklardan dışlandı ve hatayı yakalayan bir test eklendi.