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

📄 sync_acquisition_tracking_algo2_dab_receiver_nctu.m

📁 DAB transmitter, synchronization and receiver under development
💻 M
📖 第 1 页 / 共 2 页
字号:
    elseif ((energy(startpos) < 50000) && mod(nn2,32) > 0)        Null_start_64=startpos-2;    else        Null_start_64=startpos-1;    endelseif (energy(2)<threshold && (energy(1)>threshold))    Null_start_64=startpos-2;else    Null_start_64 = 0;end    Null_start_64=Null_start_64*32;    CoarseTimeOffset=Null_start_64;    energy=[];    startpos=0;filter_coeffs_52 = [-0.01150520799654,  0.04662093821552, -0.03077640285271,  -0.0231042241465,  -0.002163312923775,  0.01228271170455,  0.01666390724314,   0.0122309962864,   0.001921130879403,-0.009613726698264, -0.01729442204924, -0.01680913678051,  -0.007257038145782, 0.007988366350245,  0.02198483085216,  0.02680262904334,    0.01759370546702, -0.00420083488149, -0.03021700122233, -0.04715857424595,   -0.04210323639071,-0.008325894095887,  0.05110839485772,   0.1229461387852,     0.1874927531747,   0.2256093150281,   0.2256093150281,   0.1874927531747,     0.1229461387852,  0.05110839485772,-0.008325894095887, -0.04210323639071,  -0.04715857424595, -0.03021700122233, -0.00420083488149,  0.01759370546702,    0.02680262904334,  0.02198483085216, 0.007988366350245,-0.007257038145782,   -0.01680913678051, -0.01729442204924,-0.009613726698264, 0.001921130879403,     0.0122309962864,  0.01666390724314,  0.01228271170455,-0.002163312923775,    -0.0231042241465, -0.03077640285271,  0.04662093821552, -0.01150520799654];cos_table=[0.8090    0.3090   -0.3090   -0.8090   -1.0000   -0.8090   -0.3090    0.3090    0.8090    1.0000];sin_table=[0.5878    0.9511    0.9511    0.5878    0.0000   -0.5878   -0.9511   -0.9511   -0.5878   -0.0000];for kk=1:length(cos_table)    if cos_table(kk) > 0.9999        cos_table(kk)=0.9999;    end    if sin_table(kk) > 0.9999        sin_table(kk)=0.9999;    endend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Acquisition Stage Starts%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%sumchk=0; outputmag=0; timing_value=0;         for toffset_resolv=0:31    Txr(1,:) = DAB_RX_Frame15(CoarseTimeOffset+1:CoarseTimeOffset+2552*4);    for t = 1:length(Txr)        I_stream_2048(1,t) = Txr(1,t);    end    t1=1;    for t = 1:length(Txr)        I1_stream_2048(1,t) = I_stream_2048(1,t) * cos_table(t1);        Q1_stream_2048(1,t) = I_stream_2048(1,t) * sin_table(t1);        if mod(t1,10) == 0            t1=1;        else            t1=t1+1;        end    end%%%%%%%%%%%%%% direct form fir decimation filter start%%%%%%%%%%%%%%%%%%    y_filter_out_I(1,:) = filter(filter_coeffs_52,1,I1_stream_2048(1,:));    y_filter_out_Q(1,:) = filter(filter_coeffs_52,1,Q1_stream_2048(1,:));%%%%%%%%%%%%%% direct form fir decimation filter end %%%%%%%%%%%%%%%%%%    m=1;    for ii1=1:length(Txr)/4        Time_Dom_Symbol_2048_rx_G11_r(1,ii1)=y_filter_out_I(1,m);        Time_Dom_Symbol_2048_rx_G11_i(1,ii1)=y_filter_out_Q(1,m);        m=m+4;    end    for t=1:length(Time_Dom_Symbol_2048_rx_G11_r)        Rx(1,t) = complex(Time_Dom_Symbol_2048_rx_G11_r(1,t), -Time_Dom_Symbol_2048_rx_G11_i(1,t));    end          Txr1(1,:) = Rx(1,505-toffset_resolv:2048+504-toffset_resolv);    %%%%%%%%%%%%%Coffset=>coarse frequency offset estimate%%%%%%%%%    for Coffset=-20:20        mm=505;        for i=1:2048            bb=mm-1;            temp(i)=exp(j*6.28*(Coffset)*(bb/2048));            rx_prsC(i)= temp(i) * Txr1(1,i);            mm=mm+1;        end          rx_prs_2048=fft(rx_prsC(1,:),2048);        Autocorr11=rx_prs_2048.*conj(phase_ref_beginning);        output=0;        for ii=1:2048            output=Autocorr11(ii)+output;        end        outputmag(toffset_resolv+1,Coffset+21)=abs(output);                           if sumchk<=outputmag(toffset_resolv+1,Coffset+21)            sumchk=outputmag(toffset_resolv+1,Coffset+21);            Cooffset=Coffset;            timing_value=toffset_resolv;            output1=0;sumchk1=0;outputmag1=0;            %%%%%%%%%%%%%f_Cooffset=>fine frequency offset estimate%%%%%%%%%            for pp=0:24                Autocorr111=rx_prs_2048.*conj(phase_ref_beginning)*exp(j*2*pi*timing_value*0.04*pp/2048);                for iii=1:2048                    output1=Autocorr111(iii)+output1;                end                outputmag1(pp+1)=abs(output1);                if sumchk1<=outputmag1(pp+1)                    sumchk1=outputmag1(pp+1);                    f_Cooffset=0.04*pp;                    metric = [];                    %%%%%%%%%%%%%fine timing offset estimate%%%%%%%%%                    for tloop = -200:200                        pramp = exp(-j*2*pi*tloop*[0:2048-1]/2048)';                        metric =  [metric sum(abs(sum(reshape(Autocorr111.'.*pramp,64,2048/64))))]; % metric computation                    end                    plot([-200:200],metric)                    xlabel('fine time-offset');ylabel('Metric');                end            end        end    endend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%aad=CoarseTimeOffset+guard_interval*4-timing_value+2048*4;DAB_RX_Frame17=DAB_RX_Frame15(aad+1-10208:length(DAB_RX_Frame15));for sym = 1:76    I_stream_2048_11(sym,:) = DAB_RX_Frame17(1,(sym-1)*10208+1:(sym)*10208);endfor sym = 1:76    t1=1;    for t = 1:length(I_stream_2048_11)        I1_stream_2048_11(sym,t) = I_stream_2048_11(sym,t) * cos_table(t1);        Q1_stream_2048_11(sym,t) = I_stream_2048_11(sym,t) * sin_table(t1);        if mod(t1,10) == 0            t1=1;        else            t1=t1+1;        end    endendI_stream_2048_11=[];      %%%%%%%%%%%%%% direct form fir decimation filter start%%%%%%%%%%%%%%%%%%for sym=1:76        y_filter_out_I1(sym,:) = filter(filter_coeffs_52,1,I1_stream_2048_11(sym,:));        y_filter_out_Q1(sym,:) = filter(filter_coeffs_52,1,Q1_stream_2048_11(sym,:));end    %%%%%%%%%%%%%% direct form fir decimation filter end %%%%%%%%%%%%%%%%%%for jj=1:76        m=1;        for i=1:length(y_filter_out_I1)/4            Time_Dom_Symbol_2048_rx_G11_r11(jj,i)=y_filter_out_I1(jj,m);            Time_Dom_Symbol_2048_rx_G11_i11(jj,i)=y_filter_out_Q1(jj,m);            m=m+4;        endendfor sym=1:76        for t=1:length(Time_Dom_Symbol_2048_rx_G11_r11)            Rx_1(sym,t) = complex(Time_Dom_Symbol_2048_rx_G11_r11(sym,t), -Time_Dom_Symbol_2048_rx_G11_i11(sym,t));        endendI1_stream_2048_11=[];Q1_stream_2048_11=[];   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   %%%%%%%%%%%%%%%% Coarse Frq Offset + fine frequency offset Compensation   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%aa=Cooffset+f_Cooffset;for sym=1:76    for i=1:length(Time_Dom_Symbol_2048_rx_G11_r11)        bb=i-1;        temp=exp(j*6.28*aa*(bb/2048));        Time_Dom_Symbol_2048_rx_G112_track_input(sym,i)= temp * Rx_1(sym,i);    endend   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   %%%%%%%%%%%%%%%% Removal of Guard from the Compensated FIC symbols   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%for sym=1:76    for ii=505:1:2552        Time_Dom_Symbol_2048_rx113_track_input(sym,(ii-504))=Time_Dom_Symbol_2048_rx_G112_track_input(sym,ii);    endend   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   %%%%%%%%%%%%%%%% OFDM Demodulation   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%for sym=1:76    Time_Dom_Symbol_2048_rx_fft(sym,:) =fft( Time_Dom_Symbol_2048_rx113_track_input(sym,:));endTime_Dom_Symbol_2048_rx113_track_input=[];   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   %%%%%%%%%%%%%%%% Demapping   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%for Symbol_count = 1:75    diff_decoded_buffer(Symbol_count,:)= Time_Dom_Symbol_2048_rx_fft(Symbol_count+1,:)./Time_Dom_Symbol_2048_rx_fft(Symbol_count,:);    for tt=1:1:1536        x = freq_deinterleaving_mod1(tt);        freq_deinterleaved_buffer(Symbol_count,tt) = diff_decoded_buffer(Symbol_count,x);    end    for tt=1:1:1536        if(((real(freq_deinterleaved_buffer(Symbol_count,tt)))>=0) && ((imag(freq_deinterleaved_buffer(Symbol_count,tt)))>=0))            demapped_buffer(Symbol_count,tt) = 0;            punctured_output(Symbol_count,tt) = 0;            punctured_output(Symbol_count,tt+1536) = 0;        elseif(((real(freq_deinterleaved_buffer(Symbol_count,tt)))>=0) && ((imag(freq_deinterleaved_buffer(Symbol_count,tt)))<0))            demapped_buffer(Symbol_count,tt) = 1;            punctured_output(Symbol_count,tt) = 0;            punctured_output(Symbol_count,tt+1536) = 1;        elseif(((real(freq_deinterleaved_buffer(Symbol_count,tt)))<0) && ((imag(freq_deinterleaved_buffer(Symbol_count,tt)))>=0))            demapped_buffer(Symbol_count,tt) = 2;            punctured_output(Symbol_count,tt) = 1;            punctured_output(Symbol_count,tt+1536) = 0;        else            demapped_buffer(Symbol_count,tt) = 3;            punctured_output(Symbol_count,tt) = 1;            punctured_output(Symbol_count,tt+1536) = 1;        end    endendTime_Dom_Symbol_2048_rx_fft=[];punctured_output_FIB(1,:) = punctured_output(1,1:2304);punctured_output_FIB(2,:) = [punctured_output(1,2305:3072),punctured_output(2,1:1536)];punctured_output_FIB(3,:) = [punctured_output(2,1537:3072),punctured_output(3,1:768)];punctured_output_FIB(4,:) = punctured_output(3,769:3072);   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   %%%%%%%%%%%%%%%% Viterbi decoding   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%NO_OF_DATA_BITS  = 768;decoder_outputFIB(1,:) = Viterbi_decoder_FIC_BER(punctured_output_FIB(1,:),768);decoder_outputFIB(2,:) = Viterbi_decoder_FIC_BER(punctured_output_FIB(2,:),768);decoder_outputFIB(3,:) = Viterbi_decoder_FIC_BER(punctured_output_FIB(3,:),768);decoder_outputFIB(4,:) = Viterbi_decoder_FIC_BER(punctured_output_FIB(4,:),768);   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   %%%%%%%%%%%%%%%% Descrambling   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%for i= 1:1:4    decoder_output(i,:) = DeScrambler(decoder_outputFIB(i,:),NO_OF_DATA_BITS);endcrc_rxed_buff = zeros(1,12);            % crc recieved storage buffer.crc_mismatch_counter = 0;               % crc mismatch counter.crc_match_counter = 0;crc_mismatch_flag = 0;dab_mode=1;        % dummy expression.if dab_mode==1    no_of_fibs=3;elseif dab_mode==2    no_of_fibs=3;elseif dab_mode==3    no_of_fibs=4;elseif dab_mode==4    no_of_fibs=6;endkk=1;decoder_output_packed = zeros([1 96*4]);for i=1:1:NO_OF_DATA_BITS/8    for j=1:8        decoder_output_packed(kk) = bitshift( decoder_output_packed(i) , 1 );        decoder_output_packed(kk) = bitor( decoder_output(1, (i-1)*8 + j ) , decoder_output_packed(kk) );    end    kk=kk+1;endfor i=1:1:NO_OF_DATA_BITS/8    for j=1:8        decoder_output_packed(kk) = bitshift( decoder_output_packed(i+96) , 1 );        decoder_output_packed(kk) = bitor( decoder_output(2, (i-1)*8 + j ) , decoder_output_packed(kk) );    end    kk=kk+1;endfor i=1:1:NO_OF_DATA_BITS/8    for j=1:8        decoder_output_packed(kk) = bitshift( decoder_output_packed(i+192) , 1 );        decoder_output_packed(kk) = bitor( decoder_output(3, (i-1)*8 + j ) , decoder_output_packed(kk) );    end    kk=kk+1;endfor i=1:1:NO_OF_DATA_BITS/8    for j=1:8        decoder_output_packed(kk) = bitshift( decoder_output_packed(i+288) , 1 );        decoder_output_packed(kk) = bitor( decoder_output(4, (i-1)*8 + j ) , decoder_output_packed(kk) );    end    kk=kk+1;end%___________________EXTRACTION OF  CRC FROM FIB JUST RECEIVED___________________j=1;for i=31:32:4*32*no_of_fibs    crc_rxed_buff(j)=decoder_output_packed(i);     %extracting first higher byte of crc received.    crc_rxed_buff(j)= bitshift(crc_rxed_buff(j),8);     %left shift buffer by 8 bits.    i=i+1;                                  % incrementing fic data buffer.    crc_rxed_buff(j) = bitor(crc_rxed_buff(j),decoder_output_packed(i));    j=j+1;end%_____________________CRC CALCULATION AND COMPARISON__________________________________________________j=1;for i=1:32:no_of_fibs*32*4    temph(j)=crc_calc(i,4*no_of_fibs,decoder_output_packed);    if crc_rxed_buff(j) == temph(j)     %higher byte crc comparison %comapre the calculated and recived crc        j=j+1;        crc_match_counter = crc_match_counter+1;    else                                              %if crc values doesnt match then increment counter        j=j+1;        crc_mismatch_counter = crc_mismatch_counter+1;      % increment the mismatch counter.        crc_mismatch_flag=1;                              % set crc mismatch flag and abort the process.        %        break;    end    i=i-1;end clc;disp('               Output ');disp('CoarseTimeOffset ');disp(CoarseTimeOffset);disp('Fine Time Offset ');  disp(timing_value);disp('Coarse Freq Offset ');  disp(Cooffset);disp('Fine Freq Offset ');  disp(outputphase);disp('No of CRC Mismatch ');  disp(crc_mismatch);if crc_mismatch>0    disp('CRC Check Failed');else    disp('CRC Check passed');endprog_end = 1;

⌨️ 快捷键说明

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