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');
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 \]