Spikes in FM Broadcast PSD

2 visualizzazioni (ultimi 30 giorni)
Trey Shenk
Trey Shenk il 10 Gen 2023
Risposto: Paras Gupta il 31 Ago 2023
I'm currently running the examples for FM broadcast given in https://www.mathworks.com/help/releases/R2022b/comm/ref/comm.fmbroadcastmodulator-system-object.html. There are a few modifications so that I can store the entire modulated signal. My question is does the PSD from the Stereo FM + RBDS signal look correct? The PSD for mono FM looks fine, but Stereo FM + RBDS has prominent spikes at multiples of the stereo pilot frequency (19kHz). Should the stereo pilot be that pronounced?
%% Demo of audio only FM
audio_data = audioread('guitartune.wav');
audio_fs = 44.1e3; %sampling rate of audio
fs = 4*57000; % modulated output sampling rate
fmbMod = comm.FMBroadcastModulator( ...
'AudioSampleRate',audio_fs, ...
'SampleRate',fs);
% truncate audio_data length for demo
audio_data = audio_data(1:661100);
% get the decimation factor
mod_info = fmbMod.info;
dec_factor = mod_info.AudioDecimationFactor;
% zero-pad if needed
zpad_num = dec_factor - mod(length(audio_data), dec_factor);
audio_data = padarray(audio_data, zpad_num, 'post');
sig = fmbMod(audio_data);
figure;
pwelch(sig, blackmanharris(2^12), [], [], fs, 'center')
%% Demo of Stereo+RBDS FM
%
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);
yFM = [];
for idx = 1:7
input = afr();
rbdsWave = rbds();
yFM = [yFM; fmMod([input input],rbdsWave)];
% rcv = awgn(yFM,40);
% [audioRcv, rbdsRcv] = fmDemod(rcv);
% scope(rbdsRcv);
end
hold on
pwelch(yFM, blackmanharris(2^12), [], [], outRate, 'center')
legend({'Audio Only', 'Stereo+RBDS'})

Risposte (1)

Paras Gupta
Paras Gupta il 31 Ago 2023
Greetings,
The prominent spikes at multiples of the stereo pilot frequency (19kHz) in the PSD of the Stereo FM + RBDS signal are expected. The stereo pilot signal is used to carry information about the stereo audio channels. It is a tone at 19kHz that is added to the baseband signal. The spikes you see in the PSD correspond to the harmonics of the stereo pilot frequency.
In the case of mono FM, the PSD should not have prominent spikes at multiples of the stereo pilot frequency because mono FM signals do not contain stereo information or a stereo pilot tone.
In FM stereo broadcasting, the stereo pilot is intentionally made prominent so that stereo receivers can easily detect and decode the stereo information. These spikes indicate the presence of the stereo pilot and are part of the expected behaviour of the stereo FM signal.
Hope this helps.

Categorie

Scopri di più su Earth and Planetary Science in Help Center e File Exchange

Prodotti


Release

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by