gendens.m
上传用户:haiyisale
上传日期:2013-01-09
资源大小:3246k
文件大小:2k
源码类别:

波变换

开发平台:

Matlab

  1. function gendens(opt,nb,fname)
  2. %GENDENS Generate random samples.
  3. %   GENDENS(OPT,NB,FNAME) generates random samples of 
  4. %   length NB from a given density and stores the result
  5. %   in a MAT-file of name FNAME.
  6. %
  7. %   OPT = 1, y = c1*exp(-128*((x-0.3).^2))-3*(abs(x-0.7).^0.4)
  8. %   OPT = 2, y = c2*exp(-128*((x-0.3).^2))-1*(abs(x-0.7).^0.4)
  9. %   OPT = 3, Gaussian density
  10. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 02-Jun-99.
  11. %   Last Revision: 14-Jun-1999.
  12. %   Copyright 1995-2002 The MathWorks, Inc.
  13. %   $Revision: 1.5 $  $Date: 2002/04/14 19:47:48 $
  14. ingen = 1;
  15. switch opt
  16.   case 1
  17.     x = linspace(0,1,max(3*nb,100)); 
  18.     y = exp(-128*((x-0.3).^2))-3*(abs(x-0.7).^0.4);
  19.     eval([fname, ' = genSIG(x,y,nb,ingen);'])
  20.   case 2
  21.     x = linspace(0,1,max(3*nb,100)); 
  22.     y = exp(-128*((x-0.3).^2))-1*(abs(x-0.7).^0.4);
  23.     eval([fname, ' = genSIG(x,y,nb,ingen);'])
  24.   case 3
  25.     eval([fname,' = randn(1,nb);'])
  26.   otherwise
  27.     msg = 'input argument must be 1,2 or 3';
  28.     errargt(mfilename,msg,'msg');
  29.     error('*');
  30. end
  31. eval(['save ',fname,' ',fname])
  32. function sig = genSIG(x,y,nb,ingen)
  33. y = y-[(y(end)-y(1))*x+y(1)]+sqrt(eps);
  34. d = y/sum(y);
  35. r = randd(d,nb,ingen);
  36. sig = x(r);
  37. function r = randd(proba,nb,ingen)
  38. reps = sqrt(eps);
  39. s = sum(proba);
  40. if s<(1-reps) | s>(1+reps)
  41.   msg = 'Invalid argument value for proba'; 
  42.   errargt(mfilename,msg,'msg');
  43.   error('*');
  44. end
  45. n = length(proba);
  46. q = cumsum(proba);
  47. tab = [[0 q]' [0:n]'];
  48. rand('seed',ingen);
  49. u = rand(nb,1);
  50. % Since table1 is obsolete, use interp1.
  51. %r = 1 + fix(table1(tab,u));
  52. r = 1 + fix(interp1(tab,u));