Documentation

This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

comm.FMBroadcastDemodulator System object

Demodulate broadcast FM signal

Description

The comm.FMBroadcastDemodulator System object™ demodulates a complex baseband FM signal and filters the signal with a de-emphasis filter to produce an audio signal. If the Stereo property is set to true, the object performs stereo decoding. If the RBDS property is set to true, the object also demodulates the RBDS waveform. For more details, see Algorithms.

To demodulate a complex baseband FM signal:

  1. Define and set up the comm.FMBroadcastDemodulator object. See Construction.

  2. Call step to demodulate the complex baseband FM signal according to the properties of comm.FMBroadcastDemodulator.

Note

Starting in R2016b, instead of using the step method to perform the operation defined by the System object™, you can call the object with arguments, as if it were a function. For example, y = step(obj,x) and y = obj(x) perform equivalent operations.

Construction

fmbDemod = comm.FMBroadcastDemodulator creates a demodulator System object, fmbDemod, that frequency demodulates an input signal.

fmbDemod = comm.FMBroadcastDemodulator(Name,Value) creates an FM demodulator object, fmbDemod, with each specified property Name set to the specified Value. You can specify additional name-value pair arguments in any order as (Name1,Value1,...,NameN,ValueN).

fmbDemod = comm.FMBroadcastDemodulator(MOD) creates an FM demodulator object, fmbDemod, whose properties are determined by the corresponding FM modulator object, MOD.

Properties

SampleRate

Input signal sample rate (Hz)

Specify the sample rate of the input signal in Hz as a positive real scalar. The default value is 240e3. This property is nontunable.

FrequencyDeviation

Peak deviation of the output signal frequency (Hz)

Specify the frequency deviation of the FM demodulator in Hz as a positive real scalar. The default value is 75e3. System bandwidth is equal to twice the sum of the frequency deviation and the message bandwidth. FM broadcast standards specify a value of 75 kHz in the United States and 50 kHz in Europe. This property is nontunable.

FilterTimeConstant

Time constant of the de-emphasis filter (s)

Specify the de-emphasis lowpass filter time constant as a positive real scalar. The default value is 7.5e-05. FM broadcast standards specify a value of 75 μs in the United States and 50 μs in Europe. This property is nontunable.

AudioSampleRate

Audio sample rate of the output signal (Hz)

Specify the output audio sample rate as a positive real scalar. The default value is 48000. This property is nontunable.

PlaySound

Flag to enable or disable audio playback

To playback the output signal on the default audio device, set this property to true. The default is false. This property is nontunable.

BufferSize

Buffer size of the audio device

Specify the size of the buffer (in samples) that the object uses to communicate with an audio device as a positive scalar integer. The default is 4096. This property is available only when PlaySound is true. This property is nontunable.

Stereo

Flag to enable or disable stereo audio

Set this property to true to demodulate a stereophonic audio signal. Set to false if the input signal is monophonic. The default is false. This property is nontunable.

RBDS

Flag to demodulate RBDS waveform

If RBDS is set to true, the second output of the step method is the baseband RBDS waveform. The default value is false. This property is nontunable.

RBDSSamplesPerSymbol

Oversampling factor of RBDS output

Specify the number of samples of the RBDS output as a positive integer. The RBDS sample rate is given by RBDSSamplesPerSymbol × 1187.5 Hz. According to the RBDS standard, the sample rate of each bit is 1187.5 Hz.

This property applies only when you set RBDS to true.

The default is 10.

RBDSCostasLoop

Option to recover phase of RBDS signal

Specify whether a Costas loop is used to recover the phase of the RBDS signal. Set this option to true for radio stations that do not lock the 57 kHz RBDS signal in phase with the third harmonic of the 19 kHz pilot tone.

This property applies only when you set RBDS to true.

The default value is false.

Methods

infoFilter information about FM broadcast demodulator
resetReset states of the FM broadcast demodulator object
stepApply FM broadcast demodulation
Common to All System Objects
clone

Create System object with same property values

getNumInputs

Expected number of inputs to a System object

getNumOutputs

Expected number of outputs of a System object

isLocked

Check locked states of a System object (logical)

release

Allow System object property value changes

Examples

expand all

Modulate and demodulate an audio signal with the FM broadcast modulator and demodulator objects. Plot the frequency responses of the input and demodulated signals.

Create an audio file reader System object™ and read the file guitartune.wav. Set the SamplesPerFrame property to include the entire file.

