rtl-sdr là một phần cứng SDR có giá thành thấp nhất phù hợp cho những bạn tại Việt Nam mới tiếp cận với lĩnh vực vô tuyến chi phí thấp. Với số tiền bỏ ra trong khoảng $20 – 27$ thì người dùng có thể thu khá nhiều loại sóng với tần số từ 24 – 1766 MHz. Hơn nữa, các phần mềm tương thích rtl-sdr hiện nay là khá nhiều, vì vậy đây là lựa cho giúp bạn nhanh chóng tiếp cận với các nguồn tín hiệu khác nhau từ vô tuyến điện.

Theo đánh giá cá nhân, tôi nhận thấy bộ công cụ này là nền tảng cơ bản nhất để thực hiện các tác vụ thu dữ liệu từ rtl-sdr; nếu người dùng thực hiện các việc cơ bản như nghe lén, thu thập dữ liệu phục vụ phân tích tín hiệu hậu kỳ thì đây là một lựa chọn ưu tiên. Hơn nữa cho tính chất đơn giản, nên có thể triển khai cho các thiết bị SoC như Raspberry Pi, CHIP, Intel Edision,… để thực hiện thu thập tín hiệu một cách di động.

Sử dụng rtl-sdr với một ăn-ten phù hợp với bước sóng cần thu sẽ tạo nên một công cụ linh động trong thu bắt tín hiệu vô tuyến

Trong bài viết này, tôi sẽ giới thiệu bộ công cụ phần mềm để điều khiển hoạt động của phần cứng rtl-sdr, phần mềm cung cấp tại http://osmocom.org/projects/sdr/wiki/Rtl-sdr. Phiên bản trên Windows có thể tải tại RelWithDebInfo.zip hoặc nếu cần cài đặt trên Ubuntu bạn có thể sử dụng lệnh sudo apt install rtl_sdr.

Các lệnh thu tín hiệu cơ bản

Trước tiên tôi cần kiểm tra phần mềm có thể kết nối với phần cứng bằng lệnh rtl_test và nhận thông báo từ màn hình.

Thực thi lệnh tại Windows
Thực thi lệnh tại Ubuntu

Thu tín hiệu âm thanh thông qua lệnh rtl_fm

Tình huống 1: nghe radio FM

rtl_fm: đây là một công cụ mạnh mẽ dành cho người dùng với mục tiêu thu tín hiệu và giải mã sang dạng âm thanh, hoặc còn được biết như là radio FM/AM/SSB. Đầu ra của chương trình là tập tin âm thanh định dạng .wav hoặc xuất ra một chương trình xử lý âm thanh thời gian thực. Tuy nhiên, bạn cần biết một vài thông số để việc thu và giải mã diễn ra được chính xác.

rtl_fm -M wbfm -f 104.5M | play -r 32k -t raw -e s -b 16 -c 1 -V1 -

rtl_fm: lệnh thực hiện thu và giải mã tín hiệu âm thanh

-M wbfm: M (modulation) sử dụng bộ giải điều chế wbfm. Chương trình hỗ trợ các bộ giải điều chế như fm, wbfm, raw, am, usb, lsb;
trong đó thông số wbfm là một phương thức mở rộng của bộ giải điều chế fm. wbfm == -M fm -s 170k -o 4 -A fast -r 32k -l 0 -E deemp

-f 104.5M: tần số thu

| : pipe

play -r 32k -t raw -e s -b 16 -c 1 -V1 – : sử dụng player hỗ trợ dòng lệnh trong bộ SoX – Sound eXchange (sudo apt install sox)

Tình huống 2: thu radio FM và Streaming

