Я написал код но он выдает ерунду, в графике метрики нету явно выраженного пика, как по теории... подскажите что я делаю не так
CODE
clear all; clc; close all;
%choose SNR level in dB
SNR=100;
%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);
N=N_FFT+N_GI;
Nsym = 100;
%frequency offset
nSTOs=-100;
CFO=0;
%% preamble Minn
B=4;
reS=(-1).^round(rand(1,round(N_FFT/B)));
imS=(-1).^round(rand(1,round(N_FFT/B)));
s1=reS+1i.*imS;
s2=fliplr(s1);
tx_signal_noGI=[s1 s2 conj(s1) conj(s2)];
%tx_signal=[tx_signal_noGI(:,N_FFT-N_GI+1:N_FFT) tx_signal_noGI];
tx_signal=tx_signal_noGI;
N=N_FFT+N_GI;
%% Time and frequency shift signal
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(j*2*pi*CFO*nn/N_FFT);
%% AWGN channel
recvd_signal=awgn(y_CFO_STO, SNR, 'measured', 'dB');
%% Minn
Len_all=N_FFT; %N_FFT or length(recvd_signal);
recvd_signal_zeropad=[zeros(1,Len_all) recvd_signal zeros(1,Len_all) zeros(1,Len_all)];
for d=1:2*Len_all+Len_all/2+1,
P_Park(d)=sum((recvd_signal_zeropad(d:d+Len_all/4)).*fliplr(recvd_signal_zeropad(d+Len_all/4:d+Len_all/2)));
E_Park(d)=sum(abs(recvd_signal_zeropad(d:d+Len_all/2)).^2);
end;
Park_metric=(abs(P_Park).^2)./(E_Park).^2;
plot(Park_metric)
%timing estimation is
[~, maxipos1]=max(Park_metric);
t_est_Park=maxipos1-Len_all;
%choose SNR level in dB
SNR=100;
%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);
N=N_FFT+N_GI;
Nsym = 100;
%frequency offset
nSTOs=-100;
CFO=0;
%% preamble Minn
B=4;
reS=(-1).^round(rand(1,round(N_FFT/B)));
imS=(-1).^round(rand(1,round(N_FFT/B)));
s1=reS+1i.*imS;
s2=fliplr(s1);
tx_signal_noGI=[s1 s2 conj(s1) conj(s2)];
%tx_signal=[tx_signal_noGI(:,N_FFT-N_GI+1:N_FFT) tx_signal_noGI];
tx_signal=tx_signal_noGI;
N=N_FFT+N_GI;
%% Time and frequency shift signal
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(j*2*pi*CFO*nn/N_FFT);
%% AWGN channel
recvd_signal=awgn(y_CFO_STO, SNR, 'measured', 'dB');
%% Minn
Len_all=N_FFT; %N_FFT or length(recvd_signal);
recvd_signal_zeropad=[zeros(1,Len_all) recvd_signal zeros(1,Len_all) zeros(1,Len_all)];
for d=1:2*Len_all+Len_all/2+1,
P_Park(d)=sum((recvd_signal_zeropad(d:d+Len_all/4)).*fliplr(recvd_signal_zeropad(d+Len_all/4:d+Len_all/2)));
E_Park(d)=sum(abs(recvd_signal_zeropad(d:d+Len_all/2)).^2);
end;
Park_metric=(abs(P_Park).^2)./(E_Park).^2;
plot(Park_metric)
%timing estimation is
[~, maxipos1]=max(Park_metric);
t_est_Park=maxipos1-Len_all;