主要内容

FRS / gmr步话机接收器

这个例子展示了如何构建一个对讲机接收方使用MATLAB®和通信工具箱™。特定的无线电标准此示例遵循FRS / gmr(家庭广播服务/通用移动无线电服务)与CTCSS(连续Tone-Coded压制系统)。您可以使用模拟信号,捕获信号,或接收信号从一个商业使用的对讲机为RTL-SDR无线电通信工具箱支持包金宝app

这个例子的目的是与美国FRS / gmr操作标准。这些标准的技术规格可以在下面的参考列表中找到。运行在其他国家可能会或可能不会工作。

所需的硬件和软件

使用信号捕获运行这个例子,您需要以下软件:

实时接收信号,还需要以下硬件:

  • RTL-SDR广播

  • 步话机

和下面的软件

通信工具箱支持SDR平台的完整列表,请参阅“特别提款权MATLAB和Simulink金宝app硬件支持”部分金宝app软件定义无线电(SDR)

背景

对讲机提供免费预订在短距离通信的方法。虽然他们的受欢迎程度已经被手机的崛起,减少对讲机缺乏接待或高时仍然有用计时收费阻碍使用手机。

现代对讲机操作FRS / gmr标准。两个标准使用调频(FM) 462或467 MHz,在超高频(超高频)乐队。

运行示例

点击“打开脚本”按钮打开和运行示例。你需要输入以下信息:

  1. 接待时间以秒为单位

  2. 信号源(模拟信号,捕获信号或RTL-SDR广播)

  3. 频道号码(1 - 14)

  4. CTCSS代码(1-38,没有CTCSS过滤)

  5. 接收信号检测阈值

示例中接收到的音频在你电脑的扬声器。

接收机结构

下面的代码块图总结了接收机结构。处理有四个主要部分:信号源、通道选择器,调频解调器,CTCSS处理。

信号源

这个例子可以使用三个信号来源:

  1. “模拟信号”:模拟FRS / gmr信号在240年e3样品/秒

  2. “捕获信号”:无线信号写入一个文件,来自基带文件读者对象在240年e3样品/秒

  3. “RTL-SDR广播”:RTL-SDR广播在240年e3样品/秒

如果你选择“RTL-SDR电台”作为信号源,该应用程序将搜索你的电脑RTL-SDR收音机和让你选择其中一个作为信号源。

频道选择器

接收者消除了直流分量和一个变量获得适用于接收到的信号来获取一个大约知道振幅和减少干扰信号。然后,接收方应用低通通道分离过滤器来减少信号相邻通道。相邻通道是25千赫之间的差距,这意味着基带带宽,最多12.5 kHz。因此,我们选择的截止频率10 kHz。

接下来,一个通道选择器计算过滤信号的平均功率。如果大于一个阈值(默认设置为10%),频道选择器确定收到正确的信号通道和允许信号通过。在一个带外信号的情况下,尽管通道分离滤波器可以减少它的大小,它仍然是调频调制和调制信号调频解调后将出现。完全拒绝这样一个信号,所有频道选择器输出为零。

调频解调器

下面的例子使用了调频解调器基带系统对象™的采样率和最大频率偏差将240 kHz和2.5 kHz,分别。

CTCSS

首先,大量毁灭滤波器转换240千赫至8 kHz的采样率。这个速度是本地主机的抽样率输出音频设备。然后,亚音频解码器计算每个CTCSS单音频率的电力使用Goertzel写到算法和输出代码最大的力量。Goertzel写到算法提供了一种有效的方法来计算频率成分按预定频率,也就是说,代码FRS所使用的频率/ gmr的语气。

脚本比较估计收到的代码与预选的代码。如果两个代码匹配,信号传递到音频设备。当预选的代码为零,它表明你没有压制系统使用和决定阻止通过信号通道的音频设备无论使用哪个代码。

最后,一个高通滤波器的截止频率260赫兹,过滤掉CTCSS音调,最多250赫兹的频率。使用一个audioDeviceWriter系统对象™接收到的信号通过玩你电脑的扬声器。如果你没有听到任何声音,选择另一个设备使用的设备名称属性音频设备对象,作家audioPlayer。

