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.