当前位置:首页 > 机械智慧 > 正文

LTE PSS搜索阶段频偏估计MATLAB实现

上期讲到PSS阶段频偏估计,包括整数倍频偏估计和小数倍频偏估计,但是未用MATLAB给大家实现,本期用MATLAB实现:function[freq_offet,N_ID_2,frameHead]=PSS_det(rxSig_init,params)%%%%pssThr=25;N=128;root_s...

上期讲到PSS阶段频偏估计,包括整数倍频偏估计和小数倍频偏估计,但是未用MATLAB给大家实现,本期用MATLAB实现:function[freq_offet,N_ID_2,frameHead]=PS......

上期讲到PSS阶段频偏估计,包括整数倍频偏估计和小数倍频偏估计,但是未用MATLAB给大家实现,本期用MATLAB实现:

function[freq_offet,N_ID_2,frameHead]=PSS_det(rxSig_init,params)

%

%

%

%

pssThr=25;

N=128;

root_set=[252934];

segL=N/_segNum;

cs_sample_rate=1.92e6;%30.72

IntCFO_set=[-101]*;

corr_result=zeros(3,3,_combin_num,_search_window_len,_segNum);

%%firstcorrwithlocalpsssignal

forIntIdx=1:3

rxSig=rxSig_init.*exp(2*pi*1i*IntCFO_set(IntIdx)*(1:length(rxSig_init))/cs_sample_rate);

forN_ID_2_idx=1:3

pss_local_ifft128=pss_gen(root_set(N_ID_2_idx));

forcombin_idx=1:_combin_num

rxSig_temp=rxSig((combin_idx-1)*5*1920+1:combin_idx*6*1920);

fori_sample=1:_search_window_len

forseg_idx=1:_segNum

rx_temp=rxSig_temp(i_sample+(seg_idx-1)*segL:i_sample-1+seg_idx*segL);

corr_result(IntIdx,N_ID_2_idx,combin_idx,i_sample,seg_idx)=corr_result(IntIdx,N_ID_2_idx,combin_idx,i_sample,seg_idx)+rx_temp*pss_local_ifft128((seg_idx-1)*segL+1:seg_idx*segL)';

%%calpower

corr_result_abs=zeros(3,3,_search_window_len);

forIntIdx=1:3

forN_ID_2_idx=1:3

forcombin_idx=1:_combin_num

fori_sample=1:_search_window_len

corrPower=0;

forseg_idx=1:_segNum

corrPower=corrPower+abs(corr_result(IntIdx,N_ID_2_idx,combin_idx,i_sample,seg_idx));

corrPower=corrPower^2;

corr_result_abs(IntIdx,N_ID_2_idx,i_sample)=corr_result_abs(IntIdx,N_ID_2_idx,i_sample)+corrPower;

%%parposcal

par=zeros(3,3);

pos=zeros(3,3);

maxPower=zeros(3,3);

avgPower=zeros(3,3);

forIntIdx=1:3

forN_ID_2_idx=1:3

sumPower=0;

maxValue=0;

posCurrNID=0;

fori_sample=1:_search_window_len

sumPower=sumPower+corr_result_abs(IntIdx,N_ID_2_idx,i_sample);

ifcorr_result_abs(IntIdx,N_ID_2_idx,i_sample)maxValue

maxValue=corr_result_abs(IntIdx,N_ID_2_idx,i_sample);

posCurrNID=i_sample;

pos(IntIdx,N_ID_2_idx)=posCurrNID;

sumPower=sumPower-maxValue;

avgPowerTemp=sumPower/(_search_window_len-1);

par(IntIdx,N_ID_2_idx)=maxValue/avgPowerTemp;

maxPower(IntIdx,N_ID_2_idx)=maxValue;

avgPower(IntIdx,N_ID_2_idx)=avgPowerTemp;

%%integralmultiplefreqoffsetestimations

parTemp=par.';

[~,p]=max(parTemp(:));

IntIdx=ceil(p/3);

inteFreqOffset=IntCFO_set(IntIdx);

parMaxInt=par(IntIdx,:);

pos=pos(IntIdx,:);

%%calframehead

forN_ID_2_idx=1:3

ifparMaxInt(N_ID_2_idx)pssThr

N_ID_2=N_ID_2_idx;

%%fractionalfreqoffsetestimation

freq_offset_est=0;

_segNum==2

forcombin_idx=1:_combin_num

phase_corr=angle(corr_result(IntIdx,N_ID_2,combin_idx,pos(N_ID_2),1)*corr_result(IntIdx,N_ID_2,combin_idx,pos(N_ID_2),2)');

freq_offet=phase_corr/pi*15e3;

freq_offset_est=freq_offset_est+freq_offet;

freq_offset_est=freq_offset_est/_combin_num;

_segNum==1_combin_num1

forcomidx=1:floor(_combin_num/2)

phase_corr=angle(corr_result(IntIdx,N_ID_2,2*comidx-1,pos(N_ID_2),1)*corr_result(IntIdx,N_ID_2,2*comidx,pos(N_ID_2),1)');

freq_offet=phase_corr/pi*15e3;

fprintf('donotsupportotherpss_segNum%d\n',_segNum);

%%reult

freq_offet=freq_offset_est+inteFreqOffset;

frameHead=(pos(N_ID_2)-1)*16-144-(160+2048+(144+2048)*5)+1;

N_ID_2=N_ID_2-1;

%fprintf('findpss%d%d%f\n',N_ID_2,frameHead,freq_offet);

%a=0;

最新文章