Seri girişi
GNU Radio ile SDR: 13 Mini Proje
Bu belge, GNU Radio Companion (GRC) ile yazılım tanımlı radyoyu (SDR) sıfırdan öğreten 13 mini projelik bir serinin tüm verisini içerir: her projenin amacı, kullanılan her blok, varsayılan değerinden farklı olan her ayar, blok bağlantıları, deneyler, beklenen sonuçlar, sınav soruları ve gerçek kurulumda yaşanmış hatalar.
Seri, TEKNOFEST Elektronik Harp yarışması için SDR tabanlı bir Elektronik Destek (ES) sistemi geliştirme yolunda hazırlanmıştır. Simülasyonla başlar, ADALM-Pluto ile gerçek RF'ye geçer ve sinyalleri otomatik bulan, listeleyen ve kaydeden küçük bir ES sistemiyle biter.
Seri haritası
| # | Başlık | Ana kavram | Donanım | Ön koşul |
|---|---|---|---|---|
| MP-1 | İlk Akış Grafiği: Sinyal Kaynağı | Complex sinyal, zaman ve frekans görünümü | Yok | — |
| MP-2 | IQ Örnekleme ve Aliasing | Nyquist, örtüşme (aliasing) | Yok | MP-1 |
| MP-3 | Gürültü ve SNR | Gürültü kaynağı, sinyal-gürültü oranı | Yok | MP-2 |
| MP-4 | Otomatik Sinyal Tespiti | FFT, dB normalizasyonu, eşik ve histerezis | Yok | MP-3 |
| MP-5 | Filtreleme ve Kanal Seçme | Alçak geçiren filtre, frekans kaydırma, decimation | Yok | MP-4 |
| MP-6 | IQ Kaydetme ve Tekrar Oynatma | Dosya formatı, waterfall, burst sinyal | Yok | MP-5 |
| MP-7 | AM ve FM: İki Radyo İstasyonu | Modülasyon ve demodülasyon, ses çıkışı | Yok (hoparlör) | MP-6 |
| MP-8 | ADALM-Pluto ile FM Radyo | Gerçek RF, LO, offset tuning, WBFM | Pluto | MP-7 |
| MP-9 | Gerçek Spektrumda Otomatik Tespit | Ortalama alma, uyarlanır gürültü tabanı | Pluto | MP-8 |
| MP-10 | Embedded Python Block: Sinyal Listesi | Kendi bloğunu yazmak, median, birleştirme | Pluto | MP-9 |
| MP-11 | ZMQ ile Kendi Arayüzüne Bağlanma | PUB/SUB, PyQt5 + pyqtgraph | Pluto | MP-10 |
| MP-12 | Dijital Sinyaller: OOK ve PSK/QAM | Darbe analizi, constellation | Pluto (12A) / Yok (12B) | MP-11 |
| MP-13 | Bitirme: Mini ES Sistemi | Tespit + liste + otomatik kayıt | Pluto | MP-12 |
Önerilen klasör yapısı (öğrencinin bilgisayarında):
GNU_Radio_Test/
├── MP-1/ … MP-13/ her proje kendi klasöründe
└── (her klasörde .grc ve GRC'nin ürettiği .py)Ortak kavramlar
GRC'de port renkleri
| Renk | Veri tipi |
|---|---|
| Mavi | complex (IQ) — her örnek I + jQ, 8 bayt |
| Turuncu | float — tek reel sayı, 4 bayt |
| Mor / pembe | byte veya int |
| Koyu ton | Aynı tip, ama vektör halinde (ör. 1024'lük paket) |
| Gri, kesikli | Mesaj portu (akış değil, olay/mesaj) |
Seri boyunca geçerli kurallar
- Throttle kuralı: Akış grafiğinde donanım saati yoksa (Pluto, ses kartı) Throttle eklenir; varsa eklenmez. Donanım yokken Throttle olmazsa işlemci %100'e çıkar. Donanım varken Throttle eklenirse iki saat çakışır ve takılmalar olur.
- Değişken kullan: Birden fazla blokta geçen her değer (
samp_rate,fft_len…) bir Variable bloğunda tanımlanır. Değer tek yerden değişir. - Canlı ayar: QT GUI Range (kaydırma çubuğu) ve QT GUI Chooser (açılır liste) da birer değişkendir. Çalışırken değiştirilince onu kullanan bloklar anında güncellenir.
- Kırmızı başlık = hata: GRC'de bir bloğun başlığı kırmızıysa akış grafiği çalışmaz. En sık sebep: boşta kalan bir giriş/çıkış portu veya geçersiz bir değer.
- **GRC'nin ürettiği
.pydosyasına kod yazılmaz.** GRC her çalıştırmada bu dosyayı baştan yazar. Ek Python kodu ayrı bir dosyada tutulur. - Dosyada örnekleme hızı saklanmaz. Ham IQ dosyasının adına örnekleme hızı ve merkez frekansı yazılır (ör.
fm_100p0MHz_1p92Msps.cfile).
Temel formüller
| Formül | Anlamı |
|---|---|
Görünen bant = samp_rate (complex) | −samp_rate/2 … +samp_rate/2 |
Bin genişliği = samp_rate / fft_len | FFT frekans çözünürlüğü |
FFT kare süresi = fft_len / samp_rate | Bir FFT'nin kaç saniyelik veriye baktığı |
Güç (dB) = 10·log10(P); genlik (dB) = 20·log10(A) | |
| Güç = genlik² | Bağımsız sinyallerin güçleri toplanır |
SNR (dB) = 10·log10(P_sinyal / P_gürültü) | |
Alias frekansı = f − k·samp_rate (görünen banda düşen) | |
Decimation sonrası hız = samp_rate / D | |
Pluto'nun gördüğü aralık = LO ± samp_rate/2 | |
Carson bant genişliği (FM) ≈ 2·(Δf + f_mesaj) | |
| Dosya boyutu (complex64) = örnek sayısı × 8 bayt |
Sözlük
| Terim | Açıklama |
|---|---|
| IQ / complex sinyal | Sinyalin iki bileşenle (I: gerçek, Q: sanal) gösterimi. Pozitif ve negatif frekansları ayırt etmeyi sağlar. |
| Örnekleme hızı (samp_rate) | Saniyede alınan örnek sayısı. |
| FFT | Zaman sinyalini frekans bileşenlerine ayıran algoritma. |
| Bin | FFT çıkışındaki tek bir frekans dilimi. |
| Pencere (window) | FFT öncesi uygulanan, spektral sızıntıyı azaltan ağırlık fonksiyonu. |
| Histerezis | Eşikte iki ayrı seviye (high/low) kullanarak titremeyi önleme. |
| Decimation | Her D örnekten birini tutarak örnekleme hızını düşürme. |
| Taps | FIR filtrenin katsayıları. |
| LO (Local Oscillator) | SDR'nin ayarlandığı merkez frekans. |
| DC spike | SDR spektrumunun tam ortasında (LO'da) oluşan yapay tepe. |
| Waterfall | Spektrumun zaman içindeki değişimini renklerle gösteren grafik. |
| Burst | Kısa süreli, açılıp kapanan yayın. |
| De-emphasis | FM vericide yükseltilen tiz sesleri alıcıda geri kısan filtre. |
| ES (Electronic Support) | Elektromanyetik spektrumu dinleyip sinyalleri tespit, tanımlama ve konumlandırma. |
| AMC | Otomatik Modülasyon Sınıflandırma. |
| OOK | On-Off Keying: taşıyıcıyı açıp kapatarak bit gönderme. |
| Constellation | Dijital sembollerin I/Q düzlemindeki noktaları. |
| PUB/SUB | Bir yayıncının yayın yaptığı, abonelerin dinlediği mesajlaşma modeli (ZMQ). |