www.gusucode.com > rfblksmasks 工具箱matlab源码程序 > rfblksmasks/rfblksgeneralamplifier1.m

    function varargout = rfblksgeneralamplifier1(block, action)
%RFBLKSGENERALAMPLIFIER1 Mask function for the General Amplifier block.

%   Copyright 2006-2014 The MathWorks, Inc.

% Always return an output
mStr.emsg = '';
mStr.wmsg = '';

% If it is library, call the default setting
if strcmpi(get_param(bdroot, 'BlockDiagramType'), 'library')
    if nargout>0
        varargout{1} = mStr;
    end
    return
end

%**************************************************************************
% Action switch -- Determines which of the callback functions is called
%**************************************************************************
switch(action)
  case 'rfInit'

    % Find dialog
    dialog = rfblksfinddialog(block);

    % Set index to mask parameters
    idxMaskNames = rfblksgetblockmaskparamsindex(block);

    % Get the block parameters
    from_data_source = 'Determined from data source';
    Vals = get_param(block, 'MaskValues');
    if strcmp(Vals{idxMaskNames.DataSource},  'Data file')       &&     ...
            strncmpi(Vals{idxMaskNames.File}, 'default', 7)      &&     ...
            isempty(dialog) && ~isnewmodel(6.6)
        set_param(block, 'DataSource', 'RFDATA object')
        Vals = get_param(block, 'MaskValues');
    end
    En = get_param(block, 'MaskEnables');
    if ~isempty(dialog)
        En{idxMaskNames.RFDATA} = isenabledondialog(dialog, 'RFDATA');
        En{idxMaskNames.File} = isenabledondialog(dialog, 'File');
        En{idxMaskNames.Freq} = isenabledondialog(dialog, 'Freq');
        En{idxMaskNames.SourcePin} = isenabledondialog(dialog,'SourcePin');
        En{idxMaskNames.Pin} = isenabledondialog(dialog, 'Pin');
        En{idxMaskNames.IP3Type} = isenabledondialog(dialog, 'IP3Type');
        En{idxMaskNames.IIP3} = isenabledondialog(dialog, 'IIP3');
        En{idxMaskNames.OIP3} = isenabledondialog(dialog, 'OIP3');
        En{idxMaskNames.P1dB} = isenabledondialog(dialog, 'P1dB');
        En{idxMaskNames.PSat} = isenabledondialog(dialog, 'PSat');
        En{idxMaskNames.GCSat} = isenabledondialog(dialog, 'GCSat');
        En{idxMaskNames.NonlinearDataFreq} =                            ...
            isenabledondialog(dialog, 'NonlinearDataFreq');
        En{idxMaskNames.NoiseDefinedBy} =                               ...
            isenabledondialog(dialog, 'NoiseDefinedBy');
        En{idxMaskNames.NF} = isenabledondialog(dialog, 'NF');
        En{idxMaskNames.FMIN} = isenabledondialog(dialog, 'FMIN');
        En{idxMaskNames.GammaOpt} = isenabledondialog(dialog, 'GammaOpt');
        En{idxMaskNames.RN} = isenabledondialog(dialog, 'RN');
        En{idxMaskNames.NFactor} = isenabledondialog(dialog, 'NFactor');
        En{idxMaskNames.NTemp} = isenabledondialog(dialog, 'NTemp');
        En{idxMaskNames.NoiseDataFreq} =                                ...
            isenabledondialog(dialog, 'NoiseDataFreq');
        En{idxMaskNames.PlotZ0} = isenabledondialog(dialog, 'PlotZ0');
        En{idxMaskNames.YOption} = isenabledondialog(dialog, 'YOption');
        En{idxMaskNames.XOption} = isenabledondialog(dialog, 'XOption');
    else
        En(~strcmp(Vals, from_data_source)) = {'on'};
        switch Vals{idxMaskNames.DataSource}
            case 'RFDATA object'
                En{idxMaskNames.File} = 'off';
                En{idxMaskNames.RFDATA} = 'on';
            case 'Data file'
                En{idxMaskNames.RFDATA} = 'off';
                En{idxMaskNames.File} = 'on';
        end
        if strcmpi(Vals{idxMaskNames.IP3Type}, 'IIP3')
            En{idxMaskNames.IIP3} = 'on';
            En{idxMaskNames.OIP3} = 'off';
        else % OIP3 is selected
            En{idxMaskNames.IIP3} = 'off';
            En{idxMaskNames.OIP3} = 'on';
        end
        switch Vals{idxMaskNames.NoiseDefinedBy}
            case 'Noise figure'
                En{idxMaskNames.FMIN} = 'off';
                En{idxMaskNames.GammaOpt} = 'off';
                En{idxMaskNames.RN} = 'off';
                En{idxMaskNames.NF} = 'on';
                En{idxMaskNames.NFactor} = 'off';
                En{idxMaskNames.NTemp} = 'off';
            case 'Spot noise data'
                En{idxMaskNames.NF} = 'off';
                En{idxMaskNames.FMIN} = 'on';
                En{idxMaskNames.GammaOpt} = 'on';
                En{idxMaskNames.RN} = 'on';
                En{idxMaskNames.NFactor} = 'off';
                En{idxMaskNames.NTemp} = 'off';
            case 'Noise factor'
                En{idxMaskNames.FMIN} = 'off';
                En{idxMaskNames.GammaOpt} = 'off';
                En{idxMaskNames.RN} = 'off';
                En{idxMaskNames.NF} = 'off';
                En{idxMaskNames.NFactor} = 'on';
                En{idxMaskNames.NTemp} = 'off';
            case 'Noise temperature'
                En{idxMaskNames.FMIN} = 'off';
                En{idxMaskNames.GammaOpt} = 'off';
                En{idxMaskNames.RN} = 'off';
                En{idxMaskNames.NF} = 'off';
                En{idxMaskNames.NFactor} = 'off';
                En{idxMaskNames.NTemp} = 'on';
        end
        switch Vals{idxMaskNames.SourceFreq}
            case 'User-specified'
                En{idxMaskNames.Freq} = 'on';
            otherwise
                En{idxMaskNames.Freq} = 'off';
        end
        switch Vals{idxMaskNames.SourcePin}
            case 'User-specified'
                En{idxMaskNames.Pin} = 'on';
            otherwise
                En{idxMaskNames.Pin} = 'off';
        end
        switch Vals{idxMaskNames.AllPlotType}
            case {'X-Y plane'}
                En{idxMaskNames.YOption} = 'on';
                En{idxMaskNames.XOption} = 'on';
            otherwise
                En{idxMaskNames.YOption} = 'off';
                En{idxMaskNames.XOption} = 'off';
        end
        En(strcmp(Vals, from_data_source)) = {'off'};
    end
    set_param(block, 'MaskEnables', En);

    Udata = get_param(block, 'UserData');
    % Create User Data
    if isempty(Udata) || ~isfield(Udata, 'Ckt')
        Udata.Version = 1.0;
        Udata.Ckt = [];
        Udata.Tag = block;
        Udata.Parameters = {};
        Udata.NumParameters = 0;
        Udata.PlotType = '';
        Udata.PlotFormat = {};
        Udata.XAxisName = '';
        Udata.XFormat = '';
        Udata.Plot = true;
        Udata.IsNewModel = true;
        set_param(block, 'UserData', Udata);
    end

    oldplotflag = true;
    if isfield(Udata, 'Plot')
        oldplotflag = Udata.Plot; % Save plot flag
    end

    lastwarn('');

    if all(isfield(Udata, {'Filename', 'Date'}))
        oldFilename = Udata.Filename;
        oldDate = Udata.Date;
    else
        oldFilename = '';
        oldDate = '';
    end
    if all(isfield(Udata, {'RefSel'}))
        oldRefSel = Udata.RefSel;
    else
        oldRefSel = 0;
    end
    if isfield(Udata, 'Ckt') && isa(Udata.Ckt, 'rfckt.rfckt')           ...
            && isvalid(Udata.Ckt)                                       ...
            && isa(Udata.Ckt.AnalyzedResult, 'rfdata.data')             ...
            && isvalid(Udata.Ckt.AnalyzedResult)                        ...
            && ~isempty(Udata.Ckt.AnalyzedResult.S_Parameters)
        oldParamList = listparam(Udata.Ckt);
    else
        oldParamList = {};
    end

    try
        ckt = createrfcktfromblk(block);
        Udata = get_param(block, 'UserData');
        Udata.Ckt = ckt;
        Udata.Tag = block;
    catch creatGENERALAMPException
        Udata = rfblksflagnoplot(block, Udata);
        if ismodelstopped
            errordlg([block ': ' creatGENERALAMPException.message],     ...
                'RF Blockset Error', 'on');
        else
            mStr.emsg = creatGENERALAMPException.message;
        end
    end
    if ismodelstopped && ~isempty(lastwarn)
        warndlg([block ': ' lastwarn],'RF Blockset Warning', 'on');
    else
        mStr.wmsg = lastwarn;
    end

    if all(isfield(Udata, {'Filename', 'Date'}))
        newFilename = Udata.Filename;
        newDate = Udata.Date;
    else
        newFilename = '';
        newDate = '';
    end
    if all(isfield(Udata, {'RefSel'}))
        newRefSel = Udata.RefSel;
    else
        newRefSel = 0;
    end
    if isfield(Udata, 'Ckt') &&                                         ...
            isa(Udata.Ckt, 'rfckt.rfckt') && isvalid(Udata.Ckt)
        newParamList = listparam(Udata.Ckt);
    else
        newParamList = {};
    end

    if ~isempty(dialog)
        if oldplotflag ~= Udata.Plot
            % Refresh dialog if plot flag has changed
            dialog.refresh;
        elseif ~strcmp(newFilename,oldFilename) || ~strcmp(newDate,oldDate)
            dialog.refresh;
        elseif (strcmp(newFilename, oldFilename)          &&            ...
                strcmp(newDate, oldDate)                  &&            ...
                newRefSel ~= oldRefSel)
            % Refresh dialog only when reference selection is changed
            dialog.refresh;
        elseif ~isequal(newParamList, oldParamList)
            % Refresh dialog when the list of plotting parameters changes
            dialog.refresh;
        end
    end
    Udata = get_param(block, 'UserData');

    if all(isfield(Udata, {'NetworkData1', 'NetworkData2',              ...
            'ComplexFormat1', 'ComplexFormat2', 'XParameter', 'XFormat'}))
        set_param(block, 'AppliedNetworkData', Udata.NetworkData1,      ...
            'AppliedNetworkData2', Udata.NetworkData2,                  ...
            'AppliedComplexFormat', Udata.ComplexFormat1,               ...
            'AppliedComplexFormat2', Udata.ComplexFormat2,              ...
            'AppliedXParameter', Udata.XParameter,                      ...
            'AppliedXFormat', Udata.XFormat);
    end

  case 'rfDelete' 
    deleterfblkfunc(block);

  case 'rfCopyFcn' 
    copyrfblkfunc(block);

  case 'rfDefault'

end
if nargout>0
    varargout{1} = mStr;
end

function result = isenabledondialog(dialog, tag)
% Find out if the tagged widget on the dialog is enabled.
if isEnabled(dialog, tag)
    result = 'on';
else
    result = 'off';
end