www.gusucode.com > ofdm结合2x2的m.. > ofdm结合2x2的m...构的WLAN环境数据传输仿真程序matlab版,包括信道估计和同步等模块/rx_find_packet_edge.m

    function detected_packet = rx_find_packet_edge(rx_signal, sim_options)

global sim_consts;

search_win = 800;
D = 16;

if sim_options.PacketDetection
   rx_len = length(rx_signal);
   
   % Calculate the delayd correlation
   delay_xcorr = rx_signal(:,1:search_win+2*D).*conj(rx_signal(:,1*D+1:search_win+3*D));
      
   % Moving average of the delayed correlation
   ma_delay_xcorr = abs(filter(ones(1,2*D), 1, delay_xcorr, [], 2));
   
   % Moving average of received power
   ma_rx_pwr = filter(ones(1,2*D), 1, abs(rx_signal(:,1*D+1:search_win+3*D)).^2,[], 2);
   
   % The decision variable
   delay_len = length(ma_delay_xcorr);
   ma_M = ma_delay_xcorr(:,1:delay_len)./ma_rx_pwr(:,1:delay_len);
         
   % remove delay samples
   ma_M(:,1:2*D) = [];
   
   % combine antennas, if rx diversity is used
   ma_M = sum(ma_M, 1);
   
   if ~sim_options.UseRxDiv
      threshold = 0.75;
   else
      threshold = 1.5;
   end
   
   thres_idx = find(ma_M > threshold);
   if isempty(thres_idx)
      thres_idx = 1;
   else
      thres_idx = thres_idx(1);
   end
   
else
   thres_idx = sim_consts.ExtraNoiseSamples;
end;

% check if the packet has been detected too late, 
% > sim_consts.extra_noise_samples + 35 index 
% is out of range of the fine timing algorithm
% This prevents simulation error for code running out samples
if thres_idx > sim_consts.ExtraNoiseSamples + 35
   thres_idx = 1;
end

detected_packet = rx_signal(:,thres_idx:length(rx_signal));