Ivan55 0 15 декабря, 2016 Опубликовано 15 декабря, 2016 · Жалоба кто знает как в методе 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) но правильного результата что то что это не дает Разобрался) всем спасибо!)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться