Hata Bildir | Dosya Deposu | Anketler | Hakkında | İletişim | Sık Kullanılanlara Ekle
Tema Seçim Sayfası
Anasayfa > Dijital Sinyal İşleme > Frekans Kaydırmalı Anahtarlama


Programlama Günlüğü

Bir Bilgisayar Mühendisi İçin Programlama Dili, Öğrendiklerini Sınadığı, Deneyler Yaptığı Bir Labaratuardır. Ve Mühendisler Deneylerini, Kestiremedikleri Sonuçları Gözlemlemek İçin Değil, Öngördükleri Sonuçları Doğrulamak İçin Yaparlar...
  Frekans Kaydırmalı Anahtarlama

   Mikroişlemcileri kullanarak frekans kaydırmalı anahtarlama yöntemi ile veri iletimi konusunda internette pekçok bilgiye rastlayabilirsiniz. Ama bunu bir programlama dili aracılığıyla bilgisayar üzerinde yapmak ile ilgili belki de hiç birşey bulamayacaksınız. Saatlerce bu konuyu internette araştırmıştım. Amacım sabit hatlarda CallerID(arayanın kimliği) verisini modem olmadan tespit etmekti. Ama turktelekomun bu konuda kullandığı standartları henüz bulabilmiş değilim...

   Yazının asıl konusu ve amacı, normalde modemlerde veri iletiminde veya radyo dalgalarının modülasyonunda kullanılan FSK(Frequency Shift Keying - Frekans Kaydırmalı Anahtarlama) yöntemini bilgisayar üzerinde gerçeklemek.

   AM ve FM kısaltmalarını daha önce mutlaka duymuşsunuzdur. (Radyoların üzerinde yazar). Şimdi bunları biraz açalım. AM(Amplitude Modulation) genlik modülasyonu demektir. Veriler genlik kaydırılarak kodlanır. FM(Frequency Modulation) de frekans modülasyonu demektir.
   Modülasyon, düşük frekanslı bir sinyalle, yüksek frekanslı bir başka sinyali şekillendirmektir. Şekillenen yüksek frekanslı sinyal, iletime uygun haldedir ve çok fazla mesafe katedebilir. Bu sinyale taşıyıcı sinyal denir.

   FSK yöntemini bilgisayarda uygularken verileri bitler haline getirmemiz gerekir. Sinüs dalgasını da taşıyıcı dalga olarak kullanacağız. Bit 1 değerinde iken sinüsün frekansı için belli bir değer, 0 iken bir başka değer kullanmalıyız. Hazırladığım örnek programda 1 için 1200, 0 için 2800 hertzlik frekans kullandım.

   1 saniyede gönderilecek bit sayısı her bitin kaç örnek ile kodlandığına bağlı. Frekansları Goertzel Algoritması ile çözeceğimiz için de her biti kodlayacak örnek sayısını yüksek tutmak hata oranını azaltacaktır. Bunları da belirledikten sonra veriyi kodlayabiliriz.

   Buraya kadarki kısım çok ta zor değil. Ancak asıl zor kısım alıcı ile verici arasında oluşabilecek zamanlama farkını gidermek. Çünkü FSK ile yaptığımız şey aslında saniyenin yüzde, hatta eğer istersek binde birlik kısmında bir biti kodlamak veya çözmek. Dolayısıyla meydana gelecek 0.01 saniyelik sapmalar bile verinin tamamının yanlış okunmasına sebep olur. Üstelik daha gürültü hesapta bile değil. Bunu engellemek için verinin gönderilmeye başlanacağını, demodülatöre bildirmek amacıyla başlangıç biti yollamamız gerekir. Veri iletimi yokken, 0 bitler akarken, veri gönderilmeye başlanmadan hemen önce, bir tane 1 bit kodlanarak, veri iletimine başlanacağı bildirilmelidir. Veri iletiminden sonra, sonlanma bitleri gönderilerek, veri iletiminin sonlandırılacağına işaret edilir.

   Hazırladığım modülatör-demodülator programında farklı bir yöntem denedim. Başlangıç bitinden hemen sonra, veri boyutunun yollanmasını sağladım. Veri boyutunu sonlandırmak için de "veri okumaya başla" anlamına gelecek "B" harfinin ascii kodunun 8 bitlik ikili değerini kodladım. Böylece sonlandırıcı bit ile verinin karışma ihtimali ortadan kalkmış oldu. Örneğin 3 baytlık HUS verisini kodlayacaksak :"....00000000000[1:başlangıçbiti][B:sekiz bit][HUS:24 bit]000000000....."   Sonuçta modüle edilmiş sinüs dalgası içerisinde, anlamsız sinyallerden kendi kodladığımız verinin pozisyonunu hata oranı çok düşük olacak şekilde bulmuş olduk.

   Başlangıç bitini bulabilmek içinse başlangıç bitine rastlayana kadar, sadece birer örnek ilerleyerek, her ilerlemede örnek başına bit değeri kadar örnek işleyerek 1 değerindeki biti aramak gerekir.

   Bu hizalama olayını biraz daha açalım. Hizalamadan kastım, modülatör ile demodülatör arasında, zamanlamada senkronizasyonu sağlayabilmek, verileri doğru yerden başlayarak alabilmek.   0 1 1 0 0 0 1 1    ---> Karşılık gelen bitler
  |-|-|-|-|-|-|-|-|    ---> Yazılmış veri
    |-|-|-|-|-|-|-|-|  ---> Okunan hatalı veri; hiza bozuk
   ? 1 1 0 0 0 1 1 ?   ---> Hatalı okunan bitler
   Sesi modüle edip wav dosyasına yazan programın ekran görüntüsü :

