Mempelajari Radio GNU dengan Mikrofon



Artikel sebelumnya tentang SDR dan GNU Radio menunjukkan bahwa topik tersebut menarik bagi masyarakat. Karena hampir tidak ada informasi tentang paket Radio GNU dalam bahasa Rusia, dan tidak semuanya jelas dalam bahasa Inggris, saya memutuskan untuk menggambarkan pengalaman saya dengan GNU Radio.

Tentang SDR dan GNU Radio, saya sudah menulis di artikel sebelumnya . Biarkan saya mengingatkan Anda, tujuan saya adalah untuk menunjukkan cara mencegat dan bahkan memancarkan sinyal radio untuk mengontrol perangkat rumah pintar (dan memang IoT). Saya menganggap penting untuk memperhatikan keamanan di IoT. Tapi ini masih jauh ... Untuk memulainya, saya harus berurusan dengan GNU Radio!

Tidak semua orang memiliki penerima SDR, dan bagi saya sepertinya berguna untuk menunjukkan apa yang dapat dilakukan dengan GNU Radio dengan apa yang dimiliki setiap orang - yaitu, mikrofon dan headphone PC Anda.

Di bawah potongan beberapa latihan yang menarik dengan suara.

Terdengar sekitar


Jadi, mari kita mulai dengan yang sederhana: mempelajari spektrum suara di sekitar. Kami berasumsi bahwa Anda menginstal paket GNU Radio atau meluncurkan gambar Ubuntu / Windows yang disiapkan dengan GNU Radio. Jika tidak, unduh gambar berbasis Ubuntu dari situs web GNU Radio .

Mari kita mulai dengan membuat proyek penangkapan mikrofon sederhana. Untuk melakukan ini, tambahkan blok Sumber Audio, atur samp_rate 48000 (banyak kartu bekerja pada 44100 Hz, dan bukan pada 48000 Hz).

Anda dapat mengetahui batas kartu Anda di Linux seperti ini:
$ pactl list short sinks
0	alsa_output.pci-0000_00_03.0.hdmi-stereo	module-alsa-card.c	s16le 2ch 44100Hz	SUSPENDED
1	alsa_output.pci-0000_00_1b.0.analog-stereo	module-alsa-card.c	s16le 2ch 44100Hz	SUSPENDED

Pertanyaan segera muncul: mengapa 48 kHz? Lagipula, kata mereka, kami mendengar hingga 20 kHz detail, dan itu belum semuanya.
--, , 2 . , 24 β€” . .

48 44.1 β€” . , CD. .

Kembali ke skema GNU Radio kami. Hubungkan Sumber Audio WX FFT. Jangan lupa untuk mengganti QT GUI dengan WX GUI di top_block, serta mengubah tipe input menjadi Float. Dan sekarang kita akan berlari di sekitar apartemen, membuat suara yang berbeda. Fisika sekolah memberi tahu kami banyak tentang apa yang akan kami lihat, tetapi semua ini dilupakan, dan selalu lebih menarik untuk dilihat dengan mata kepala sendiri daripada membaca di buku teks.

Hal pertama yang akan kita lihat adalah tidak ada yang terlihat! Seluruh bagian penting dari spektrum terkonsentrasi pada 2 atau 3 kHz pertama. Baiklah, ok, mari kita tambahkan blok baru antara sumber dan WX FFT: Rasional Resampler - ini akan memungkinkan Anda untuk mengubah Sample Rate, hanya menyisakan bagian yang tepat dari spektrum. Untuk kenyamanan, kami akan membuat blok Variabel baru (variabel), memanggil resamp dan mengatur nilai, misalnya, 15. Di blok resampler di bidang Penipisan, masukkan nama variabel ini. Sekarang, sinyal dengan Sample Rate sama dengan samp_rate / resamp, mis. di blok ini, di bidang Tingkat Sampel, Anda harus memasukkan ungkapan ini. Sekarang sinyal kami akan mencapai 1,5 kHz, yang sudah lebih baik. Nah, sekarang semuanya terlihat!

Jadi, mulailah dengan catatan untuk 440 Hz. Periksa frekuensi suara Andakebersihan. Langsung menemukan yang menarik (saya ingatkan, kita harus tahu ini dari sekolah): kami menerbitkan tidak satu frekuensi, tetapi satu set beberapa frekuensi - nada dan nada. Siapa pun yang memiliki piano atau instrumen lain di rumah, Anda dapat mencobanya. Ini adalah bagaimana not untuk oktaf pertama terlihat seperti piano.



Tetapi untuk oktaf kecil. Semuanya seperti dalam buku teks - ada puncak 2 kali lebih banyak, puncak terendah telah menjadi 2 kali lebih rendah (220 Hz)



Beberapa frekuensi tidak hadir secara acak. Memang, dalam kasus piano / gitar / ... (string) suara diekstraksi oleh getaran string. Dan string memiliki dua ujung yang tetap, mis. hanya mode dengan panjang gelombang panjang Ξ» / 2 = L * n yang dapat dipancarkan, di mana n = 1,2,3 ...

Begitu pula dengan suaranya. Ligamen memungkinkan Anda untuk mengubah karakteristik laring, yang bertindak sebagai resonator (maafkan saya pecinta anatomi untuk nama yang tidak akurat). Sekali lagi, dindingnya diperbaiki, ada titik nodal pada getarannya, yaitu lagi rumus yang sama untuk mode tereksitasi.

Dan sekarang bertepuk tangan:


(biru - spektrum "keheningan", hijau - spektrum kapas)

Oh, di sini semua frekuensi terlihat (perhatikan skala frekuensi dan level sinyal dibandingkan dengan grafik di atas!). Itu logis, karena kapas adalah peningkatan tekanan jangka pendek (sangat tajam), yaitu. hampir Ξ΄ berfungsi, dan spektrumnya mengandung semua frekuensi.

Itu bisa digunakan dengan cara. Siapa yang ingat dari gantungan kunci 90-an untuk menemukan kunci yang mulai mengeluarkan bunyi ketika bersiul? Itu hal yang nyaman. Jadi mereka juga bereaksi terhadap kapas, karena dalam suara kapas ada juga frekuensi yang sesuai dengan peluit.

Spektrum alfabet


Sekarang mari kita dengarkan diri kita sendiri. Ucapkan huruf yang berbeda dari alfabet dan lihat spektrumnya (lebih disukai tanpa resampling, untuk melihat frekuensi mana yang digunakan dalam kisaran 0-20 kHz). Seseorang menggunakan beberapa jenis generasi suara: labial (dimulai dengan membuka bibir, yang menciptakan banyak frekuensi sekaligus), laring, gigi, lingual dan hidung. Suara mendesis dan bersiul sangat menarik (ini adalah laring dan gigi) - spektrum mereka sangat luas dan terutama terletak di spektrum> 2,5 kHz (untuk suara "c" bahkan> 5 kHz). Ini menjelaskan mengapa kata-kata dengan suara ini sulit didengar di telepon (di masa lalu, bandwidth berada pada 3 kHz atau bahkan lebih rendah - coba tambahkan filter Low Pass dan kirim hasilnya ke Audio Sink dengan headphone - hasilnya akan menyerupai telepon kabel yang bagus).

Siapa yang punya anak, dengarkan mereka - mereka jauh lebih keras, suara mereka mengandung banyak frekuensi tinggi. Itulah sebabnya suara mereka melalui telepon selalu aneh, dan seringkali tidak mungkin untuk memahaminya (distorsi suara jauh lebih besar daripada suara orang dewasa).

Ngomong-ngomong, aku mencoba mengeluarkan nada tertinggi dariku. Yah, saya tidak mengambilnya di atas 700 Hz. Putranya mengambil 1200 Hz! Saya tidak mengharapkan batasan seperti itu dari diri saya sendiri - ini kurang dari 5% dari spektrum yang saya dengar. Saya merasa cacat ...

Bicaralah dengan Lumba-lumba


Baiklah, kita tidak bisa terdengar terlalu tinggi, jadi gunakan band ini untuk yang lain. Sekarang mari kita coba melakukan transmisi suara melalui ultrasound. Kami menempatkan filter Low Pass (low-pass) setelah blok Sumber Audio, kalikan dengan cosinus 15 kHz (dengan demikian mentransfer sinyal kami 15 kHz lebih tinggi) dan mengirimkannya ke speaker (ia berupaya dengan ini begitu-begitu). Tetapi file seperti itu dapat ditulis menggunakan Sink File. Setelah kehilangan file seperti itu, pendengar pihak ketiga tidak akan dapat menguraikan apa yang dikatakan di sana. Game mata-mata di kelas 2.



Sekarang mari kita lakukan yang sebaliknya - kita akan mengembalikan sinyal yang disandikan. Mikrofon laptop biasa tidak menerima frekuensi tinggi dengan baik, tetapi dari file itu mudah (untuk pengujian kami cukup). Suara setelah pemulihan diterima dengan sangat baik.



Dengan cara ini, Anda bahkan dapat mentransfer data: di siniContoh antarmuka jaringan berdasarkan transmisi ultrasonik .

Contoh ini menunjukkan bahwa Anda dapat melakukan banyak hal dengan GNU Radio dan kartu suara!

Gambaran Umum Unit Radio GNU


GNU Radio memiliki banyak blok berbeda, dan memilahnya tidak mudah. Dan hal yang paling sulit adalah memahami apa yang ada di sana. Di bawah ini saya hanya akan memberikan blok paling populer yang digunakan "dalam kehidupan sehari-hari".

Operasi matematika:

Tambah - penambahan dua sinyal
Mulitly - penggandaan dua sinyal (misalnya, untuk AM)
Tambahkan Konstanta - tambahkan (kurangi) konstanta (misalnya, saat demodulasi AM lepaskan komponen DC)
Gandakan Const - gandakan sinyal dengan konstanta (untuk amplifikasi, misalnya)
Char / Integer / Float / Complex ke Char / Integer / Float / Complex - konversi tipe data

Sumber:

Sumber Konstan - sumber yang selalu menghasilkan nilai yang sama
Sumber Sinyal - sumber yang menghasilkan sinyal sinusoidal (untuk sinyal sintetis)
Sumber Audio / Wastafel - menangkap dari kartu suara atau output ke dalamnya
Sumber File / Wastafel - membaca dari file (gunakan Throttle untuk pembatasan kecepatan baca ke Sample Rate yang diinginkan) dan menulis ke
Wav File Source / Sink file - baca / tulis file WAV
TCP / UDP; Source / Sink - kemampuan untuk menghubungkan proyek dengan perangkat lunak jaringan melalui TCP atau
soket osmocom Source / Sink osmocom - menerima data dari RTL-SDR atau HackRF One atau transmisi (untuk HackRF One)
Sumber vektor - sumber urutan angka

Filter dan modulasi:

Filter Pass Rendah / Tinggi / Band - frekuensi rendah / frekuensi tinggi / band-pass filter.
Frekuensi Xlating FIR Filter - menggabungkan pergeseran frekuensi dan filter Low Pass untuk memilih band frekuensi yang diinginkan
AM / FM / GFSK / ... Mod / Demod - berbagai modulator dan demodulator

Sampling:

Rational Resampler - memungkinkan Anda untuk mengubah urutan sampel yang masuk dari satu Sample Rate ke yang lain dengan penipisan dan interpolasi (digunakan untuk β€œmenyesuaikan” dengan Sample Rate yang diinginkan)
Throttle - membatasi kecepatan pengiriman sampel ke Sample Rate yang diinginkan (jika tidak ada blok dalam proyek yang membatasi kecepatan) processing)
Delay - menunda aliran dengan jumlah sampel yang diinginkan

UI:

WX GUI FFT Sink - output grafis dari spektrum sinyal
WX GUI Waterfall Sink - output daya spektral dalam mode "air terjun" (sepanjang frekuensi sumbu X, sepanjang waktu Y, Z (warna) - amplitudo). Berguna untuk menemukan frekuensi radiasi sumber yang jarang ditransmisikan dalam kisaran yang diberikan
WX GUI Constellation Sink - menampilkan diagram fase sinyal (perbedaan fase antara osilasi bagian sinyal nyata dan imajiner)
WX GUI Scope Sink - osiloskop

Lain-lain:

