⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bcch_search.m

📁 小区初搜为GSM系统中的一个关键过程
💻 M
字号:
function tt=bcch_search




% Filename1 = 'F:\DATA\20071129\org1.dat';
Filename1 = 'F:\DATA\20071210\10_fcch_i.txt';
Filename2 = 'F:\DATA\20071210\10_fcch_q.txt';

% Filename1 = 'F:\DATA\20071112\mat_FBdata_i.dat';
% Filename2 = 'F:\DATA\20071112\mat_FBdata_q.dat';

i = textread(Filename1,'%s');
q = textread(Filename2,'%s');

i10 = hex2dec(i);
q10 = hex2dec(q);

L_i = length(i10);             %i,q数据的个数

% i10 = iq10(1:2:L_iq);
% q10 = iq10(2:2:L_iq);

L_i = length(i10);

for n = 1:L_i                %将数据转换到-1到1之间
   if i10(n)>32768
       i10(n) = bitxor(i10(n),65535)+1;
       i10(n) = -i10(n);
   end
end
for n = 1:L_i                
   if q10(n)>32768
       q10(n) = bitxor(q10(n),65535)+1;
       q10(n) = -q10(n);
   end
end

i10=i10/32768;
q10=q10/32768;


r =(i10+j*q10)


%专利方法

r=r.';
Tb = 3.692e-6;
M = 32;
[ FBStartTime, qualityMetric, frequencyError ] = FB_detector_corrector(r, Tb, M);


%这里是用本地八个训练序列分别同接受数据做相关,找出合适的训练序列
t_BCCH_gen=find_bcch;
 r=r.';
R_text=r(n+16*156.25-10:n+16*156.25+148+10+26);
L_R_text=length(R_text);
L_BCCH_tx=length(t_BCCH_gen);

 figure;
for i1 = 1:8
    for i2 = 1:L_R_text-L_BCCH_tx
    BCCH_and_R_corr(i1,i2)=sum(conj(t_BCCH_gen(i1,:))*R_text((i2-1)+1:(i2-1)+L_BCCH_tx));
    end
     subplot(8,1,i1);
     plot(abs(BCCH_and_R_corr(i1,:)));
     grid on;

end



%找第一个BCCH数据
 n = n-2;
 n = n*4;
%  n = 413; 20070817_13
% R_T_E=C((n*8+10000*2):(n*8+10000*2+1199));
% [m,n1]=size(R_T_E);
% nn = (hex2dec(R_T_E)-512)/512;
% i_t = nn(1:2:m,1);
% q_t = nn(2:2:m);
% f_t = j*i_t+q_t;

R_t=f((n+5000*2):(n+5000*2+599));
% R_t=f_t; 
r=R_t.';
%%%%%%%%%%%%%%%%%%%%滤波%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% N = 33;
%         % B = kaiser(N,9);
%         B = fir1(N,0.18);
%         h = dfilt.dffir(B);
%         % freqz(h);
%         I = real(r);
%         I = [I,zeros(1,(N-1)/2)];
% 
%         Q = imag(r);
%         Q = [Q, zeros(1,(N-1)/2)];
%         yI = filter(B,1,I);
%         yQ = filter(B,1,Q);
%         Z = yI(1,(N-1)/2+1:600+(N-1)/2) + yQ(1,(N-1)/2+1:600+(N-1)/2)*j;
%         r = Z;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
T_SEQ=t_BCCH_gen(6,:);
OSR=4;
[ SYMBOLS , PREVIOUS , NEXT , START , STOPS ] = viterbi_init(Lh);
[Y, Rhh, h_est] = mafi(r,Lh,T_SEQ,OSR);   
rx_burst(1,:) = viterbi_detector(SYMBOLS,NEXT,PREVIOUS,START,STOPS,Y,Rhh);
rx_data_matr1=DeMUX(rx_burst(1,:));

%找第二个BCCH数据
% R_T_E=C((n*8+10000*3):(n*8+10000*3+1199));
% [m,n1]=size(R_T_E);
% nn = (hex2dec(R_T_E)-512)/512;
% i_t = nn(1:2:m,1);
% q_t = nn(2:2:m);
% f_t = j*i_t+q_t;

R_t=f((n+5000*3):(n+5000*3+599));
% R_t=f_t; 
r=R_t.';
%%%%%%%%%%%%%%%%%%%%滤波%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% N = 33;
%         % B = kaiser(N,9);
%         B = fir1(N,0.18);
%         h = dfilt.dffir(B);
%         % freqz(h);
%         I = real(r);
%         I = [I,zeros(1,(N-1)/2)];
% 
%         Q = imag(r);
%         Q = [Q, zeros(1,(N-1)/2)];
%         yI = filter(B,1,I);
%         yQ = filter(B,1,Q);
%         Z = yI(1,(N-1)/2+1:600+(N-1)/2) + yQ(1,(N-1)/2+1:600+(N-1)/2)*j;
%         r = Z;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% T_SEQ=t_BCCH_gen(6,:);
OSR=4;
[ SYMBOLS , PREVIOUS , NEXT , START , STOPS ] = viterbi_init(Lh);
[Y, Rhh, h_est] = mafi(r,Lh,T_SEQ,OSR);   
rx_burst(2,:) = viterbi_detector(SYMBOLS,NEXT,PREVIOUS,START,STOPS,Y,Rhh);
rx_data_matr2=DeMUX(rx_burst(2,:));


%找第三个BCCH数据
% R_T_E=C((n*8+10000*4):(n*8+10000*4+1199));
% [m,n1]=size(R_T_E);
% nn = (hex2dec(R_T_E)-512)/512;
% i_t = nn(1:2:m,1);
% q_t = nn(2:2:m);
% f_t = j*i_t+q_t;

