主要内容

信号的频谱分析

此示例说明如何进行信号的频谱分析。您可以使用文件中的记录数据,或使用 RTL-SDR 无线电、ADALM-PLUTO 无线电或 USRP™ 无线电实时接收信号。您可以更改无线电的中心频率以将无线电调节到存在信号的频带。然后您可以使用频谱分析仪查看接收频谱并进行测量。

有关此示例的 Simulink® 实现,请参阅Spectrum Analysis of Signals in Simulink

必需的硬件和软件

默认情况下,此示例使用文件中的记录数据运行。您也可以以空口方式接收信号。为此,您还需要以下项之一:

示例代码

接收器要求提供用户输入并初始化变量。然后,它在循环中调用信号源和 FM 广播接收机。该循环还使用帧持续时间和信号源报告的丢失采样来跟踪无线电时间。

对于更改默认设置的选项,请将 |cmdlineInput| 设置为 1。

cmdlineInput = false;
if cmdlineInput
%     Request user input from the command-line for application parameters
    userInput = helperSpectralAnalysisUserInput;
%     Set initial parameters
    [SAParams, sigSrc] = helperSpectralAnalysisConfig(userInput);
else
%     Set initial parameters
    load defaultInputSpecAnalysis.mat
    [SAParams, sigSrc] = helperSpectralAnalysisConfig;
end

设置

创建 spectrumAnalyzer 对象并根据用户输入进行配置

hSpectrum = spectrumAnalyzer(...
    'Name',             'Passband Spectrum',...
    'Title',            'Passband Spectrum', ...
    'Method',           'Welch', ...
    'SpectrumType',     'Power density', ...
    'FrequencySpan',    'Full', ...
    'SampleRate',       SAParams.FrontEndSampleRate, ...
    'FrequencyOffset',  SAParams.CenterFrequency, ...
    'YLimits',          [-120 10], ...
    'YLabel',           'Magnitude-squared, dB', ...
    'Position',         figposition([50 30 30 40]));

流处理

查看频谱。在频谱分析仪运行时,您可以测量信号的峰值、占用带宽和其他属性。

% Initialize radio time
radioTime = 0;

% Main loop
while radioTime < userInput.Duration
  % Receive baseband samples (Signal Source)
  if SAParams.isSourceRadio
      if SAParams.isSourcePlutoSDR
          rcv = sigSrc();
          lost = 0;
          late = 1;
      elseif SAParams.isSourceUsrpRadio
          rcv= sigSrc();
          lost = 0;
      else
          [rcv,~,lost,late] = sigSrc();
      end
  else
    rcv = sigSrc();
    lost = 0;
    late = 1;
  end
  
    rcv = rcv - mean(rcv);  % Remove DC component.
    step(hSpectrum, rcv);

  % Update radio time. If there were lost samples, add those too.
  radioTime = radioTime + SAParams.FrontEndFrameTime + ...
    double(lost)/SAParams.FrontEndSampleRate;
end

% Release all System objects
release(sigSrc);
release(hSpectrum);

结论

在此示例中,您使用 System object 来分析接收信号的频谱。