Variabel - variabel yang memungkinkan Anda menggunakan variabel alih-alih angka dalam berbagai blok
Pemilih - multiplekser, dalam kombinasi dengan WX Slider memungkinkan Anda untuk "mengaktifkan
/ menonaktifkan " input / input Kemas / Keluarkan K bit - mengkonversi dari 0/1 byte ke urutan K bit dan sebaliknya dari byte dalam urutan byte 0/1, sesuai dengan bit (nyaman untuk paket encoding / decoding - byte 0/1 dapat dikalikan dengan operator, misalnya)

Apa lagi yang perlu Anda ketahui tentang GNU Radio Companion (GRC)?


Semua blok di GRC yang memiliki input atau output memerlukan definisi tipe data. Jenis output dari satu blok harus sama dengan tipe input dari blok yang terkait dengannya. Output dari satu blok dapat ditransfer ke beberapa blok (mis. Menggambar beberapa tautan). Tetapi hanya satu aliran yang dapat memasukkan satu input!

Sebagian besar blok memiliki dokumentasi minimal di tab di jendela pengaturan, serta di catatan kaki ke parameter. Meskipun biasanya ini tidak cukup. Dermaga agak ketinggalan jaman ada di sini .

Semua parameter blok bisa berupa ekspresi Python. Yaitu alih-alih angka, Anda bisa mengganti formula dengan partisipasi variabel yang ditentukan oleh blok Variabel.

Seringkali Anda ingin "memutar" parameter proyek dengan mengubah nilai-nilai variabel. Untuk melakukan ini, gunakan WX Slider atau komponen UI yang serupa, menggunakan namanya dan bukan variabel yang diinginkan. Setelah memulai proyek, slider akan muncul di UI. Ini nyaman untuk mengatur parameter frekuensi atau filter.

Kesalahan dalam jenis tautan atau dalam parameter blok disorot dengan warna merah. Mereka juga memblokir peluncuran proyek (dalam pengaturan blok yang disorot dengan warna merah Anda dapat membaca tentang masalahnya). Ada kesalahan run-time yang muncul bahkan ketika proyek dimulai - log di bagian bawah jendela GRC akan memberi tahu Anda apa masalahnya.

Beberapa blok memerlukan integer sebagai parameter. Substitusi formula dapat menyebabkan ketidakcocokan tipe. Gunakan fungsi Python int () untuk mengkonversi ke integer.

Untuk menonaktifkan blok, gunakan Nonaktifkan / Aktifkan. Ini akan memungkinkan untuk tidak menghapus blok, tetapi hanya untuk mengecualikannya dari proyek untuk sementara waktu dengan menyimpan semua parameter yang dimasukkan.

Semua skema di GRC dikonversi menjadi skrip Python, yang memungkinkan Anda untuk mengubahnya nanti, serta mengotomatiskan beberapa proses melewati GRC.

Seringkali nyaman untuk menyimpan sinyal suara / radio ke file untuk analisis lebih lanjut. Untuk melakukan ini, gunakan blok File sink. Harap perhatikan bahwa saat membaca file, Anda perlu mengingat format data yang digunakan saat menulis (tipe angka), serta Sample Rate. Saya sarankan untuk memasukkan nilai-nilai ini dalam nama file di samping deskripsi dari sinyal yang direkam itu sendiri - ini akan memungkinkan Anda untuk mengingat bagaimana membacanya nanti.

Saat memutar dari file, pastikan untuk menggunakan blok Throttle untuk membatasi kecepatan membaca. Ini tidak diperlukan jika ada blok lain di sirkuit yang secara fisik membatasi kecepatan membaca data. Misalnya, blok Audio Sink membatasi kecepatan data yang diberikan kepadanya sebagaimana ditentukan dalam pengaturan Sample Rate-nya.

Gunakan ikon kaca pembesar di bilah alat untuk menemukan blok yang Anda butuhkan. Mengklik dua kali pada nama dalam daftar blok yang tersedia akan menambah blok ke proyek. Sebagai gantinya, Anda dapat menyeretnya dari daftar ke lokasi yang diinginkan dalam proyek.

Cobalah untuk menempatkan blok dengan nyaman di proyek. Ini tidak memengaruhi apa pun selain keterbacaan.

Saya harap artikel ini mendorong seseorang untuk bereksperimen dengan suara.

Source: https://habr.com/ru/post/id393713/


All Articles