Phần 1: Sử dụng GNURadio trong điều khiển SDR – p1
Phần 2: Sử dụng GNURadio trong điều khiển SDR – p2
Phần 3: Sử dụng GNURadio trong điều khiển SDR – p3
Phần 4: Sử dụng GNURadio trong điều khiển SDR – p4
Trong bài viết 2, tôi sẽ phân tích sơ đồ máy thu radio cơ bản và chuyển đổi sang phần mềm GNU Radio để giải điều chế tín hiệu thu được từ RTL-SDR, kết quả cuối cùng là người dùng có thể xuất ra cổng âm thanh của máy tính. Đây là sơ đồ cơ bản cho người dùng mới bắt đầu làm quen với GNU Radio, qua bài viết này bạn sẽ hiểu được một số vấn đề về tần số lấy mẫu (sampling rate), lọc thông thấp (LPF), giải điều chế, khuyếch đại,…
Trước khi bắt đầu vào nội dung chính, tôi sẽ giới thiệu lại một số kiến thức cơ bản để người dùng có thể nắm được sơ đồ hoạt động của máy thu radio FM, các thành phần chính như sau:
- Dữ liệu đầu vào (phần cứng SDR hoặc tập tin đã thu từ trước), trong bài viết này tôi sử dụng phần cứng RTL-SDR. Thiết bị sẽ chuyển đổi các tín hiệu thu được từ dạng analog sang dạng digital thông qua khối ADC trên phần cứng.
- Bộ lọc thông thấp (Low pass filter): tức là bộ lọc chỉ cho thành phần tần số thấp hơn tần số cắt đi qua thôi, thành phần tần số cao thì bị loại bỏ.
- Khối giải điều chế tín hiệu radio (WBFM demodulator)
- Loa âm thanh máy tính.
Bước 1: Tạo sơ đồ xử lý tín hiệu và làm việc với các biến số
Trong phần đầu tiên của giao diện GNU Radio, bạn sẽ thấy 2 khối chính là Options và Variable: Options cho điều chỉnh các thông tin chung như tên sơ đồ, tác giả, kích thước khung thiết kế,… và khố Variable cho phép tạo các biến số và thiết lập giá trị của biến.
Khối thiết lập biến cho phép người dùng phân tách các giá trị cần điều chỉnh trong các khối điều khiển khác, giúp giảm thiểu thời gian phải thay đổi giá trị trên toàn sơ đồ khi có điều chỉnh. Trong khung thiết lập bao gồm trường ID là tên biến và Value là giá trị biến, thông thường các giá trị có thể biểu diễn dạng mũ với cơ số 10, vd: 1e3 = 1000 hoặc 1e6 = 1000000.
Bước 2: Khối dữ liệu đầu vào
Tại bước này, tôi sẽ tạo một khối để quản lý nguồn dữ liệu đầu vào là thiết bị RTL-SDR, người dùng có thể sử dụng ô tìm kiếm với từ khóa rtl-sdr phía bên phải để nhanh chóng xác định phân nhóm.
Trong phần thiết lập thông số ban đầu cho phần cứng, tôi đặt giá trị biến freq = 104.5 MHz sử dụng khối Variable.
Bước 3: Thiết lập tần số lấy mẫu (sample rate)
Tại bước này, tôi sẽ sử dụng khối Rational Resampler để thiết lập tần số lấy mẫu từ samp_rate = 2M thành 500K để chuyển sang khối lọc thông thấp. Tại khối này, tôi thiết lập giá trị Decimation = int(samp_rate/quadrature), trong đó giá trị quadrature là 500k.
Bước 4: Bộ lọc thông thấp (LBF)
Khối lọc thông thấp sẽ lấy các dãy tần số thấp hơn tần số cắt (cutoff), các tần số nào cao hơn giá trị cutoff sẽ bị loại bỏ. Trong mô hình tôi sử dụng giá trị cutoff là 100k; sau đó kết nối đến khối giải điều chế tín hiệu radio FM.
Bước 5: Bộ giải điều chế radio FM
Đây là thành phần quan trọng nhất chịu trách nhiệm chuyển đổi các tín hiệu sóng (dạng số) thành tín hiệu âm thanh có thể nghe được.
Bước 6: Thiết lập tần số lấy mẫu (sample rate) cho đầu ra âm thanh
Chuyển đổi tần số lấy mẫu 500k sang tần số mẫu mà card âm thanh có thể chơi được là 48k.
Bước 6: Khuyếch đại tín hiệu âm thanh và xuất ra loa
Sau khi giảm sample rate, tôi thu được tín hiệu âm thanh có thể nghe được; tiếp sau đó ta cần khuyếch đại lên và chuyển sang loa máy tính bằng cách dùng khối Multifly Const và Audio Sink.
Đến đây là người dùng đã hoàn thành một mạch giải điều chế radio FM cơ bản, để thực hiện điều khiển trực quan các chức năng như điều chỉnh tần số, âm lượng, theo dõi độ mạnh của sóng,…. bạn có thể thêm các khối chức năng hỗ trợ kết nối trước/sau các điểm kết nối dữ liệu. Trong hình tôi sử dụng hai khối WX GUI FFT Sink để theo dõi trạng thái tín hiệu trước và sau khi lọc thông thấp.
Một số vấn đề thường mắc phải
Trong tình huống người dùng tự tạo lại sơ đồ xử lý có thể không hoạt động, bạn có thể sử dụng tính năng báo lỗi của GNU Radio để có thể tìm ra nguyên nhân View > Flowgraph Errors. Trong ví dụ bên dưới, tôi mắc phải vấn đề dữ liệu đầu ra tại khối trước (màu cam) không tương thích với khối phía sau (màu xanh dương).
Để khắc phục, tôi chuyển đổi khối xanh dương sang dạng Float->Float (Real Taps) để bảo đảm tương tích với khối chức năng trước đó.
Tải tập tin: FM_Receive-1.grc