⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setnoise.m

📁 很多通信系统的matlab程序,便于修改调用
💻 M
字号:
% opens slider for noise variance
function setnoise(varianz,action)

% find simulink systemsystem = get_param(0,'CurrentSystem');
if isempty(system)
  disp('No system found.');
else
  while ~isempty(get_param(system,'Parent'))
    system = get_param(system,'Parent');
  end;

  % check if system exists  if ~(exist(system) == 4)
    disp(['no system  ',system,' found.'])
  else

    % check if system has block Channel.    if (get_param([system,'/','Channel'],'Parent') ~= system)
      disp(['System  ',system,' has no block Channel.'])
    else

      % no argument: read mask parameter variance      if nargin < 1
        	    varianz=get_param([system,'/','Channel'],'variance');             end;
      if ischar(varianz) 		varianz = str2num(varianz); 	end;
	% adapt variance to range of slider 	if (varianz > 100)		varianz = 100;		set_param([system,'/','Channel'],'variance',num2str(varianz));	elseif (varianz < 10^-10)		varianz = 10^-10;		set_param([system,'/','Channel'],'variance',num2str(varianz));	end;      if (nargin<2)
        action = 'start';
      end;

      if (strcmp(action,'start') | strcmp(action,'update'))

         dekaden = 12;
         max_limit = 100;
         min_limit = max_limit / 10^dekaden;
	
      end;	

      if strcmp(action,'start')

        % do not open new window if one exists        if (isempty(findobj(0, 'Tag', 'Noise')))
	set(0,'Units','pixels');	scnsize = get(0,'ScreenSize');	  % open figure window	figure ('Position', [40 scnsize(4)-460   100   400], ...		  'Name', [system,'/','Noise'], ...
		  'Tag', 'Noise', ...
		  'NumberTitle', 'off', ...
		  'MenuBar', 'none' ...
		  );
	set(gcf,'DefaultTextColor','m');
	backcolor = get(gcf,'Color');	if (backcolor == [1 1 1])		scalcolor = [0 0 0];	else		scalcolor = [1 1 1];	end;		  % ---------------------------------------	  % Slider 	  % ---------------------------------------		  text = uicontrol(gcf, ...
		  'Tag', 'VarianzTextfeld', ...
		  'Style', 'text', ...
		  'Units', 'normalized', ...          'Position', [.1 .85 .8 .1], ...
		  'BackgroundColor', 'red', ...
		  'ForegroundColor', 'white', ...
		  'String', ['Variance',13,'(Std^2)',13,num2str(varianz)] ...
		  );
	
	  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'');';

	  val = dekaden-log10(max_limit)+log10(varianz);

	  slider = uicontrol(gcf, ...
		  'Tag', 'VarianzSlider', ...
		  'Style', 'slider', ...          'Units', 'normalized', ...
		  'Position', [.2 .025 .2 .775], ...
		  'Min', 0, ...
		  'Max', dekaden, ...
		  'Value', val, ...
		  'Callback', cb, ...
		  'UserData', [max_limit min_limit dekaden] ...
		  );

          % Scale
	  skala = axes('Parent',gcf, ...
		  'Box','off', ...
		  'Color',backcolor, ...
		  'Position',[.8 .060 .2 .700], ...
		  'Units', 'normalized', ...
		  'Tag','VarianzSkala', ...
		  'Visible','on', ...
		  'XColor',backcolor, ...
		  'XLimMode','manual', ...
		  'YColor',scalcolor, ...
		  'YLim',[min_limit max_limit], ...
		  'YLimMode','manual', ...
		  'YScale','log', ...
		  'ZColor',backcolor);

        end;

      end;

      if strcmp(action, 'update')

        set(0,'CurrentFigure',findobj(0,'Tag', 'Noise'));

        set(findobj(gcf,'Tag','VarianzTextfeld'),'String', ['Variance',13,'(Std^2)',13,num2str(varianz)]);

	set_param([system,'/','Channel'],'variance',num2str(varianz));     
        drawnow;

      end;
    end;
  end;
end;

clear action;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -