带前追加循环前缀的 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 长度的随机偏移量。偏移量设置为零表示发射信号和接收信号之间完美同步。任何小于 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.