Skip to main content

DCO-OFDM Mathematical Model and MATLAB Implementation


DCO-OFDM: Mathematical Model and MATLAB Implementation

MATLAB Code: DCO-OFDM Modulation & Demodulation


clc;
clear all;
close all;

%% DCO-OFDM System Parameters
N = 1024;          % FFT size
M = 4;             % QPSK
k = log2(M);       % Bits per symbol
Ncp = 256;         % Cyclic Prefix
num_symbols = 100; % OFDM symbols

SNRdB = 0:2:30;    % NEW: SNR range
BER = zeros(size(SNRdB));

%% Transmitter

% 1. Data Generation and QAM Modulation
data_bits = randi([0 M-1], num_symbols, N/2-1);
data_qam = qammod(data_bits, M, 'UnitAveragePower', true);

% 2. Serial to Parallel Conversion
datamat = zeros(N, num_symbols);
datamat(2:N/2, :) = data_qam.';   % Data subcarriers

% 3. Hermitian Symmetry
datamat(1,:) = 0;                 % DC
datamat(N/2+1,:) = 0;             % Nyquist
datamat(N/2+2:N,:) = flipud(conj(datamat(2:N/2,:)));

% 4. IFFT
signal_ifft = ifft(datamat, N, 1);

% 5. Add Cyclic Prefix
signal_ifft_parallel = signal_ifft.';
cp_part = signal_ifft_parallel(:, end-Ncp+1:end);
signal_with_cp = [cp_part signal_ifft_parallel];

% 6. DC Bias and Clipping (DCO-OFDM)
bdc = 7; % DC bias in dB
dc_bias_value = mean(abs(signal_with_cp(:))) * 10^(bdc/10);
dco_ofdm_signal = signal_with_cp + dc_bias_value;
dco_ofdm_signal(dco_ofdm_signal < 0) = 0;

%% BER vs SNR Loop
for ii = 1:length(SNRdB)

    % 7. AWGN Channel  (NEW)
    rx_signal = awgn(dco_ofdm_signal, SNRdB(ii), 'measured');

    % 8. Remove DC Bias
    received_signal = rx_signal - dc_bias_value;

    % 9. Remove CP
    received_signal_no_cp = received_signal(:, Ncp+1:end);

    % 10. FFT
    received_parallel = received_signal_no_cp.';
    received_fft = fft(received_parallel, N, 1);

    % 11. Extract Data Subcarriers
    received_data = received_fft(2:N/2, :).';

    % 12. QAM Demodulation
    demod_data = qamdemod(received_data, M, 'UnitAveragePower', true);

    % 13. BER Calculation (NEW)
    tx_bits = de2bi(data_bits, k);
    rx_bits = de2bi(demod_data, k);

    BER(ii) = sum(tx_bits(:) ~= rx_bits(:)) / numel(tx_bits);

end

%% Plot BER vs SNR
figure;
semilogy(SNRdB, BER, 'o-', 'LineWidth', 2);
grid on;
xlabel('SNR (dB)');
ylabel('Bit Error Rate (BER)');
title('BER vs SNR for DCO-OFDM System');

    
DCO-OFDM Diagram

Key Notes

1. Hermitian Symmetry

Ensures a real-valued time-domain signal.

2. DC Bias Selection

Typical bias factor is 2–4. Higher bias reduces clipping but lowers power efficiency.

3. LED Clipping Model

Accurately models realistic LED nonlinearity.

4. Optical Channel Simplification

IM/DD is modeled as real AWGN and can be extended to include UVLC path loss, Gamma–Gamma fading, and shot/thermal noise.

More Explanation

Below is the standard mathematical model of DCO-OFDM (Direct-Current Biased Optical OFDM), written in a form suitable for thesis and journal publications.

1. Frequency-Domain Signal Construction

Let an OFDM system use N subcarriers. To ensure a real-valued time-domain signal (required for IM/DD optical systems), Hermitian symmetry is imposed:

\[ X_k = \begin{cases} 0, & k = 0 \\ D_k, & 1 \le k \le \frac{N}{2}-1 \\ 0, & k = \frac{N}{2} \\ D_{N-k}^*, & \frac{N}{2}+1 \le k \le N-1 \end{cases} \]

  • $D_k$ are complex QAM symbols
  • $(\cdot)^*$ denotes complex conjugation

2. Time-Domain OFDM Signal (IFFT)

The discrete-time OFDM signal after IFFT is:

\[ x[n] = \frac{1}{N} \sum_{k=0}^{N-1} X_k \, e^{j\frac{2\pi kn}{N}}, \quad n = 0,1,\dots,N-1 \]

Due to Hermitian symmetry:

\[x[n] \in \mathbb{R}\]

3. DC Biasing (Core of DCO-OFDM)

Optical intensity modulation requires a non-negative signal. Therefore, a DC bias $B$ is added:

\[x_{\text{DCO}}[n] = x[n] + B\]

Bias selection rule:

\[B \ge \alpha \sigma_x\]

  • $\sigma_x^2 = \mathbb{E}[x[n]^2]$
  • $\alpha$ is the bias factor (typically 2–4)

4. Clipping Model (Practical LEDs)

Due to LED nonlinearity, the signal is clipped as follows:

\[ x_c[n] = \begin{cases} 0, & x_{\text{DCO}}[n] < 0 \\ x_{\text{DCO}}[n], & 0 \le x_{\text{DCO}}[n] \le P_{\max} \\ P_{\max}, & x_{\text{DCO}}[n] > P_{\max} \end{cases} \]

Clipping noise is modeled as additive distortion.

5. Optical Channel Model (IM/DD)

The received signal is:

\[y[n] = R \cdot h \cdot x_c[n] + w[n]\]

  • $R$: photodetector responsivity (A/W)
  • $h$: optical channel gain
  • $w[n]$: AWGN (shot + thermal noise)

6. Frequency-Domain Received Signal

After DC removal and FFT:

\[Y_k = R \cdot h \cdot X_k + N_k + C_k\]

  • $N_k$: noise component
  • $C_k$: clipping noise

7. Achievable SNR per Subcarrier

\[\text{SNR}_k = \frac{R^2 |h|^2 P_k} {\sigma_{\text{shot}}^2 + \sigma_{\text{thermal}}^2 + \sigma_{\text{clip}}^2} \]

8. Key Characteristics of DCO-OFDM

  • Uses DC bias to ensure non-negativity
  • Supports high spectral efficiency
  • Trades optical power efficiency for modulation bandwidth
  • Widely adopted in UVLC and VLC systems

9. Summary

\[ x_{\text{DCO}}[n] = \left( \frac{1}{N} \sum_{k=1}^{N/2-1} 2 \Re \left\{ D_k e^{j\frac{2\pi kn}{N}} \right\} \right) + B \]

People are good at skipping over material they already know!

View Related Topics to







Contact Us

Name

Email *

Message *

Popular Posts

Online Simulator for ASK, FSK, and PSK

Try our new Digital Signal Processing Simulator!   Start Simulator for binary ASK Modulation Message Bits (e.g. 1,0,1,0) Carrier Frequency (Hz) Sampling Frequency (Hz) Run Simulation Simulator for binary FSK Modulation Input Bits (e.g. 1,0,1,0) Freq for '1' (Hz) Freq for '0' (Hz) Sampling Rate (Hz) Visualize FSK Signal Simulator for BPSK Modulation ...

Constellation Diagrams of ASK, PSK, and FSK

📘 Overview of Energy per Bit (Eb / N0) 🧮 Online Simulator for constellation diagrams of ASK, FSK, and PSK 🧮 Theory behind Constellation Diagrams of ASK, FSK, and PSK 🧮 MATLAB Codes for Constellation Diagrams of ASK, FSK, and PSK 📚 Further Reading 📂 Other Topics on Constellation Diagrams of ASK, PSK, and FSK ... 🧮 Simulator for constellation diagrams of m-ary PSK 🧮 Simulator for constellation diagrams of m-ary QAM BASK (Binary ASK) Modulation: Transmits one of two signals: 0 or -√Eb, where Eb​ is the energy per bit. These signals represent binary 0 and 1.    BFSK (Binary FSK) Modulation: Transmits one of two signals: +√Eb​ ( On the y-axis, the phase shift of 90 degrees with respect to the x-axis, which is also termed phase offset ) or √Eb (on x-axis), where Eb​ is the energy per bit. These signals represent binary 0 and 1.  BPSK (Binary PSK) Modulation: Transmits one of two signals...

BER vs SNR for M-ary QAM, M-ary PSK, QPSK, BPSK, ...

