Programming lesson
OFDM-Kommunikationssysteme in MATLAB simulieren: Eine Schritt-für-Schritt-Anleitung für ELEC0086
Lerne, wie du OFDM-Systeme in MATLAB modellierst – von der Kanalgenerierung bis zur SER-Analyse. Perfekt für das Lab ELEC0086 Communications Systems Modelling.
Einführung in die OFDM-Simulation mit MATLAB
Orthogonal Frequency Division Multiplexing (OFDM) ist das Rückgrat moderner Kommunikationssysteme wie 5G, WLAN und DVB-T. In diesem Tutorial lernst du, wie du OFDM-Kommunikationssysteme in MATLAB simulierst – genau wie im Lab ELEC0086 Communications Systems Modelling. Wir gehen Schritt für Schritt durch die Erstellung eines Rayleigh-Fading-Kanals, die Generierung von QPSK-Symbolen und die Berechnung der Symbolfehlerrate (SER). Dabei nutzen wir aktuelle Beispiele aus der Welt der Apps und des Gamings, um die Konzepte greifbar zu machen.
Grundlagen: OFDM und Fading-Kanäle
Stell dir vor, du streamst ein Spiel wie Fortnite auf dein Handy – OFDM sorgt dafür, dass die Datenpakete auch bei Hindernissen wie Wänden ankommen. OFDM teilt das Spektrum in viele schmale Unterträger auf, die parallel übertragen werden. Dadurch wird der Kanal in flache Fading-Unterkanäle zerlegt. In frequenzselektiven Kanälen – typisch für städtische Umgebungen – entstehen Mehrwegeausbreitungen, die zu Intersymbolinterferenz (ISI) führen. OFDM eliminiert ISI durch ein zyklisches Präfix.
Schritt 1: Kanalmodellierung – L-Ray Rayleigh-Fading
Der erste Schritt in der Simulation ist die Modellierung des Kanals. Wir erzeugen einen L-Ray Equal-Power Rayleigh Fading Channel. Die Anzahl der Pfade L wird als Poisson-verteilte Zufallsvariable angenommen. Jeder Pfad hat einen komplexen Fading-Koeffizienten mit Rayleigh-verteilter Amplitude und gleichverteilter Phase. Die Verzögerungen sind gleichverteilt zwischen 0 und 2 (willkürliche Einheiten). Wichtig: Die Gesamtleistung des Kanals muss unabhängig von L auf 1 normiert werden, daher setzen wir die erwartete Leistung jedes Pfads auf 1/L.
% MATLAB-Code: Kanalgenerierung
L = poissrnd(5); % Anzahl Pfade
alpha = (randn(1,L) + 1i*randn(1,L))/sqrt(2*L); % Rayleigh-Koeffizienten
tau = 2*rand(1,L); % Verzögerungen
stem(tau, abs(alpha)); % KanalimpulsantwortSchritt 2: QPSK-Symbolgenerierung
Für die Datenübertragung verwenden wir QPSK (Quadrature Phase Shift Keying). Jedes Symbol trägt 2 Bit. In der Praxis – etwa beim Hochladen eines TikTok-Videos – werden Millionen solcher Symbole pro Sekunde gesendet. In MATLAB erzeugen wir N unabhängige QPSK-Symbole:
N = 1024;
s = (2*randi([0,1],1,N)-1 + 1i*(2*randi([0,1],1,N)-1))/sqrt(2);Schritt 3: Kanalmatrix und Eingangs-Ausgangs-Beziehung
Das empfangene Signal y ergibt sich aus der Faltung des gesendeten Signals mit der Kanalimpulsantwort plus Rauschen. Für OFDM nutzen wir die zyklische Faltung, die durch eine zirkulante Kanalmatrix G beschrieben wird. Diese Matrix wird aus der Kanalimpulsantwort aufgebaut. Das Rauschen n ist komplexes Gaußsches Rauschen mit Mittelwert 0 und Varianz σ².
% Kanalmatrix G (zirkulant)
g = zeros(1,N);
g(1:length(alpha)) = alpha; % Impulsantwort auffüllen
G = toeplitz([g(1) fliplr(g(2:end))], g);
n = sqrt(sigma2/2)*(randn(1,N) + 1i*randn(1,N));
y = G*s.' + n.'; % EmpfangssignalSchritt 4: OFDM-Simulation – IFFT und FFT
Im OFDM-Sender wird das Frequenzbereichssignal s per IFFT in den Zeitbereich transformiert. Nach der Kanalübertragung und Rauschaddition wird im Empfänger die FFT angewendet, um die Daten zurückzugewinnen. Entscheidend ist, dass der Kanal durch eine einfache Multiplikation pro Unterträger entzerrt wird – daher ist OFDM so effizient.
% OFDM-Sender
x = ifft(s); % Zeitbereichssignal
% Kanal (zirkulare Faltung)
y_chan = ifft(fft(x).*fft(g,N)); % Alternative über FFT
y = y_chan + n.';
% OFDM-Empfänger
y_fd = fft(y); % Frequenzbereich
% Kanalentzerrung (bei bekanntem Kanal)
h_est = fft(g,N); % Kanalübertragungsfunktion
s_est = y_fd ./ h_est.';
% Entscheidung (nächster QPSK-Punkt)
s_det = sign(real(s_est))/sqrt(2) + 1i*sign(imag(s_est))/sqrt(2);Schritt 5: SER-Berechnung und Plot
Die Symbolfehlerrate (SER) wird durch Vergleich der detektierten mit den gesendeten Symbolen ermittelt. Wir mitteln über viele Kanalrealisierungen, um statistisch signifikante Ergebnisse zu erhalten. Der Plot zeigt SER über 10*log10(1/σ²) – also über das SNR in dB. Je steiler die Kurve, desto besser die Kanalkodierung.
snr_dB = 0:2:20;
for idx = 1:length(snr_dB)
sigma2 = 1/(10^(snr_dB(idx)/10));
% ... Simulation ...
ser(idx) = sum(s_det ~= s)/N;
end
semilogy(snr_dB, ser);Bonus: Kanalschätzung und Fehlerkorrektur
In der Praxis kennt der Empfänger den Kanal nicht. Daher werden Pilotsymbole gesendet, um den Kanal zu schätzen. Dies ist vergleichbar mit der Einmessung eines WLAN-Routers. Eine weitere Verbesserung ist die Kanalkodierung, z.B. Wiederholungscode mit Rate 1/3. Dadurch sinkt die SER drastisch – ähnlich wie bei Netflix, wo verlorene Pakete durch Redundanz wiederhergestellt werden. Die Diversitätsordnung lässt sich aus der Steigung der SER-Kurve ablesen.
Trends: OFDM in Apps und Gaming
OFDM ist nicht nur in 5G-Mobilfunk allgegenwärtig, sondern auch in Apps wie WhatsApp und Instagram, die auf stabile Verbindungen angewiesen sind. Beim Cloud-Gaming (z.B. Xbox Cloud Gaming) sorgt OFDM für niedrige Latenz. Selbst in der KI-gestützten Bildübertragung (z.B. Google Lens) spielt OFDM eine Rolle. Die MATLAB-Simulation hilft dir, die zugrundeliegenden Prinzipien zu verstehen und für deine Lab-Aufgabe zu nutzen.
Fazit und Ausblick
Mit diesem Tutorial hast du die Grundlagen der OFDM-Simulation in MATLAB gemeistert. Du kannst nun Kanäle modellieren, die SER berechnen und die Auswirkungen von Parametern wie Pfadanzahl und Verzögerung untersuchen. Für die Bonusaufgaben des Labs – Kanalschätzung und adaptive Modulation – sind diese Kenntnisse unerlässlich. Denke daran, deine Ergebnisse in einem aussagekräftigen Lab-Bericht zu dokumentieren, der auch Diskussionen über Annahmen und Verbesserungen enthält.