clear;
close all;
% fd=500; %doppler
corr_times=2;
X=186*corr_times;
L=20460*corr_times;
P=L/X;
fs=20.46e6;
Ts=1/fs;
Tc=1/fs;
N=128; %FFT points
%=============loc_code============
c_loc_ori = randi([0 1],1,10230);
c_loc_ori(c_loc_ori==0) = -1;
c_loc_ori = kron(c_loc_ori,[1 1]);
%==============3bits==============
c_loc = repmat(c_loc_ori,1,corr_times);
t=Ts:Ts:L*Ts;
SNR = -20;
for fd=1:5:1000
%===========doppler==========
rx_i_a = c_loc .* cos(2*pi*fd*t);
rx_q_a = c_loc .* sin(2*pi*fd*t);
%===========noise==========
rx_i_a = awgn(rx_i_a,SNR);
rx_q_a = awgn(rx_q_a,SNR);
%===========quantiz_3bits==========
if 0
[index,rx_i] = quantiz(rx_i_a,[-1 -2/3 -1/3 0 1/3 2/3 1],[-4 -3 -2 -1 0 1 2 3]);
[index,rx_q] = quantiz(rx_q_a,[-1 -2/3 -1/3 0 1/3 2/3 1],[-4 -3 -2 -1 0 1 2 3]);
c_loc_corr = c_loc_bit3;
L_nom = L*16;
else
rx_i = rx_i_a;
rx_q = rx_q_a;
c_loc_corr = c_loc;
L_nom = L;
end
pmf_result_i = pmf_test(rx_i,c_loc_corr,X,P);
pmf_result_q = pmf_test(rx_q,c_loc_corr,X,P);
pmf_result = complex(pmf_result_i,pmf_result_q);
fft_result = abs(fft([pmf_result,zeros(1,18)],N))/L_nom;
fft_result_all(fd,:) = fft_result;
[max_v,max_p]=max(fft_result(1,1:N/2));
% if max_v >0.1
value_result(1,fd)=max_v;
fd_result(1,fd)=fd-fs/(N*X)*(max_p-1);
if max_p>1
F = 5*(fft_result(1,max_p-1)-fft_result(1,max_p+1))/max_v;
V = fft_result(1,max_p-1)+fft_result(1,max_p+1);
else
F = 5*(fft_result(1,N)-fft_result(1,max_p+1))/max_v;
V = fft_result(1,N)+fft_result(1,max_p+1);
end
mF= -4.135*F*F*F+204.5*F;
fd_result(2,fd)=fd_result(1,fd)+mF;
value_max(1,fd)=max_v;
value_max(2,fd)=(max_v+0.35*V)*0.9;
% break;
% end
% end
end
figure
for i=1:2
plot(fd_result(i,:));
hold on
end
xlabel('doppler/Hz');
ylabel('frequency error/Hz');
hold off
figure
for i=1:1
plot(value_max(i,:));
hold on
end
xlabel('doppler/Hz');
ylabel('normalized amplitude');
评论25