Frekans Kaydırmalı Anahtarlama Yöntemi, Visual Basic

   Program ile "Merhaba Dünya Merhaba Dünya Merhaba Dünya Merha" (1 saniyelik veri) şeklindeki veri kullanılarak modüle edilmiş sinüs dalgasını dinlemek için tıklayınız. Resimde görülen ayarlamalarla, başlangıç pozisyonu(100 örneklik, yani bir baytlık boşluk) da hesaba katılarak saniyede 377 bit kodlanabilmektedir. Teknik deyimle 377 baud hızıyla veri örneklenip, çözülebilmektedir.(Veri transferini sağlayabilmek için iki bilgisayarın ses kartlarını birbirine bağlamak gerekir. Program transfer yapmaz, modüle edilen sinüs dalgasını wav dosyasına örnekler.) Bu, bir bitin yaklaşık 2 milisaniyelik (0.002sn) süre ile gönderildiği anlamına gelir. Programı bilgisayarınıza indirmek için tıklayınız.

   Örnekleme oranı düşürülerek, dolayısıyla süre uzatılarak modüle edilmiş ses dosyasında verilerin kodlanışını daha rahat kavranabilir. Çünkü bu durumda her bitin kodlanması için gereken frekanstaki ses daha uzun süre çıkacaktır. Örnekleme oranı 2205ye ayarlanarak modüle edilmiş olan wav dosyasını dinlemek için tıklayınız. Eğer sesi program yardımıyla demodüle etmek isterseniz, örnekleme oranını 2205'e ayarlayınız. (Kodlanan veri:"@@@@@@@[cr+lf]Merhaba Dünya[cr+lf]&!?#$%?*", 256 bit). Dosyadaki ses dinlenerek, önce başlangıç bitlerinin ve veri boyutunun kodlandığı, sonra "@" karakterinin tekrarı sebebiyle aynı frekans dizisinin 7 kere tekrar ettiği ve daha sonra diğer verilerin kodlandığı gözlemlenebilir.

