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

文章目录

  • 1. 前言
  • 2. 实验过程
    • 2.1 制作流图
    • 2.2 RTL-SDR的设备参数


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调频广播
运行界面:够简单,只有两个频率可以调
在这里插入图片描述

电脑插上两个电视棒,在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 
[INFO] [UHD] Win32; Microsoft Visual C++ version 14.0; Boost_106000; UHD_3.11.0.0-0-unknown
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
gr::pagesize: no info; setting pagesize = 4096


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
gr::pagesize: no info; setting pagesize = 4096

注意这两句:

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

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

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

FATAL: Wrong rtlsdr device index given.

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

热门文章

暂无图片
编程学习 ·

Android 人民币符号在布局中实现的效果不一样的处理方法

大致效果图如下图1 2 这2个都是在java代码中 人民币符号+ 金额 以前没怎么在意ui走查的时候提出来的bug看了半天才发现问题 就是一个是是自己手打的的人民币符号,一个是从ui的效果图上复制过来的人民币符号最后自己的处理方法就是复制ui效果图的人民币符号,大致原因也知道就…
暂无图片
编程学习 ·

Scanner对象

Scanner对象 作为输入使用,主要有两种接收键盘输入字符的方法,next()方法和nextLine()方法,下面介绍一下 import java.util.Scanner;public class demo01 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输…
暂无图片
编程学习 ·

CSS滚动指示器

一、CSS滚动指示器 滚动指示器指的是页面的顶端会有一个进度条,指示滚动的进度。效果如下GIF所示(点击播放):CSS滚动指示器指的是不借助JavaScript,纯CSS实现滚动进度效果。 二、传统的实现方法 传统CSS实现方法由一个名叫 Mike的人首先提出,时间应该是16年,这个CodePen…
暂无图片
编程学习 ·

前端项目如何管理

前端项目的管理分为两个维度:项目内的管理与多项目之间的管理。1. 项目内的管理在一个项目内,当有多个开发者一起协作开发时,或者功能越来越多、项目越来越庞大时,保证项目井然有序的进行是相当重要的。一般会从下面几点来考证一个项目是否管理得很好:可扩展性:能够很方便…
暂无图片
编程学习 ·

nat表中的dnat snat的使用(iptables)

nat表中的dnat snat的使用- snatiptables -t nat -A POSTROUTING -o enp6s0 -j SNAT --to-source 172.25.254.33- dnatiptables -t nat -A PREROUTING -i enp6s0 -j DNAT --to-dest 170.25.254.22从enp6s0进来的所有数据都转给170.25.254.11,即给enp6s0(172.25.254.33)的所有…
暂无图片
编程学习 ·

Java从小白到老白学习笔计【一】

命令提示符(cmd) 启动 win + r 切换盘符 盘符名称: 进入文件夹 cd 文件夹名称 进入多级文件夹 cd 文件夹1\文件夹2\文件夹3 返回上一级 cd… 直接回根路径 cd 查看当前内容 dir 清屏 cls 退出 exit String 首字母大写,不是关键字 加号代表字符串的连接操作 任何…
暂无图片
编程学习 ·

nginx从下载到部署全过程(Linux)

导航NGINX官网下载NGINX安装环境解压,编译,安装启动及测试NGINX官网以下列举了三个网址,分别是:NGINX官网,下载网址及官方文档。官方网站:http://nginx.org/下载网址:http://nginx.org/en/download.html官方文档:http://nginx.org/en/docs/ 下载NGINX 通过官方下载地址…
暂无图片
编程学习 ·

Centos7实现MySQL数据库备份与恢复

简介MySQL数据库的备份可以分为逻辑备份和物理备份,逻辑备份工具主要为:mysqldump而物理备份工具主要为:xtrabackup,两种备份方式各有优缺点备份工具mysqldumpxtrabackup优点支持热备份和增量备份,需要磁盘空间小支持热备份和增量备份,业务影响小,停机时间短,缺点业务影…
暂无图片
编程学习 ·