Trong ví dụ này, tôi sẽ tiến hành xử lý âm thanh thu được từ rtl_sdr và thực hiện streaming theo thời gian thực. Người dùng sử dụng mạng TCP/IP tải và cấu hình chương trình VLC để nghe từ máy chủ streaming. Tôi sẽ thực hiện trên Windows đã cài đặt gói FFMPEG (https://www.ffmpeg.org/download.html) và thiết lập biến môi trường.

Thiết lập đường dẫn ffmpeg trên Windows
rtl_fm -f 104M -d 1 -M fm -s 170k -A std -l 0 -E deemp -r 44.1k | ffmpeg -f s16le -ac 1 -i pipe:0 -acodec libmp3lame -ab 128k -f rtp rtp://127.0.0.1:9000

Trong lệnh trên, tôi thực hiện chuyển tiếp âm thanh sang dạng streaming như thông số -f rtp rtp://127.0.0.1:9000, sau đó cấu hình tại VLC Player để có thể nghe radio trên nhiều máy tính khác nhau.

Nếu bạn sử dụng Ubuntu hoặc Linux thì có thể tham khảo lệnh sau tại máy chủ streaming:

rtl_fm -f 104M -M wbfm | sox -traw -r24k -es -b16 -c1 -V1 - -tmp3 - | socat -u - 192.168.1.100:8080

Tại người dùng có thể thu bằng lệnh

netcat 192.168.1.100 8080 | play -t mp3 -
Streaming tín hiệu radio qua môi trường mạng

Tình huống 3: nghe lén bộ đàm không mã hóa

Trong một số tình huống cụ thể, người dùng có thể áp dụng phương thức này để quét các dãy tần số bộ đàm khi đang thu/phát. Trong trường hợp tín hiệu không được bảo vệ bằng mã hóa, việc nghe lén là hoàn toàn có thể xảy ra. Cần chú ý việc này có thể vi phạm tính riêng tư, người dùng cần thực hiện có trách nhiệm.

Lệnh sau sẽ giúp bạn quét một vài tần số thu/phát biết trước từ máy bộ đàm.

rtl_fm -M fm -f 154.42M -f 154.75M -f 154.82M -f 154.89M -s 12k -g 50 -l 70 | play -r 12k

Trong ví dụ này, tôi thực hiện quét các dãy tần số xác định bằng cách lặp lại tham số -f tần số. Tuy nhiên, lệnh này chỉ hữu hiệu trong trường hợp các hệ thống thu/phát thoại không áp dụng các codec như P25, DMR, NXDN, D-STAR,…

-M fm: sử dụng bộ giải điều chế mặc định là FM (narrowband FM)

-s 12k: tần suất lấy mẫu khi truyền thoại

-g 50: gain 50dB

-l 70: thiết lập squelch là 70

Thu tọa độ tàu bay thời gian thực (ADS-B)

Bộ cung cụ cũng cung cấp một bộ giải mã tín hiệu tàu bay ADS-B ở mức độ cơ bản, đây là các tín hiệu do tàu bay hoạt động trên không phát ra cho các trạm mặt đất, nó báo các thông tin vị trí, vận tốc và các thông số bay thời gian thực.

Các thông số rtl_adsb

Do các dữ liệu xuất ra ở dạng thô và cần xử lý để có thông tin chi tiết của tàu bay, người dùng có thể tự phát triển công cụ xử lý riêng hoặc streaming dữ liệu sang chương trình khác như mục hướng dẫn của tác giả.

Thu tín hiệu vô tuyến dạng thô (RAW)

Lệnh rtl_sdr có thể được xem là quan trọng nhất trong bộ công cụ được cung cấp, nó đóng vai trò quan trọng vì khả năng ứng dụng rộng rãi của nó trên thực tế. Dữ liệu đầu ra của chương trình rtl_sdr.exe là ở dạng thô (RAW/ IQ Format), hoặc có thể xem đây là các dữ liệu tiền xử lý. Dữ liệu định dạng IQ thường có kích thước tập tin lớn do nó chứa nhiều thông tin vô tuyến đã được số hóa, các thông tin này có ý nghĩa rất lớn trong việc phân tích phổ, dịch ngược tín hiệu.

Thu tín hiệu vô tuyến đã được số hóa

Chia sẻ tài nguyên phần cứng RTL-SDR thông qua môi trường mạng TCP/IP

Với công cụ rtl_tcp sẽ giúp một nhóm nghiên cứu giảm chi phí đầu tư phần cứng SDR, do tính chất của SDR là các dữ liệu thu được tại máy tính là dạng số (digital – 0/1) nên việc truyền qua môi trường TCP/IP là một lợi thế rất lớn trong việc thu và xử lý tín hiệu. Do tính chất đa năng của lệnh rtl_tcp, bạn có thể triển khai lên Raspberry Pi để nó đóng vai trò là trạm cấp tín hiệu cho các chương trình xử lý khác.

Streaming dữ liệu vô tuyến sử dụng rtl_tcp

Phân tích FFT sử dụng rtl_power

Đối với ngườ dùng SDR thì FFT là một phần khá quan trọng để xem trực quan sự thay đổi của cường độ tín hiệu tại nhiều mức tần số khác nhau. Tuy nhiên, hầu hết các chương trình đều mắc phải một điểm yếu chung là: – bị giới hạn tần số hiển thị, – bị giới hạn thời gian hiển thị. Những giới hạn này sẽ hạn chế người dùng theo dõi lịch sử của một dãy tần số xác định nào đó, hoặc thông tin có thể không đầy đủ do giới hạn về khung hình hiển thị.

FFT waterfall trong chương trình SDR Sharp

Để khắc phục những điểm yếu đó, rtl_power là một lựa chọn khá phù hợp; nó có thể đo trên toàn dãy tần số mà phần cứng RTL-SDR hỗ trợ (đến 1.7GHz) và không bị giới hạn về thời gian hiển thị. Do tính chất đặc biệt này, nên rtl_power có thể là một phần mềm hoạt động như một radar thụ động quét trên nhiều băng tần khác nhau. Nó còn được ứng dụng trong thiên văn vô tuyến, xác định thiên thạch hoặc sao băng,…

Ví dụ người dùng nghi ngờ đang có tình trạng phát tín hiệu lạ trong băng VHF (30–300 MHz), bạn có thể thu toàn bộ dãy trong thời gian dài để phục vụ phân tích.

rtl_power -d 1 -f 30:300M:1M -i 100 -g 50 -e 5m data.csv

Dữ liệu xuất ra dạng csv sẽ được chuyển đổi sang dạng hình ảnh để có thể xem trực quan. Bạn cần một số công cụ chuyển đổi như danh mục tham khảo bên dưới.

Kết quả thu được sau khi chuyển đổi dữ liệu csv
Kết quả phân tích toàn bộ dãy tần số mà thiết bị hỗ trợ (đến 1.7GHz) trong vòng 24 giờ. (https://www.rtl-sdr.com/rtl_power-instructions/)

Tổng kết

Trong bài viết này, tôi đã sơ lược hoạt động của một số công cụ cơ bản nhất khi bạn mới tiếp cận với lĩnh vực vô tuyến nói chung và SDR nó riêng. Việc nắm rõ các tính chất của bộ công cụ này sẽ cho phép bạn phát triển các mã xử lý dữ liệu hoặc tích hợp vào các nền tảng di động, IoT,… Trong phần tiếp theo tôi sẽ giới thiệu công cụ phát hiện hoạt động của thiên thạch trong quỹ đạo Trái Đất và thiên văn vô tuyến sử dụng phần cứng RTL-SDR giá thành thấp.