OFDM ed equalizzazione con prefisso ciclico anteposto
Questo esempio antepone un prefisso ciclico ai dati 16-QAM modulati OFDM. Affinché sia efficace per l'equalizzazione, la lunghezza del prefisso ciclico (CP) deve essere uguale o superiore alla lunghezza del canale.
Definire le variabili per le elaborazioni QAM e OFDM. Generare i simboli, eseguire la modulazione QAM, eseguire la modulazione OFDM, quindi aggiungere un CP al segnale. Più simboli OFDM possono essere elaborati contemporaneamente e poi serializzati.
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];
Filtrare la trasmissione attraverso un canale che aggiunge rumore, dipendenza di frequenza e ritardo al segnale ricevuto.
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
Aggiungere un offset casuale inferiore alla lunghezza del CP. Un offset impostato su zero modella la sincronizzazione perfetta tra i segnali trasmessi e ricevuti. Qualsiasi offset temporale inferiore alla lunghezza del CP può essere compensato mediante equalizzazione, tramite una fase lineare aggiuntiva.
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);
I sistemi pratici richiedono la stima del canale come parte del processo di recupero del segnale. La combinazione dell’OFDM e del CP semplifica l’equalizzazione a uno scalare complesso per ciascun bin di frequenza. Finché la latenza ricade nella lunghezza del CP, la sincronizzazione si ottiene tramite lo stimatore di canale. Qui, un controllo consente di effettuare la sperimentazione disabilitando l’equalizzazione sul front-end del ricevitore. Confrontare il segnale trasmesso con l’uscita del ricevitore.
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.