Main Content

앞에 순환 전치가 추가된 OFDM 및 이퀄라이제이션

이 예제에서는 OFDM 변조 16-QAM 데이터 앞에 순환 전치를 추가합니다. 이퀄라이제이션을 효과적으로 수행하려면 순환 전치(CP) 길이가 채널 길이보다 크거나 같아야 합니다.

QAM 및 OFDM 처리를 위한 변수를 정의합니다. 심볼을 생성하고 QAM 변조 및 OFDM 변조를 수행한 후 CP를 신호에 추가합니다. 여러 OFDM 심볼을 동시에 처리한 후 직렬화할 수 있습니다.

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];

잡음, 주파수 종속성, 지연을 추가하는 채널에 수신 신호를 통과시켜서 송신을 필터링합니다.

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

CP 길이보다 작은 랜덤 오프셋을 추가합니다. 오프셋을 0으로 설정하면 송신된 신호와 수신된 신호 간의 완벽한 동기화가 모델링됩니다. CP 길이보다 작은 타이밍 오프셋은 추가 선형 위상을 통한 이퀄라이제이션으로 보정될 수 있습니다.

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);

실제 시스템에서는 신호 복원 과정의 일부로 채널 추정이 필요합니다. OFDM과 CP를 결합하면 이퀄라이제이션이 각 주파수 Bin마다 하나의 복소수 스칼라로 단순화됩니다. 대기 시간이 CP 길이 이내에 있는 한, 채널 추정기에 의해 동기화가 이루어집니다. 아래 제공된 컨트롤로 수신단에서의 이퀄라이제이션을 비활성화하여 실험해 볼 수 있습니다. 송신된 신호를 수신기 출력과 비교합니다.

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.

참고 항목

함수

관련 항목

외부 웹사이트