LimeSDR DAB发射 RTL SDR DAB接收

本文内容、开发板及配件仅限用于学校或科研院所开展科研实验!

温馨提示:“开源SDR实验室”是北京的。

本文利用Open Digital Radio套件、LimeSDR开发板来实现DAB(Digital Audio Broadcasting)发射。实验流程包括:首先,编译安装Open Digital Radio套件;然后,编辑ODR配置文件;最后,进行发射和接收。

目录

一、DAB概述

二、实验硬件软件

三、编译安装

1、安装autoconf

2、下载ODR套件相关代码

3、安装ODR-DabMod

4、安装ODR-DabMux

5、安装ODR-AudioEnc

6、安装welle.io软件

四、ODR软件配置

1、ODR-DabMod的配置

2、ODR-DabMux的配置

五、DAB发射和接收

1、odr-dabmod

2、odr-dabmux

3、odr-audioenc

4、welle.io

六、有用的链接

七、联系方式


一、DAB概述

DAB全称Digital Audio Broadcasting,即数字信号广播,是继AM、FM传统模拟广播之后的第三代广播--数字信号广播,它提供了接近CD质量的声音,广播及商机无限的附加数据服务,具有抗噪声、抗干扰、抗电波传播衰落、适合高速移动接收等优点,保证固定、携带及移动时接收信号的质量。它的出现是广播技术的一场革命。数字音频广播不仅传递音频,也可传递相关信息(路况、气象、新闻等),甚至也可传递图像。除了抗杂信、抗干扰能力强之外,传递的信号衰减性也低,使数字广播电台的发送传递距离可更远、覆盖率更广。具体参见https://baike.baidu.com/item/DAB

DAB使用宽带广播技术,通常在III频段(174–240 MHz)和L频段(1.452–1.492 GHz)中为其分配了频谱。从OSI模型协议栈的角度来看,DAB上使用的技术位于以下几层:音频编解码器位于表示层。 在它下面的是数据链路层,负责统计时分复用和帧同步。 最后,物理层包含纠错编码,OFDM调制,以及无线传输和接收数据。DAB+是DAB的升级版本,负责DAB标准的组织WorldDAB在2006年采用HE-AAC v2音频编解码器(也称为eAAC+)编码并同时宣布了DAB +,这是DAB标准的重大升级。https://en.wikipedia.org/wiki/Digital_Audio_Broadcasting#Technology

二、实验硬件软件

硬件---LimeSDR-USB、拉杆天线

https://item.taobao.com/item.htm?spm=a230r.1.14.27.22b977ffORpxg7&id=555064600966&ns=1&abbucket=8#detail

https://item.taobao.com/item.htm?spm=2013.1.w4023-13255721712.10.7d63676fEZFnks&id=563602659653

软件---Ubuntu运行支持Limesdr、SoapySDR、Pothos的环境,Open Digital Radio套件。

如图所示,实验中我们主要用到的软件有四个,分别为ODR-PADENC、ODR-AUDIOENC、ODR-DABMUX、ODR-DABMOD。其中ODR-AUDIOENC会自动调用ODR-PADENC,它们的作用是将音频文件编码成ZeroMQ发送给ODR-DABMUX模块,ODR-DABMUX能够将多路音频信号合并,并发送给ODR-DABMOD模块,ODR-DABMOD模块负责调制,并通过软件无线电发送DAB信号。

三、编译安装

1、安装autoconf

sudo apt-get install autoconf

我这里由于之前已经安装过了,所以运行上述命令后,显示如下图。

2、下载ODR套件相关代码

首先,git下载ODR套件,ODR-DabMod、ODR-DabMux、ODR-AudioEnc、ODR-PadEnc。

我的习惯是将所有与SDR实验相关的代码都下载到我的SDR文件夹中,cd进入SDR文件夹,然后依次执行以下四个clone命令。

git clone https://github.com/Opendigitalradio/ODR-DabMod

git clone https://github.com/Opendigitalradio/ODR-DabMux

git clone https://github.com/Opendigitalradio/ODR-AudioEnc

git clone https://github.com/Opendigitalradio/ODR-PadEnc

3、安装ODR-DabMod

cd ODR-DabMod
./bootstrap.sh
./configure --disable-output-uhd
make
sudo make install
sudo ldconfig

注意:如果在./configure这句命令不加—disable-output-uhd的话,可能会碰到如下的问题,

当我们用了./configure --disable-output-uhd之后,就会得到如下结果,

4、安装ODR-DabMux

首先安装依赖:

