setnoise.m
上传用户:loeagle
上传日期:2013-03-02
资源大小:1236k
文件大小:4k
源码类别:

通讯编程文档

开发平台:

Matlab

  1. % opens slider for noise variance
  2. function setnoise(varianz,action)
  3. % find simulink system
  4. system = get_param(0,'CurrentSystem');
  5. if isempty(system)
  6.   disp('No system found.');
  7. else
  8.   while ~isempty(get_param(system,'Parent'))
  9.     system = get_param(system,'Parent');
  10.   end;
  11.   % check if system exists
  12.   if ~(exist(system) == 4)
  13.     disp(['no system  ',system,' found.'])
  14.   else
  15.     % check if system has block Channel.
  16.     if (get_param([system,'/','Channel'],'Parent') ~= system)
  17.       disp(['System  ',system,' has no block Channel.'])
  18.     else
  19.       % no argument: read mask parameter variance
  20.       if nargin < 1
  21.         
  22.     varianz=get_param([system,'/','Channel'],'variance');
  23.        
  24.       end;
  25.       if ischar(varianz) 
  26. varianz = str2num(varianz); 
  27. end;
  28. % adapt variance to range of slider 
  29. if (varianz > 100)
  30. varianz = 100;
  31. set_param([system,'/','Channel'],'variance',num2str(varianz));
  32. elseif (varianz < 10^-10)
  33. varianz = 10^-10;
  34. set_param([system,'/','Channel'],'variance',num2str(varianz));
  35. end;
  36.       if (nargin<2)
  37.         action = 'start';
  38.       end;
  39.       if (strcmp(action,'start') | strcmp(action,'update'))
  40.          dekaden = 12;
  41.          max_limit = 100;
  42.          min_limit = max_limit / 10^dekaden;
  43.       end;
  44.       if strcmp(action,'start')
  45.         % do not open new window if one exists
  46.         if (isempty(findobj(0, 'Tag', 'Noise')))
  47. set(0,'Units','pixels');
  48. scnsize = get(0,'ScreenSize');
  49.   % open figure window
  50. figure ('Position', [40 scnsize(4)-460   100   400], ...
  51.   'Name', [system,'/','Noise'], ...
  52.   'Tag', 'Noise', ...
  53.   'NumberTitle', 'off', ...
  54.   'MenuBar', 'none' ...
  55.   );
  56. set(gcf,'DefaultTextColor','m');
  57. backcolor = get(gcf,'Color');
  58. if (backcolor == [1 1 1])
  59. scalcolor = [0 0 0];
  60. else
  61. scalcolor = [1 1 1];
  62. end;
  63.   % ---------------------------------------
  64.   % Slider 
  65.   % ---------------------------------------
  66.   text = uicontrol(gcf, ...
  67.   'Tag', 'VarianzTextfeld', ...
  68.   'Style', 'text', ...
  69.   'Units', 'normalized', ...
  70.           'Position', [.1 .85 .8 .1], ...
  71.   'BackgroundColor', 'red', ...
  72.   'ForegroundColor', 'white', ...
  73.   'String', sprintf('VariancenStd^2n%1.3f',varianz) ...
  74.   );
  75.       
  76.       
  77.   cb = 'vs=findobj(gcf,''Tag'',''VarianzSlider''); ud=get(vs,''UserData''); max_limit=ud(1); min_limit=ud(2); dekaden=ud(3); val=get(vs,''Value''); setnoise(max_limit*10^(-dekaden+val),''update'');';
  78.   val = dekaden-log10(max_limit)+log10(varianz);
  79.   slider = uicontrol(gcf, ...
  80.   'Tag', 'VarianzSlider', ...
  81.   'Style', 'slider', ...
  82.           'Units', 'normalized', ...
  83.   'Position', [.2 .025 .2 .775], ...
  84.   'Min', 0, ...
  85.   'Max', dekaden, ...
  86.   'Value', val, ...
  87.   'Callback', cb, ...
  88.   'UserData', [max_limit min_limit dekaden] ...
  89.   );
  90.           % Scale
  91.   skala = axes('Parent',gcf, ...
  92.   'Box','off', ...
  93.   'Color',backcolor, ...
  94.   'Position',[.8 .060 .2 .700], ...
  95.   'Units', 'normalized', ...
  96.   'Tag','VarianzSkala', ...
  97.   'Visible','on', ...
  98.   'XColor',backcolor, ...
  99.   'XLimMode','manual', ...
  100.   'YColor',scalcolor, ...
  101.   'YLim',[min_limit max_limit], ...
  102.   'YLimMode','manual', ...
  103.   'YScale','log', ...
  104.   'ZColor',backcolor);
  105.         end;
  106.       end;
  107.       if strcmp(action, 'update')
  108.         set(0,'CurrentFigure',findobj(0,'Tag', 'Noise'));
  109.         
  110.         set(findobj(gcf,'Tag','VarianzTextfeld'),'String', sprintf('VariancenStd^2n%1.3f',variance));
  111.     set_param([system,'/','Channel'],'variance',num2str(varianz));
  112.      
  113.         drawnow;
  114.       end;
  115.     end;
  116.   end;
  117. end;
  118. clear action;