FSK Demodülasyonu, Bit Zamanlama Kurtarma


10

Şu anda akustik FSK modülasyonu ve demodülasyonu uyguluyorum. Ben bir sinyal işleme adam değilim, bu yüzden biraz zamanlama kurtarma hakkında herhangi bir yardım çok takdir edilecektir. Şu anda (fazının bir fark ile, her ton için eşleştirilmiş iki filtreleri kullanarak demodülatörü uygulanan 90 olmayan uyumlu tespit için). Temel olarak, her filtrenin çıktısı farklı genliklere sahip piklerdir. İki sorum var:

  • Bit zamanlaması kurtarma işlemini nasıl yapabilirim?
  • Paket senkronizasyonu başlangıç ​​eki (chirp, barker kodu, altın kod vb.) İçin ne önerirsiniz?

Gardner algoritmasını aradım ama uygulanabilir ve nasıl olduğundan emin değilim. Şu anda ses kartını kullanarak 800 bps bit hızına sahip 2 frekansla çalıştığımı düşünün.

Yanıtlar:


8

Şu anda akustik FSK modülasyonu ve demodülasyonu uyguluyorum. Ben sinyal işleyen biri değilim…

Eşleşen filtrelere sahip olduğunuzu ve tutarlı olmayan algılamadan bahsettiğinizi söylediğiniz için, sanırım zaten bir dijital iletişim kişisisiniz - DSP kişisi olmanın adımı oldukça küçük :)

Tam teşekküllü senkronize edici SDR yaklaşımı

Bu nedenle, bunu yapmanın klasik yolu, iki filtrenizin çıktılarını (büyüklük) kare olarak almak, düşük geçişli sonucu üzerindeki bir ve filtreleme sırasında (sonra) mümkün), böylece saniyede işlemleri boşa harcamayız.2fsembol, maks

Kendime hızlı bir gerçek değer bant geçirme sinyali FSK demodu yaptım (Sanırım bunu tekrar yapsaydım, iki bant geçiren filtreyi bir kombine frekans çevirisi ve bir düşük geçiş filtresi ile değiştirirdim, bana karmaşık taban bandı verdi veya bir çok fazlı filtre bankası fırlattım sorun, ancak her ne olursa olsun) GNU Radyo yardımcısının yardımıyla ( burada akış grafiği dosyası ):

FSK recv

Önemli olan nokta, muhtemelen bölme ve eşik bloğu arasında zamanlama senkronizasyonu yapmak istememizdir. Daha sonra yapabiliriz - klasik, "mikrodenetleyici ve dijital donanım tasarımı" yaklaşımı aslında Muller & Mueller saat lavabosu olurdu ve orada da işe yarayacaktır - ancak eğim bilgilerini boşa harcamayız.

Bu yüzden buraya bir çok fazlı saat senkronizasyonu eklerdim; Bunu , isimsiz GNU Radyo bloğunun belgelerinde harris öğrencisi Tom'dan daha iyi formüle edemediğimi itiraf etmeliyim :

Çok fazlı filtre bantları kullanarak zamanlama senkronizörü.

Bu blok, filtrelenmiş sinyalin türevini minimize ederek PAM sinyalleri için zamanlama senkronizasyonu gerçekleştirir, bu da SNR'yi maksimuma çıkarır ve ISI'yı minimize eder.

Bu yaklaşım iki filtre grubu kurarak çalışır; bir filtre bankası, sinyalin nabız şekillendirme uyumlu filtresini (kök yükseltilmiş kosinüs filtresi gibi) içerir; burada filtre bankasının her dalı, filtrenin farklı bir fazını içerir. İkinci filtre bankası, ilk filtre bankasındaki filtrelerin türevlerini içerir. Bunu zaman alanında düşünen ilk filtre bankası, kendilerine samimi bir şekil veren filtreler içerir. Örneklenecek çıkış sinyalini tam olarak sinc şeklinin zirvesine hizalamak istiyoruz. Sinc'in türevi, ( ) nın maksimum noktasında sıfır içerir . Ayrıca, sıfır noktasının etrafındaki bölge nispeten doğrusaldır. Hata sinyalini üretmek için bu gerçeği kullanırız.sinc ( 0 ) = 1 ,sincsinc(0)=1,sinc'(0)=0

Türev filtreler üzerinden sinyal ise için inci filtre ve eşleştirilmiş filtrenin çıktısı , hatayı olarak hesaplayın:i x i [ n ]dben[n]benxben[n]

