How to modify this MMSE channel estimation code to accommodate optical OFDM

function H_MMSE = MMSE(RxP,TxP,N,pilotFrequency,h_CIR,SNR)
noiseVar = 10^(SNR*0.1);
Np=N/pilotFrequency; % Number of Pilots
H_LS = RxP./TxP; % LS estimate
k=0:length(h_CIR)-1;
hh = h_CIR*h_CIR';
% tmp = h_CIR.*conj(h_CIR).*k;
r = sum(h_CIR.*conj(h_CIR).*k)/hh;
r2 = (h_CIR.*conj(h_CIR).*k)*k.'/hh;
t_rms = sqrt(r2-r^2); % rms delay
D = 1j*2*pi*t_rms/N; % Denomerator of Eq. (6.16) page 192
K1 = repmat([0:N-1].',1,Np);
K2 = repmat([0:Np-1],N,1);
rf = 1./(1+D*(K1-K2*pilotFrequency));
K3 = repmat([0:Np-1].',1,Np);
K4 = repmat([0:Np-1],Np,1);
rf2 = 1./(1+D*pilotFrequency*(K3-K4));
Rhp = rf;
Rpp = rf2 + eye(length(H_LS),length(H_LS))/noiseVar;
H_MMSE = transpose(Rhp*inv(Rpp)*H_LS); % MMSE channel estimate

3 Comments

N is the length of each OFDM symbol and in this context used as an integer.
Do you mean time (3.2 us)or subcarriers(52) in Wifi 802.11g?
I'm trying to apply MMSE channel estimation for WiFi 802.11g, i still don't know how to calculate that Np=N/pilotFrequency;
what is the pilotFrequency ? is that number of pilots ?
H_LS = fft(LT)./ Tx_LT;
h_CIR = ifft(H_LS);
SNR = calculate it in signal filed
pilotFrequency = ?
N = 52/ ?
Can you post link for this (Denomerator of Eq. (6.16) page 192) ?

Sign in to comment.

Answers (0)

Categories

Edited:

on 1 Feb 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!