Ultrasonic

Ses Dalgaları ile Veri İletişimi

WiFi, Bluetooth veya internet erişimi olmadan, yalnızca hoparlör (verici) ve mikrofon (alıcı) kullanarak yakın cihazlar arasında veri taşımak teknik olarak mümkündür ve data-over-sound olarak bilinir. Bu sayfa, projenin temelini oluşturan akustik veri iletimi konusundaki araştırmayı özetler.

1. Neden 18–22 kHz?

İnsan kulağı genelde 20 Hz – 20 kHz arasını duyar; fakat yetişkinlerin çoğu 17–18 kHz üzerindeki frekansları algılayamaz (presbiakuzi). Standart akıllı telefon, tablet ve laptop mikrofonları/hoparlörleri 22 kHz'e kadar olan sinyalleri makul kalitede üretip örnekleyebilir (44.1 kHz / 48 kHz örnekleme hızı, Nyquist limiti ≈ 22 kHz).

Akademik literatür bu aralığı "near-ultrasound" (yakın-ultrasonik) / quasi-ultrasound olarak adlandırır. ACM MobiCom 2016'da yayınlanan "Near-ultrasound communication for TV's 2nd screen services" çalışması tipik TV izleme ortamında 15 bps veri hızını başarmıştır. IEEE'nin "Ultrasonic Communication Using Consumer Hardware" çalışmasında ise 5 metreye kadar mesafede 4 kbps'e ulaşılmıştır.

Pratik aralık:
17–19 kHz: En güvenilir, çoğu mikrofon iyi çalışır, çocuklar/genç kulaklar duyabilir.
19–21 kHz: Yetişkinler genellikle duymaz, mikrofon hassasiyeti azalır.
20–22 kHz: Pratikte duyulmaz, ama Nyquist sınırına yakın olduğundan donanıma göre kalite değişir.

2. Gerçek Dünya Kullanım Alanları

📺 Second-Screen / İkinci Ekran

TV hoparlöründen yayılan ultrasonik damga, izleyicinin telefonunda izlediği içeriği tam saniyesinde tanımlar. Reklamla etkileşim, ek içerik, interaktif oyun veya ödül senaryolarında kullanılır. "J-shape detection" algoritmaları ulusal TV yayınlarında kullanılmıştır.

💳 Temassız Ödeme

Hindistan'da ToneTag ve benzeri firmalar; NFC olmayan telefonlarda bile sadece hoparlör/mikrofon kullanarak ödeme yapılmasını sağlıyor. QR, NFC, BLE bağımlılığını kaldırır.

🔗 Cihaz Eşleştirme

Smart TV, hoparlör veya IoT cihazını eşleştirirken WiFi şifresini sesle iletmek. Google'ın Tone uzantısı (kapatıldı), Chromecast Guest Mode benzer yaklaşımlar.

🏥 Sağlık Cihazları

CardiaWhisper gibi tıbbi araştırmalarda EKG verisi gibi ölçümleri radyo izni gerektirmeden hastane içinde ses ile aktarmak.

🛍️ Mağaza-içi Konum

Shopkick, mağazalarda hoparlöre yerleştirilen ultrasonik beacon ile müşterinin konumunu tespit ederek ödül verirdi. Reklam sektöründe SilverPush bu yaklaşımı kullandı (gizlilik tartışmalarına yol açtı).

📢 Ofline Bildirim Yayını

Acil duyuru sistemleri: WiFi/sinyal olmayan AVM, hastane, fabrika gibi yerlerde PA hoparlöründen yayılan sessiz ses, telefonlara bildirim tetikler.

🤖 AI Ajan İletişimi

Birden fazla AI ajanın aynı odada hoparlör/mikrofon ile birbirleriyle konuşması; ggwave bu senaryo için tercih edilen kütüphane oldu (2024–2025 trend).

🔐 Sözsüz Doğrulama

Kapı kilitleri, otomat, otopark bariyeri gibi sistemlerde — telefonu sadece yakına götürmek, hoparlörden çıkan sessiz "token" ile doğrulama sağlar.

3. Modülasyon Teknikleri

3.1 FSK (Frequency Shift Keying)

Farklı bit kombinasyonları farklı frekanslarla temsil edilir. Bu projede kullandığımız yöntem 4-FSK:

SembolBitler18-20 kHz (varsayılan)20-22 kHz (ultrasonik)
S00018 300 Hz20 100 Hz
S10118 750 Hz20 550 Hz
S21019 200 Hz21 000 Hz
S31119 650 Hz21 450 Hz

Her sembol 2 bit taşır. 60 ms sembol süresi → saniyede yaklaşık 4 bayt iletilir.

3.2 MFSK / OFDM

Multi-Frequency Shift Keying: ggwave kütüphanesinde olduğu gibi aynı anda 6 ton ile 3 bayt taşımak. 96 frekans (46.875 Hz aralık) kullanılarak 4.5 kHz bant içinde 8–16 bayt/sn elde edilir. OFDM, WiFi, LTE, DSL'de de kullanılan ortogonal alt taşıyıcı yaklaşımıdır.

3.3 Chirp Sinyalleri

Frekansın zamanla doğrusal değiştiği darbeler. Chirp.io (Sonos tarafından satın alındı) ve birçok ürün senkronizasyon için kullandı. Yansımalar ve dar bant gürültüsüne karşı dayanıklıdır.

3.4 PSK (Phase Shift Keying)

Veri taşıyıcının fazında kodlanır. Daha verimli ancak akustik kanalda (çoklu yol, Doppler) zordur. Telsiz iletişimde yaygındır.

4. Veri Çerçevesi (Frame) Tasarımı

Bu projede her iletim aşağıdaki yapıdadır:

