Main Content

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

Égalisation, convolution et addition de préfixe cyclique

Cet exemple présente l'égalisation dans le domaine fréquentiel et explique comment convertir la convolution circulaire en convolution linéaire. Lorsqu’on considère un modèle de canal linéaire, le signal reçu est la convolution du signal émis avec la réponse en impulsion du canal. Dans le domaine fréquentiel, le signal reçu Y(f) est la convolution linéaire du signal émis U(f) avec la réponse en impulsion du canal H(f) :

Y(f)=H(f)U(f)

Les récepteurs OFDM utilisent l’égalisation dans le domaine fréquentiel pour retrouver le signal original émis, afin que :

U(f)=Y(f)H(f)

Le traitement FFT produit la convolution circulaire de u avec h. Pour que la convolution circulaire de u et h soit équivalente à la convolution linéaire, u et h doivent être comblés avec des zéros d’une longueur d’au moins (length(u) + length(h) - 1) avant de réaliser la transformée de Fourier discrète (DFT, Discreet Fourier Transform). Après avoir inversé le produit des DFTs, retenez uniquement les premiers N + L - 1 éléments. Pour un exemple expliquant ce processus, consultez la rubrique Linear and Circular Convolution.

Définissez un signal d’entrée court, u1, et la réponse en impulsion du canal, h. Le signal d’entrée doit être plus long que la réponse en impulsion du canal. Affichez un diagramme à tiges des signaux.

u1 = 1:8; 
h = [0.4 1 0.4];

figure
subplot(2,1,1)
stem(u1);
axis([0 10 0 10])
title("Input signal")
subplot(2,1,2)
stem(h);
axis([0 10 0 2])
title("Channel impulse response")

Figure contains 2 axes objects. Axes object 1 with title Input signal contains an object of type stem. Axes object 2 with title Channel impulse response contains an object of type stem.

Comparez la convolution circulaire et linéaire de u1 avec h. Réalisez les convolutions linéaire et circulaire en utilisant respectivement les fonctions conv et cconv. Les effets de smearing dus au canal non idéal produisent en certains points des différences de résultats pour les convolutions linéaire et circulaire. Un préfixe cyclique (CP) permet un usage efficace de l’OFDM dans un canal non idéal avec retard de propagation inconnu.

N = length(u1);
yl1 = conv(u1,h);
yc1 = cconv(u1,h,N);
figure;
stem(yl1,"x")
hold on;
stem(yc1,"o")
title(["Convolution Results - N=",int2str(N)])
legend ("Linear","Circular","Location","northwest")

Figure contains an axes object. The axes object with title Convolution Results - N= 8 contains 2 objects of type stem. These objects represent Linear, Circular.

Ajouter le préfixe cyclique (CP)

Pour le traitement OFDM, le remplissage nécessaire pour la convolution circulaire est assuré par l’ajout d’un CP aux signaux plutôt que l'ajout de zéros. L’ajout d’un CP qui répète les échantillons finaux du symbole permet :

  • La modélisation de la convolution linéaire d’un canal à trajets multiples sélectif en fréquence en tant que convolution circulaire

  • L’utilisation d'un FFT pour calculer la convolution

  • Un traitement simple dans le domaine fréquentiel pour l’estimation, l’égalisation et la synchronisation du canal

  • L’utilisation d’échantillons répétés pour les schémas de correction d’erreur sans voie de retour

L = length(h);      % Length of channel
N = length(u1);     % Length of input signal
ucp = u1(N-L+1:N);  % Use last samples of input signal as the CP
u2 = [ucp u1];      % Prepend the CP to the input signal
yl2 = conv(u2,h);   % Convolution of input+CP and channel
yl2 = yl2(L+1:end); % Remove CP to compare signals

figure;
stem(yc1,"x")
hold on;
stem(yl2,"o")
title("Convolution Results with Cyclic Prefix")
legend ("Linear","Circular","Location","northwest")

Figure contains an axes object. The axes object with title Convolution Results with Cyclic Prefix contains 2 objects of type stem. These objects represent Linear, Circular.

Comparez les séquences de convolution linéaire et circulaire.

if max(yc1 - yl2(1:N)) < 1e-8
    disp("Linear and circular convolution sequences match.")
else
    disp("Received symbols do not match transmitted symbols.")
end
Linear and circular convolution sequences match.

Voir aussi

Fonctions

Sujets associés

Sites web externes