subsamp.m
上传用户:m_sun_001
上传日期:2014-07-30
资源大小:1115k
文件大小:2k
源码类别:

matlab例程

开发平台:

Matlab

  1. function Y=subsamp(X,N,ph,avg)
  2. %SUBSAMP Subsamples the input X by an amount N, using averaging
  3. %  Y=subsamp(X,N)
  4. %  The samples are subsampled as rows. Thus if X is a matrix
  5. %  each row is subsampled.
  6. %  If the length of X is not a multiple of N samples then remaining
  7. %  samples are ignored.
  8. %
  9. %  Y=subsamp(X,N,ph)
  10. %  ph = 0 : This takes the standard averaging of the data when
  11. %     subsampling the signal.
  12. %  ph = 1 : This averages data assuming that it is phase data. This
  13. %     compensates for phase wrap around.
  14. %
  15. %  Y=subsamp(X,N,ph,avg)
  16. %  avg = 0 : This uses standard averaging to calculate the mean data.
  17. %  avg = 1 : This uses the stdmean function to do a weighted average
  18. %    instead.
  19. %  See : ZEROHOLD, STDMEAN
  20. %
  21. %  Copyright (c) July 1997 Eric Lawrey
  22. %Modified:
  23. % 10/7/97 Started function. This function is finished and tested.
  24. % 6/8/97 Added the option to use the stdmean function instead of the
  25. % standard averaging. Early tests have shown that it does
  26. % not improve the performance of the COFDM system.
  27. % External Functions:
  28. % stdmean.m
  29. X=X(:,1:floor(size(X,2)/N)*N);
  30. if (size(X,2) > 1)&(N>1),
  31. if nargin < 4,
  32. avg = 0; %If avg not given set the default
  33. elseif nargin < 3,
  34. ph = 0; %Set to the default if no given
  35. avg = 0; %i.e use standard averaging using the mean
  36. end
  37. if ph == 0,
  38. Y = zeros(size(X,1),size(X,2)/N);
  39. for k = 1:size(X,1),
  40. if avg ==0,
  41. Y(k,:)=mean(reshape(X(k,:),N,size(X,2)/N));
  42. else
  43. Y(k,:)=stdmean(reshape(X(k,:),N,size(X,2)/N));
  44. end
  45. end
  46. else
  47. Y = zeros(size(X,1),size(X,2)/N);
  48. for k = 1:size(X,1),
  49. % Y(k,:)=mean(reshape(X(k,:),N,size(X,2)/N));
  50. ang = (reshape(X(k,:),N,size(X,2)/N)*2*pi/360).';
  51. mag = ones(size(ang));
  52. [x,y] = pol2cart(ang,mag);
  53. if avg == 0,
  54. AvX = mean(x')';
  55. AvY = mean(y')';
  56. else
  57. AvX = stdmean(x',(-2))';
  58. AvY = stdmean(y',(-2))';
  59. end
  60. [ang,mag] = cart2pol(AvX,AvY);
  61. Y(k,:) = (ang.') * 360/(2*pi);
  62. end
  63. end
  64. else
  65. Y=X;
  66. end