GÖZLEMLER - SONUÇLAR
1) Program Goertzel algoritmasını kullanmaktadır. Dolayısıyla, bit başına kullanılan örnek sayısı azalırsa çözümlemede başlangıç bitinin yeri yanlış tespit edilecektir. Örnekleme oranı 44100 iken, doğru sonuç verecek minimum örnek başına bit değeri 40 olarak ölçülmüştür. Bu değerde 1024 baud hızına çıkılabilmiştir. Goertzelda dönen büyüklüğün eşikleneceği değer, ayarlara uyum sağlayabilmesi amacıyla BitBasinaOrnek*2250 olarak seçilmiştir. Bu çarpım deneme yanılma yoluyla elde edilmiş ve başarılı sonuç vermiştir.

2) Goertzel algoritması, her seferinde BitBaşınaÖrnek değeri kadar örnek sayısı işlemektedir. "1" biti aranırken, bu algoritmaya her adımda bu kadar örnek sağlanması gerekir. İlerlenen her adım 1 örneklik olduğundan bu işlem, veri çözümleme işlemine göre daha yavaş çalışır. Ayrıca goertzel algoritması, normalde 0 bitine ait örneklerin küçük bir kısmı ile, 1 bitine ait örneklerin bir kısmını aynı anda işlediğinde, sonuçta örnek sayısı fazla olan hangisi ise, o değeri büyük döndürecektir. Eşik değeri, bu sebeple oluşacak hizalama hatalarını büyük oranda gidermektedir. Başlangıç pozisyonunu bulmak amacı ile yapılan denemelerde, hizalama hatası, +-3 örneği geçmemektedir. Buradan, yapılacak maximum hatanın bile, çözümleme işlemine olumsuz yansımayacağı söylenebilir...

3) Örnekleme oranı azaldıkça, her bit için gereksinim duyulan örnek sayısında önemli bir değişiklik olmayacağı için, belli bir boyuttaki verinin iletimi daha çok zaman alır.
 
Okunma Sayısı: 1101
Yayınlanma Tarihi: 31 Mayıs 2009 Pazar - 16:59
Anahtar Kelimeler: FSK, frekans kaydırmalı anahtarlama, frequency shift keying, modem, sinyal, frekans, anahtarlama, dijital, sinyal

Yorumlar ( 3 )

Ahmet
#1


Bitleri okurken sizin deyiminizle hizalamayı gerçekleştirmekte kullandığınız yöntem sizce de yavaş işlemeyecek mi? Eğer doğru anladıysam hiza, 8 eşleşme aynı anda gerçekleşince sağlanmış oluyor. Gerçek zamanlı sistemlerde daha uygulanabilir bir yöntem olmalı bence...
VBasic
#2


Bu tam olarak ne işe yarıyor??
Hüseyin Atasoy
#3


Ahmet arkadaşım, hizalama dediğin gibi 8 eşleşme aynı anda olmadan gerçekleştirilmiyordu. ama program üzerinde değişiklik yaptım. Bu değişiklikle 8 eşleşme sağlamak yerine tek bitlik eşleşme yapılmasını sağladım. Yine de hız gerçek zamanlı olarak kullanılacak düzeyde değil. Çünkü bu sefer tek biri biti aramak için her adımda sadece 1 örnek ilerlemek gerekiyor. Bu da gerçek zamanlı olarak yapıldığı düşünüldüğünde örneğin 22050 hertzlik ses için saniyede 22050 adım atılması gerekir. Bu erişilemeyecek bir hız değil. Zaten amaç FSK yöntemini gerçeklemek, böylece amaca ulaşmış olduk...

Yorum/Görüş Bildir

Yorumları html kodu veya özel karakter kullanmadan, yazım kurallarına
dikkat ederek ve düzgün bir Türkçe kullanarak yazalım...
    Atasoy Blog v2.7 © 2009-2010 Hüseyin Atasoy | Tema Tasarımı: AtasoyWeb
Rss Besleme | Yukarı Çık