主要内容

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

这个例子展示了如何使用MATLAB®和Communications Toolbox™从使用RDS或RBDS标准和(可选)RadioText Plus (RT+)标准的FM电台中提取程序或歌曲信息。您既可以使用捕获的信号,也可以使用RTL-SDR Radio或ADALM-PLUTO Radio实时接收信号。

所需的硬件和软件

要使用捕获的信号运行此示例,您需要通信工具箱™.为了实时接收信号,您还需要以下硬件之一:

有关“通讯工具箱”支持的SDR平台的完整列表,请参阅“支持的硬件”一节金宝app软件无线电(SDR)

背景

RBDS和RDS是非常相似的标准,规定了如何用附加信息补充FM无线电信号。RBDS在北美使用,而RDS最初在欧洲使用,并逐渐发展成为国际标准。RBDS和RDS包括3层:

  • 物理层(第一层)

  • 数据链路层(第2层)

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

物理层(第一层)

RDS / rbd PHY解码器接收来自文件的捕获信号或来自收音机的实时信号,并执行以下步骤:

  • FM解调:调频信号解调后,RDS/RBDS信号位于57 kHz+/-2.4 kHz频段:

请注意,RDS和RBDS信号以相对较低的功率传输,因此它在FM频谱中并非如上图所示始终可见。

调频信号包含19千赫的导频音,可作为57千赫的RDS/RBDS信号和38千赫的立体声音频相干解调的相位和频率参考。将19千赫导频的频率加倍或三倍,可产生38千赫和57千赫的导频[2].

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

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

  • 三倍频:将19 kHz导频音调的复数表示提高到第三次方,以使其频率增加三倍,并获得57 kHz导频音调。

  • 是解调: RDS和RBDS符号以1187.5 Hz的频率产生,并被调幅调制到57 kHz的载波。57khz的RDS/RBDS信号可以用锁定在频率和相位的57khz载波相干解调。通常,频率三倍于19 kHz的导频音足以用于相干解调。接下来的图表显示了19千赫和57千赫导频音,57千赫RDS/RBDS信号,以及调幅解调的基带RDS/RBDS信号。

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

  • 科斯塔斯环: Costas环路执行2个正交的AM解调,其中一个解调为57 kHz正弦,另一个为57 kHz余弦。接收信号的采样率精心选择为228 kHz,每57 kHz周期提供4个采样。因此,57 kHz导频音的一个采样延迟导致1 / 4波长相位偏移,并允许我们从正弦波生成余弦波。正弦解调信号对应于相干解调输出。用余弦解调信号检测相位误差。带正弦波下载188bet金宝搏/余弦波的57 kHz RDS/RBDS信号的产品是用[的第1.7节中规定的滤波器低通滤波。1].两个滤波器输出的乘积为错误信号。它越大,19 kHz导频音延迟越大,表现得更像基于余弦的解调器。

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

  • 双相符号译码器: RDS和RBDS采用双相电平(bi-$\phi$-L)编码,通常被称为曼彻斯特编码。在每个时钟周期中,RDS/RBDS符号取两个相反的振幅值,或正后负,或负后正。双相符号解码器对第二个振幅电平进行反求,以便每个符号在整个时钟周期中保持相同的振幅电平。新的时钟宽振幅电平对应于符号的位表示。以下两张截图对应于图2中的波形#1-6。1].

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

  • 微分解码:最后,在发送端对比特进行差分解码以恢复差分编码。

数据链路层(第2层)

层2是使用RBDSDataLinkDecoder系统对象™。这一层负责同步和错误修正。

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

  • 同步:最初,块和组边界使用104位滑动窗口穷尽地寻找。对于每个104位窗口,在每个26位块的最后10位寻找4个偏移字。如果。则标识偏移字未检测到位错误在它的块。一旦确定了偏移量,就可以实现组级同步,并停止穷举滑动窗口处理。随后,接下来的104位将被视为下一组。

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

  • 误差修正: RDS/RBDS纠错码是由(341,331)缩短而来的(26,16)循环码。的误差修正的实现使用的移位寄存器方案见[1].

会话和表示层(第三层)

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

第3层是使用RBDSSessionDecoder系统对象。该对象支持0A, 0B,金宝app 2A, 2B, 3A, 4A, 10A固定格式组类型的解码。

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

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

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

  • 4A表示系统时间。

  • 10A进一步将节目类型分类(例如,将‘Football’替换为‘Sports’节目类型)。

对于ODA,RDS/RBDS接收器支持对RadioText Pl金宝appus(RT+)进行解码。此ODA可以将组类型2A或2B中的长32或64字符字符串分解为两种特定的内容类型(例如,艺术家和歌曲)。

