【GNURadio RTL-SDR】双RTL-SDR信号源的FM调频广播接收机

本文介绍了一种使用两个RTL-SDR dongle通过GNURadio软件并行接收多个FM广播信号的方法。通过指定设备参数,解决了设备冲突问题,实现了同时接收不同频率的广播信号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1. 前言

两个RTL-SDR的dongle,芯片 RTL2832U + R820T ,淘宝50左右那种能收FM(不能接收DTMB频段!),想都接到同一台电脑去用软件无线电(GNURadio)的方式收多个FM调频广播信号。

2. 实验过程

在谷歌搜了不少类似内容,没有标准答案,加上受到了这里的复制粘贴的启发:
软件无线电-它如何工作? 第4部分 中的 多频道接收 部分(单独一个RTL-SDR信号源)
多频道接收
按照刚开始用GNURadio的时候作为实验用的简单宽带FM收音机(找不到图出处,能正常收听):
单个RTL-SDR设备接收FM调频广播

  • RTL-SDR Source :把RTL-SDR设备(电视棒)作为接收信号的设备,可设置接收频率、各种增益等参数
  • QT GUI SInk : 类似示波器,也可以砍掉该模块,不影响FM广播接收机工作
  • QT GUI Chooser(samp_rate):采样率,单选按钮组合,一般选2M
  • QT GUI Range(RF_GAIN):射频增益的值的调整,横向拖动框
  • QT GUI Range(freq):接收频率的值的调整,横向拖动框
  • QT GUI Range(volume):播放接收到的广播信号的音量的值的调整,横向拖动框,一般是1
  • Audio Sink 模块,在电脑上播放接收到的广播信号。
  • Wav File Sink 模块,将接收到的广播信号录制为WAV文件,采样率48KHz。

在GNURadio运行,看GNU的控制台的输出:能正常接收FM广播频率

#0 Realtek RTL2838UHIDIR SN: 00000001
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
Exact sample rate is: 2000000.052982 Hz

2.1 制作流图

直接复制粘贴出来第二个RTL-SDR信号源的接收信号处理模块路线:
把射频增益RF_GAIN变成固定值(variable)37.2;
采样率samp_rate变为固定值(variable)2e6(2M);
独立出来两个接收频率:freq_1 和 freq_2,都有横向的滚动条可以改变值;
于是:
双设备接收FM调频广播
运行界面:够简单,只有两个频率可以调
在这里插入图片描述

电脑插上两个RTL-SDR,在GNURadio运行这个流图,发现只能听见一个频率,
查看GNURadio控制台打印:

Using device #0 Generic RTL2832U OEM
usb_open error -3
Please fix the device permissions, e.g. by installing the udev rules file rtl-sdr.rules

FATAL: Failed to open rtlsdr device.

Trying to fill up 1 missing channel(s) with null source(s).
This is being done to prevent the application from crashing
due to gnuradio bug #528.

使用设备 #0 Generic RTL2832U OEM
USB打开错误?是不是读取rtlsdr设备失败?
试图用空的信号源去填充一个丢失的频道,防止本应用因为gnuradio的bug而导致崩溃。

2.2 RTL-SDR的设备参数

去翻看模块 RTL-SDR Source 的说明文档,双击模块 RTL-SDR Source - Document:
这里有个设备参数 Device Arguments

  • Device Arguments:
    The device argument is a comma delimited string used to locate devices on your system. Device arguments for multiple devices may be given by separating them with a space.
    Use the device id or name/serial (if applicable) to specify a certain device or list of devices. If left blank, the first device found will be used.

黑体字关键:设备参数字符串用于定位系统中的RTL-SDR设备。同时使用多个RTL-SDR设备时,要填入设备ID或设备名称/序列号,来保证一个确认的设备,或一个设备表。若 Device Arguments 留空不填,则默认使用第一个找到的设备。

此段下面的Examples例子里,发现 rtl=0 和 rtl=1 这些:

  rtl=serial_number ...
  rtl=0[,rtl_xtal=28.8e6][,tuner_xtal=28.8e6] ...
  rtl=1[,buffers=32][,buflen=N*512] ...
  rtl=2[,direct_samp=0|1|2][,offset_tune=0|1][,bias=0|1] ...

回头看单个RTL-SDR信号源的流图的运行GNU控制台输出:

Using device #0 Realtek RTL2838UHIDIR SN: 00000001
Found Rafael Micro R820T tuner

设备标识符/标志从0开始咯?0-based?

