Skema modulasi digital mana yang cocok untuk mentransmisikan data digital melalui output kartu suara PC

8

Saya perlu menampilkan aliran data di 40 kbit/satau lebih cepat keluar dari sistem komputer yang hanya periferal output yang dapat diakses adalah antarmuka audio. Antarmuka ini memiliki spesifikasi yang masuk akal,96 kHz tingkat sampel, dengan 24-bitresolusi, tetapi tahap output AC-coupled. Hanya satu saluran keluaran yang tersedia. Asumsi yang baik adalah bahwa ia berperilaku seperti filter band-pass dengan a4 Hz untuk 40 kHz pass-band dengan kurang dari 1 dBredaman; dan bahwa ia memiliki90 dBSNR. 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 120 MHzCortex-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?
pichenettes
sumber
Saya mengerti itu tidak akan melalui speaker?
Jim Clay
Tidak, hanya kabel pendek antara kartu suara keluar dan penerima.
pichenettes

Jawaban:

8

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:

  • Efisiensi spektral yang diperlukan (yaitu, seberapa banyak throughput data yang Anda perlukan relatif terhadap bandwidth yang tersedia)
  • Persyaratan kompleksitas untuk penerima Anda (yang biasanya merupakan bagian paling rumit dari sistem)
  • Berapa banyak usaha yang Anda bersedia untuk mengembangkan implementasi.
  • Keadaan lain khusus untuk aplikasi Anda (mis. Jika Anda memiliki ketepatan waktu yang buruk di satu atau kedua ujungnya, gangguan yang diketahui, atau respons saluran yang buruk)

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:

    • Sinkronisasi frekuensi: cari dan lacak offset frekuensi pembawa karena ketidaksesuaian osilator antara pemancar dan penerima (dalam banyak kasus, offset frekuensi kira-kira akan konstan dari waktu ke waktu)
    • Demodulasi pembawa: menerjemahkan sinyal ke baseband, menghasilkan dua sinyal fase-dan kuadratur (I / Q) (sering dinyatakan sebagai sinyal baseband kompleks ).
  • Pemfilteran yang cocok: lulus sinyal baseband melalui filter yang cocok dengan bentuk pulsa yang digunakan pada pemancar (Anda mungkin bisa lolos dengan pulsa persegi panjang)
  • Sinkronisasi waktu: cari dan lacak waktu yang sesuai dengan transisi simbol; ini dapat dilakukan dengan melacak lokasi puncak dalam output filter yang cocok dengan waktu simbol
  • Pengiris bit: konversi keluaran filter yang cocok pada waktu sampel simbol ke keputusan hard bit
  • Serialisasi: pastikan Anda menulis beberapa bit per simbol dalam urutan yang benar!

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.

Jason R
sumber
Terima kasih untuk petunjuknya! Saya memiliki sesuatu yang berfungsi dengan baik dalam simulasi, sekarang ke port ke platform yang sebenarnya. Saya mulai dengan QPSK dan melihat sejauh mana saya bisa mendorong segalanya dengan 256-QAM. 256-QAM tampaknya kuat untuk jenis kebisingan yang saya harapkan dari hanya menggunakan DAC SAR bawaan ke MCU saya daripada codec audio eksternal. Saya akan menggunakan DMA untuk ini, jadi itu secara langsung mengisi buffer dalam RAM dan saya memproses data dengan blok 16 sampel sekaligus. Bagian tersulit adalah menyelaraskan sinyal Q / I lokal saya. Saya telah menambahkan urutan sinkronisasi berkala dalam protokol untuk menyelesaikan pi / 2 memasukkan itu.
pichenettes
Senang mendengar Anda telah berhasil mensimulasikannya. Saya akan memperingatkan Anda bahwa rasi bintang QAM tingkat tinggi dapat memerlukan implementasi penerima yang kompleks kecuali Anda memiliki saluran yang berperilaku sangat baik. Titik-titik rasi ini dikemas sangat padat, sistem Anda pada akhirnya menjadi sangat sensitif terhadap akurasi sinkronisasi berbagai jenis, seperti frekuensi / fase pembawa dan frekuensi / fase waktu simbol. Anda juga ingin memastikan Anda memiliki SNR dengan keputusan sekurang-kurangnya ~ 25 dB atau lebih jika Anda menginginkan yang rendah (kurang dari106) tingkat kesalahan bit tanpa koreksi kesalahan.
Jason R
Juga, jika Anda menggunakan QAM (atau skema lain yang mengandung modulasi amplitudo), ada blok utama lain untuk ditambahkan ke daftar di akhir jawaban saya: Anda akan memerlukan semacam mekanisme kontrol gain. Pada dasarnya, Anda harus memutuskan di mana di pesawat untuk menempatkan wilayah keputusan untuk setiap nilai simbol. Salah satu pendekatan adalah dengan menggunakan loop kontrol-gain otomatis untuk memaksa daya rata-rata sinyal ke nilai tertentu, kemudian menyusun wilayah keputusan sesuai dengan tingkat daya rata-rata itu.
Jason R