sudo apt-get install build-essential libzmq5-dev automake libboost-system-dev libcurl4-openssl-dev

然后再进行编译安装:

cd ODR-DabMux
./bootstrap.sh
./configure
make
sudo make install
sudo ldconfig

5、安装ODR-AudioEnc

首先安装依赖:

sudo apt-get install libvlc-dev vlc-data vlc libvlc-dev
sudo apt-get install libjack-jackd2-dev jackd2
sudo apt-get install libasound2-dev libasound2

执行上述第两条命令过程中,会有提示界面弹出来,选择yes即可。

然后再进行编译安装:

cd ODR-AudioEnc
./bootstrap
./configure --enable-alsa --enable-jack --enable-vlc
make
sudo make install
sudo ldconfig

6、安装welle.io软件

welle.io软件配合RTL SDR可实现DAB信号接收,根据你的电脑系统下载相应的安装版本,wello.io可以与你的DAB发射在同一个电脑上(如Ubuntu),也可以在另外一个windows电脑上运行。

注意:如果你是Ubuntu 16.04系统上运行welle.io,可能会碰到如下问题:

搜了一下,找到了这个,https://github.com/OpenVR-Advanced-Settings/OpenVR-AdvancedSettings/issues/266

找到问题所在,缺少3.4.22。

四、ODR软件配置

1、ODR-DabMod的配置

创建文件dabmod.ini【我已创建配置好了该文件,请在百度云盘下载,文件中的#后边的是我自己添加的注释文字,仅供参考】,并写入以下内容后将dabmod.ini文件存放在DabMod的文件夹中,具体位置自己定就行,今后运行ODR-DABMod命令时,确保你终端所在路径下有这个dabmod.ini文件即可。

[remotecontrol]#远程控制配置
telnet=1
telnetport=2121
zmqctrl=1
zmqctrlendpoint=tcp://127.0.0.1:9400

[log]#日志配置
syslog=0
filelog=0
filename=odr-dabmod.log

[input]#输入配置
transport=zeromq#输入的编码类型
source=tcp://localhost:9100#输入监听的ip地址及端口
max_frames_queued=100#输入缓冲区最大值

[modulator]#调制配置
gainmode=var#增益模式,可选fix、max、var
digital_gain=0.8#数字增益
rate=2048000#输出信号采样率

[cfr]
enable=0
clip=50.0
error_clip=0.1

[firfilter]#是否启用fir滤波
enabled=1

[poly]# 使用无记忆多边形预失真
enabled=0
polycoeffile=polyCoefs

[output]#输出选择,由于Limesdr通过soapy驱动,这里我们使用soapysdr
output=soapysdr

[soapyoutput]#针对limesdr硬件进行的配置,这些配置方式与Limesuite的ini文件配置用法相同
device=
master_clock_rate=32768000
txgain=40
channel=9C#我们将发射频率设为9C信道(206.352MHz),若自定义中心频率,改为frequency=xxx

[delaymanagement]# 用于运行单频网络
synchronous=0
mutenotimestamps=0
offset=0.002

[tii]#发射机识别信息,这里我们直接禁用
enable=0
comb=1
pattern=11
old_variant=0

2、ODR-DabMux的配置

创建文件dabmux.mux【我已创建配置好了该文件,请在百度云盘下载,文件中的#后边的是我自己添加的注释文字,仅供参考】,并写入以下内容后将dabmux.mux文件存放在DabMux的文件夹中,具体位置自己定就行,今后运行ODR-DABMux命令时,确保你终端所在路径下有这个dabmux.mux文件即可。

