Saya perlu menampilkan aliran data di atau lebih cepat keluar dari sistem komputer yang hanya periferal output yang dapat diakses adalah antarmuka audio. Antarmuka ini memiliki spesifikasi yang masuk akal, tingkat sampel, dengan -resolusi, tetapi tahap output AC-coupled. Hanya satu saluran keluaran yang tersedia. Asumsi yang baik adalah bahwa ia berperilaku seperti filter band-pass dengan a untuk pass-band dengan kurang dari redaman; dan bahwa ia memilikiSNR. Saya tidak memiliki kendala kompleksitas lain pada emitor.
Saya tidak mengharapkan noise / atenuasi tambahan pada kabel yang menghubungkan emitor ke penerima.
Penerima adalah sistem tertanam dengan Cortex-M3 MCU. Jika perlu, kinerja perolehan audio yang serupa dapat diasumsikan. Chip demodulasi khusus tambahan (jika ada hal seperti itu untuk frekuensi rendah seperti itu) bisa menjadi pilihan.
- Skema modulasi digital mana yang cocok untuk situasi ini?
- Apakah sudah ada perpustakaan kode (lib radio radio yang ditentukan perangkat lunak?) Yang akan mencegah saya dari menciptakan kembali roda?
- Apakah ada aplikasi yang ada dengan kendala serupa di mana saya bisa mencari inspirasi?
sumber
Jawaban:
Anda punya keadaan yang cukup bagus di sini; Anda harus dapat memenuhi tujuan Anda tanpa terlalu banyak kesulitan. Saya tidak melihat apa-apa dalam deskripsi Anda yang akan menghilangkan seluruh kelas modulasi (misalnya fase-shift keying , frekuensi-shift keying , dll). Beberapa faktor yang akan memilih format yang sesuai akan meliputi:
Jadi, mencentang ini satu per satu untuk sistem Anda, kami dapat membuat beberapa pedoman:
Tampaknya kendala terbesar Anda adalah respons saluran Anda (yang dibatasi oleh DAC kartu suara Anda). Jika Anda memiliki 40 kHz bandwidth satu sisi yang tersedia, maka Anda akan dibatasi pada simbol rate yang agak di bawah itu. Untuk kecepatan data target minimal 40 kilobit per detik, Anda perlu skema yang mentransmisikan banyak bit per simbol.
Asalkan platform tertanam Anda tidak dimuat dengan terlalu banyak fungsi lain, prosesor ARM 120-MHz modern harus dengan mudah dapat menangani demodulasi sebagian besar format dalam rentang puluhan kilobit-per-detik.
Saya tidak yakin secara spesifik model mana yang Anda jalankan, tetapi banyak prosesor terbaru memberikan integrasi ADC onboard yang sangat ketat dengan memori dan subsistem interupsi, mungkin memungkinkan Anda untuk (tanpa intervensi CPU manual) secara otomatis mencicipi sinyal input pada waktu yang ditentukan. menilai, menyimpan sampel dalam memori onboard, dan memicu interupsi prosesor hanya ketika blok sampel berukuran tertentu tersedia untuk diproses. Saya tahu bahwa beberapa perangkat Atmel minimal menyediakan fungsionalitas semacam ini; Saya sudah sukses dengan mereka di masa lalu.
Saya berasumsi bahwa ini mungkin salah satu komponen dari beberapa sistem yang lebih besar, jadi Anda tidak ingin harus membangun sesuatu yang sangat kompleks untuk memenuhi kebutuhan Anda. Untungnya, berdasarkan apa yang Anda katakan, saya pikir Anda harus dapat mengimplementasikan sesuatu yang memenuhi persyaratan Anda dengan cukup sederhana. Saya berasumsi bahwa karena kedua perangkat dihubungkan bersama, Anda cenderung memiliki rasio signal-to-noise yang sangat tinggi (40 dB atau lebih besar), yang untuk modulasi digital biasanya diukur sebagaiEbN0 . Itu membuat hidup jauh lebih mudah, karena Anda mungkin bisa melewati penambahan seperti pengkodean koreksi-kesalahan sekaligus (atau setidaknya menerapkan skema yang sangat sederhana yang akan menangkap kesalahan yang sangat jarang yang Anda harapkan di SNR).
Sejauh keadaan khusus terjadi, untuk sistem ini, saya tidak akan berharap banyak. Saya berharap akurasi osilator di sisi PC menjadi cukup baik (pada minimum kristal-dikendalikan , sehingga Anda berada di kisaran <50 ppm atau lebih; mungkin jauh lebih baik jika osilator dikalibrasi menggunakan beberapa sumber lain yang lebih tepat ). Sisi yang disematkan cenderung sama; Saya menganggap Anda menggunakan osilator kristal sebagai sumber jam. Karena kedua ujung kabel itu disatukan, saya akan berasumsi bahwa Anda tidak memiliki gangguan catatan.
Jadi, menghancurkan semua ini bersama-sama menjadi satu rekomendasi, saya mungkin akan memulai jalan pendekatan fase-shift keying (QPSK) quadrature pada 24 kilosymbols per detik . Dengan 2 bit per simbol, ini menghasilkan data rate 48 kilobit per detik, yang melebihi kebutuhan Anda. Nilai khusus ini membuat implementasi Anda sedikit lebih mudah; karena output DAC berjalan pada 96 kHz, ini menghasilkan 4 sampel per simbol (selalu lebih mudah dijalankan pada jumlah integer sampel per waktu simbol). Saya mungkin akan mencoba untuk mendesain sisi yang disematkan sehingga sampel pada tingkat 96 kHz yang sama jika memungkinkan; ini menghindari perlunya melakukan resampling pada ujung yang lebih haus sumber daya.
Untuk menghindari masalah dengan takik DC yang digunakan kartu suara DAC Anda, Anda dapat memodulasi sinyal QPSK ke operator pada 24 kHz. Kemudian, spektrum sinyal termodulasi akan memiliki nol di DC, yang akan sejajar dengan takik Anda. Ada kemungkinan bahwa takik bisa berakhir tidak menjadi masalah sama sekali (terutama jika itu benar-benar hanya selebar beberapa Hz seperti yang Anda sarankan). Dalam hal itu, Anda berpotensi bertahan dengan skema yang lebih sederhana yang hanya bekerja di baseband, melewati modulasi operator sama sekali.
QPSK adalah pilihan yang baik karena kesederhanaannya, baik pada pemancar dan penerima. Di SNR Anda, Anda dapat mencapai efisiensi spektral yang lebih besar menggunakan skema yang lebih rumit seperti modulasi quadrature amplitude (QAM) , tetapi properti amplop konstan sinyal PSK menarik dari sudut pandang kompleksitas penerima. Sebagai catatan, jika Anda benar-benar membutuhkan lebih banyak bit per simbol di masa mendatang, Anda dapat pindah ke konstelasi PSK tingkat tinggi seperti 8- atau 16-PSK. Namun, ini adalah suboptimal dari sudut pandang kinerja bit-error-rate bila dibandingkan dengan rasi bintang QAM.
Sejauh implementasi perpustakaan berjalan, saya tidak mengetahui apa pun yang Anda hanya bisa singgah dan masuk, terutama untuk platform tertanam. Implementasi penerima Anda kemungkinan akan terikat dengan antarmuka perangkat keras sampai batas tertentu. Anda mungkin dapat menemukan beberapa implementasi yang ada untuk berbagai langkah yang diperlukan untuk demodulator, tetapi Anda harus setidaknya men-tweak apa yang Anda temukan agar bekerja dengan baik pada platform Anda. The GNU Radio proyek adalah tempat yang baik untuk melihat jika Anda hanya ingin melihat C ++ implementasi dari banyak komunikasi yang berbeda sinyal pengolahan operasi, dan bahkan mungkin menghasilkan kerangka yang berguna untuk mengimplementasikan pemancar onboard PC Anda. Sebagai ringkasan, langkah-langkah tingkat tinggi yang perlu dilakukan penerima Anda akan mencakup:
Jika frekuensi pembawa yang bukan nol digunakan:
Ini mungkin terdengar seperti proses yang rumit, tetapi membangun penerima praktis bahkan untuk situasi sederhana seperti ini bisa sangat mencerahkan. Beri komentar jika ada hal lain yang saya tinggalkan.
sumber