【信号处理】基于高阶统计量特征的通信系统中微弱信号检测附matlab代码

 1 内容介绍

高阶统计量被广泛地应用在雷达、通信,生物医学、故障诊断中。传统的信号检测方法在低信噪比高动态下的检测性能很差。而双谱对高斯白噪声是不敏感的、高动态和低信噪比都是不敏感的。使用高阶统计量用于检测高动态和低信噪比的微弱信号,在此条件下高阶统计量方法得到了的优良性能。在不同的动态和信噪比条件下的实验结果都显示了优良性能。​

2 仿真代码

function   y_cum = cum2est (y, maxlag, nsamp, overlap, flag)
%CUM2EST Covariance function.
%    Should be involed via "CUMEST" for proper parameter checks.
%    y_cum = cum2est (y, maxlag, samp_seg, overlap,  flag)

%           y: input data vector (column)
%      maxlag: maximum lag to be computed
%    samp_seg: samples per segment (<=0 means no segmentation)
%     overlap: percentage overlap of segments
%        flag: 'biased', biased estimates are computed
%              'unbiased', unbiased estimates are computed.
%       y_cum: estimated covariance,
%              C2(m)  -maxlag <= m <= maxlag
%    all parameters must be specified!


%  Copyright (c) 1991-2001 by United Signals & Systems, Inc. 
%       $Revision: 1.5 $
%  A. Swami   January 20, 1993


%     RESTRICTED RIGHTS LEGEND
% Use, duplication, or disclosure by the Government is subject to
% restrictions as set forth in subparagraph (c) (1) (ii) of the
% Rights in Technical Data and Computer Software clause of DFARS
% 252.227-7013.
% Manufacturer: United Signals & Systems, Inc., P.O. Box 2374,
% Culver City, California 90231.
%
%  This material may be reproduced by or for the U.S. Government pursuant
%  to the copyright license under the clause at DFARS 252.227-7013.

% C2(m) := E conj(x(n)) x(n+k)

