15 Ekim 2017 Pazar

RTL-SDR, SDR# ve GNURadio ile çalışmalar

Bir ara örnek bir Spektrum Analizör devresi ararken RTL-SDR diye bahsedilen ve oldukça ucuza ebay/aliexpress gibi sitelerden edinilebilen bir karasal yayın alıcısına rastgeldim. Biraz incelemeden sonra benim işime yarayacağına kanaat getirip aliexpress'den bir tane sipariş verdim. Daha sonradan anladım ki siparişi dikkatli vermeliymişim. Zira bu modüllerde kullanılan birkaç farklı tuner chip'i varmış ve bana gelen de Fitipower şirketinin FC0012'siymiş. Anladığım Elonics'in E4000'i en genşik spektruma sahipken Rafael Micro'nun R820T(2) chip'leri de en iyi performansa sahipmiş. Neyse elimdeki de iş görüyor tabii ama zayıf sinyaller konusunda sıkıntılı, zira kartın tasarımı ve kullanılan elemanlar öyle çok da iyi değil. Sonuçta artık elimde bir RTL-SDR olduğuna göre önce birkaç deneme yapmak için SDR# yazılımını indirip kurdum ve biraz kurcalamadan sonra FM radyo kanallarına başarılı bir şekilide kilitlenip yayın alabildim. Böylece elimdeki kartın da çalışıyor olduğunu ve sürücü problemimin de olmadığını kesinleştirmiş oldum. Artık sıra daha değişik işler yapmaya gelmişti artık. Bunun için de ilk akla gelen gnuradio paketi tabii ki. Bunu Win altında kullanmak mümkün ama ben VirtualBox altında koşan Ubuntu 16.04.3 üzerinde çalıştırmayı seçtim. Gnuradio, gnuradio-companion ve benim RTL-SDR için gerekli osmosdr paketlerini Ubuntu depolarından değil de direk kaynak kod olarak alıp derleyip kurdum. Herşey hazır olduğunda artık gnuradio-companion yazılımını çalıştırdım ve basit bir sinyal üretecini ses çıkışına bağladım ve o da ne ses yok. Önce bunun VirtualBox'dan kaynaklandığını sandım ve Win audio driver kaldırıp tekrar kurma, güncelleme, VirtualBox'ın eski sürümlerini deneme vs vs vs birçok şey denedim. Ama çözüm olarak şöyle birşey yaptım. Malum gnuradyo-companion'daki "Audio Sink" alsa sürücülerini kullanıyor ve içerisinde "Driver Name" diye bir alan var ki bu normalde boş bırakılıyor. Önce alsa'nın tanıdığı cihazları şöyle listeledim:
~$ aplay -L
default
     Playback/recording through the PulseAudio sound server
null
     Discard all samples (playback) or generate zero samples (capture)
pulse
     PulseAudio Sound Server
iec958:CARD=Intel,DEV=0
     HDA Intel, STAC9221 A1 Digital
     IEC958 (S/PDIF) Digital Audio Output
dmix:CARD=Intel,DEV=1
     HDA Intel, STAC9221 A1 Digital
     Direct sample mixing device
dsnoop:CARD=Intel,DEV=1
     HDA Intel, STAC9221 A1 Digital
     Direct sample snooping device
hw:CARD=Intel,DEV=1
     HDA Intel, STAC9221 A1 Digital
     Direct hardware device without any conversions
plughw:CARD=Intel,DEV=1
     HDA Intel, STAC9221 A1 Digital
     Hardware device with all software conversions
~$
Görüleceği gibi aslında alsa ses birimlerini tanıyor. Bundan hareketle yukarda bahsettiğim "Driver Name" kısmına "plughw:CARD=Intel,DEV=1" yazdım ve ne duyayım ses artık geliyor. Bunadan sonraki gelişmeleri daha sonra aktarmak üzere.