주요 콘텐츠

신호의 스펙트럼 분석

이 예제에서는 신호의 스펙트럼 분석을 시작하는 방법을 보여줍니다. 파일의 기록된 데이터를 사용하거나 RTL-SDR 라디오, ADALM-PLUTO 라디오 또는 USRP™ 라디오를 사용하여 실시간으로 신호를 수신할 수 있습니다. 라디오의 중심 주파수를 변경하여, 신호가 있는 대역에 라디오를 맞출 수 있습니다. 그런 다음 스펙트럼 분석기를 사용하여 수신된 스펙트럼을 보고 측정할 수 있습니다.

이 예제에 대한 Simulink® 구현은 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를 사용하여 수신된 신호의 스펙트럼을 분석했습니다.

참고 항목

도움말 항목