📄 setnoise.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 + -