于是:
在第一个 RTL-SDR Source模块 的 Device Arguments 栏写入:rtl=0
在第二个 RTL-SDR Source模块 的 Device Arguments 栏写入:rtl=1
运行,正常,能听到两个频率的声音了!
此时GNU控制台输出:

gr-osmosdr c653754d (0.1.5git) gnuradio 3.7.12.0
built-in source types: file osmosdr fcd rtl rtl_tcp uhd hackrf bladerf airspy redpitaya 
gr-osmosdr c653754d (0.1.5git) gnuradio 3.7.12.0
built-in source types: file osmosdr fcd rtl rtl_tcp uhd hackrf bladerf airspy redpitaya 
Using device #1 Realtek RTL2838UHIDIR SN: 00000001
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
Exact sample rate is: 2000000.052982 Hz
[R82XX] PLL not locked!

gr-osmosdr c653754d (0.1.5git) gnuradio 3.7.12.0
built-in source types: file osmosdr fcd rtl rtl_tcp uhd hackrf bladerf airspy redpitaya 
Using device #0 Realtek RTL2838UHIDIR SN: 00000001
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
Exact sample rate is: 2000000.052982 Hz
[R82XX] PLL not locked!
INFO: Audio sink arch: windows
INFO: Audio sink arch: windows
gr::pagesize: no info; setting pagesize = 4096

注意这两句:

Using device #0 Realtek RTL2838UHIDIR SN: 00000001
和
Using device #1 Realtek RTL2838UHIDIR SN: 00000001

说明读取接上的设备 #0 和 #1 正确,我们填入的设备参数OK。

另:
继续实验,在其中一个 RTL-SDR Source 换成填入参数 rtl=2 的话,GNU控制台:

FATAL: Wrong rtlsdr device index given.

说是给错了RTL-SDR设备的标志索引,于是只能听见一个频率的声音,正确。

### 解决 IntelliJ IDEA 中 `@Autowired` 注解导致的红色波浪线错误 在使用 Spring 框架时,如果遇到 `@Autowired` 注解下的依赖注入对象显示为红色波浪线错误或者黄色警告的情况,通常是由以下几个原因引起的: #### 1. **Spring 插件未启用** 如果 Spring 支持插件未被激活,则可能导致 IDE 无法识别 `@Autowired` 或其他 Spring 特定的功能。可以通过以下方式解决问题: - 打开设置菜单:`File -> Settings -> Plugins`。 - 确认已安装并启用了名为 “Spring Framework Support” 的官方插件[^1]。 #### 2. **项目配置文件缺失或不正确** Spring 需要通过 XML 文件、Java Config 类或其他形式来定义 Bean 定义。如果没有正确加载这些配置文件,可能会导致 `@Autowired` 报错。 - 确保项目的 `applicationContext.xml` 或者基于 Java 的配置类(带有 `@Configuration` 和 `@Bean` 注解)已被正确定义和引入。 - 对于 Spring Boot 项目,确认是否存在 `spring.factories` 文件以及是否包含了必要的组件扫描路径[^3]。 #### 3. **模块依赖关系问题** 当前模块可能缺少对 Spring Core 或 Context 组件库的有效引用。这可能是由于 Maven/Gradle 构建工具中的依赖项声明不足造成的。 - 检查 `pom.xml` (Maven) 或 `build.gradle` (Gradle),确保包含如下核心依赖之一: ```xml <!-- For Maven --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> ``` ```gradle // For Gradle implementation 'org.springframework:spring-context:${springVersion}' ``` - 更新项目依赖树以应用更改:右键点击项目根目录 -> `Maven -> Reload Project` 或运行命令 `./gradlew build --refresh-dependencies`。 #### 4. **IDE 缓存损坏** Intellij IDEA 的缓存机制有时会因各种因素而失效,从而引发误报错误。清除缓存可以有效缓解此类情况。 - 使用快捷组合键 `Ctrl + Alt + Shift + S` 进入项目结构对话框;也可以尝试执行操作序列:`File -> Invalidate Caches / Restart... -> Invalidate and Restart`. #### 5. **启动异常影响正常解析** 若之前存在类似 `com.intellij.diagnostic.PluginException` 的严重初始化失败日志记录,则表明某些关键服务未能成功加载,进而干扰到后续功能表现[^2]。建议重新下载最新稳定版本的 IDEA 并按照标准流程完成初次部署工作。 ```java // 示例代码片段展示如何正确运用 @Autowired 注解实现自动装配 @Service public class StudentService { private final Repository repository; public StudentService(@Qualifier("specificRepository") Repository repo){ this.repository = repo; } } @Component class SpecificComponent{ @Autowired private transient StudentService studentService; // 此处应无任何编译期告警现象发生 } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值