Demodulation FSK, Bit Timing Recovery

10

Saat ini saya sedang menerapkan modulasi dan demodulasi FSK akustik. Saya bukan orang yang memproses sinyal sehingga bantuan tentang pemulihan waktu bit akan sangat dihargai. Saat ini saya menerapkan demodulator menggunakan dua filter yang cocok untuk setiap nada (dengan perbedaan fase untuk deteksi non koheren). Pada dasarnya output dari setiap filter adalah puncak dengan amplitudo yang berbeda. Saya punya dua pertanyaan:90

  • Bagaimana saya bisa melakukan pemulihan waktu bit?
  • Apa yang Anda rekomendasikan untuk preamble sinkronisasi paket (kicauan, kode barker, kode emas dll)?

Saya googled algoritma Gardner tetapi saya tidak yakin apakah itu berlaku dan bagaimana. Pertimbangkan saya sedang bekerja dengan 2 frekuensi dengan bitrate 800 bps menggunakan kartu suara.

Peter
sumber

Jawaban:

8

Saat ini saya sedang menerapkan modulasi dan demodulasi FSK akustik. Saya bukan seorang pemroses sinyal ...

Karena Anda mengatakan Anda memiliki filter yang cocok, dan Anda menyebutkan deteksi non-koheren, saya pikir Anda sudah cukup banyak menjadi orang komunikasi digital - langkah untuk menjadi orang DSP cukup kecil :)

Pendekatan SDR sinkronisasi lengkap

Jadi, cara klasik untuk melakukan ini adalah dengan mengambil output dari dua filter Anda, (besarnya) kuadratkannya, filter low pass hasilnya ke sesuatu di atas simbol , dan selama / setelah penyaringan memudar (jika mungkin), jadi bahwa kita tidak membuang operasi per detik.2fsimbol, maks

Saya membuat diri saya sendiri sinyal real-nilai bandpass cepat FSK demod (saya pikir jika saya melakukan ini lagi, saya akan mengganti dua bandpass filter dengan satu terjemahan frekuensi gabungan dan satu filter low pass, memberi saya baseband kompleks, atau melempar bankbank polyphase filterbank di masalahnya, tapi apa pun) di Radio GNU dengan bantuan pendamping Radio GNU (file grafik aliran di sini ):

Penerimaan FSK

Intinya adalah kita mungkin ingin menyinkronkan waktu simbol antara pembagian dan blok ambang. Kita bisa melakukan setelah itu - pendekatan klasik, "mikrokontroler & desain perangkat keras digital" sebenarnya akan menjadi jam Muller & Mueller dan itu akan bekerja di sana juga - tetapi jangan membuang-buang informasi lereng.

Jadi, saya akan menambahkan sinkronisasi jam polifase di sini; Saya harus mengakui bahwa saya tidak dapat merumuskan ini lebih baik daripada yang dilakukan Tom, seorang murid harris, dalam dokumentasi blok Radio GNU eponymous :

Sinkronisasi waktu menggunakan polyphase filterbanks.

Blok ini melakukan sinkronisasi waktu untuk sinyal PAM dengan meminimalkan turunan dari sinyal yang difilter, yang pada gilirannya memaksimalkan SNR dan meminimalkan ISI.

Pendekatan ini bekerja dengan menyiapkan dua bank filter; satu filterbank berisi filter pencocokan pembentuk pulsa sinyal (seperti filter cosine yang dinaikkan), di mana setiap cabang filterbank berisi fase filter yang berbeda. Filterbank kedua berisi turunan dari filter di bank filter pertama. Memikirkan hal ini dalam domain waktu, bank filter pertama berisi filter yang memiliki bentuk tulus pada mereka. Kami ingin menyelaraskan sinyal output yang akan diambil sampel tepat di puncak bentuk sinc. Turunan dari sinc mengandung nol pada titik maksimum dari ( sinc ( 0 ) = 1 ,tulus ). Selanjutnya, wilayah di sekitar titik nol relatif linier. Kami memanfaatkan fakta ini untuk menghasilkan sinyal kesalahan.tulus(0)=1,tulus(0)=0

Jika sinyal dari filter derivatif untuk i th filter, dan output dari filter cocok adalah x i [ n ] , kita menghitung kesalahan sebagai:dsaya[n]sayaxsaya[n]

e[n]={xsaya[n]}{dsaya[n]}+{xsaya[n]}{dsaya[n]}2.0 .

xsaya[n]xsaya[n]xsaya[n]alih-alih hanya tanda itu sangat baik untuk sinyal dengan SNR rendah.

e[n]dkdmenilaidmenilaidmenilaidkdmenilaidkdαdβdαdβmendapatkan24

Menyadari ini adalah frekuensi audio

Jadi, parameterisasi blok ini dengan benar (dan mungkin mengurangi bpf_decimdan lpf_decimmemberi ruang kepala sinkronisasi lebih banyak untuk menggeser fase) Anda bisa membangun pemulihan timing simbol yang sangat stabil, yang akan sangat berlebihan untuk aplikasi Anda 😁

Karena Anda melakukan pengambilan sampel dengan kartu suara di kedua ujungnya, dan karena saya kira Anda tidak harus berurusan dengan Doppler, laju simbol memiliki hubungan tetap dengan frekuensi pembawa (misalnya sisi transmisi memiliki operator yang lebih tinggi dengan periode 8 sampel kartu suara, dan simbol selalu mengambil katakanlah 128 sampel, jadi ada rasio tetap), Anda dapat mengambil jalan pintas:

dArktandt[n]

Mengenai Sinkronisasi Paket

Nah, karena Anda memiliki demodulator yang berfungsi yang mungkin akan menjalankan terlalu banyak sinkronisasi ketika tidak ada sinyal, gunakan saja urutan data yang diketahui untuk menemukan paket Anda.

Marcus Müller
sumber