主要内容

接收器的频偏校正

这个例子展示了如何使用MATLAB®和Communications Toolbox™在接收机上测量和校准发射机和接收机之间的频率偏移。您可以使用捕获的信号或实时接收信号RTL-SDR无线电通信工具箱支持包金宝app.接收机监测接收到的信号,计算发射机和接收机之间的频偏,并在MATLAB®命令窗口中显示。

所需硬件和软件

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

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

  • RTL-SDR广播

以及以下软件

的“通信工具箱”支持的SDR平台的完整列表,请参阅“受支持的硬件”部分金宝app软件定义无线电(SDR)发现页面

如果您选择使用无线电实时接收信号,则需要调到已知的广播导频音调或提供具有已知中心频率的信号源来建立基线。如果你没有可用的信号发生器,你可以使用低成本的家庭无线电服务对讲机作为信号源。注意,信号源必须是窄带的,正弦波是一个理想的信号源。

背景

与发射机相比,所有无线电接收机都有频率偏移。在某些情况下,频率偏移可能超过接收机算法可以处理的范围。因此,您可能需要校准您的接收机,以尽量减少频率偏移。

示例中通信链路信息如下:

  • 频率偏移的定量值,单位为Hz和PPM

  • 接收信号的定性信噪比水平的图形化视图

如果你有一个发射机,你可以用它来产生窄带信号,比如音调。

如果你没有发射机,你可以使用广播信号。例如,在美国,ATSC数字电视信号包括射频载波上的窄带导频音。导频音通常在通道底部边缘以上的309.440 kHz的标称频率上。如果您所在区域有这样的信号,您可以将期望的中心频率值设置为音调的频率。本例使用通道29的导频音,约为560e6 + 309.440e3 Hz。有关通道号和频率值的列表,请参见北美电视频率

如果您使用RTL-SDR无线电作为接收机,请将显示的PPM校正值指定为RTL-SDR接收机系统对象™的FrequencyCorrection属性,以补偿频率偏移。请务必在规格书中使用偏移量的符号。完成此操作后,接收器的频谱分析仪系统对象显示的频谱应该在大约0 Hz处具有最大振幅。

运行示例

开始用你已知的信号源发射。如果你在美国,你可以将预期的中心频率设置为附近数字电视发射机的导频。然后,类型FrequencyOffsetCalibrationForReceiversExample在MATLAB命令窗口或单击“打开示例”按钮打开并运行示例。

该示例显示频率范围为-200 kHz到200 kHz的接收信号的频谱,并在命令窗口中打印以Hz和PPM为单位的估计频率偏移。在下图所示的情况下,最大接收信号功率的频率约为-35 kHz。

示例代码

接收端请求用户输入并初始化变量。然后循环调用信号源、直流屏蔽器、粗音频偏估计器和频谱分析仪。循环还使用帧持续时间跟踪无线电时间。

从命令行请求用户输入应用程序参数userInput = helperFrequencyCalibrationUserInput;根据用户输入计算系统参数[fcParam,sigSrc] = helperFrequencyCalibrationConfig(userInput);创建一个DC阻塞器系统对象,以删除的DC组件提高频偏估计的精度。dcBlocker = dsp。DCBlocker (“算法”“减的意思”);创建一个粗略的频偏估计系统对象来计算%偏移量。系统对象对其输入信号和执行FFT%表示最大功率的频率。这个量就是频率%抵消。coarsefrequencycompensator (...“FrequencyResolution”25岁的...“SampleRate”, fcParam.FrontEndSampleRate);创建一个频谱分析仪范围以可视化信号频谱Scope = dsp。简介(...“名字”“实际频率偏移”...“标题”“实际频率偏移”...“SpectrumType”“权力”...“FrequencySpan”“全部”...“SampleRate”, fcParam。FrontEndSampleRate,...“YLimits”[10] -40年,...“SpectralAverages”, 50岁,...“FrequencySpan”“启动和停止频率”...“StartFrequency”-200年e3,...“StopFrequency”200年e3,...“位置”, figposition([50 30 30 40]));

流处理

msgLength = 0;radioTime = 0;secondCounter = 1;radioTime < userInput。Duration rxSig = sigSrc();rxSig = dcBlocker(rxSig);[~, offset] = CFO(rxSig);freqCorrection = (-offset / fcParam.ExpectedFrequency) * fcParam.FrontEndSampleRate;可视化光谱并打印结果范围(rxSig);如果fprintf(repmat(“\ b”, 1, msgLength));MSG = sprintf(['频率偏移= %f Hz,\n'...'频率校正值(Hz) = %f \n'...'频率校正值(PPM) = %f \n'],...offset, -offset, freqCorrection);流(味精);msgLength =数字(msg);secondCounter = secondCounter + 1;结束%更新无线电时间radioTime = radioTime + fcParam.FrameDuration;结束释放所有系统对象释放(sigSrc);释放(dcBlocker);释放(首席财务官);

结论

在本例中,您使用Communications Toolbox™System对象构建了一个接收器,该接收器计算发射器和接收器之间的相对频率偏移。