
Belum lama berselang, secara impulsif membeli transceiver SDR lucu untuk anak-anak dan remaja - ADALM PLUTO. Saya menyesal, ia bekerja dengan banyak perangkat lunak untuk LINUX, tetapi HDSDR favorit saya tidak mendukungnya. Tanpa berpikir dua kali, saya mulai menangani masalah ini dan inilah yang terjadi:
Perangkat Analog menangani PLUTO-nya kepada siswa. Semua perangkat lunak untuk PLUTO terbuka dan tersedia secara bebas. Situs web perusahaan memiliki halaman tempat Anda dapat menemukan hampir semua informasi yang diperlukan tentang pengoperasian PLUTO. Sebagian besar perangkat lunak ditulis di Linux dan siswa disarankan untuk menggunakan GNU Radio, MATLAB, dll.
Saya memiliki minat radio yang murni amatir di PLUTO. SDR dengan rentang dari 70MHz hingga 6GHz (setelah pengungkapan ) hanya dengan 150 uang Amerika adalah keajaiban. Berapa banyak percobaan yang bisa dilakukan! Lihat seberapa banyak semuanya terintegrasi di sana:

Rupanya, AD percaya bahwa ham sendiri harus menulis driver untuk program populer, jadi sampai saat ini, bahkan SDR # tidak didukung. Tetapi SDR # tidak cocok untuk saya, karena saya membutuhkan dukungan CAT yang baik dalam suatu program untuk menyinkronkan frekuensi dengan transceiver. Saya ingin mencoba menggunakan HDSDR sebagai penerima panorama dengan menghubungkannya ke frekuensi menengah pertama dari transceiver. Jadi, hanya ada satu jalan keluar - untuk mengintegrasikan HDSDR dan PLUTO sendiri.
Menggunakan Google, saya segera menemukan bahwa untuk menyelesaikan masalah saya, saya perlu membuat perpustakaan ExtIO_.dll khusus dalam format Winrad . Perpustakaan ini berfungsi sebagai jembatan perangkat lunak antara HDSDR dan penerima SDR yang diinginkan. Untungnya, antarmuka perpustakaan didokumentasikan dengan baik. Selain itu, ada beberapa implementasi perpustakaan siap pakai untuk berbagai penerima di github: RTL_SDR, LimeSDR , dll. Ada tempat untuk melihat cara menulis kode. Perpustakaan itu sendiri adalah sekolah yang cukup tua, tidak ada teknologi baru, C89 murni, seperti yang mereka tulis 20 tahun lalu. Setidaknya Anda tidak perlu belajar bahasa pemrograman baru, yang telah menginspirasi harapan untuk sukses.
Pada dasarnya, ExtIO_.dll perlu diimplementasikan dengan banyak fungsi yang memungkinkan Anda untuk menginisialisasi peralatan SDR, memulai dan menghentikan penerimaan sinyal, menyimpan dan mengembalikan pengaturan yang ditentukan. Bagi saya, momen yang paling sulit dipahami adalah format pertukaran data streaming antara receiver dan HDSDR, tetapi lebih pada hal di bawah ini.
Sekarang pertanyaannya adalah bagaimana mengontrol PLUTO secara terprogram. Sebenarnya ada beberapa opsi kontrol. Saya menemukan setidaknya dua: baik secara langsung dengan chip melalui perpustakaan libad9361.dll , atau melalui perpustakaan IIO . Opsi yang terakhir tampak lebih sederhana dan lebih baik untuk saya jelaskan, jadi saya memutuskannya. Di perpustakaan ini, semua pengaturan peralatan tersedia dalam bentuk semacam struktur XML, elemen individual diakses dengan nama tekstual dari properti, yang cukup nyaman. Rincian lebih lanjut tentang perpustakaan dapat ditemukan di sini . Keuntungan yang sangat besar dari pustaka adalah ia datang dengan utilitas baris perintah, yang dengannya Anda selalu dapat dengan cepat mengubah pengaturan penerima yang diinginkan. Dengan demikian, Anda tidak perlu menerapkan semua pengaturan SDR di antarmuka HDSDR, Anda bisa bertahan dengan minimum yang diperlukan. Dan memuat beberapa filter FIR eksotis dapat dilakukan dari baris perintah, jika pernah, kebutuhan seperti itu muncul. Aliran Data di IIO:

Secara pemrograman, mempelajari cara mengontrol PLUTO dari HDSDR cukup cepat dan mudah. Agak sulit untuk mendapatkan hasil yang memuaskan dalam streaming data, terutama karena saya tidak punya pengalaman sebelumnya dengan SDR. Di sini Anda perlu memahami bahwa data berasal dari penerima SDR dalam bentuk aliran I / Q / I / Q ... sampel I / Q. Setiap sampel adalah integer 16-bit yang tidak ditandatangani, yang mana hanya 12 bit urutan rendah yang penting. Pada saat yang sama, HDSDR memiliki selusin opsi untuk menerima aliran data. Mana yang lebih nyaman dan lebih baik tidak sepenuhnya jelas bagi saya. Akibatnya, saya memilih opsi, yang dalam ExtIO disebut exthwUSBdata16, yaitu sebenarnya 1-1 bagaimana perpustakaan IIO memberikan data.
Masalah berikutnya adalah transfer data antara buffer penerima IIO dan HDSDR. Yang terakhir menerima data dalam blok yang merupakan kelipatan dari 512 byte, dan IIO tidak dapat menampilkan data dalam format ini. Saya harus membuat buffer perantara dan mentransfer aliran melaluinya. Kode transmisi ditunjukkan di bawah ini.
DWORD WINAPI GeneratorThreadProc( __in LPVOID lpParameter ) { int16_t iqbuf[EXT_BLOCKLEN * 2]; ssize_t nbytes_rx; char *p_dat, *p_end; ptrdiff_t p_inc; int iqcnt = 0;
Dengan menggunakan siklus yang ditunjukkan, adalah mungkin untuk mencapai transfer aliran sebesar 4 MS / s, di atas nilai ini data tidak memiliki waktu untuk ditransmisikan dan sinyal diterima dengan gagap, meskipun setrika tampaknya dapat mengirim 20 MS / s dan bahkan lebih tinggi. Meningkatkan prioritas utas tempat loop berputar ke THREAD_PRIORITY_TIME_CRITICAL, meningkatkan ukuran buffer. Tidak ada hasil. Selain itu, ketika buffer ditingkatkan menjadi 1 MB, penerimaan normal tidak mungkin pada laju aliran minimum. Lebih banyak di sini bukan berarti lebih baik. Jika Anda memiliki ide tentang cara meningkatkan kecepatan, silakan bagikan di komentar.
Saya harus mengatakan bahwa 4 MS / s sudah cukup untuk keperluan saya, band ini lebih dari band amatir HF. Ya, dan pada pita VHF dan gelombang mikro cukup untuk sebagian besar tugas. Akibatnya, pustaka ditulis, jendela HDSDR dengan PLUTO dihidupkan untuk penerimaan terlihat seperti ini:

Semua kode perpustakaan tersedia di github di sini . Jangan ragu untuk menggunakannya untuk percobaan Anda dengan ADALM PLUTO.
73 de R2AJP