% ----------  parameter checks are done by CUMEST  ----------------

   [n1,n2] = size(y);    N = n1*n2;

   overlap  = fix(overlap/100 * nsamp);
   nrecord  = fix( (N - overlap)/(nsamp - overlap) );
   nadvance = nsamp - overlap;

   y_cum    = zeros(maxlag+1,1);
   ind = 1:nsamp;

   for i=1:nrecord
       x = y(ind); x = x(:) - mean(x);     % make sure we have a colvec
       for k = 0:maxlag
           y_cum(k+1) = y_cum(k+1) + x([1:nsamp-k])' * x([k+1:nsamp]);
       end
       ind = ind + nadvance;
   end
   if (flag(1:1) == 'b' | flag(1:1) == 'B')
       y_cum = y_cum / (nsamp*nrecord);
   else
       y_cum = y_cum ./ (nrecord * (nsamp-[0:maxlag]' ));
   end
   if maxlag > 0,
      y_cum = [conj(y_cum(maxlag+1:-1:2)); y_cum];
   end

return

function   y_cum = cum4est (y, maxlag, nsamp, overlap, flag, k1, k2)
%CUM4EST Fourth-order cumulants.
%       Should be invoked via CUMEST for proper parameter checks
%       y_cum = cum4est (y, maxlag, samp_seg, overlap, flag, k1, k2)

%       Computes sample estimates of fourth-order cumulants
%       via the overlapped segment method.
%
%       y_cum = cum4est (y, maxlag, samp_seg, overlap, flag, k1, k2)
%              y: input data vector (column)
%         maxlag: maximum lag
%       samp_seg: samples per segment
%        overlap: percentage overlap of segments
%          flag : 'biased', biased estimates are computed
%               : 'unbiased', unbiased estimates are computed.
%      k1,k2 : the fixed lags in C3(m,k1) or C4(m,k1,k2); see below
%      y_cum : estimated fourth-order cumulant slice
%              C4(m,k1,k2)  -maxlag <= m <= maxlag
%     Note: all parameters must be specified


%  Copyright (c) 1991-2001 by United Signals & Systems, Inc. 
%       $Revision: 1.4 $
%  A. Swami   January 20, 1993

% Modified, Januar 20, 1994 to handle complex case properly:
% c4(t1,t2,t3) := cum( x^*(t), x(t+t1), x(t+t2), x^*(t+t3) )

%     RESTRICTED RIGHTS LEGEND
% Use, duplication, or disclosure by the Government is subject to
% restrictions as set forth in subparagraph (c) (1) (ii) of the
% Rights in Technical Data and Computer Software clause of DFARS
% 252.227-7013.
% Manufacturer: United Signals & Systems, Inc., P.O. Box 2374,
% Culver City, California 90231.
%
%  This material may be reproduced by or for the U.S. Government pursuant
%  to the copyright license under the clause at DFARS 252.227-7013.


% c4(t1,t2,t3) := cum( x^*(t), x(t+t1), x(t+t2), x^*(t+t3) )
%  cum(w,x,y,z) := E(wxyz) - E(wx)E(yz) - E(wy)E(xz) - E(wz)E(xy)
%  and, w,x,y,z are assumed to be zero-mean.


% ---- Parameter checks are done in CUMEST ----------------------
   [n1,n2]  = size(y);
   N        = n1 * n2;
   overlap0 = overlap;
   overlap  = fix(overlap/100 * nsamp);
   nrecord  = fix( (N - overlap)/(nsamp - overlap) );
   nadvance = nsamp - overlap;


% ------ scale factors for unbiased estimates --------------------

   nlags = 2 * maxlag + 1;
   zlag  = 1 + maxlag;
   tmp   = zeros(nlags,1);
   if (flag(1:1) == 'b'  || flag(1:1) == 'B')
       scale = ones(nlags,1) / nsamp;
   else
       ind   = [-maxlag:maxlag]';
       kmin  = min(0,min(k1,k2));
       kmax  = max(0,max(k1,k2));
       scale = nsamp - max(ind,kmax) + min(ind,kmin);
       scale = ones(nlags,1) ./ scale;
   end
   mlag  = maxlag + max(abs([k1,k2]));
   mlag  = max( mlag, abs(k1-k2) );
   mlag1 = mlag + 1;
   nlag  = maxlag;
   m2k2  = zeros(2*maxlag+1,1);

   if (any(any(imag(y) ~= 0))) complex_flag = 1;
   else complex_flag = 0;
   end

% ----------- estimate second- and fourth-order moments; combine ------

   y_cum  = zeros(2*maxlag+1,1);
   R_yy   = zeros(2*mlag+1,1);

   ind   = 1:nsamp;
   for i=1:nrecord
       tmp = y_cum * 0 ;
       x = y(ind); x = x(:) - mean(x);  z =  x * 0;  cx = conj(x);
%                     create the "IV" matrix: offset for second lag

       if (k1 >= 0)
               z(1:nsamp-k1)  = x(1:nsamp-k1,:) .* cx(k1+1: nsamp,:);
       else
               z(-k1+1:nsamp) = x(-k1+1:nsamp)  .* cx(1:nsamp+k1);
       end

%                     create the "IV" matrix: offset for third lag

       if (k2 >= 0)
          z(1:nsamp-k2) = z(1:nsamp-k2) .* x(k2+1: nsamp);
          z(nsamp-k2+1:nsamp) = zeros(k2,1);
       else
          z(-k2+1:nsamp) = z(-k2+1:nsamp) .* x(1:nsamp+k2);
          z(1:-k2)    = zeros(-k2,1);
       end

       tmp(zlag)  =  tmp(zlag) + z' * x;
       for k = 1:maxlag
           tmp(zlag-k) = tmp(zlag-k) + z([k+1:nsamp])' * x([1:nsamp-k]);
           tmp(zlag+k) = tmp(zlag+k) + z([1:nsamp-k])' * x([k+1:nsamp]);
       end

       y_cum = y_cum + tmp .* scale ;

       R_yy = cum2est(x,mlag,nsamp,overlap0,flag);
       if (complex_flag)    % We need E x(t)x(t+tau) stuff also:
              M_yy  = cum2x(conj(x),x,mlag,nsamp,overlap0,flag);
       else
           M_yy  = R_yy;
       end
       y_cum = y_cum ...
           - R_yy(mlag1+k1) * R_yy(mlag1-k2-nlag:mlag1-k2+nlag) ...
           - R_yy(k1-k2+mlag1) * R_yy(mlag1-nlag:mlag1+nlag)  ...
           - M_yy(mlag1+k2)' * M_yy(mlag1-k1-nlag:mlag1-k1+nlag) ;

       ind = ind + nadvance;
end

y_cum = y_cum / nrecord;
return
 

3 运行结果

4 参考文献

[1]翟逸群, 黄建国, 张群飞,等. 基于高阶统计量的高动态微弱信号检测[C]// 第七届全国信号和智能信息处理与应用学术会议会刊. 2013.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值