示例代码

接收方要求用户输入并初始化变量。然后它调用信号源,频道选择器,调频解调器,CTCSS处理器在一个循环中。广播时间的循环也跟踪使用帧持续时间和丢失的样品报告的信号源。

信号源的输出的延迟时的样本实际收到,可以用来确定接近实时接收方正在运行。延迟值1和失去的样本值0表示系统实时运行。延迟值大于1表明,接收机无法实时处理样品。延迟报道的帧的数量。它可以在1和128之间。如果延迟大于128,那么样品丢失。

%从命令行应用程序请求用户输入参数userInput = helperFRSReceiverUserInput;%计算FRS接收机参数根据用户输入[frsRxParams, sigSrc] = helperFRSReceiverConfig (userInput);%创建频道选择器组件dcBlocker = dsp.DCBlocker (“算法”,“减的意思”);agc = comm.AGC;channelFilter = frsRxParams.ChannelFilter;%创建调频解调器fmDemod = comm.FMDemodulator (“SampleRate”frsRxParams.FrontEndSampleRate,“FrequencyDeviation”,frsRxParams.FrequencyDeviation);%创建亚音频和音频输出组件杀害多人者= dsp.FIRDecimator (frsRxParams.DecimationFactor,frsRxParams.DecimationNumerator);解码器= helperFRSCTCSSDecoder (“MinimumBlockLength”frsRxParams.CTCSSDecodeBlockLength,“SampleRate”,frsRxParams.AudioSampleRate);audioFilter = frsRxParams.AudioFilter;audioPlayer = audioDeviceWriter (frsRxParams.AudioSampleRate);%初始化广播时间radioTime = 0;%主循环radioTime < userInput.Duration%接收基带样本(信号源)如果frsRxParams。isSourceRadio (rcv ~,丢失了,迟了)= sigSrc ();其他的rcv = sigSrc ();失去了= 0;晚= 1;结束%频道选择器rcv = dcBlocker (rcv);outAGC = agc (rcv);outChanFilt = channelFilter (outAGC);rxAmp =意味着(abs (outChanFilt));如果rxAmp > frsRxParams。DetectionThreshold x = outChanFilt;其他的复杂(单(x = 0 (frsRxParams。FrontEndSamplesPerFrame, 1)));结束%调频解调器y = fmDemod (x);% CTCSS解码器和音频输出outRC =杀害多人者(y);rcvdCode =解码器(outRC);如果(rcvdCode = = frsRxParams.CTCSSCode) | | (frsRxParams。CTCSSCode = = 0) rcvdSig = outRC;其他的rcvdSig =单(0 (frsRxParams。AudioFrameLength, 1));结束audioSig = audioFilter (rcvdSig);audioPlayer (audioSig);%更新广播时间。如果有了样品,添加。radioTime = radioTime + frsRxParams。FrontEndFrameTime +双(失去)/ frsRxParams.FrontEndSampleRate;结束%释放资源发行版(fmDemod)发布(audioPlayer)发布(sigSrc)

进一步的探索

CTCSS解码计算DFT(离散傅里叶变换)的输入信号使用Goertzel写到音调频率算法和计算能力。因为音调频率非常接近对方(相距3 - 4赫兹)DFT的块长度应足以提供足够的分辨率进行频率分析。然而,长块长度导致解码延迟。例如,一个块长度16384会造成2秒的延迟,因为亚音频解码器操作在一个8 kHz的采样率。这将创建一个检测性能和处理延迟之间的权衡。最优块长度可能取决于质量的发射机和接收机、发射机和接收机之间的距离,和其他因素。你鼓励改变块长度在初始化函数中通过导航到helperFRSReceiverConfig功能和改变CTCSSDecodeBlockLength字段的值。这将使您能够遵守权衡,找到你的发射机/接收机对最优值。

你可以探索以下函数和系统对象的细节物理层实现:

引用