Main Content

OFDM und Ausgleich mit vorangestelltem zyklischen Präfix

In diesem Beispiel wird den OFDM-modulierten 16-QAM-Daten ein zyklisches Präfix vorangestellt. Damit es beim Ausgleich wirksam ist, muss die Länge des zyklischen Präfixes (Cyclic Prefix, CP) größer oder gleich der Kanallänge sein.

Definieren Sie die Variablen für die QAM- und OFDM-Verarbeitung. Generieren Sie Symbole, führen Sie die QAM-Modulation und die OFDM-Modulation durch und fügen Sie dann ein CP zum Signal hinzu. Es können auch mehrere OFDM-Symbole gleichzeitig verarbeitet und dann serialisiert werden.

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];

Filtern Sie die Übertragung durch einen Kanal, der Rauschen, Frequenzabhängigkeit und eine Verzögerung zum empfangenen Signal hinzufügt.

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

Fügen Sie einen Zufallsversatz hinzu, der kleiner als die CP-Länge ist. Ein auf Null festgelegter Versatz modelliert die perfekte Synchronisation zwischen dem übertragenen und dem empfangenen Signal. Ein zeitlicher Versatz, der kleiner als die CP-Länge ist, kann durch Ausgleich über eine zusätzliche lineare Phase kompensiert werden.

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);

In praktischen Systemen muss der Kanal als Teil des Signalwiederherstellungsprozesses geschätzt werden. Die Kombination aus OFDM und einem CP vereinfacht den Ausgleich eines komplexen Skalars für jeden Frequenzbereich. Solange die Latenzzeit innerhalb der Länge des CP liegt, wird die Synchronisation durch den Kanalschätzer erreicht. Hier können Sie mit einem Steuerelement experimentieren, indem Sie den Ausgleich am Front-End des Empfängers deaktivieren. Vergleichen Sie das übertragene Signal mit der Ausgabe des Empfängers.

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.

Siehe auch

Funktionen

Verwandte Themen

Externe Websites