R_t=f((n+5000*4):(n+5000*4+599));
% R_t=f_t; 
r=R_t.';
%%%%%%%%%%%%%%%%%%%%滤波%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% N = 33;
%         % B = kaiser(N,9);
%         B = fir1(N,0.18);
%         h = dfilt.dffir(B);
%         % freqz(h);
%         I = real(r);
%         I = [I,zeros(1,(N-1)/2)];
% 
%         Q = imag(r);
%         Q = [Q, zeros(1,(N-1)/2)];
%         yI = filter(B,1,I);
%         yQ = filter(B,1,Q);
%         Z = yI(1,(N-1)/2+1:600+(N-1)/2) + yQ(1,(N-1)/2+1:600+(N-1)/2)*j;
%         r = Z;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% T_SEQ=t_BCCH_gen(6,:);
OSR=4;
[ SYMBOLS , PREVIOUS , NEXT , START , STOPS ] = viterbi_init(Lh);
[Y, Rhh, h_est] = mafi(r,Lh,T_SEQ,OSR);   
rx_burst(3,:) = viterbi_detector(SYMBOLS,NEXT,PREVIOUS,START,STOPS,Y,Rhh);
rx_data_matr3=DeMUX(rx_burst(3,:));

%找第四个BCCH数据
% R_T_E=C((n*8+10000*5):(n*8+10000*5+1199));
% [m,n1]=size(R_T_E);
% nn = (hex2dec(R_T_E)-512)/512;
% i_t = nn(1:2:m,1);
% q_t = nn(2:2:m);
% f_t = j*i_t+q_t;

R_t=f((n+5000*5):(n+5000*5+599));
% R_t=f_t; 
r=R_t.';
%%%%%%%%%%%%%%%%%%%%滤波%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% N = 33;
%         % B = kaiser(N,9);
%         B = fir1(N,0.18);
%         h = dfilt.dffir(B);
%         % freqz(h);
%         I = real(r);
%         I = [I,zeros(1,(N-1)/2)];
% 
%         Q = imag(r);
%         Q = [Q, zeros(1,(N-1)/2)];
%         yI = filter(B,1,I);
%         yQ = filter(B,1,Q);
%         Z = yI(1,(N-1)/2+1:600+(N-1)/2) + yQ(1,(N-1)/2+1:600+(N-1)/2)*j;
%         r = Z;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% T_SEQ=t_BCCH_gen(6,:);
OSR=4;
[ SYMBOLS , PREVIOUS , NEXT , START , STOPS ] = viterbi_init(Lh);
[Y, Rhh, h_est] = mafi(r,Lh,T_SEQ,OSR);   
rx_burst(4,:) = viterbi_detector(SYMBOLS,NEXT,PREVIOUS,START,STOPS,Y,Rhh);
rx_data_matr4=DeMUX(rx_burst(4,:));

%
rx_data_matrix(1,:)=rx_data_matr1;
rx_data_matrix(2,:)=rx_data_matr2;
rx_data_matrix(3,:)=rx_data_matr3;
rx_data_matrix(4,:)=rx_data_matr4;
%解交织
[ rx_enc1 ] = deinterleave_bcch(rx_data_matrix);
%信道解码
%**********************************利用硬件数据解读************************
% filename='E:\data\20070830\解交织得到的数据\456bitout.dat';
% rx_enc = textread(filename,'%s');
% rx_enc =(bin2dec(rx_enc)).';
%**************************************************************************
trel = poly2trellis(5,[23 33]);  % Define trellis,    according to GSM0503.
tblen = 228;
rx_block1=vitdec(rx_enc1,trel,tblen,'term','hard');

rx_block= channel_dec_BCCH(rx_enc1);
%解CRC
% g = [1, 0,0, 1, zeros(1,13),1, zeros(1,5),1,  zeros(1,2),1,zeros(1,13),1];
 g = [1,zeros(1,13),1,zeros(1,2),1,zeros(1,5),1,zeros(1,13),1,0,0,1];
d = [rx_block];
[q,r] = deconv(d,g);
% ADJUST RESULT TO BINARY REPRESENTATION
L = length(r);
out = abs(r(L-39:L));
for n = 1:length(out),
  if ceil(out(n)/2) ~= floor(out(n)/2)
    out(n) = 1;
  else
    out(n) = 0;
  end
end
out2=out

    out = addcrc(rx_block(1:184),g);
    crc = rx_block(185:224);
    crcre = out(185:224);

    crcerr = xor(crcre, crc)  
%/////////////////////////用bcch的h_est 对 sch进行匹配滤波/////////////////////
%**************************************************************************
% m = length(h_est)-1;
% r=f((n*4+5000):(n*4+5000+599));
% r=r';
% GUARD = 10;
% GUARDmf = (GUARD+1)*OSR;
% r_extended = [ zeros(1,GUARDmf) r zeros(1,m) zeros(1,GUARDmf)];
% 
% burst_start = 1;
% for n=1:148,
%   aa=GUARDmf+burst_start+(n-1)*OSR;
%   bb=GUARDmf+burst_start+(n-1)*OSR+m;
%   Y(n) = r_extended(aa:bb)*h_est'; 
% end
% %////////////////////////////// viterbi detecte////////////
% rx_burst = viterbi_detector(SYMBOLS,NEXT,PREVIOUS,START,STOPS,Y,Rhh);
% %///////////////////////////// DeMUX//////////////////////
% rx_data_matrix2=DeMUX_SCH(rx_burst);
% % 下面要译码啦
% rx_enc=rx_data_matrix2;
% [rx_block,FLAG_SS,PARITY_CHK]=channel_dec_SCH(rx_enc);
% rx_block
%**********************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -