www.gusucode.com > 语音信号处理工具箱 - Voicebox源码程序 > Voicebox\randvec.m

    function x=randvec(n,m,c)
%RANDVEC  Generate gaussian random vectors X=(N,M,C)
% generates a random matrix of size (n,p) where p is the maximum dimension of m or c
% Each row of x is independent with mean m and covariance matrix c
% m or c (but not both) may be scalars and c defaults to the identity matrix



%      Copyright (C) Mike Brookes 1998
%
%      Last modified Fri Apr  3 14:57:18 1998
%
%   VOICEBOX home page: http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%   This program is free software; you can redistribute it and/or modify
%   it under the terms of the GNU General Public License as published by
%   the Free Software Foundation; either version 2 of the License, or
%   (at your option) any later version.
%
%   This program is distributed in the hope that it will be useful,
%   but WITHOUT ANY WARRANTY; without even the implied warranty of
%   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
%   GNU General Public License for more details.
%
%   You can obtain a copy of the GNU General Public License from
%   ftp://prep.ai.mit.edu/pub/gnu/COPYING-2.0 or by writing to
%   Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

k=length(m);
mm=m(:).';
if nargin<3
   x=randn(n,k)+mm(ones(n,1),:);
else
  [i,j]=size(c);
  l=max([i,j,k]);
  if i==j
     if i==1
        x=randn(n,l).*sqrt(abs(c))+mm(ones(n,1),:);
     else
        [v,d]=eig(c+c.');
        cc=sqrt(abs(diag(0.5*d))).';
        if k==l
           x=(randn(n,l).*cc(ones(n,1),:))*v.'+mm(ones(n,1),:);
        else
           x=(randn(n,l).*cc(ones(n,1),:))*v.'+mm(1);
        end
     end
  else
     cc=sqrt(abs(c(:).'));
     if k==l
        x=randn(n,l).*cc(ones(n,1),:)+mm(ones(n,1),:);
     else
        x=randn(n,l).*cc(ones(n,1),:)+mm(1);
     end
     
  end
  
  
end