general {
    dabmode 1
    nbframes 0    
    tist true
}
remotecontrol { telnetport 0 }
ensemble {
    id 0x4fff
    ecc 0xec    
    local-time-offset auto#自动计算本地时间
    international-table 1
    label "DAB+ Radio Test"#电台标签
    shortlabel "DAB+Test"#短标签
}
services {
    srv-p1 { label "EA Radio" }#子频道1标签
    srv-p2 { label "Choice FM" }#子频道2标签
    srv-p3 { label "Clouds FM" }#子频道3标签
}
subchannels { #对子频道进行具体的配置
sub-p1 { #子频道1配置
        ;  MPEG
        type dabplus#子频道类型,这里是dab+,若使用dab,则改为audio
        bitrate 96#比特率
        id 1#子频道id
        protection 3
        
        inputfile "tcp://*:9001"#输入源,这里是接受任何9001端口的数据作为输入源
        zmq-buffer 40#允许最大的缓存大小
        zmq-prebuffering 20#缓存中初始填充数据的大小
    }
    
    sub-p2 { #子频道2配置,与1类似
        ;  MPEG
        type dabplus
        bitrate 96
        id 2
        protection 3
        
        inputfile "tcp://*:9002"
        zmq-buffer 40
        zmq-prebuffering 20
    }
    
    sub-p3 { #子频道3配置,与1类似
        ;  MPEG
        type dabplus
        bitrate 96
        id 3
        protection 3
        
        inputfile "tcp://*:9003"
        zmq-buffer 40
        zmq-prebuffering 20
    }    
}
components { #声明绑定
    comp-p1 { #绑定1
        label Prog1 #绑定的名称,可自定义
        service srv-p1 #对应上面的services中的srv-p1
        subchannel sub-p1 #对应上面的subchannels中的sub-p1
    }
    
    comp-p2 { #绑定2,与绑定1类似
        label Prog2
        service srv-p2
        subchannel sub-p2
    }
    
    comp-p3 { #绑定3,与绑定1类似
        label Prog3
        service srv-p3
        subchannel sub-p3
    }    
}
outputs {  #输出方式
    zeromq { #zeromq方式,由于在dabmod.ini中我们配置了9100端口作为数据交互端口(source=tcp://localhost:9100),ODR-DabMux通过往9100端口上发数据达到与ODR-DabMod连接的目的
        ; Listen on all interfaces, on port 9100
        endpoint "tcp://*:9100" #设置往9100端口发送数据
        allowmetadata true #是否支持元数据
    }
    throttle "simul://"
}

五、DAB发射和接收

1、odr-dabmod

sudo odr-dabmod -C dabmod.ini

确保你终端当前路径下有dabmod.ini文件。

2、odr-dabmux

odr-dabmux dabmux.mux

在dabmod.ini和dabmux.mux配置文件中,我们定义了使用9100端口通信,并且在dabmux.mux中定义了开启3个端口,这三个端口分别为9001、9002、9003,用于接收来自odr-audioenc的信息;接下来,我们需要使用odr-audioenc,将音频编码后发送到这三个端口。

3、odr-audioenc

使用odr-audioenc对音频文件test32.wav进行编码,并发送到9001端口:

odr-audioenc -i ./test32.wav -r 32000 -c 1 -o "tcp://localhost:9001" -l -b 96

其中:

i参数为播放的音频文件

r参数为文件的采样率,只支持32k和48k

c参数为声道数

o参数为输出,这里我们定义使用tcp协议输出到9001端口

l为显示声音峰值,可去掉

b为比特率

4、welle.io

接下来可以使用dab接受设备进行收听了,我使用的是rtl-sdr,打开软件,点击右上角三个点,再点击Expert Settings,打开专家模式,

此后,我们需要在软件界面的左下角切换信道,我们选择9C信道。

我们可以点击右下角,添加Service Details和Spectrum两项方便观察。

Frame sync、FIC CRC、Frame errors全部变绿,说明当前状况良好可以听到声音,否则需要调整天线或检查其它错误。关于这一点,确实有时候接收效果不是特别的好,这一点还有待于改进。而且如何调整天线的方向和位置还不是特别有规律,欢迎大家可以一起反馈、探讨!一个奇怪的现象就是,RTL SDR把天线杆拧下来反而有时候接收效果会变好。

我们在dabmux.mux中设置过第一个子信道的名称为EA Radio,其对应的端口为9001,所以我们此时双击左边的EA Radio,将听到播放的音频。

此时我们可以再开启另外两路子信道上的音频播放:

odr-audioenc -i ./test32.wav -r 32000 -c 1 -o "tcp://localhost:9002" -l -b 96

odr-audioenc -i ./test32.wav -r 32000 -c 1 -o "tcp://localhost:9003" -l -b 96

这样,我们可以双击左边的另外两个标签,也可以听到声音。

通过改变-i参数后面的音频文件,我们可以自定义播放的音频。

目前找到一组比较好的参数是双声道音频文件32k采样率的情况下用单声道播放,播放会有一定的失真目前还在研究最佳的参数设置,暂时找到使用双声道的32k采样率的音频文件单声道播放失真比较小。

odr-audioenc -i ./test32.wav -r 32000 -c 1 -o "tcp://localhost:9001" -l -b 96

六、有用的链接

https://limemicro.com/community/digital-audio-broadcasting-dab-with-the-limesdr-and-odr-mmbtools/

https://baike.baidu.com/item/DAB

https://medium.com/@sundayglee/digital-radio-broadcasting-using-limesdr-and-odr-tools-part-4-98a1c38c4c5b

七、联系方式

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值