e[n]={xben[n]}{dben[n]}+{xben[n]}{dben[n]}2.0 .

Bu denklem, gerçek ve hayali kısımlardaki hatanın ortalamasını alır. Sinyalin kendisiyle çarpmamızın iki nedeni vardır. Birincisi, sembol pozitif veya negatif olabilirse, ancak hata teriminin, sıfır noktasının hangi tarafında olduğumuza bağlı olarak her zaman aynı yönde gitmemizi söylemesini istiyoruz. işareti hata terimini bunu yapmak için ayarlar. İkincisi, büyüklüğü hata terimini sembolün genliğine bağlı olarak ölçeklendirir, böylece daha büyük sinyaller bize daha güçlü bir hata terimi verir, çünkü o sembolün değerine daha fazla güveniriz. Yalnızca işaret yerine büyüklüğünü kullanmak özellikle düşük SNR'li sinyaller için iyidir.xben[n]xben[n]xben[n]

Hata sinyali, , bize türev sinyaldeki sıfır noktasından ne kadar uzakta olduğumuzu gösteren bir değer verir. Bu değeri sıfıra taşımak istiyoruz, bu yüzden ikinci bir sipariş döngüsü kurduk. Bu döngü için iki değişkenimiz var; , üzerinde bulunduğumuz filtre bankasındaki filtre numarasıdır ve , sabit durumdaki filtreler arasında seyahat ettiğimiz orandır. Diğer bir deyişle, verici ve alıcı arasındaki doğal saat farkları nedeniyle, bu farkı temsil eder ve alıcıyı kilitli tutmak için filtre fazı yollarından geçer. Bunu ikinci dereceden bir PLL olarak , frekanstır ve fazdır. Bu yüzden güncelliyoruze[n]dkdorandorandorandkdoran ve üzere iki hata sinyaline dayanan standart döngü denklemlerini kullanarak ve . Biz bu iki değer öylesine blok yapıcı içinde, sadece, "kazanç" istemek, kritik sönümlü sistem için birbirlerine göre ayarlanır hangi olduğu ederken eşittir .dkdαdβdαdβkazanç24

Bunun ses frekansı olduğunu fark etmek

Bu nedenle, bu bloğu düzgün bir şekilde parametrelendirmek (ve muhtemelen fazları kaydırmak için senkronizöre daha fazla baş boşluğu vermek bpf_decimve lpf_decimvermek için) çok kararlı bir sembol zamanlama kurtarma oluşturabilirsiniz, bu da uygulamanız için tamamen aşırı olabilir 😁

Her iki uçta bir ses kartı ile örnekleme yaptığınız ve Doppler ile uğraşmanız gerekmediğini düşündüğüm için, sembol oranının taşıyıcı frekanslarıyla sabit bir ilişkisi vardır (örneğin, verici tarafın daha yüksek bir taşıyıcıya sahip olması 8 ses kartı örneği süresi ve bir sembol her zaman 128 örnek diyelim, sabit bir oran var), bir kısa yol alabilirsiniz:

Taşıyıcı frekansı ve sembol oranı arasındaki oranı biliyorsanız, sadece birini tahmin edin ve diğerini ücretsiz olarak alın! Bu durumda, FSK, bu özellikle kolaydır: örn. Üst bandın aktif olduğu bir süre bekleyin ve size bir tahmin vermek için bir dörtlü demodülatör kullanın (yani pratik olarak ). bant geçiren filtrenizden sonra taşıyıcı frekansının değerini belirleyin ve elde edilen değeri frekans düzeltme faktörü olarak kullanın - taşıyıcı frekansı kurtarma ve sembol oranı kurtarma sorununu hemen çözersiniz. Bundan sonra zamanlama kurtarmaya ihtiyacınız olacağını bile düşünmüyorum - bir eşiklemeden sonra, yeterince fazla örnekleme yaparsanız (bu oranlarda bir sorun değildir), bir pencerede çoğunluk kararı verebilir veya pencerede maksimum sayı elde etmek için gerekli olduğu sürece.darctandt[n]

Paket Senkronizasyonu Hakkında

Hiç sinyal olmadığında büyük olasılıkla senkronizasyondan çok fazla çalışacak çalışan bir demodülatörünüz olduğundan, paketinizi bulmak için bilinen bir sabit veri dizisi kullanın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.