MyBatis 结构拆解

MyBatis 的执行流程大概可以拆分为如下几个部分:初始化配置解析 mybatis-config.xml 文件 根据 mybatis-config.xml 文件中的配置,依次解析 Mapper.xml 文件 将 Mapper.xml 与 接口 通过 xml 文件的 namespace 属性来进行绑定**【重点】**;该篇有介绍 XML 文件和 接口进行绑…
暂无图片
编程学习 ·

MySQL配置文件

MySQL配置文件 1.配置环境变量 新建MYSQL_HOME变量,变量值是包的路径。 2.然后再path中添加:%MYSQL_HOME%\bin 3.执行mysqld install命令当出现Service successfully installed时表示mysql服务安装完成 4.MySQL初始化 :输入: mysqld --initialize --console 执行完成后,会…
暂无图片
编程学习 ·

MySQL创建新连接时,不能成功连接的问题

创建新连接后,用户名和密码都是对的,地址和端口也都是本地但还是会出现错误。比如:1、2003错误:2003 cannot connect to mysql一般是没有启动MySQL服务,在服务中找到MySQL80,启动之。2、1045错误:ERROR 1045 (28000): Access denied for user root@localhost (using pas…
暂无图片
编程学习 ·

CSV文件转Excel后数字自动转换成科学计数法的解决方法

CSV文件用Excel打开后,长度超过11位的数字自动转换成科学计数法显示,末尾数字变成“0000”,如何解决这一问题?以“老劳模系统数据.CSV”为例,身份证码是科学计数法了第一步:新建excel,用 office excel 打开第二步:点击“数据”---“从文本/cvs”如果乱码,则选择编码第…
暂无图片
编程学习 ·

opencv画3d骨架图

效果: import matplotlib.pyplot as plt import numpy as np# h36m骨架连接顺序,每个骨架三个维度,分别为:起始关节,终止关节,左右关节标识(1 left 0 right),用来区别颜色 human36m_connectivity_dict = [[0, 1, 0], [1, 2, 0], [2, 6, 0], [5, 4, 1], [4, 3, 1], [3, 6…
暂无图片
编程学习 ·

2020年了,还不懂数据挖掘?数据挖掘工具有哪些?

一. 数据挖掘定义二. 数据挖掘特征三. 数据挖掘工具1 Weka2 SPSS3 Clementine4 RapidMiner5 其他数据挖掘软件一. 数据挖掘定义数据挖掘:严格的科学定义上,数据挖掘是从大量的、有噪声的、不完全的、模糊和随机的数据中,提取出隐含在其中的、人们事先不知道的、具有潜在利用…
暂无图片
编程学习 ·

关于atomic到底安不安全

atomic 实际上相当于一个引用计数器,这个大家很熟悉,如果被标记了atomic,那么被标记了的内存本身就有了一个引用计数器,第一个占用这块内存的线程,会给这个计数器+1,在这个线程操作这块内存期间,其他线程在访问这个内存的时候,如果发现“引用计数器”不为0,则阻塞,实…
暂无图片
编程学习 ·

Node.js入门

Nodejs入门 学习Nodejs建议1.了解客户浏览器与服务端后台交互过程,可以在以后的前端开发工作中与后端人员之间的沟通更加容易理解。虽然工作中不一定用的上Nodejs,但是通过对服务端开发的了解,能够让你在日常工作中与公司的后端人员之间的沟通变得更加轻松。2.了解服务端开发…
暂无图片
编程学习 ·

linux-centos7 最小化系统 -源码编译安装apache服务详细步骤

文章目录前言一:安装apache步骤详解1.1:安装准备环境 :centos7.6 最小化安装版1.2 首先安装编译相关软件1.3: 然后准备解压相关源码包1.4 源码编译安装 expat 软件1.5 源码编译安装apache软件二.配置相关参数2.1 . 将apache软件交给service管理2.2 编辑http主页内容2.3 本…