注册ODA实现:RadioText Plus (RT+)

RDS/RBDS接收器是可扩展的。可以使用登记处的函数RBDSSessionDecoder系统对象。此函数接受ODA的十六进制ID (ODA ID可以在[3.]),并处理处理主要ODA组类型以及3A组类型中ODA特定部分的功能。例如,sessionDecoder RBDSSessionDecoder对象可以使用以下代码为RadioText Plus (RT+)扩展:

rtID =“4BD7”% RadioText Plus的十六进制ID (RT+)registerODA(sessionDecoder, rtID, @RadioTextPlusMainGroup, @RadioTextPlus3A);

运行示例代码

在MATLAB命令窗口中键入RBDSExample或单击此链接运行该示例。

%设置RDS/RBDS系统参数userInput = helperRBDSInit ();userInput。时间= 10.8;userInput。SignalSource =“文件”;userInput。SignalFilename =“rbds_capture.bb”%userInput.SignalSource='RTL-SDR';% userInput。CenterFrequency = 98.5 e6;%userInput.SignalSource='ADALM-PLUTO';% userInput。CenterFrequency = 98.5 e6;[rbdsParam, sigSrc] = helperRBDSConfig(userInput);%创建FM广播接收器对象,并根据RDS/RBDS参数进行配置fmBroadcastDemod=通信FMBroadcastDemodulator(...“SampleRate”, rbdsParam。FrontEndSampleRate,...“FrequencyDeviation”, rbdsParam。FrequencyDeviation,...“FilterTimeConstant”, rbdsParam。FilterTimeConstant,...“音频采样器”, rbdsParam。AudioSampleRate,...“立体”,真正的);%创建音频播放器球员= audioDeviceWriter (“SampleRate”, rbdsParam.AudioSampleRate);%第2层对象datalinkDecoder = RBDSDataLinkDecoder ();%图层3对象sessionDecoder = RBDSSessionDecoder ();%RadioText Plus(RT+)ODA的注册处理实现:rtID =“4BD7”;registerODA(sessionDecoder, rtID, @RadioTextPlusMainGroup, @RadioTextPlus3A);%创建数据查看器对象观众= helperRBDSViewer ();启动查看器并初始化广播时间开始(查看器)无线时=0;%主回路虽然无线电时间接收基带采样(信号源)rcv = sigSrc ();%解调调频广播信号并播放解码后的音频audioSig = fmBroadcastDemod (rcv);球员(audioSig);%处理物理层(第1层)bitsPHY = RBDSPhyDecoder(rcv, rbdsParam);%处理数据链路层(第2层)[已启用,iw1,iw2,iw3,iw4]=数据链接解码器(比特率);%进程会话和表示层(第3层)outStruct=会话编码器(已启用,iw1、iw2、iw3、iw4);%查看结果包内容(数据查看器)更新(观众、outStruct);%更新无线电时间radioTime = radioTime + rbdsparam . frameeduration;结束停止查看器并释放信号源和音频写入器停止(查看器);释放(sigSrc);释放(播放器);

查看结果

上面的截图演示了处理后的RDS/RBDS数据的图形显示。

  • 基本的RDS / rbd的信息

  1. 第一个字段对应于程序类型,由所有组类型的第二个信息字传送。如果收到10A组类型,则第一个字段还提供进一步的特征,例如运动\足球

  2. 第二个字段说明0A/0B组传送的8个字符的文本。

  3. 第三个字段说明了由2A/2B组类型传递的较长的32/64字符文本。

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

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

  • 开放数据应用(ODA):如果收到任何3A组类型,则使用ODA名称及其专用组类型更新遇到的ODA列表。

进一步的探索

您可以使用RBDSExampleApp用户界面进一步研究RDS/RBDS信号。你可以通过点击此链接或者通过打字RBDSExampleApp在命令窗口:

此用户界面允许您:

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

  • 指定站频率(针对RTL-SDR或ADALM-PLUTO)

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

  • 禁用音频播放

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

此外,您可以启用“Log data to file”复选框,以便记录来自所有组类型的更多字段。

您还可以探索以下功能和系统对象的实现:

选定的参考书目

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

  2. 劳伦斯·德尔,“调频(FM)教程”,硅实验室公司。

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

  4. 无线电文本加(RT+)规范

  5. Joseph P.Hoffbeck,“使用Simulink®和USRP教授通信系统”,ASEE年会,德克萨斯州圣安金宝app东尼奥,2012年6月