📘 Overview of BER and SNR 🧮 Online Simulator for BER calculation of m-ary QAM and m-ary PSK 🧮 MATLAB Code for BER calculation of M-ary QAM, M-ary PSK, QPSK, BPSK, ... 📚 Further Reading 📂 View Other Topics on M-ary QAM, M-ary PSK, QPSK ... 🧮 Online Simulator for Constellation Diagram of m-ary QAM 🧮 Online Simulator for Constellation Diagram of m-ary PSK 🧮 MATLAB Code for BER calculation of ASK, FSK, and PSK 🧮 MATLAB Code for BER calculation of Alamouti Scheme 🧮 Different approaches to calculate BER vs SNR What is Bit Error Rate (BER)? The abbreviation BER stands for Bit Error Rate, which indicates how many corrupted bits are received (after the demodulation process) compared to the total number of bits sent in a communication process. BER = (number of bits received in error) / (total number of tran...

Theoretical BER vs SNR for m-ary PSK and QAM

Relationship Between Bit Error Rate (BER) and Signal-to-Noise Ratio (SNR) The relationship between Bit Error Rate (BER) and Signal-to-Noise Ratio (SNR) is a fundamental concept in digital communication systems. Here’s a detailed explanation: BER (Bit Error Rate): The ratio of the number of bits incorrectly received to the total number of bits transmitted. It measures the quality of the communication link. SNR (Signal-to-Noise Ratio): The ratio of the signal power to the noise power, indicating how much the signal is corrupted by noise. Relationship The BER typically decreases as the SNR increases. This relationship helps evaluate the performance of various modulation schemes. BPSK (Binary Phase Shift Keying) Simple and robust. BER in AWGN channel: BER = 0.5 × erfc(√SNR) Performs well at low SNR. QPSK (Quadrature...

Fading : Slow & Fast and Large & Small Scale Fading

📘 Overview 📘 LARGE SCALE FADING 📘 SMALL SCALE FADING 📘 SLOW FADING 📘 FAST FADING 🧮 MATLAB Codes 📚 Further Reading LARGE SCALE FADING The term 'Large scale fading' is used to describe variations in received signal power over a long distance, usually just considering shadowing.  Assume that a transmitter (say, a cell tower) and a receiver  (say, your smartphone) are in constant communication. Take into account the fact that you are in a moving vehicle. An obstacle, such as a tall building, comes between your cell tower and your vehicle's line of sight (LOS) path. Then you'll notice a decline in the power of your received signal on the spectrogram. Large-scale fading is the term for this type of phenomenon. SMALL SCALE FADING  Small scale fading is a term that describes rapid fluctuations in the received signal power on a small time scale. This includes multipath propagation effects as well as movement-induced Doppler fr...

Q-function in BER vs SNR Calculation

Q-function in BER vs. SNR Calculation In the context of Bit Error Rate (BER) and Signal-to-Noise Ratio (SNR) calculations, the Q-function plays a significant role, especially in digital communications and signal processing . What is the Q-function? The Q-function is a mathematical function that represents the tail probability of the standard normal distribution. Specifically, it is defined as: Q(x) = (1 / sqrt(2Ï€)) ∫â‚“∞ e^(-t² / 2) dt In simpler terms, the Q-function gives the probability that a standard normal random variable exceeds a value x . This is closely related to the complementary cumulative distribution function of the normal distribution. The Role of the Q-function in BER vs. SNR The Q-function is widely used in the calculation of the Bit Error Rate (BER) in communication systems, particularly in systems like Binary Phase Shift Ke...

MATLAB code for BER vs SNR for M-QAM, M-PSK, QPSk, BPSK, ...

🧮 MATLAB Code for BPSK, M-ary PSK, and M-ary QAM Together 🧮 MATLAB Code for M-ary QAM 🧮 MATLAB Code for M-ary PSK 📚 Further Reading MATLAB Script for BER vs. SNR for M-QAM, M-PSK, QPSK, BPSK % Written by Salim Wireless clc; clear; close all; num_symbols = 1e5; snr_db = -20:2:20; psk_orders = [2, 4, 8, 16, 32]; qam_orders = [4, 16, 64, 256]; ber_psk_results = zeros(length(psk_orders), length(snr_db)); ber_qam_results = zeros(length(qam_orders), length(snr_db)); for i = 1:length(psk_orders) psk_order = psk_orders(i); for j = 1:length(snr_db) data_symbols = randi([0, psk_order-1], 1, num_symbols); modulated_signal = pskmod(data_symbols, psk_order, pi/psk_order); received_signal = awgn(modulated_signal, snr_db(j), 'measured'); demodulated_symbols = pskdemod(received_signal, psk_order, pi/psk_order); ber_psk_results(i, j) = sum(data_symbols ~= demodulated_symbols) / num_symbols; end end for i...

Theoretical BER vs SNR for binary ASK, FSK, and PSK

📘 Overview & Theory 🧮 MATLAB Codes 📚 Further Reading Theoretical BER vs SNR for Amplitude Shift Keying (ASK) The theoretical Bit Error Rate (BER) for binary ASK depends on how binary bits are mapped to signal amplitudes. For typical cases: If bits are mapped to 1 and -1, the BER is: BER = Q(√(2 × SNR)) If bits are mapped to 0 and 1, the BER becomes: BER = Q(√(SNR / 2)) Where: Q(x) is the Q-function: Q(x) = 0.5 × erfc(x / √2) SNR : Signal-to-Noise Ratio N₀ : Noise Power Spectral Density Understanding the Q-Function and BER for ASK Bit '0' transmits noise only Bit '1' transmits signal (1 + noise) Receiver decision threshold is 0.5 BER is given by: P b = Q(0.5 / σ) , where σ = √(N₀ / 2) Using SNR = (0.5)² / N₀, we get: BER = Q(√(SNR / 2)) Theoretical BER vs ...