audio = dsp.AudioFileReader('guitartune.wav','SamplesPerFrame',44100);
x = audio();

Create spectrum analyzer objects to plot the spectra of the modulated and demodulated signals.

SAaudio = dsp.SpectrumAnalyzer('SampleRate',44100,'ShowLegend',true, ...
    'Title','Audio Signal', ...
    'ChannelNames',{'Input Signal' 'Demodulated Signal'});
SAfm = dsp.SpectrumAnalyzer('SampleRate',152e3, ...
    'Title','FM Broadcast Signal');

Create FM broadcast modulator and demodulator objects. Set the AudioSampleRate property to match the sample rate of the input signal. Set the SampleRate property of the demodulator to match the specified sample rate of the modulator.

fmbMod = comm.FMBroadcastModulator('AudioSampleRate',audio.SampleRate, ...
    'SampleRate',200e3);
fmbDemod = comm.FMBroadcastDemodulator( ...
    'AudioSampleRate',audio.SampleRate,'SampleRate',200e3);

Use the info method to determine the audio decimation factor of the filter in the modulator object. The length of the sequence input to the object must be an integer multiple of the object's decimation factor.

info(fmbMod)
ans = 

  struct with fields:

       AudioDecimationFactor: 441
    AudioInterpolationFactor: 2000
        RBDSDecimationFactor: 19
     RBDSInterpolationFactor: 320

Use the info method to determine the audio decimation factor of the filter in the demodulator object.

info(fmbDemod)
ans = 

  struct with fields:

       AudioDecimationFactor: 50
    AudioInterpolationFactor: 57
        RBDSDecimationFactor: 50
     RBDSInterpolationFactor: 57

The audio decimation factor of the modulator is a multiple of the audio frame length of 44100. The audio decimation factor of the demodulator is an integer multiple of the 200000 samples data sequence length of the modulator output.

Modulate the audio signal and plot its spectrum.

y = fmbMod(x);
SAfm(y)

Demodulate y and plot the resultant spectrum. Compare the input signal spectrum with the demodulated signal spectrum. The spectra are similar except that demodulated signal has smaller high frequency components.

z = fmbDemod(y);
SAaudio([x z])

Modulate and demodulate a streaming audio signal with the FM broadcast modulator and demodulator objects. Play the audio signal using a default audio device.

Note: This example runs only in R2016b or later. If you are using an earlier release, replace each call to the function with the equivalent step syntax. For example, myObject(x) becomes step(myObject,x).

Create an audio file reader System object™ and read the file guitartune.wav.

audio = dsp.AudioFileReader('guitartune.wav','SamplesPerFrame',4410);

Create FM broadcast modulator and demodulator objects. Set the AudioSampleRate property to match the sample rate of the input signal. Set the SampleRate property of the demodulator to match the specified sample rate of the modulator. Set the PlaySound property of the demodulator to true to enable audio playback.

fmbMod = comm.FMBroadcastModulator('AudioSampleRate',audio.SampleRate, ...
    'SampleRate',240e3);
fmbDemod = comm.FMBroadcastDemodulator( ...
    'AudioSampleRate',audio.SampleRate, ...
    'SampleRate',240e3,'PlaySound',true);

Read the audio data in frames of length 4410, apply FM broadcast modulation, demodulate the FM signal and playback the audio input.

while ~isDone(audio)
    audioData = audio();
    modData = fmbMod(audioData);
    demodData = fmbDemod(modData);
end

Generate a basic RBDS waveform, FM modulate it with an audio signal, and then demodulate it.

Note: This example runs only in R2017a or later.

Create a RBDS waveform with 19 groups per frame and 10 samples per symbol. The sample rate of the RBDS waveform is given by 1187.5 x 10. Set the audio sample rate to 1187.5 x 40.

groupLen = 104;
sps = 10;
groupsPerFrame = 19;
rbdsFrameLen = groupLen*sps*groupsPerFrame;
afrRate = 40*1187.5;
rbdsRate = 1187.5*sps;
outRate = 4*57000;

afr = dsp.AudioFileReader('rbds_capture_47500.wav','SamplesPerFrame',rbdsFrameLen*afrRate/rbdsRate);
rbds = comm.RBDSWaveformGenerator('GroupsPerFrame',groupsPerFrame,'SamplesPerSymbol',sps);

