主要内容

RDS/RBDS和RadioText Plus (RT+) FM接收机

这个示例展示了如何使用RDS或RBDS标准以及可选的RadioText Plus (RT+)标准从FM无线电台提取节目或歌曲信息。您可以使用捕获信号,也可以使用RTL-SDR无线电、ADALM-PLUTO无线电或USRP B200/B210无线电通过空中实时接收信号。

所需硬件和软件

要使用来自文件的记录数据运行此示例,需要Communications Toolbox™。

为了实时接收信号,您还需要以下SDR设备之一和相应的软件附加组件:

  • RTL-SDR无线电和RTL-SDR无线电附加组件的通信工具箱支持包万博1manbetx

  • ADALM-PLUTO无线电和模拟设备通信工具箱支持包ADALM-PLUTO无线电插件万博1manbetx

  • USRP无线电和USRP无线电附加组件的通信工具箱支持包万博1manbetx

有关更多信息,请参见软件定义无线电(SDR)发现页面

背景

RBDS和RDS是非常相似的标准,规定如何用附加信息补充FM无线电信号。RBDS在北美使用,而RDS最初在欧洲使用,并演变为国际标准。RBDS和RDS由三层组成:

  • 物理层(第一层)

  • 数据链路层(第二层)

  • 会话和演示层(第3层)

物理层(第一层)

RBDSPhyDecoderHelper接收从文件捕获的信号或从无线电接收的活动信号,并执行以下步骤:

  • FM解调:一旦调频信号解调,RDS/RBDS信号驻留在57 kHz +/- 2.4 kHz波段。请注意,RDS/RBDS信号以相对较低的功率传输,因此在调频频谱中并不总是可见,如图所示。

FM信号包含19 kHz的导频音,可作为57 kHz的RDS/RBDS信号和38 kHz的立体声相干解调的相位和频率参考。38khz和57khz的先导音可以通过将19 kHz先导音的频率增加一倍和三倍来生成[ 2 ]

RDS/RBDS信号相干解调的处理步骤为:

  • 带通滤波: PHY接收机在19 kHz和57 kHz进行带通滤波,分别隔离导频音和RDS/RBDS信号。

  • 三倍频:将19 kHz导频音的复杂表示提高到3次方,使其频率提高到3倍,并获得57 kHz导频音。

  • 是解调: RDS和RBDS符号以1187.5 Hz的频率生成,并由am调制到57 kHz载波。57 kHz RDS/RBDS信号可以用锁定频率和相位的57 kHz载波进行相干解调。通常,频率三倍的19千赫导频足以进行相干解调。下图显示了19 kHz和57 kHz导频音、57 kHz RDS/RBDS信号和am解调基带RDS/RBDS信号。

同时,有几个调频台的57 kHz RDS/RBDS信号与19 kHz导频音及其三倍频版本呈现时变相位偏移。PHY接收器包含一个Costas环来补偿这种时变相位偏移。

  • 科斯塔斯环:科斯塔斯环执行2正交AM解调,一个解调与57 kHz正弦和另一个57 kHz余弦。接收信号的采样率被精心选择为228 kHz,每57 kHz周期提供4个采样。因此,57 kHz先导音的一个采样延迟导致四分之一波长相位偏移,并允许我们从正弦波生成余弦波。正弦解调信号对应于相干解调输出。余弦解调信号用于相位误差检测。57 ks manbetx 845Hz RDS/RBDS信号与正弦/余弦波的乘积用第1.7节中指定的滤波器进行低通滤波[1].两个滤波器输出的乘积是一个误差信号。它越大,19 kHz导频音就越延迟,表现得更像余弦基解调器。

  • 时钟提取:为了执行双相符号解码,从19 kHz先导音中提取一个匹配RDS/RBDS符号速率为1187.5 Hz的时钟。注意:1187.5 Hz x 16 = 19 kHz。为了考虑频率偏移,使用分频从19 kHz导频音中提取时钟。由于频分操作提供了多个正确答案,基带RDS/RBDS信号作为训练数据,帮助确定所需的输出。

  • 双相符号解码器: RDS和RBDS采用双相位级(bi- ϕ -L)编码,即俗称的曼彻斯特编码。在每个时钟周期中,RDS/RBDS符号有两个相反的振幅值,要么是正的,然后是负的,要么是负的,然后是正的。双相符号解码器对第二幅值电平求负,使每个符号在整个时钟周期内保持相同的幅值电平。新的时钟范围振幅电平对应于符号的位表示。这些图对应于图2中的波形#1-6[1]

