Burada televizyon hâlâ analog ve bir SDR onu izleyebiliyor
HackRF ile dijital TV almaya çıktım ve ilk iki günü, dört seçenekten üçünün imkânsız, mevcut olmayan ya da telsizimden geniş olduğunu kanıtlamakla geçirdim. Geriye herkesin öldüğünü sandığı seçenek kaldı.
HackRF ile televizyon izlemek istedim. Bir işaret çözmek ya da spektrum çizmek değil — şu anda birilerinin yayınladığı bir resmi gerçekten görmek.
İlk olan şey, fikrin neredeyse her sürümünü öldüren iki günlük bir araştırma oldu.
İşe yaramayan her şey
Akla ilk gelen hedef karasal dijital televizyon ve Türkiye'de bu bir dizi kapalı kapı:

DVB-T burada hiç ticari olarak yayınlanmadı, yani alınacak bir şey yok.
DVB-T2 yalnızca test yayını olarak var — Çamlıca'nın UHF 50. kanalda
~706 MHz'te olduğu doğrulandı; Ankara, İzmir ve Adana test aşamasında — ve
gerçek zamanlı, açık kaynak bir DVB-T2 alıcısı hiç yok. gr-dtv'nin T2 desteği
sadece verici, SDRangel talebi "wontfix" olarak kapatılmış, gr-dvbs2rx ise
uydu DVB-S2 çözüyor. Türksat ise hiçbir kod miktarının düzeltemeyeceği bir
biçimde daha kötü: 27.5 MSym/s'lik bir transponder kabaca 33–37 MHz kaplıyor,
HackRF ise 20 MHz'de tavan yapıyor. Sinyalin tamamını göremiyorsanız
demodüle de edemezsiniz.
Hayatta kalan şey, çoktan öldüğünü varsaydığım seçenek oldu. Analog PAL-B/G Türkiye'de hâlâ yayında ve açıklanmış bir kapanış tarihi yok. Evlerin çoğu yıllar önce uyduya geçti ve karasal bandına bakmayı bıraktı, ama vericiler hiç kapanmadı.
Kod çözücü neden 8 Msps'e sabit
Analog video ferahlatıcı biçimde aptal: zamana karşı genlik, satır satır; hangi satırın ve karenin nerede başladığını da senkron darbeleri söylüyor. Demodüle et, akışı satırlara böl, satırları kare hâlinde üst üste diz. Bütün mesele bir satırın kaç örnek ettiği.
PAL saniyede 25 kare hızında 625 satır sürüyor — yani tam olarak saniyede 15.625 satır. 8 Msps'te bu, satır başına tam 512 örnek demek ve 512 × 625 size artansız bir kare veriyor. İkinin kuvveti, yuvarlama yok, birikimli kayma yok.
NTSC'nin satır hızı 15.734,27 Hz ve aynı 8 Msps'te 508,44 örneğe düşüyor. Yalnızca 18 Msps'te tam bölünüyor; başka her yerde ondan bir raster kesmeden önce yeniden örneklenmesi gerekiyor.
Senkron problemi, ki asıl problem o
Satır sınırlarını bulmak ilkesel olarak kolay: yatay senkron darbesi satırın en karanlık yeri, dolayısıyla en karanlık sütun satırın başladığı yer. En uzun karanlık satır dizisi de dikey silme aralığı, yani kare orada başlıyor.
Bunu her karede bağımsız yapmak da resmi titreten şey. Gürültü tahmini bir iki piksel oynatıyor, tüm görüntü zıplıyor ve bu, sabit bir kaymadan çok daha kötü görünüyor.
Bu yüzden hizalayıcı, kare başına tahmin olmaktan çıkıp bir takip döngüsüne
dönüştü: yumuşatılmış bir kayma, 2,5 piksellik bir ölü bant ve tek-kare
aykırılıklarını reddetmek için kare başına %5'lik bir hareket tavanı. Ölü bandın
içinde tamamen hareket etmeyi bırakıyor. Birim testi hikâyeyi anlatıyor — ham
kare-başına argmin 1,52 piksellik standart sapma veriyordu; takipli sürüm
0,0 veriyor. Kilit kilittir. Satır uzunluğu hafif yanlışsa yavaş kaymayı
hâlâ takip ediyor, sadece gürültünün peşinden koşmayı reddediyor.
Doğrultacak bir şey bulmak
Hazır kanal listeleri, vericinin listenin dediği yerde olduğunu varsayar. Kameralar ve FPV bağlantıları için genelde öyle değil; o yüzden her band bir tarama düğmesi aldı: tüm aralığı adım adım gez, FFT tepelerini al ve sinyallerin gerçekte nerede olduğunu bildir.
Tarama sürücüsünün de bir kez yeniden yazılması gerekti. İlk sürüm sabit 600 ms'lik bir zamanlayıcıyla ilerliyordu, oysa yeniden kurulum yaklaşık 1600 ms'de oturuyor; dolayısıyla her bandın ilk iki üç merkezini körlemesine atlıyordu — bandın başı hiç taranmıyordu. Çözüm, saate güvenmeyi bırakıp her FFT karesinin kendi merkez frekansı başlığını istenen merkezle eşleştirmek ve ancak dört geçerli kare geldikten sonra ilerlemek oldu.
Dürüstçe nerede duruyor
Tüm yol — demodülasyon, rasterleme, senkron takibi, netlik zinciri — loopback test deseninde 512 × 625'te uçtan uca doğrulandı; ayrıca 615.251172 MHz'te havadan bir sinyale kilitlenmiş gerçek bir HackRF üzerinde de doğrulandı ve bant genişliğini canlı olarak 6 MHz'ten 3 MHz'e daraltırken 25 kare üretti.
Ve sonunda bir görüntü çıktı — ki bu, iyi bir görüntü çıktı demek değil.

Sağdaki parlak bant, görünür rasterin içinde kalan blanking aralığı; görüntünün iki kez çıkmasının sebebi ise kare sınırının yanlış yere düşmesi. İkisi de hizalama sorunu, demodülasyon değil.
Gri, gürültülü ve kilitli değil. Ama bu bir yayın: sol üst köşede kanal logosu, aşağıda bir altyazı kutusu var ve ikisi de seçiliyor. Zincir gerçekten havadan görüntü çekiyor — eksik olan son adım, yani kareyi yerinde tutmak.
Yani yapmadığım şey, oturup temiz ve kilitli bir yayın resmi izlemek. İşin dürüst hâli bu.
- Çözme hızı
- 8 Msps
- PAL rasteri
- 512 x 625
- Senkron titremesi
- 1,52 → 0,0 px
- Görüntü
- gri, sessiz
Kilitlendiğinde bile gri ve sessiz olacak. Düzgün analog TV için artık yan bant filtresi, gerçek bir senkron ayırıcı, taramalı (interlace) işleme, renk alt taşıyıcısı ve 5,5 MHz'lik ses alt taşıyıcısı gerekiyor — hiçbiri bunda yok. Ama her biri gizem değil, sınırları belli birer iş; bir projenin oturması için rahat bir yer.
Zevk alacağımı beklemediğim kısım araştırmaydı. Bir demodülatör yazmaya oturdum ve ilk iki günü, demodüle edebileceğim dört şeyden üçünün imkânsız, mevcut olmayan ya da telsizimden fiziksel olarak büyük olduğunu saptamakla geçirdim. Hangi kapının tek açık kapı olduğunu bilmek, kilitli olanları daha hızlı tekmelemekten daha değerli.