fmMod = comm.FMBroadcastModulator('AudioSampleRate',afr.SampleRate,'SampleRate',outRate,...
    'Stereo',true,'RBDS',true,'RBDSSamplesPerSymbol',sps);
fmDemod = comm.FMBroadcastDemodulator('SampleRate',outRate,...
    'Stereo',true,'RBDS',true,'PlaySound',true);
scope = dsp.TimeScope('SampleRate',outRate,'YLimits',10^-2*[-1 1]);

Get the current audio input. Generate RBDS information at the same configured rate as audio. FM modulate the stereo audio with RBDS information. Add additive white Gaussian noise. FM demodulate the audio and RBDS waveforms. View the waveforms in a time scope.

for idx = 1:7
    input = afr();
    rbdsWave = rbds();
    yFM = fmMod([input input], rbdsWave);
    rcv = awgn(yFM, 40);
    [audioRcv, rbdsRcv] = fmDemod(rcv);
    scope(rbdsRcv);
end

Algorithms

The FM Broadcast demodulator includes the functionality of the baseband FM demodulator, de-emphasis filtering, and the ability to receive stereophonic signals. The algorithms which govern basic FM modulation and demodulation are covered in comm.FMDemodulator.

Filtering

FM amplifies high-frequency noise and degrades the overall signal-to-noise ratio. To compensate, FM broadcasters insert a pre-emphasis filter prior to FM modulation to amplify the high-frequency content. The FM receiver has a reciprocal de-emphasis filter after the FM demodulator to attenuate high-frequency noise and restore a flat signal spectrum.

The pre-emphasis filter has a highpass characteristic transfer function given by

Hp(f)=1+j2πfτs,

where τs is the filter time constant. The time constant is 50 μs in Europe and 75 μs in the United States. Similarly, the transfer function for the lowpass de-emphasis filter is given by

Hd(f)=11+j2πfτs.

For an audio sample rate of 44.1 kHz, the de-emphasis filter has the following response.

Stereo and RBDS FM — Multiplex Signal

The FM broadcast demodulator supports stereophonic and monophonic operations. To support stereo transmission, the left (L) and right (R) channel information (L+R) is assigned to the mono portion of the spectrum (0 to 15 kHz). The (L-R) information is amplitude modulated onto the 23 to 53 kHz region of the baseband spectrum using a 38 kHz subcarrier signal. A pilot tone at 19 kHz in the multiplexed signal enables the FM receiver to coherently demodulate the stereo and RBDS signals.

Here is the spectrum of the multiplex baseband signal, m(t).

m(t) is given by

m(t)=C0[L(t)+R(t)]+C1cos(2π×19kHz×t)+C0[L(t)R(t)]cos(2π×38kHz×t)+C2RBDS(t)cos(2π×57kHz×t),

where C0, C1, and C2 are gains. To generate the appropriate modulation level, these gains scale the amplitudes of the (L(t)±R(t)) signals, the 19 kHz pilot tone, and the RBDS subcarrier, respectively.

The demodulator applies m(t) to three bandpass filters with center frequencies at 19, 38, and 57 kHz, and to a lowpass filter with a 3-dB cutoff frequency of 15 kHz. The 19 kHz bandpass filter extracts the pilot tone from the modulated signal. The recovered pilot tone is doubled and tripled in frequency to produce the 38 kHz and 57 kHz signals, which demodulate the (LR) and RBDS signals, respectively. To generate a scaled version of the left and right channels that produce the stereo sound, the (L + R) and (LR) signals are added and subtracted. The RBDS signal is recovered by mixing with the 57 kHz signal.

Here is the block diagram of the FM broadcast demodulator.

Limitations

The input length must be an integer multiple of the AudioDecimationFactor property. If RBDS is set to true, the input length in addition must be an integer multiple of RBDSDecimationFactor. For more information on these two properties, see the info method.

References

[1] Chakrabarti, I. H., and Hatai, I. “A New High-Performance Digital FM Modulator and Demodulator for Software-Defined Radio and Its FPGA Implementation.” International Journal of Reconfigurable Computing. Vol. 2011, No. 10.1155/2011, 2011, p. 10.

[2] Taub, Herbert, and Donald L. Schilling. Principles of Communication Systems. New York: McGraw-Hill, 1971, pp. 142–155.

[3] Der, Lawrence. “Frequency Modulation (FM) Tutorial”. FM Tutorial. Silicon Laboratories Inc., pp. 4–8.

Extended Capabilities

Introduced in R2015a

Was this topic helpful?