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

2023-10-07 00:10

本文主要是介绍【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.rulesFATAL: 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设备的标志索引,于是只能听见一个频率的声音,正确。

这篇关于【GNURadio RTL-SDR】双RTL-SDR信号源的FM调频广播接收机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/154798

相关文章

如何选择SDR无线图传方案

在开源软件定义无线电(SDR)领域,有几个项目提供了无线图传的解决方案。以下是一些开源SDR无线图传方案: 1. **OpenHD**:这是一个远程高清数字图像传输的开源解决方案,它使用SDR技术来实现高清视频的无线传输。OpenHD项目提供了一个完整的工具链,包括发射器和接收器的硬件设计以及相应的软件。 2. **USRP(Universal Software Radio Periphera

android面试:如何理解 Android 中的广播?

在 Android 中,广播是一种用于在应用程序之间传递消息的机制。它允许应用程序发送和接收全局消息,通常用于通知其他应用或组件某些事件的发生。广播可以是系统广播(由系统发送)或自定义广播(由应用程序发送)。 广播的主要特点: 异步通信:广播是一种异步的通信方式,发送广播的应用不需要等待接收应用的响应。 全局可见:广播可以被系统中的任何应用程序接收,适合用于跨应用的消息传递。 轻量级:广播

Android 接收系统广播,开机启动Service,SMS,Battery

本文内容摘自《疯狂Android讲义 第3版》李刚 著 自动开启的Service: package shortcut.song.com.myapplication;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;im

Android Ordered Broadcast 有序广播

代码设置IntentFilter: IntentFilter intentFilter = new IntentFilter();intentFilter.setPriority(15);intentFilter.addAction("shortcut.song.com.myapplication.MY_BROADCAST");intentFilter.addCategory

Android BroadcastRecevier广播消息

代码注册Receiver @Overrideprotected void onCreate(Bundle savedInstanceState) {IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("");MyBroadcast myBroadcast = new MyBroadcast();regi

2024全球广播摄像机市场前景如何?IP网络化云端融合趋势加强

一、前言 当前,全球广播电视用户持续向流媒体迁移。大多数国家广播电视台推出独立流媒体平台,流媒体趋势日渐加强。与奈飞等非广电系流媒体平台只提供点播服务不同,广电系流媒体平台一般提供电视频道直播服务、电视回看服务、视频点播服务,与传统电视渠道形成互补,而这些流媒体平台与网络媒体平台所能提供的视频服务存在着非常重合的区域。 (1)流媒体时代加速广播摄像机专业影视化发展 全球广电系流媒体平台竞争力

单播、广播、多播

单播、多播和广播单播”(Unicast)、“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在? 1.单播:网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。单播在网络中得到了广泛的应用,网络上

RocketMQ广播消费消息

1、 基础概念 RocketMQ 支持两种消息模式:集群消费( Clustering )和广播消费( Broadcasting )。 集群消费模式(Cluster): 在集群消费模式下,同一个消费者组(Consumer Group)中的每个消费者都会消费消息的一个副本。消息会被分发到不同的消费者实例上,但是同一个消息只会被同一个消费者组中的一个消费者消费。 广播消费模式(Broadcast)

IOS消息分发(广播)机制

在IOS中,提供了通知机制(Notification),可以在对象间传递和接受信息。传递和接受信息的对象间甚至不需要知道对方的存在。究其本质来说,其实是设计模式中的观察者模式的应用。 通知机制 设想这么一个场景:我开发了一款pdf阅读器,当手机上的另一个App打开pdf文件时,通过Open in,选择我的pdf阅读器打开。这时候我的pdf阅读器会被lanuch,同时在其App deleg

神奇的android广播

最近用了android的广播,个人感觉非常好用: 首先在你要接收的地方注册一个: context.registerReceiver(myReceiver, new IntentFilter("com.shic.action.d")); 然后就是定义注册的这个,在接收到广播后执行的操作: BroadcastReceiver myReceiver = new BroadcastRecei