FM 방송 수신기
이 예제에서는 FM 모노 또는 스테레오 수신기를 구축하는 방법을 보여줍니다. 파일의 기록된 데이터를 사용하거나 RTL-SDR 라디오, ADALM-PLUTO 라디오 또는 USRP™ 라디오를 사용하여 실시간으로 신호를 수신할 수 있습니다.
필요한 하드웨어와 소프트웨어
기본적으로 이 예제는 파일에서 기록된 데이터를 사용하여 실행됩니다. 사용자가 신호를 무선으로 수신하는 방식을 선택할 수도 있습니다. 이를 위해서는 다음 중 하나가 필요합니다.
RTL-SDR 라디오 및 RTL-SDR 라디오 지원 패키지.
Pluto 라디오 및 ADALM-Pluto 라디오 지원 패키지.
USRP N2xx 또는 B2xx 시리즈 라디오 및 Communications Toolbox Support Package for USRP Radio. 지원되는 라디오에 대한 자세한 내용은 Supported Hardware and Required Software 항목을 참조하십시오.
USRP E3xx, N3xx 또는 X3xx 시리즈 라디오 및 Wireless Testbench Support Package for NI USRP Radios. 지원되는 라디오에 대한 자세한 내용은 Supported Radio Devices (Wireless Testbench) 항목을 참조하십시오.
배경
FM 방송은 주파수 변조(FM)를 사용하여 방송 라디오 채널을 통해 고음질의 소리를 전송합니다. 잡음이 오디오의 고주파수에 미치는 영향을 줄이기 위해 프리엠퍼시스 필터와 디엠퍼시스 필터가 사용됩니다. 스테레오 인코딩을 사용하면 동일한 FM 채널을 통해 왼쪽과 오른쪽 오디오 채널을 동시에 전송할 수 있습니다[ 1 ].
예제 실행하기
예제를 실행하려면 다음 정보를 입력해야 합니다.
수신 지속 시간(단위: 초)
신호 소스(캡처된 데이터, RTL-SDR 라디오, ADALM-PLUTO 라디오 또는 USRP 라디오)
FM 채널 주파수
이 예제에서는 수신된 오디오를 컴퓨터의 스피커를 통해 재생합니다.
참고: 이 예제에서는 디폴트 PlutoSDR 조정 범위를 벗어난 중심 주파수를 활용합니다. ADALM-PLUTO 라디오를 인증된 조정 범위(qualified tuning range) 밖에서 사용하려면 MATLAB® 명령줄에서 'AD9364'를 입력 인수로 사용하여 configurePlutoRadio를 실행하십시오.
수신기 구조
FM Broadcast Demodulator Baseband System object™는 입력 샘플링 레이트 228kHz를 호스트 컴퓨터의 오디오 장치의 샘플링 레이트인 45.6kHz로 변환합니다. 미국의 FM 방송 표준에 따라 디엠퍼시스 저역통과 필터 시정수는 75마이크로초로 설정됩니다. 이 예제에서는 수신된 모노 신호를 처리합니다. 이 복조기는 스테레오 신호도 처리할 수 있습니다.
스테레오 디코딩을 수행하기 위해, FM Broadcast Demodulator Baseband 객체는 피킹 필터를 사용하여 19kHz 파일럿 톤을 선택하며 이로부터 38kHz 반송파가 생성됩니다. 이렇게 생성된 반송파 신호를 사용하여 FM Broadcast Demodulator Baseband 블록은 중심이 38kHz인 L-R 신호를 기저대역으로 낮게 변환합니다. 그 뒤에 L-R 및 L+R 신호가 75마이크로초 디엠퍼시스 필터를 통과합니다. FM Broadcast Demodulator Baseband 블록이 L 신호와 R 신호를 분리하고 이를 45.6kHz 오디오 신호로 변환합니다.
예제 코드
수신기가 사용자 입력을 요청하고 변수를 초기화합니다. 그런 다음 신호 소스와 FM 방송 수신기를 루프 내에서 호출합니다. 루프는 프레임 지속 시간을 사용하여 무선통신 시간을 추적하고 신호 소스를 통해 보고된 손실된 샘플도 추적합니다.
신호 소스의 대기 시간 출력은 샘플이 실제로 수신된 시점을 나타내므로, 수신기가 얼마나 실시간에 가깝게 실행되는지 확인하는 데 사용할 수 있습니다. 대기 시간 값이 1이고 손실된 샘플 값이 0이면 시스템이 실시간으로 실행 중임을 나타냅니다. 대기 시간 값이 1보다 크면 수신기가 샘플을 실시간으로 처리하지 못했음을 나타냅니다. 대기 시간은 프레임 수를 기준으로 보고됩니다. 값은 1과 128 사이일 수 있습니다. 대기 시간이 128보다 크면 샘플이 손실된 것입니다.
%For the option to change default settings, set |cmdlineInput| to 1. cmdlineInput = 0; if cmdlineInput % Request user input from the command-line for application parameters userInput = helperFMUserInput; else load('defaultinputsFM.mat'); end % Calculate FM system parameters based on the user input [fmRxParams,sigSrc] = helperFMConfig(userInput); % Create FM broadcast receiver object and configure based on user input fmBroadcastDemod = comm.FMBroadcastDemodulator(... 'SampleRate', fmRxParams.FrontEndSampleRate, ... 'FrequencyDeviation', fmRxParams.FrequencyDeviation, ... 'FilterTimeConstant', fmRxParams.FilterTimeConstant, ... 'AudioSampleRate', fmRxParams.AudioSampleRate, ... 'Stereo', false); % Create audio player player = audioDeviceWriter('SampleRate',fmRxParams.AudioSampleRate); % Initialize radio time radioTime = 0; % Main loop while radioTime < userInput.Duration % Receive baseband samples (Signal Source) if fmRxParams.isSourceRadio if fmRxParams.isSourcePlutoSDR rcv = sigSrc(); lost = 0; late = 1; elseif fmRxParams.isSourceUsrpRadio rcv= sigSrc(); lost = 0; else [rcv,~,lost,late] = sigSrc(); end else rcv = sigSrc(); lost = 0; late = 1; end % Demodulate FM broadcast signals and play the decoded audio audioSig = fmBroadcastDemod(rcv); player(audioSig); % Update radio time. If there were lost samples, add those too. radioTime = radioTime + fmRxParams.FrontEndFrameTime + ... double(lost)/fmRxParams.FrontEndSampleRate; end % Release the audio and the signal source release(sigSrc) release(fmBroadcastDemod) release(player)
심층 탐구
이 예제를 더 깊이 있게 살펴보려면, RTL-SDR 라디오, ADALM-PLUTO 라디오 또는 USRP 라디오의 중심 주파수를 변경하거나 다른 무선국에서 수신해 보십시오.
FM demodulator 객체의 Stereo 속성을 true로 설정하여, 스테레오 방식으로 신호를 처리하고 음질을 비교할 수 있습니다.
다음 함수에서 시스템 파라미터에 대한 세부 사항을 살펴볼 수 있습니다.
FMReceiverExampleApp 사용자 인터페이스를 사용하여 FM 신호를 더 자세히 살펴볼 수 있습니다. 이 앱을 사용하여 신호 소스를 선택하고 RTL-SDR 라디오, ADALM-PLUTO 라디오 또는 USRP 라디오의 중심 주파수를 변경할 수 있습니다. 이 앱을 실행하려면 MATLAB 명령 창에 FMReceiverExampleApp을 입력하십시오. 이 사용자 인터페이스는 다음 그림에 표시되어 있습니다.