┌──────────┬──────────┬──────────┬──────────────┬──────────┐
│ PREAMBLE │ SOF      │ LENGTH   │   PAYLOAD    │  CRC-16  │
│ 17.0 kHz │ marker   │ 16 bit   │ N bayt       │ 16 bit   │
│  ~200 ms │  ~100 ms │ 8 sembol │ 4N sembol    │ 8 sembol │
└──────────┴──────────┴──────────┴──────────────┴──────────┘

⚡ Bant Darlığını Aşmak: Token (Link) Yaklaşımı

Saf P2P modunda ham bayt hızı yaklaşık 5 B/sn'dir; bu da 4 KB'lık bir görsel için ≈ 13 dakika anlamına gelir. Pratik kullanım için endüstride yaygın bir kestirme yöntem: asıl veriyi değil, küçük bir referansı sesle iletmek.

GÖNDEREN                                    ALICI
─────────                                   ────
[veri]                                      Mikrofon dinler
   │                                              │
   │ POST /api/drop.php                           │
   ▼                                              ▼
sunucu → token: "X9K4M"                     ses çözülür → "X9K4M"
   │                                              │
   │ (5 byte ≈ 2 saniye ses)                      │
   ▼                                              ▼
sesle yayınla ───── ~18-22 kHz ─────>       GET /api/get.php?t=X9K4M
                                                  │
                                          asıl veri (5 MB'a kadar)
                                                  │
                                                  ▼
                                          Anında gösterim

Avantajları:

Bu projedeki Hızlı Mod tam olarak bu yaklaşımı uygular. Token alfabesi Crockford base32 (karışan harfler çıkarılmış): 23456789ABCDEFGHJKMNPQRSTUVWXYZ, 5 karakter = 30⁵ ≈ 24M kombinasyon, çakışma olursa otomatik uzar. Kullanım senaryoları: second-screen reklamı, ödeme onayı, kapı kilidi, cihaz eşleştirme, paylaşım linki, etiketli içerik tetikleme.

Saf vs Hızlı Mod: Eğer hedef gerçek bir internetsiz ortam ise Saf Mod tek seçenek. Demo, gerçek uygulamalar (ödeme, eşleştirme, second-screen) için Hızlı Mod 1000× daha pratiktir.

6. Büyük Dosyaların İletilmesi (Saf Mod)

Akustik kanalın bant darlığı nedeniyle ham bayt hızı ≈ 4–10 B/s'dir. Büyük veriler şu adımlarla işlenir:

  1. Sıkıştırma: Resimler client-side yeniden boyutlandırılır; düşük kaliteli JPEG'e çevrilir. Hedef: 1–4 KB.
  2. Parçalama: Veri 32 baytlık paketlere bölünür; her paket sıra numarası taşır.
  3. Manifest paketi: İletim başında dosya adı, MIME tipi, toplam paket sayısı gönderilir.
  4. Doğrulama: Her paket CRC-16 ile doğrulanır; bozuk paketler atılır.
  5. Yeniden birleştirme: Paketler sıraya konup orijinal veri çıkarılır.

Gerçekçi rakamlar: 200 baytlık metin ≈ 50 saniye, 4 KB'lık küçük resim ≈ 15 dakika. Telefon-laptop testlerinde (lewismoten/data-over-audio): insan duyma bandı için 538 bps, telefon bandında 138 bps elde edildi.

7. Bilinen Projeler & Kütüphaneler

ggwave (Georgi Gerganov)
C++ + WebAssembly. 6 ton paralel MFSK, Reed-Solomon hata düzeltme. 8–16 B/sn. F0 ultrasonik mod için 15 kHz. Açık kaynak, npm üzerinden erişilebilir.
quiet.js / libquiet
OFDM tabanlı veri iletimi; daha hızlı ama daha karmaşık.
AudioNetwork (robertrypula)
Saf JS, Web Audio API tabanlı; eğitim amaçlı detaylı protokol katmanları.
data-over-audio (lewismoten)
MFSK, çoklu osilatör. Telefon-laptop testlerinde 538 bps.
ToneTag
Hindistan kökenli ticari ödeme platformu; ses ile P2P para transferi.
Cue Audio
Stadyum/etkinlik senkronizasyonu (ışık şovları, anonslar).
Lisnr
Ticari SDK; ödeme, eşleştirme, kimlik doğrulama.
Google Tone (2015–2016)
Chrome eklentisi; sekme URL'ini ses ile paylaşırdı. ~18 kHz. Kapatıldı.
Chirp.io → Sonos
Chirp tabanlı protokol; mağaza içi cihaz eşleştirme. Sonos tarafından satın alındı.
SilverPush / Shopkick
Reklam izleme/mağaza beacon. Gizlilik tartışmalarına yol açtı; FTC inceledi.

8. Sınırlamalar

9. Bu Projedeki Mimari

   GÖNDEREN CİHAZ                          ALICI CİHAZ
┌────────────────────┐                   ┌────────────────────┐
│   Metin / Dosya    │                   │   getUserMedia()   │
│         │          │                   │         │          │
│  Sıkıştırma /      │                   │   AudioContext     │
│  Chunking          │                   │         │          │
│         │          │                   │   AnalyserNode     │
│  Frame oluştur     │                   │   (FFT, n=4096)    │
│  (CRC16 + length)  │     ~18-22 kHz    │         │          │
│         │          │  ═══════════════> │  Senkron + sembol  │
│  4-FSK encoder     │      hava         │  tespiti           │
│         │          │                   │         │          │
│  AudioBuffer →     │                   │  Çerçeve birleştir │
│  Hoparlör          │                   │  CRC kontrol       │
└────────────────────┘                   └────────────────────┘

10. Kaynaklar

Uygulamayı Aç →