📄 mlftoffsetes_ofdma.m
字号:
function [Theta,Epsilon]=MLFrequencyTimeOffsetEstimate_OFDMA(FrameCompensate1,CP_RATIO,AssumeSNR)
%-----------------------------------------Initization
LinearSNR=10^(AssumeSNR/10);
LinearWeight=LinearSNR/(LinearSNR+1);
Weight=AssumeSNR/(AssumeSNR+1);
Len=length(FrameCompensate1);
N=2048;
L=N*CP_RATIO; %%%%%%%% 相关窗的大小
RBuffer=zeros(1,N);
MultBuffer=zeros(1,L);
EnergyBuffer=zeros(1,L);
% SRBuffer=zeros(1,N+L);
% SEnergyBuffer=zeros(1,N+L);
%-------------------------------------------
% Len=100000;
%-----------------------------------------Start ML frequency Estimation
for k=1:1:Len
R=RBuffer(1);
RBuffer(1:N-1)=RBuffer(2:N);
RN=FrameCompensate1(k);
RBuffer(N)=FrameCompensate1(k);
Mult=R*RN';
MultBuffer(1:L-1)=MultBuffer(2:L);
MultBuffer(L)=Mult;
Correlation(k)=sum(MultBuffer,2);
% SRBuffer(1:N+L-1)=SRBuffer(2:N+L);
% SRBuffer(N+L)=FrameCompensate1(k);
% SCorrelation(k)=SRBuffer(1:L)*SRBuffer(N+1:N+L)';
Energy=0.5*(R*R'+RN*RN');
EnergyBuffer(1:L-1)=EnergyBuffer(2:L);
EnergyBuffer(L)=Energy;
EnergyAccumulate(k)=sum(EnergyBuffer,2);
% SEnergyBuffer(1:N+L-1)=SEnergyBuffer(2:N+L);
% SEnergyBuffer(N+L)=FrameCompensate1(k)*FrameCompensate1(k)';
% SEnergyAccumulate(k)=0.5*sum((SEnergyBuffer(1:L)+SEnergyBuffer(N+1:N+L)),2);
%if EnergyAccumulate(k)<10e-5
% TempTheta(k)=(abs(Correlation(k))-LinearWeight*EnergyAccumulate(k));
%else
TempTheta(k)=(abs(Correlation(k))-LinearWeight*EnergyAccumulate(k))/EnergyAccumulate(k);
%end
%TempTheta(k)= (abs(Correlation(k))-LinearWeight*EnergyAccumulate(k));
TempEpsilon(k)=-angle(Correlation(k))/(2*pi);
% STempTheta(k)=abs(SCorrelation(k))-LinearWeight*SEnergyAccumulate(k);
% STempEpsilon(k)=-angle(SCorrelation(k))/(2*pi);
end
%-----------------------------------------End of ML frequency Estimation
Theta(1:Len-N-L+1)=TempTheta(N+L:Len);
Epsilon(1:Len-N-L+1)=TempEpsilon(N+L:Len);
% STheta(1:Len-N-L+1)=STempTheta(N+L:Len);
% SEpsilon(1:Len-N-L+1)=STempEpsilon(N+L:Len);
%%%%%%%%%%%%%
figure;
%index=1:Len-N-L+1;
index=1:Len;
subplot(2,1,1);
plot(index,TempTheta);
xlabel('采样点');
ylabel('幅度');
title('ML算法对定时和频偏的估计');
subplot(2,1,2);
plot(index,TempEpsilon);
xlabel('采样点');
ylabel('角度');
title('ML Estimation for coarse frequency offset');
% Sindex=1:Len-N-L+1;
% figure;
% index=1:Len-N;
% subplot(2,1,1);
% plot(Sindex,STheta);
% xlabel('Time Sample');
% ylabel('ThetaMetric');
% title('ML Estimation for Coarse Symbol Time2');
% subplot(2,1,2);
% plot(Sindex,SEpsilon);
% xlabel('Time Sample');
% ylabel('Epsilon');
% title('ML Estimation for coarse frequency offset2');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -