# 用PlutoSDR+GNURadio在Ubuntu 22.04上搭建你的第一个FM收音机(保姆级教程)
刚拿到PlutoSDR时,看着这个小巧的硬件和满屏的专业术语,很多人可能会感到无从下手。别担心,今天我们就从最基础的FM收音机开始,带你一步步走进软件定义无线电的世界。Ubuntu 22.04作为当前最稳定的Linux发行版之一,配合强大的GNURadio工具,能让你在30分钟内听到清晰的FM广播——即使你之前从未接触过SDR。
1. 环境准备与驱动安装
在开始之前,请确保你的系统是Ubuntu 22.04 LTS版本。打开终端,输入以下命令检查系统信息:
lsb_release -a
如果显示不是22.04版本,建议先升级系统。接下来是驱动安装的关键步骤:
- 添加ADI库源:
sudo apt-get update sudo apt-get install -y dirmngr sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC echo "deb https://plutodr.analog.com/repo/ubuntu focal main" | sudo tee /etc/apt/sources.list.d/pluto.list - 安装iio-oscilloscope:
sudo apt-get update sudo apt-get install -y libiio-oscilloscope
> 注意:如果遇到"无法定位软件包"错误,可能是源地址有变,建议查看Analog Devices官网获取最新安装指南。
- 连接设备验证: 用USB线连接PlutoSDR后,执行:
正常情况应该能看到类似这样的输出:iio_info -sLibrary version: 0.24 (git tag: v0.24) Compiled with backends: local xml ip usb serial Available contexts: 0: 0456:b673 (Analog Devices PlutoSDR (ADALM-PLUTO)), serial=a4d003ea [usb:1.4.4]
2. GNURadio环境配置
GNURadio是SDR开发的核心工具链,我们使用PyBOMBS进行安装可以避免依赖问题:
sudo apt-get install -y git cmake g++ libboost-all-dev libgmp-dev swig python3-numpy python3-mako python3-sphinx python3-lxml doxygen libfftw3-dev libsdl1.2-dev libgsl-dev libqwt-qt5-dev libqt5opengl5-dev python3-pyqt5 liblog4cpp5-dev libzmq3-dev
接着安装PyBOMBS:
git clone --recursive https://github.com/gnuradio/pybombs.git cd pybombs sudo python3 setup.py install pybombs auto-config pybombs recipes add-defaults
创建GNURadio环境(这需要较长时间):
mkdir ~/gr cd ~/gr pybombs prefix init -a default pybombs install gnuradio
安装完成后,通过以下命令启动GNURadio Companion:
source ~/gr/setup_env.sh gnuradio-companion
3. FM接收流图搭建
打开GNURadio Companion后,按Ctrl+N新建流图。我们将使用以下关键模块构建FM收音机:
| 模块 | 参数设置 | 作用 |
|---|---|---|
| Osmocom Source | Ch0: Frequency=98.0e6 (当地FM频率) | 接收射频信号 |
| Low Pass Filter | Cutoff Freq=75e3, Transition Width=25e3 | 滤除高频噪声 |
| WBFM Receive | Quadrature Rate=250e3, Audio Decimation=10 | FM解调 |
| Audio Sink | Sample Rate=48e3 | 输出到扬声器 |
完整的流图连接顺序应该是:
- Osmocom Source → Low Pass Filter
- Low Pass Filter → WBFM Receive
- WBFM Receive → Audio Sink
> 提示:双击模块可以调整参数。如果听到杂音,尝试微调频率(±0.1MHz)并确保Low Pass Filter设置正确。
4. 常见问题排查
问题1:找不到PlutoSDR设备
- 检查
lsusb输出中是否有"Analog Devices"设备 - 尝试重新插拔USB线
- 运行
iio_info -s确认设备识别
问题2:GNURadio流图报错
gr-osmosdr 0.2.0.0 (0.2.0) gnuradio 3.9.0.0 built-in source types: file fcd rtl rtl_tcp uhd hackrf bladerf rfspace airspy airspyhf soapy redpitaya [INFO] [UHD] linux; GNU C++ version 9.3.0; Boost_; UHD_3.15.0.0-3build1 No supported devices found.
解决方法:
sudo apt-get install gr-iio
问题3:听到镜像频率干扰 这是PlutoSDR的常见问题,需要在流图中添加额外的滤波:
- 在Osmocom Source后添加
Frequency Xlating FIR Filter - 设置Decimation=4, Taps=firdes.low_pass(1, samp_rate, 75e3, 25e3)
5. 进阶优化技巧
当基本功能实现后,可以尝试以下优化:
- 添加频谱显示:
- 插入
QT GUI Frequency Sink模块 - 设置带宽=2MHz, Ref Level=0
- 插入
- 多电台预设:
import numpy as np stations = { '音乐台': 88.7e6, '新闻台': 93.5e6, '交通台': 103.9e6 } - 录音功能:
- 添加
File Sink模块 - 设置文件类型为.wav
- 连接WBFM Receive的输出
- 添加
- 自动增益控制:
self.connect((self.analog_agc_xx_0, 0), (self.blocks_multiply_const_vxx_0, 0))
完成这些步骤后,你应该已经能听到清晰的FM广播了。记得保存你的流图(.grc文件),下次可以直接加载使用。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/271517.html