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.

Correct for Symbol Timing and Doppler Offsets

Recover from symbol timing and frequency offset errors by using the comm.CarrierSynchronizer and comm.SymbolSynchronizer System objects™.

Create System Objects

Create a QAM modulator and an AWGN channel object.

mod = comm.RectangularQAMModulator('NormalizationMethod','Average power');
ch = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (SNR)', ...
    'SNR',20);

Create a matched pair of raised cosine filter objects.

txFilt = comm.RaisedCosineTransmitFilter('FilterSpanInSymbols',10, ...
    'OutputSamplesPerSymbol',8);
rxFilt = comm.RaisedCosineReceiveFilter('FilterSpanInSymbols',10, ...
    'InputSamplesPerSymbol',8,'DecimationFactor',4);

Create a PhaseFrequencyOffset object to introduce a 100 Hz Doppler shift.

doppler = comm.PhaseFrequencyOffset('FrequencyOffset',100, ...
    'PhaseOffset',45,'SampleRate',1e6);

Create a variable delay object to introduce timing offsets.

delay = dsp.VariableFractionalDelay;

Create carrier and symbol synchronizer objects to correct for a Doppler shift and a timing offset, respectively.

carsync = comm.CarrierSynchronizer('SamplesPerSymbol',2);
symsync = comm.SymbolSynchronizer(...
    'TimingErrorDetector','Early-Late (non-data-aided)', ...
    'SamplesPerSymbol',2);

Create constellation diagram objects to view results.

cd1 = comm.ConstellationDiagram('ReferenceConstellation',constellation(mod), ...
    'SamplesPerSymbol',8,'Title','Received Signal');

cd2 = comm.ConstellationDiagram('ReferenceConstellation',constellation(mod), ...
    'SamplesPerSymbol',2,'Title','Frequency Corrected Signal');

cd3 = comm.ConstellationDiagram('ReferenceConstellation',constellation(mod), ...
    'SamplesPerSymbol',2,'Title','Frequency and Timing Synchronized Signal');

Main Processing Loop

Perform the following operations:

  • Generate random symbols and apply QAM modulation.

  • Filter the modulated signal.

  • Apply frequency and timing offsets.

  • Pass the transmitted signal through an AWGN channel.

  • Correct for the Doppler shift.

  • Filter the received signal.

  • Correct for the timing offset.

for k = 1:15
    data = randi([0 15],2000,1);
    modSig = step(mod,data);                  % QAM modulate
    txSig = step(txFilt,modSig);              % Transmit filter

    txDoppler = step(doppler,txSig);          % Apply Doppler shift
    txDelay = step(delay,txDoppler,k/15);     % Apply variable delay

    rxSig = step(ch,txDelay);                 % Add white Gaussian noise

    rxFiltSig = step(rxFilt,rxSig);           % Receive filter
    rxCorr = step(carsync,rxFiltSig);         % Correct for Doppler
    rxData = step(symsync,rxCorr);            % Correct for timing error
end

Visualization

Plot the constellation diagrams of the received signal, the frequency corrected signal, and the frequency and timing synchronized signal. While specific constellation points cannot be indentified in the received signal and only partially identified in the frquency corrected signal, the timing and frequency synchronized signal aligns with the expected QAM constellation points.

step(cd1,rxSig)

step(cd2,rxCorr)

step(cd3,rxData)

See Also

|

Was this topic helpful?