Перейти к содержанию
    

кто знает как в методе Parka правильно делается оценка сдвига частоты

 

вот мой код:

clear all; clc; close all;

%choose SNR level in dB
SNR=50:50;
%choose FFT length
N_FFT=1024;
%choose guard interval length as a percentage of N_FFT
NGI=1/4;
%choose number of used carriers
N_used=N_FFT/2;
N_GI=round(NGI*N_FFT);
Nofdm=N_FFT+N_GI;
Nsym = 100;
%frequency offset
nSTOs=0;
CFO=0.4;

%% preamble Park
B=2;
reS=(-1).^round(rand(1,round(N_used/B)));
imS=1i.*(-1).^round(rand(1,round(N_used/B)));
s1=reS+imS;
s2=fliplr(s1);
tx_signal_noGI=[s1 s2 conj(s1) conj(s2)];
tx_signal = zeros(1,Nsym*N_FFT);
tx_signal=repmat(tx_signal_noGI,1,Nsym);

%%
if nSTOs>=0, y_STO=[tx_signal(1,nSTOs+1:end) zeros(1,nSTOs)]; 
else
   y_STO=[zeros(1,-nSTOs) tx_signal(1,1:end+nSTOs)];
end

nn=0:length(y_STO)-1; y_CFO_STO = y_STO.*exp(1i*2*pi*CFO*nn/N_FFT);

%% AWGN channel
for k = 1:length(SNR)
recvd_signal=awgn(y_CFO_STO, SNR(k), 'measured', 'dB');
for n = 1:Nsym
%% Minn
Len_all=N_FFT; %N_FFT or length(recvd_signal);
recvd_signal_zeropad=[zeros(1,Len_all) recvd_signal(1,(n-1)*Len_all+1:n*Len_all) zeros(1,Len_all) zeros(1,Len_all)];
for d=1:2*Len_all+1
   P_Park(d)=sum(recvd_signal_zeropad(d+(1:Len_all/2)).*fliplr(recvd_signal_zeropad(d+Len_all/2+(1:Len_all/2))));
   E_Park(d)=sum(abs(recvd_signal_zeropad(d+(1:Len_all))).^2);
   Q_Park(d)=sum(conj(recvd_signal_zeropad(d+(1:Len_all/2))).*(recvd_signal_zeropad(d+Len_all/2+(1:Len_all/2))));
end
Park_metric=(abs(P_Park).^2)./(E_Park).^2;
plot(Park_metric/max(Park_metric))
%timing estimation is
[~, maxipos1]=max(Park_metric);
t_est_Park(1,n)=Len_all - maxipos1;
FreqOffset = angle(Q_Park(maxipos1))/pi;
end
end

 

считается корреляция

Q_Park(d)=sum(conj(recvd_signal_zeropad(d+(1:Len_all/2))).*(recvd_signal_zeropad(d+Len_all/2+(1:Len_all/2))));

 

и берется фаза в точке максимума Park_metric=(abs(P_Park).^2)./(E_Park).^2; следующим образом FreqOffset = angle(Q_Park(maxipos1))/pi;

но выдает почему то ерунду, фаза по всем точка и близко не подходит под заданное CFO=0.4;

 

причем в формуле Q_Park(d) в разных источниках пишут по разному то (1:Len_all/2) там то (1:Len_all/4) но правильного результата что то что это не дает

 

Разобрался) всем спасибо!))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...