1.算法描述
OFDM(Orthogonal Frequency Division Multiplexing)即正交频分复用技术,实际上OFDM是MCM(Multi Carrier Modulation),多载波调制的一种。通过频分复用实现高速串行数据的并行传输, 它具有较好的抗多径衰落的能力,能够支持多用户接入。
OFDM技术由MCM(Multi-Carrier Modulation,多载波调制)发展而来。OFDM技术是多载波传输方案的实现方式之一,它的调制和解调是分别基于IFFT和FFT来实现的,是实现复杂度最低、应用最广的一种多载波传输方案。
在OFDM传播过程中,高速信息数据流通过串并变换,分配到速率相对较低的若干子信道中传输,每个子信道中的符号周期相对增加,这样可减少因无线信道多径时延扩展所产生的时间弥散性对系统造成的码间干扰。另外,由于引入保护间隔,在保护间隔大于最大多径时延扩展的情况下,可以最大限度地消除多径带来的符号间干扰。如果用循环前缀作为保护间隔,还可避免多径带来的信道间干扰。
在过去的频分复用(FDM)系统中,整个带宽分成N个子频带,子频带之间不重叠,为了避免子频带间相互干扰,频带间通常加保护带宽,但这会使频谱利用率下降。为了克服这个缺点,OFDM采用N个重叠的子频带,子频带间正交,因而在接收端无需分离频谱就可将信号接收下来。
OFDM系统的一个主要优点是正交的子载波可以利用快速傅利叶变换(FFT/IFFT)实现调制和解调。对于N点的IDFT运算,需要实施N^2次复数乘法,而采用常见的基于2的IFFT算法,其复数乘法仅为(N/2)log2N,可显著降低运算复杂度。
在OFDM系统的发射端加入保护间隔,主要是为了消除多径所造成的ISI。其方法是在OFDM符号保护间隔内填入循环前缀,以保证在FFT周期内OFDM符号的时延副本内包含的波形周期个数也是整数。这样时延小于保护间隔的信号就不会在解调过程中产生ISI。由于OFDM技术有较强的抗ISI能力以及高频谱效率,2001年开始应用于光通信中,相当多的研究表明了该技术在光通信中的可行性。
最大似然估计(Maximum Likelihood Estimation)是一种可以生成拟合数据的任何分布的参数的最可能估计的技术。它是一种解决建模和统计中常见问题的方法——将概率分布拟合到数据集。
例如,假设数据来自泊松(λ)分布,在数据分析时需要知道λ参数来理解数据。这时就可以通过计算MLE找到给定数据的最有可能的λ,并将其用作对参数的良好估计。
MLE是用于拟合或估计数据集概率分布的频率法。这是因为MLE从不计算假设的概率,而贝叶斯解会同时使用数据和假设的概率。MLE假设在计算方法之前,所有的解决方案(分布的参数)都是等可能的,而贝叶斯方法(MAP)不是这样,它使用了关于分布参数的先验信息。
MLE之所以有效,是因为它将寻找数据分布的参数视为一个优化问题。通过最大化似然函数,找到了最可能的解。
2.仿真效果预览
matlab2022a仿真结果如下:
3.MATLAB核心程序
Nfft = 1024;
Ncp = 128;
Nsym = 6;
FreqOffset = 0.25;
SNRdb = 15;
theta = 256;
% OFDM symbol generation
data = 2*randi([0 1],1, Nsym*Nfft)-1; % BPSK data
Tx = zeros(1,Nsym*(Nfft+Ncp));
OFDMsym = zeros(1,Nfft);
for sym = 1:Nsym
OFDMsym = ifft(data(Nfft*(sym-1)+1:(Nfft*sym)),Nfft)*sqrt(Nfft);
Tx((Nfft+Ncp)*(sym-1)+1:(Nfft+Ncp)*sym) = [OFDMsym(Nfft-Ncp+1:Nfft) OFDMsym];
end
% AWGN channel
snr = 10^(-SNRdb/10);
noise = sqrt(snr/2)*(randn(1,Nsym*(Nfft+Ncp))+1i*randn(1,Nsym*(Nfft+Ncp)));
Rx = exp(1i*2*pi*FreqOffset*(0:length(Tx)-1)./Nfft).*Tx + noise;
% 定时和频率偏移的ML估计
PHI_sum = zeros(1,Nsym*(Nfft+Ncp)-Nfft);
GM_sum = zeros(1,Nsym*(Nfft+Ncp)-Nfft);
for n = theta:Nsym*(Nfft+Ncp)-(Nfft+Ncp)
PHI=0;GM=0;
..................................................
PHI_sum(n) = abs(GM)- (snr/(snr+1))*PHI;
GM_sum(n) = -angle(GM)/(2*pi);
end