为了获得每个符号的位值,将波形在每个时钟周期内进行集成,并将结果与零(切片器)进行比较。

  • 微分解码:最后,比特被差分解码,以恢复发射机的差分编码。

数据链路层(第二层)

第2层是使用RBDSDataLinkDecoder帮手。这一层负责同步和纠错。

PHY层的位输出在逻辑上被组织成由四个26位块组成的104位组。每个块包含一个16位的信息字和10个奇偶校验位(参见中图8)[1]).一个不同的10位偏移字被模量-2加到每个块的奇偶校验位上。

  • 同步:最初,使用104位的滑动窗口穷尽地寻找块和组边界。对于每个104位窗口,在每个26位块的最后10位查找4个偏移字。函数没有检测到误码,则标识偏移字RBDSErrorDetection帮手。一旦识别出偏移字,就实现了组级同步,并停止穷举滑动窗口处理。随后,下一个104位将被视为下一个组。

如果未来组包含比特错误,并且偏移字无法在预期位置识别,则可能会丢失同步。在这种情况下,第2层首先检查1位同步滑移的可能性,利用第一个信息字(16位)对于所有位组总是相同的事实。如果发现第一个信息字错位了1位(向左或向右),则保持同步并相应地调整组边界。如果在25个组接收中存在比特错误,同时无法使用这种向左/向右1位移位重新建立同步,则同步丢失,第2层重新进入穷举的、基于滑动窗口的同步搜索。

  • 误差修正: RDS/RBDS纠错码是由(341,331)缩短为(26,16)循环码。的RBDSErrorCorrection的附件B中描述的移位寄存器方案[1]

会话和表示层(第3层)

第2层删除奇偶校验位/偏移位,因此第3层接收一组64位,由4个16位块组成。有多达32种不同的组类型,每一种都标有从0到15的数字和字母“a”或“B”,例如,0B, 2A, 3A。每个组的格式可以是固定的,也可以是抽象的,如果这个组被分配给一个开放数据应用程序(ODA,见列表)[3]).

层3是使用RBDSSessionDecoder帮手。支持0A、0B、2A、2万博1manbetxB、3A、4A、10A固定格式组类型的解码。

  • 0A和0B传递8个字符的字符串,通常以滚动文本的方式更改。

  • 2A和2B传递更长的64或32字符字符串。

  • 3A注册oda并指定它们专用的抽象格式组类型。

  • 4A表示系统时间。

  • 10A进一步分类节目类型,如“足球”为“体育”节目类型。

对于oda, RDS/RBDS接收机支持RadioText Pl万博1manbetxus (RT+)解码。这个ODA可以将组类型2A或2B中的32或64个字符的长字符串分解为两种特定的内容类型(例如,艺术家和歌曲)。

注册官方发展援助实施:RadioText Plus (RT+)

RDS/RBDS接收机是可扩展的。类来指定ODA实现registerODA的函数RBDSSessionDecoder帮手。此函数接受ODA的十六进制ID (ODA ID可以在[3]),并处理处理主要ODA组类型的函数,以及3A组类型中特定于ODA的部分。例如,会话解码器RBDSSessionDecoder对象可以扩展为RadioText Plus (RT+)使用以下代码:

rtID =“4 bd7”RadioText +的十六进制ID (RT+)注册oda (sessionDecoder, rtID, @RadioTextPlusMainGroup, @RadioTextPlus3A);

运行示例代码

使用helperRBDSInithelper功能用于设置RDS/RBDS系统参数。注释代码行显示了从捕获的数据或各种sdr运行示例的备用设置。使用helperRBDSConfighelper功能用于配置RDS/RBDS系统。

userInput = helperRBDSInit();userInput。持续时间= 10.8;% userInput。SignalSource = '文件';% userInput。SignalFilename = 'rbds_capture.bb';% userInput。SignalSource = 'RTL-SDR';% userInput。CenterFrequency = 98.5e6;% userInput。SignalSource = 'ADALM-PLUTO';% userInput。CenterFrequency = 98.5e6;% userInput。SignalSource = 'USRP';% userInput。CenterFrequency = 98.5e6;[rbdsParam, sigSrc] = helperRBDSConfig(userInput);

使用RDS/RBDS参数创建并配置FM广播接收机系统对象™。

