sbiterr.m
上传用户:loeagle
上传日期:2013-03-02
资源大小:1236k
文件大小:24k
- function [sys, x0, str, ts] = sbiterr(t,x,u,flag, numLine, K, timeDelay, sampleTime)
- % SBITERR: S-function for display symbol and bit error
- % This M-file is designed to be used in a Simulink S-function block.
- %
- %WARNING: This is an obsolete function and may be removed in the future.
- % [SYS, X0, STR, TS] = SBITERR(T, X, U, FLAG, NUMLINE, K, TIMEDELAY, SAMPLETIME)
- % NUMLINE: number of lines on display.
- % K: bit number. Input/Output are in the range (0, K-1)
- % TIMEDELAY: time delay from Input to Output
- % SAMPLETIME:sample time of the input signal
- %
- % See also: PlOT, SFUNYST, SFUNXY.
- % Copyright 1996-2001 The MathWorks, Inc.
- % $Revision: 1.31 $
- % Original designed by Wes Wang 1/14/95
- % Rewritten by Jun Wu 09/16/97
- switch flag,
- %%%%%%%%%%%%%%%%%%
- % Initialization %
- %%%%%%%%%%%%%%%%%%
- case 0,
- [sys,x0,ts]=mdlInitializeSizes(numLine, K, timeDelay, sampleTime);
- SetBlockCallbacks(gcbh);
- %%%%%%%%%%
- % Update %
- %%%%%%%%%%
- case 2,
- sys=mdlUpdate(t,x,u,numLine, K, timeDelay, sampleTime);
- %%%%%%%%%
- % Start %
- %%%%%%%%%
- case 'Start'
- LocalBlockStartFcn
- %%%%%%%%
- % Stop %
- %%%%%%%%
- case 'Stop'
- LocalBlockStopFcn
- %%%%%%%%%%%%%%
- % NameChange %
- %%%%%%%%%%%%%%
- case 'NameChange'
- LocalBlockNameChangeFcn
-
- %%%%%%%%%%%%%
- % Load,Copy %
- %%%%%%%%%%%%%
- case { 'LoadBlock', 'CopyBlock' }
- LocalBlockLoadCopyFcn
-
- %%%%%%%%%%%%%%%
- % DeleteBlock %
- %%%%%%%%%%%%%%%
- case 'DeleteBlock'
- LocalBlockDeleteFcn
-
- %%%%%%%%%%%%%%%%
- % DeleteFigure %
- %%%%%%%%%%%%%%%%
- case 'DeleteFigure'
- LocalFigureDeleteFcn
- %%%%%%%%%%%%%%%%%%%
- % Unhandled flags %
- %%%%%%%%%%%%%%%%%%%
- case { 3, 9 }
- sys=[];
- %%%%%%%%%%%%%%%%%%%%
- % Unexpected flags %
- %%%%%%%%%%%%%%%%%%%%
- otherwise
- if ischar(flag),
- errmsg=sprintf('Unhandled flag: '' %s''', flag);
- else
- errmsg=sprintf('Unhandled flag: %d', flag);
- end
- error(errmsg);
- end
- % end sbiterr
- %
- %=============================================================================
- % mdlInitializeSizes
- % Return the sizes, initial conditions, and sample times for the S-function.
- %=============================================================================
- %
- function [sys,x0,ts]=mdlInitializeSizes(numLine, K, timeDelay, sampleTime)
- % Keep number of states
- numStates = max(0, ceil(timeDelay/sampleTime(1)*(1-10*eps))) + 1;
- if timeDelay < 0
- error('Time delay cannot be negative.');
- end;
- if length(sampleTime) < 1
- error('Sample time cannot be empty.');
- elseif length(sampleTime) == 1
- sampleTime = [sampleTime, 0];
- else
- sampleTime = sampleTime(:)';
- sampleTime = sampleTime(1:2);
- end;
- if rem( timeDelay + sampleTime(2), sampleTime(1) ) == 0
- sampleTime2 = [];
- numSampleTime = 1;
- else
- sampleTime2 = [ sampleTime(1), rem( timeDelay + sampleTime(2), sampleTime(1) ) ];
- if sampleTime2(2) / sampleTime2(1) < sqrt(eps)
- sampleTime2(2) = 0;
- end;
- numSampleTime = 2;
- if ( abs(sampleTime(1) - sampleTime2(1)) < sqrt(eps) ) ...
- & ( abs(sampleTime(2) - sampleTime2(2)) < sqrt(eps) )
- numSampleTime = 1;
- sampleTime2 = [];
- end;
- end;
- %
- % initialize the array of sample times
- %
- if sampleTime <= 0
- error('Sample Time for error rate meter has to be larger than zero.');
- end;
- ts = [ sampleTime; sampleTime2 ];
- %
- % call simsizes for a sizes structure, fill it in and convert it to a sizes array.
- %
- sizes = simsizes;
- sizes.NumContStates = 0;
- sizes.NumDiscStates = numStates + 6;
- sizes.NumOutputs = 0;
- sizes.NumInputs = -1; % dynamically sized input vector
- sizes.DirFeedthrough = 0; % the meter does not have direct feedthrough
- sizes.NumSampleTimes = numSampleTime;
- sys = simsizes(sizes);
- if isempty(sampleTime2)
- sampleTime2 = sampleTime;
- end;
- %
- % initialize the initial condition
- %
- x0 = [0; numStates; % figure number. 0 indicates the first
- zeros(numStates, 1);
- numSampleTime; sampleTime(1);
- sampleTime(2); sampleTime2(2)]; % number of states
- %
- % str is always an empty matrix
- %
- str = [];
- % end mdlInitializeSizes
- %
- %=============================================================================
- % mdlUpdate
- % Handle discrete state updates, sample time hits, and major time step
- % requirements.
- %=============================================================================
- %
- function sys=mdlUpdate(t, x, u, numLine, K, timeDelay, sampleTime)
- sys = [];
- %
- % Locate the figure window associated with this block. If it's not a valid
- % handle (it may have been closed by the user), then return.
- %
- figureHandle = GetSBiterrFigure(gcbh);
- if ~ishandle(figureHandle)
- return;
- end;
- %
- %timing control.
- %
- colorMap = ['blue ';'black';'red '];
- positionNumSampleTime = x(2) + 3;
- sampleTime1 = [ x( positionNumSampleTime + [1:2] ) ];
- if x(positionNumSampleTime) == 1
- sampleTime2 = sampleTime1;
- else
- sampleTime2 = [ x(positionNumSampleTime + [1;3]) ];
- end;
- relError = rem(t, sampleTime1(1)) / sampleTime1(1);
- test1 = abs(relError - sampleTime1(2) /sampleTime1(1));
- test2 = abs(relError - sampleTime1(2) /sampleTime1(1));
- if (test1 < .0000001) | (abs(test1 - 1)< .0000001)
- % storage part
- if x(2) > 0
- x(3:2+x(2)) = [x(4:2+x(2)); u(1)];
- else
- x(3) = u(1);
- end;
- sys = x;
- end;
- % get the number of inputs.
- inputLength = length(u);
- if inputLength < 2
- error('Source or destination is empty.');
- end;
- if K == 1;
- bitLength = 3;
- hdlRcdLength = 2 * inputLength - 1;
- else
- bitLength = 6;
- hdlRcdLength = 4 * inputLength - 2;
- end;
- % This part is only for giving user a warning about the size of the window
- if x(1) == 0
- if numLine >= 40 | inputLength >= 7
- warnmsg=sprintf('Please resize your Bit Error Meter to get a better looking.');
- warning(warnmsg);
- end;
- end;
- if (test2 < .0000001) | (abs(test2 - 1)< .0000001)
- % plot part
- if t < timeDelay
- sys = x;
- return;
- end;
- % initialize graph.
- if x(1) == 0
- sl_name = gcs;
- block = get_param(sl_name, 'CurrentBlock');
-
- [n_b, m_b] = size(block);
- if n_b < 1
- error('Cannot delete block during simulation.')
- elseif n_b > 1
- error('Something wrong in get_param. You don''t have the current Simulink.')
- end;
-
- % test if figure exists
- allFiguresExist = allchild(0);
- new_figure = 1;
- i = 1;
- while ((new_figure) & (i <= length(allFiguresExist)))
- if strcmp(get(allFiguresExist(i), 'Type'), 'figure')
- if strcmp(get(allFiguresExist(i), 'Name'), sl_name)
- figureHandle = allFiguresExist(i);
- handles = get(figureHandle,'UserData');
- new_figure = 0;
- % refresh all handles.
- if (length(handles) == 1+length(u) * (num_lin + 2) - ((K>1) + 1)*2)
- %use the old one.
- for ii = 3 : length(handles)
- set(handles(ii), 'String', ' ');
- end
- current_point = 0;
- if K == 1
- h_sym_bit = handles(2 : length(u)*2);
- handleRecord = handles(length(u)*2+1 : length(handleRecord));
- for i = 1 : 2: length(u) * 2
- set(h_sym_bit(i) , 'UserData', 0);
- end;
- else
- h_sym_bit = handles(2 : length(u)*4-1);
- handleRecord = handles(length(u)*4 : length(handleRecord));
- t_tras(1) = get(h_sym_bit, 'UserData') + 1;
- t_tras(2) = get(h_sym_bit(length(u)*2), 'UserData') + K;
- end;
- set(figureHandle, 'UserData', [current_point, h_sym_bit, handleRecord]);
- set_param(sl_name, 'userdata', figureHandle);
- else
- delete(get(figureHandle,'child'));
- old_figure = 1;
- new_figure = 1;
- end;
- end;
- end;
- i = i + 1;
- end;
-
- % Input/Output
- if numLine < 0
- numLine = 0;
- end;
- totalLine = 1 + numLine + bitLength + 1;
-
- set(figureHandle, ...
- 'Visible', 'on');
- handleAxes = axes(...
- 'position', [0 0 1 1],...
- 'visible', 'off',...
- 'Parent', figureHandle...
- );
-
- tmp_x = [];
- tmp_y = [];
- for ii = 1 : totalLine
- tmp_x = [tmp_x 0 1 NaN];
- tmp_y = [tmp_y ii/totalLine ii/totalLine NaN];
- end;
-
- linePlot = plot(...
- tmp_x, tmp_y, 'k-', ...
- 'Parent', handleAxes,...
- 'linewidth',1);
- set(handleAxes,...
- 'Xtick', [],...
- 'Ytick', []...
- );
-
- for i = 1 : inputLength
- % title string
- if i == 1
- titleString = 'Sender';
- else
- % only display 8 digits of the amount of receivers
- titleString = ['Receiver',num2str(i-1, 8)];
- if inputLength == 2
- titleString = 'Receiver';
- end
- if numLine > 0
- set(linePlot, ...
- 'XData', [get(linePlot, 'XData') ...
- [1 1]*(i-1)/inputLength NaN],...
- 'YData', [get(linePlot, 'YData') ...
- (totalLine-numLine-1)/totalLine 1 NaN]...
- );
- end;
- end;
-
- % set up the title of both of sender and receivers
- p_beg1 = (i - 1) / inputLength + .001;
- p_wid = 1 / inputLength - .002;
- uicontrol(...
- figureHandle, ...
- 'Style', 'text', ...
- 'Horiz', 'center',...
- 'Unit', 'normalized',...
- 'position',[p_beg1, ...
- (totalLine - 1)/totalLine+.001, p_wid, 1/totalLine-.002], ...
- 'String', titleString);
-
- %space for list of transferred number.
- p_beg = (2*i - 1) / 2 / inputLength;
- if numLine > 0
- for ii = 1 : numLine
- index = (ii-1) * inputLength;
- handleRecord(index + i) = text(...
- p_beg, (2*totalLine - 2*ii - 1)/2/totalLine, ' ',...
- 'Parent', handleAxes);
- set(...
- handleRecord(index + i), ...
- 'FontSize', 9,...
- 'Color',[0 0 0],...
- 'HorizontalA','Center',...
- 'VerticalA', 'Middle');
- end;
- set(handleRecord(1), 'UserData',1);
- elseif numLine == 0
- handleRecord = [];
- end;
-
- % transfer error rate
- if K > 1
- len_rate = 2;
- else
- len_rate = 1;
- end;
- kk = 0;
- for ii = 1 : len_rate
- if i == 1
- if ii == 1
- titleString = 'Symbol Transferred';
- trsf = 1;
- indx = 1;
- else
- titleString = 'Bit Transferred';
- trsf = K;
- indx = inputLength * 2;
- end;
-
- % Symbol/bit transferred title
- uicontrol(...
- figureHandle, ...
- 'Style', 'text', ...
- 'Units', 'normalized',...
- 'Position',[0, ((len_rate - ii) * 3 + 2 + 1)/totalLine+.001,...
- .499, 1/totalLine-.002],...
- 'String',titleString, ...
- 'BackgroundColor','yellow');
- set(...
- linePlot, ...
- 'XData', [get(linePlot, 'XData') .5 .5 NaN],...
- 'YData', [get(linePlot, 'YData'),...
- ((len_rate - ii)* 3 + 2 + 1)/totalLine,...
- ((len_rate - ii)* 3 + 3 + 1)/totalLine,...
- NaN]...
- );
-
- % Symbol/bit transferred data
- h_sym_bit(indx) = text(...
- .75, ...
- ((len_rate-ii)*3*2 + 5 + 2)/2/totalLine,...
- num2str(trsf, 8),...
- 'Parent', handleAxes);
- set(h_sym_bit(indx),...
- 'FontSize', 9,...
- 'UserData', 0,...
- 'Color',[0 0 0],...
- 'HorizontalA','Center',...
- 'VerticalA', 'Middle');
- % title for error number
- uicontrol(figureHandle, ...
- 'Style', 'text', ...
- 'Units', 'normalized',...
- 'Position', [p_beg1,...
- ((len_rate - ii) * 3 + 1 + 1)/totalLine+.001, ...
- p_wid, 1/totalLine-.002],...
- 'String','Error Number');
- % title for error rate
- uicontrol(figureHandle,...
- 'Style', 'text',...
- 'Units', 'normalized',...
- 'Position', [p_beg1, ...
- ((len_rate - ii) * 3 + 1)/totalLine+.001,...
- p_wid, 1/totalLine-.002],...
- 'String','Error Rate');
- else
- %error number
- kk = (i-1)*2 + (inputLength * 2 - 1)*(ii - 1);
- set(linePlot, ...
- 'XData', [get(linePlot, 'XData') [p_beg1 p_beg1]-.001 NaN],...
- 'YData', [get(linePlot, 'YData'),...
- ((len_rate - ii)* 3 + 1)/totalLine,...
- ((len_rate - ii)* 3 + 2 + 1)/totalLine,...
- NaN]);
-
- h_sym_bit(kk) = text(p_beg, ...
- ((len_rate-ii)*3*2 + 3 + 2)/2/totalLine,...
- '0',...
- 'Parent', handleAxes);
- set(h_sym_bit(kk), ...
- 'UserData', 0,...
- 'FontSize', 9,...
- 'Color',[0 0 0],...
- 'HorizontalA','Center',...
- 'VerticalA', 'Middle');
- %error rate
- h_sym_bit(kk+1) = text(p_beg, ...
- ((len_rate-ii)*3*2 +1 + 2)/2/totalLine, ...
- '0',...
- 'Parent', handleAxes);
- set(h_sym_bit(kk+1), ...
- 'UserData', 0,...
- 'FontSize', 9,...
- 'Color',[0 0 0],...
- 'HorizontalA','Center',...
- 'VerticalA', 'Middle');
- end;
- end;
- end;
- set(handleAxes, 'Xlim',[0 1],...
- 'Ylim',[0 1])
- current_point = 0;
- set(figureHandle, 'UserData', [current_point, h_sym_bit, handleRecord]);
-
- x(1) = figureHandle;
- tmp1 = uicontrol(...
- figureHandle,...
- 'Style', 'pushbutton',...
- 'Unit', 'normalized',...
- 'Position', [0 0 .5 1/totalLine], ...
- 'String', 'Reset error count',...
- 'Callback',...
- ['sbiterrs(gcbf,',num2str(len_rate),',',num2str(inputLength),')']);
-
- tmp1 = uicontrol(...
- figureHandle,...
- 'Style', 'pushbutton',...
- 'Unit', 'normalized',...
- 'Position', [.5 0 .5 1/totalLine], ...
- 'String', 'Close',...
- 'Callback','close(gcbf)');
- elseif x(1) < 0
- % figure has been closed
- return;
- end;
-
- plot_flag_test = allchild(0);
- if isempty(plot_flag_test)
- return;
- elseif isempty(find(plot_flag_test == x(1)))
- x(1) = -1;
- return;
- end;
-
- inputLength = inputLength;
- handles = get(x(1), 'UserData');
- figureHandle = x(1);
- current_point = handles(1);
- if K == 1
- h_sym_bit = handles(2 : inputLength*2);
- handleRecord = handles(inputLength*2+1 : length(handles));
- t_tras = get(h_sym_bit(1), 'UserData') + 1;
- set(h_sym_bit(1), 'UserData', t_tras,...
- 'String', num2str(t_tras, 8));
- else
- h_sym_bit = handles(2 : inputLength*4-1);
- handleRecord = handles(inputLength*4 : length(handles));
- t_tras(1) = get(h_sym_bit(1), 'UserData') + 1;
- t_tras(2) = get(h_sym_bit(inputLength*2), 'UserData') + K;
- set(h_sym_bit(1), 'UserData', t_tras(1), ...
- 'String', num2str(t_tras(1), 8));
- set(h_sym_bit(inputLength*2), 'UserData', t_tras(2), ...
- 'String', num2str(t_tras(2), 8));
- end;
- if numLine > 0
- if current_point == 0
- set(handleRecord(1), 'UserData', rem(get(handleRecord(1), 'UserData') + 1, 2));
- end;
- col = colorMap(get(handleRecord(1), 'UserData') + 1, :);
- next_point = rem(current_point + 1, numLine);
- last_point = rem(current_point-1+numLine, numLine);
- else
- next_point = 0;
- last_point = 0;
- end;
- for i = 1 : inputLength
- if i == 1
- if numLine > 0
- set(handleRecord(current_point * inputLength + i), ...
- 'String', num2str(x(3), 8), 'Color',col);
- end;
- else
- if numLine > 0
- if u(i) == x(3)
- set(handleRecord(current_point * inputLength + i), ...
- 'String', num2str(u(i), 8), 'Color',col);
- else
- set(handleRecord(current_point * inputLength + i), 'String', ...
- num2str(u(i), 8), 'Color',colorMap(3,:));
- end
- end;
- if u(i) ~= x(3)
- % in case of error
- % number of errors
- num = get(h_sym_bit((i-1)*2), 'UserData') + 1;
- set(h_sym_bit((i-1)*2), 'UserData', num, 'String', num2str(num, 8));
- % errors rate
- set(h_sym_bit((i-1)*2+1), 'String', num2str(num/t_tras(1), 8));
- if K > 1
- % number
- kk = (i-1)*2 + (inputLength * 2 - 1);
- num = get(h_sym_bit(kk), 'UserData');
- erb = sum(de2bi(flxor(x(3), u(i))));
- erb = erb + num;
- set(h_sym_bit(kk), 'UserData', erb, 'String', num2str(erb, 8));
- % rate
- set(h_sym_bit(kk+1), 'String', num2str(erb/t_tras(2),8));
- end;
- else
- tmp = get(h_sym_bit((i-1)*2), 'UserData');
- if tmp
- set(h_sym_bit((i-1)*2 + 1), 'String', ...
- num2str(tmp / t_tras(1), 8));
- end;
- if K > 1
- kk = (i-1)*2 + (inputLength * 2 - 1);
- tmp = get(h_sym_bit(kk), 'UserData');
- if tmp
- set(h_sym_bit(kk + 1), 'String', ...
- num2str(tmp / t_tras(2), 8));
- end
- end;
- end;
- end
- end;
- current_point = next_point;
- sys = [figureHandle; x(2:length(x))];
- % save all the current displaying information in figureHandle
- set(figureHandle, 'UserData', [current_point, h_sym_bit, handleRecord]);
- %second in User data is the current position for the line of handleRecord.
- end;
- % end mdlUpdate
- %
- %=============================================================================
- % LocalFigureDeleteFcn
- % This is the Graph figure window's DeleteFcn. The figure window is
- % being deleted, update the Graph block's UserData to reflect the change.
- %=============================================================================
- %
- function LocalFigureDeleteFcn
- %
- % Get the block associated with this figure and set it's figure to -1
- %
- close(gcbf);
- % end LocalFigureDeleteFcn
- %
- %=============================================================================
- % LocalBlockStartFcn
- % Function that is called when the simulation starts. Initialize the
- % Graph scope figure.
- %=============================================================================
- %
- function LocalBlockStartFcn
- %
- % get the figure associated with this block, create a figure if it doesn't
- % exist
- %
- figureHandle = GetSBiterrFigure(gcbh);
- if ~ishandle(figureHandle),
- figureHandle = CreateSBiterrFigure;
- end
- ud = get(figureHandle,'UserData');
- set(figureHandle,'UserData',ud);
- % end LocalBlockStartFcn
- %
- %=============================================================================
- % LocalBlockStopFcn
- % At the end of the simulation, set the line's X and Y data to contain
- % the complete set of points that were acquire during the simulation.
- % Recall that during the simulation, the lines are only small segments from
- % the last time step to the current one.
- %=============================================================================
- %
- function LocalBlockStopFcn
- %
- % Locate the figure window associated with this block. If it's not a valid
- % handle (it may have been closed by the user), then return.
- %
- figureHandle=GetSBiterrFigure(gcbh);
- if ishandle(figureHandle),
- %
- % Get UserData of the figure.
- %
- ud = get(figureHandle,'UserData');
- % Currently do nothing in LocalBlockStopFcn
- end
- % end LocalBlockStopFcn
- %
- %=============================================================================
- % LocalBlockNameChangeFcn
- % Function that handles name changes on the Bit-Error Meter.
- %=============================================================================
- %
- function LocalBlockNameChangeFcn
- %
- % the figure handle is stored in the block's UserData
- %
- figureHandle = GetSBiterrFigure(gcbh);
- if ishandle(figureHandle),
- set(figureHandle,'Name',get_param(gcbh,'Name'));
- end
- % end LocalBlockNameChangeFcn
- %
- %=============================================================================
- % LocalBlockLoadCopyFcn
- % Function that initializes the Bit-Error Meter's UserData when it is
- % loaded from an mdl file and when it is copied.
- %=============================================================================
- %
- function LocalBlockLoadCopyFcn
- SetSBiterrFigure(gcbh,[]);
- % end LocalBlockLoadCopyFcn
- %
- %=============================================================================
- % LocalBlockDeleteFcn
- % Function that handles the Bit-Error Meter's deletion from a block
- % diagram.
- %=============================================================================
- %
- function LocalBlockDeleteFcn
- %
- % the figure handle is stored in the block's UserData
- %
- figureHandle = GetSBiterrFigure(gcbh);
- if ishandle(figureHandle),
- delete(figureHandle);
- SetSBiterrFigure(gcbh,[]);
- end
- % end LocalBlockDeleteFcn
- %
- %=============================================================================
- % GetSBiterrFigure
- % Retrieves the figure window associated with this S-function Bit-Error Meter
- % from the block's parent subsystem's UserData.
- %=============================================================================
- %
- function figureHandle=GetSBiterrFigure(block)
- if strcmp(get_param(block,'BlockType'),'S-Function'),
- block=get_param(block,'Parent');
- end
- ud = get_param(block,'UserData');
- if ishandle(ud)
- figureHandle = ud;
- else
- if isempty(ud)
- ud.figureHandle = [];
- set_param(block,'Userdata', ud);
- end;
- figureHandle = ud.figureHandle;
- end;
- if isempty(figureHandle),
- figureHandle = -1;
- end
- % end GetSBiterrFigure
- %
- %=============================================================================
- % SetSBiterrFigure
- % Stores the figure window associated with this S-function Bit-Error Meter
- % in the block's parent subsystem's UserData.
- %=============================================================================
- %
- function SetSBiterrFigure(block,figureHandle)
- if strcmp(get_param(block,'BlockType'),'S-Function'),
- block=get_param(block,'Parent');
- end
- ud = get_param(block,'UserData');
- ud.figureHandle = figureHandle;
- set_param(block,'UserData',ud);
- % end SetSBiterrFigure
- %
- %=============================================================================
- % CreateSBiterrFigure
- % Creates the figure window associated with this S-function Bit-Error Meter.
- %=============================================================================
- %
- function figureHandle=CreateSBiterrFigure
- %
- % create the figure and the axes
- %
- a = allchild(0);
- b = findobj(a, 'Name', get_param(gcbh,'Name'));
- if isempty(b)
- figureHandle = figure(...
- 'Units', 'points',...
- 'Position', [10 20 350 400],...
- 'NumberTitle', 'off',...
- 'Visible', 'off', ...
- 'Name', get_param(gcbh,'Name'),...
- 'Color', [1 1 1],...
- 'IntegerHandle','off',...
- 'DeleteFcn', 'sbiterr([],[],[],''DeleteFigure'')'...
- );
- else
- figureHandle = b;
- end;
- set(0, 'CurrentFigure', figureHandle);
- %
- % store the block's handle in the figure's UserData
- %
- ud.Block = gcbh;
- %
- % squirrel the figure handle away in the current block, and put the
- % various handles into the figure's UserData
- %
- SetSBiterrFigure(gcbh,figureHandle);
- set(figureHandle,'HandleVisibility','callback','UserData',ud);
- % end CreateSBiterrFigure
- %
- %=============================================================================
- % SetBlockCallbacks
- % This sets the callbacks of the block if it is not a reference.
- %=============================================================================
- %
- function SetBlockCallbacks(block)
- %
- % the actual source of the block is the parent subsystem
- %
- block=get_param(block,'Parent');
- %
- % if the block isn't linked, issue a warning, and then set the callbacks
- % for the block so that it has the proper operation
- %
- if strcmp(get_param(block,'LinkStatus'),'none'),
- % warnmsg=sprintf(['The Bit-Error Meter block ''%s'' should be replaced with a ' ...
- % 'new version from the com_sour block library'],...
- % block);
- % warning(warnmsg);
- callbacks={
- 'CopyFcn', 'sbiterr([],[],[],''CopyBlock'')' ;
- 'DeleteFcn', 'sbiterr([],[],[],''DeleteBlock'')' ;
- 'LoadFcn', 'sbiterr([],[],[],''LoadBlock'')' ;
- 'StartFcn', 'sbiterr([],[],[],''Start'')' ;
- 'StopFcn' 'sbiterr([],[],[],''Stop'')' ;
- 'NameChangeFcn', 'sbiterr([],[],[],''NameChange'')' ;
- };
- for i=1:length(callbacks)
- if ~strcmp(get_param(block,callbacks{i,1}),callbacks{i,2})
- set_param(block,callbacks{i,1},callbacks{i,2});
- end
- end
- end
- % end SetBlockCallbacks
- %%%%%%%%%%%%%%%%%%%%%%%%
- % End of SBITERR.M %
- %%%%%%%%%%%%%%%%%%%%%%%%