www.gusucode.com > 无线通信FPGA设计源码程序 > 无线通信FPGA设计源码程序/matlab代码/matlab/c13/cell_search_cpich.m

    function y = cell_search_cpich(x, code_number);
% 用于WCDMA小区搜索的第三步,主扰码搜寻,函数返回主扰码的码号
% code_number的值为[0,63];
if(code_number > 63 || code_number<0)
   error('基本扰码组的编号介于[0,63],请重新输入');
end
lenframe = 2;
x_data=x(1:38400*lenframe);%取出两帧数据已足够
value = zeros(1, 8); %记录8路并行的累加器
% 调用8路扰码
t = [1:8];
yn = code_number*128 + (t-1)*16; %计算码组中的主扰码号
scramb1 = scramble(yn(1), lenframe);
scramb2 = scramble(yn(2), lenframe);
scramb3 = scramble(yn(3), lenframe);
scramb4 = scramble(yn(4), lenframe);
scramb5 = scramble(yn(5), lenframe);
scramb6 = scramble(yn(6), lenframe);
scramb7 = scramble(yn(7), lenframe);
scramb8 = scramble(yn(8), lenframe);
% 解扰
descramb1 = x_data.*conj(scramb1);
descramb2 = x_data.*conj(scramb2);
descramb3 = x_data.*conj(scramb3);
descramb4 = x_data.*conj(scramb4);
descramb5 = x_data.*conj(scramb5);
descramb6 = x_data.*conj(scramb6);
descramb7 = x_data.*conj(scramb7);
descramb8 = x_data.*conj(scramb8);
%累加
for i1=1:38400*lenframe
    value(1,1) = value(1,1) + descramb1(i1);
    value(1,2) = value(1,2) + descramb2(i1);
    value(1,3) = value(1,3) + descramb3(i1);
    value(1,4) = value(1,4) + descramb4(i1);
    value(1,5) = value(1,5) + descramb5(i1);
    value(1,6) = value(1,6) + descramb6(i1);
    value(1,7) = value(1,7) + descramb7(i1);
    value(1,8) = value(1,8) + descramb8(i1);
end
% 判决,并输出主绕码
[p_v, p_num] = max(abs(value)); 
% 返回扰码组号
y = code_number*128 + (p_num-1)*16;