⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mlftoffsetes_ofdma.m

📁 MLFT的算法(matlab)用matlab来实现
💻 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 + -