Main Content

信号のスペクトル解析

この例では、MATLAB®、Communications Toolbox™、および DSP System Toolbox™ を使用した信号のダウンストリーム スペクトル解析を示します。取得した信号を使用することも、RTL-SDR 無線機、ADALM-PLUTO 無線機、または USRP™ 無線機を使用してリアルタイムに信号を受信することもできます。ラジオの中心周波数を変更して、信号が存在する帯域にラジオを同調できます。その後、スペクトル アナライザーを使用して、受信したスペクトルを表示および測定できます。

この例の Simulink® 実装については、Simulink での信号のスペクトル解析を参照してください。

必要なソフトウェアとハードウェア

取得した信号を使用してこの例を実行するには、次のソフトウェアが必要です。

Communications Toolbox

DSP System Toolbox

信号をリアルタイムに受信するには、次のいずれかのハードウェアも必要になります。

Communications Toolbox でサポートされる SDR プラットフォームのすべてのリストについては、ソフトウェア無線 (SDR) のソフトウェア無線のための MATLAB & 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, ...
    'SpectralAverages', 50, ...
    '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);

まとめ

この例では、Communications Toolbox™ の System object を使用して、受信信号のスペクトルを解析しました。