Main Content

La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.

Égalisation et OFDM avec préfixe cyclique ajouté au début

Cet exemple ajoute un préfixe cyclique au début des données modulées OFDM 16-QAM. Pour être efficace lors de l’égalisation, la longueur du préfixe cyclique (CP) doit être égale ou excéder la longueur du canal.

Définissez les variables pour les traitements OFDM et QAM. Générez les symboles, modulez en QAM, modulez en OFDM, puis ajoutez le CP au signal. Plusieurs symboles OFDM peuvent être traités en simultané, puis mis en séries.

bps = 4;    % Number of bits per symbol 
M = 2^bps;  % Modulation order
nFFT = 128; % Number of FFT bins
nCP = 8;    % CP length

txsymbols = randi([0 M-1],nFFT,1);
txgrid = qammod(txsymbols,M,UnitAveragePower=true);
txout = ifft(txgrid,nFFT);
% To process multiple symbols, vectorize the txout matrix
txout = txout(:);
txcp = txout(nFFT-nCP+1:nFFT);
txout = [txcp; txout];

Filtrez l’émission à travers un canal qui ajoute du bruit, de la dépendance en fréquence et un retard au signal reçu.

hchan = [0.4 1 0.4].';
rxin = awgn(txout,40);       % Add noise   
rxin = conv(rxin,hchan);     % Add frequency dependency
channelDelay = dsp.Delay(1); % Could use fractional delay
rxin = channelDelay(rxin);   % Add delay

Ajoutez un retard aléatoire inférieur à la longueur du CP. Un paramètre de décalage de zéro modélise une synchronisation parfaite entre les signaux émis et reçus. Tout décalage de temps inférieur à la longueur du CP peut être compensé par l’égalisation via une phase linéaire additionnelle.

offset = randi(nCP) - 1; % random offset less than length of CP
% Remove CP and synchronize the received signal
rxsync = rxin(nCP+1+channelDelay.Length-offset:end);
rxgrid = fft(rxsync(1:nFFT),nFFT);

Les systèmes pratiques requièrent une estimation du canal dans le processus de récupération du signal. L’association d’un CP et de l’OFDM simplifie l’égalisation en un scalaire complexe pour chaque segment de fréquences. Tant que la latence tombe dans le champ de la longueur du CP, la synchronisation s’accomplit par l’estimateur du canal. Un contrôle permet ici de tester en désactivant l’égalisation sur le dispositif frontal du récepteur. Comparez le signal émis et la sortie du récepteur.

useEqualizer = true;
if useEqualizer
    hfchan = fft(hchan,nFFT);
    % Linear phase term related to timing offset
    offsetf = exp(-1i * 2*pi*offset * (0:nFFT-1).'/nFFT);
    rxgrideq = rxgrid ./ (hfchan .* offsetf);
else % Without equalization errors occur
    rxgrideq = rxgrid;
end
rxsymbols = qamdemod(rxgrideq,M,UnitAveragePower=true);
if max(txsymbols - rxsymbols) < 1e-8
    disp("Receiver output matches transmitter input.");
else
    disp("Received symbols do not match transmitted symbols.")
end
Receiver output matches transmitter input.

Voir aussi

Fonctions

Sujets associés

Sites web externes