fmBroadcastDemod = com . fmbroadcastdemodulator (...“SampleRate”228年e3,...“FrequencyDeviation”, rbdsParam。FrequencyDeviation,...“FilterTimeConstant”, rbdsParam。FilterTimeConstant,...“AudioSampleRate”, rbdsParam。AudioSampleRate,...“立体”,真正的);%创建音频播放器播放器= audioDeviceWriter(“SampleRate”, rbdsParam.AudioSampleRate);% 2层对象datalinkDecoder = rbdsdatalinkdecode ();% 3层对象sessionDecoder = rbdsessiondecoder ();%寄存器处理实现的RadioText Plus (RT+) ODA:rtID =“4 bd7”;registerODA (...sessionDecoder、rtID @RadioTextPlusMainGroup @RadioTextPlus3A);创建数据查看器对象viewer = helperRBDSViewer();启动查看器并初始化无线电时间start(viewer) radioTime = 0;%主循环radioTime < rbdsParam。持续时间接收基带样本(信号源)rcv = sigSrc();解调调频广播信号并播放解码后的音频。audioSig = fmBroadcastDemod(rcv);球员(audioSig);%流程物理层(第一层)bitsPHY = RBDSPhyDecoder(rcv, rbdsParam);%流程数据链路层(第二层)[enabled,iw1,iw2,iw3,iw4] = datalinkDecoder(bitsPHY);处理会话层和表示层(第3层)outStruct = sessionDecoder(enabled,iw1,iw2,iw3,iw4);查看结果包内容(数据查看器)更新(观众、outStruct);%更新无线电时间radioTime = radioTime + rbdsParam.FrameDuration;结束停止查看器,释放信号源和音频写入器。停止(观众);

{

释放(sigSrc);释放(球员);

查看结果

此窗口显示已处理的RDS/RBDS数据。

  • RDS/RBDS基本信息

  • 第一个字段包含程序类型,它由所有组类型的第二个信息字传达。如果接收到10A组类型,第一个字段还提供进一步的描述,例如,Sports \足球

  • 第二个字段包含由0A/0B组传递的8个字符的文本。如果传输的字符串超过8个字符,显示的文本将自动换行。

  • 第三个字段包含较长的32/64字符文本,由2A/2B组类型传递。

  • RadioText Plus (RT+):如果任何3A组表明RadioText Plus (RT+) ODA使用抽象格式的组类型,例如11A,则填充此节。在接收到这个抽象组类型后,由组2A/2B传递的32/64字符文本将被分割为两个子字符串。这两个标签将被更新以描述子字符串(例如Artist和Song)。

  • 团体式接待:这些表格提供了一个直方图,显示从一个电台接收到的群组类型和频率。因此,用户可能希望查看已记录的数据,以获得图形查看器中没有描述的进一步信息(具体来说,系统时间为4A,交替频率为0A等)。

  • 开放数据应用(ODA):如果接收到任何3A组类型,此ODA列表将显示每个接收到的ODA的名称和专用组类型。

进一步的探索

可以进一步探索RDS/RBDS信号RBDSExampleApp应用程序。RBDSExampleApp应用程序允许您:

  • 选择信号源(捕获文件或RTL-SDR、ADALM-PLUTO或USRP)。

  • 指定电台频率(RTL-SDR、ADALM-PLUTO或USRP)。

  • 通过生成的C代码运行RDS/RBDS接收器的层1和层2。这些是RDS/RBDS链中最耗时的部分,生成代码可以帮助您实现实时处理。

  • 禁用音频回放。

  • 打开范围,如频谱分析仪和时间范围,分析接收到的信号并说明解码过程。启用作用域需要额外的计算工作,并且可能排除实时解码。在这种情况下,RDS/RBDS解码可能只对从文件加载的捕获信号成功。

  • 通过选择,记录其他组类型的RBDS字段将数据记录到文件

您可以在这些函数和System对象中探索RBDS的实现、初始化和配置:

参考文献

1.国家无线电系统委员会,美国RBDS标准,1998年4月

2.Der,劳伦斯。调频(FM)教程。硅实验室公司

3.国家无线电系统委员会,官方发展援助在RDS中的应用清单

4.RadioText Plus (RT+)规范

5.Joseph P. Hoffbeck,“使用Simulink®和USRP教学通信系统”,ASEE年会上,圣安东尼奥万博1manbetx,德克萨斯州,2012年6月

另请参阅

对象

相关的话题

外部网站