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.2 fsimbol, 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 ):
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.sinc ( 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 ] = R { xsaya[ n ] } ⋅ R { dsaya[ n ] } + I { xsaya[ n ] } ⋅ I { 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_decim
dan lpf_decim
memberi 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.