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

📄 xferscope1.m

📁 spread spectrum communication will be helpful to you!
💻 M
字号:
function varargout = xferscope1(action, varargin)
% Buffered Xfer function scope block helper function.

% Copyright 1995-2001 The MathWorks, Inc.
% $Revision: 0.1 $ $Date: 2002/01/29 14:32:47 $
% RAB  small changes from dspblkbfftscope2.m 

% Params structure fields:
% ( 1) ScopeProperties: checkbox
%   2  Domain: 0=Time, 1=Frequency, 2=User Defined
%   3  HorizSpan: Horizontal time span (number of frames)
%   4 useBuffer: checkbox
%   5 BufferSize: edit box
%   6 Overlap: edit box
%   7 inpFftLenInherit: checkbox
%   8 FFTlength: edit box
%   9 NumAvg: edit obx
%
% (10) DisplayProperties: checkbox
%  11  AxisGrid: checkbox
%  12  Memory: checkbox
%  13  FrameNumber: checkbox
%  14  AxisLegend: checkbox
%  15  AxisZoom: checkbox
%  16  OpenScopeAtSimStart: checkbox
%  17  OpenScopeImmediately: checkbox
%  18  FigPos: figure position
%
% (19) AxisProperties: checkbox
%  20  XUnits:
%       User, Time: ignored
%       Freq: 0=Hz, 1=rad/sec
%  21  XRange:
%       User, Time: ignored
%       Freq: 0=[0,Fn] , 1=[-Fn,Fn], 2=[0, Fs]
%                 (Fn=Nyquist rate, Fs=Sample rate)
%  22  InheritXIncr: checkbox
%  23  XIncr: increment of x-axis samples, used for x-axis display
%       Time: ignored (assumes frame-based)
%       Freq: Only displayed if data was zero-padded
%       User: seconds per sample
%  24  XLabel:
%       Time, Frequency: ignored
%       User: displayed
%  25  YUnits:
%       User, Time: ignored
%       Freq: 0=Magnitude, 1=dB
%  26  YMin: minimum Y-limit
%  27  YMax: maximum Y-limit
%  28  YLabel:
%       Always used
%
% (29) LineProperties: checkbox
%  30  LineDisables: pipe-delimited string
%  31  LineStyles: pipe-delimited string
%  32  LineMarkers: pipe-delimited string
%  33  LineColors: pipe-delimited string


if nargin==0, action = 'dynamic'; end
blk = gcb;
domain = get_param(blk,'Domain');

switch action
case 'icon'
    
    if ~strcmp(domain,'Frequency'),
        error('Invalid domain for Xfer Scope');
    end
    x = [0 NaN 100 NaN ...
            8  8  92  92 8 NaN]; 
      
    y = [0  NaN 100 NaN ...
            92 40 40  92 92 NaN];
    % gen a smooth curve that fits in the box.
    xp=1:.1:11;
    y=[y,30*log10(10*(xp.^2)./(100+xp.^4))+90];
    x=[x,8*(xp)];
    
    useBuffer = isOn(get_param(blk,'useBuffer'));
    if useBuffer,
        str='B-Xfer-nan';
    else
        str='Xfer-nan';
    end
    
    varargout(1:3) = {x,y,str};
    
case 'init'
    % Two steps:
    
    % 1. Copy and return all mask dialog entries as a structure

    s = getWorkspaceVarsAsStruct(blk);
    varargout{1} = s;
    sdspfscope2([],[],[],'DialogApply',s);
    
    % 2. Update checkbox for inheriting FFT size
    
    % Determine "Inherit FFT length" checkbox setting
    specifyFft_check = get_param(blk,'inpFftLenInherit');
    if isOn(specifyFft_check),
	    inhFft_check = 'off';
    else
        inhFft_check = 'on';
    end
    stfft_blk   = [blk '/Xfer Function'];
    stfft_check = get_param(stfft_blk,'inheritFFT');
    
    changePending = ~strcmp(inhFft_check, stfft_check);
    if changePending,
        set_param(stfft_blk, 'inheritFFT', inhFft_check);
    end
    
    
case 'dynamic'
    
    opt = varargin{1};
    
    vis = get_param(blk,'maskvisibilities');
    orig_vis = vis;
    ena = get_param(blk,'maskenables');
    orig_ena = ena;
    prompts = get_param(blk,'maskprompts');
    orig_prompts = prompts;
    vals = get_param(blk,'maskvalues');
    orig_vals = vals;
    
    props = {'ScopeProperties','DisplayProperties','AxisProperties','LineProperties'};
    
    switch opt
    case 'FftLenCheckbox'
        vis = updateFFTLenState(vis,vals,blk);
        
    case 'useBuffer'
        vis = updateBufferState(vis,vals,blk);
        
    case props
        % Set visibility of scope properties:
        sw = strmatch(opt,props);
        [vis,vals] = openTabIfSelected(vis,vals,sw);
        
        % Update all other dependent items after switching tabs:
        vis           = updateFFTLenState(vis,vals,blk);
        vis           = updateBufferState(vis,vals,blk);
        [vis,prompts] = updateStandardStuff(vis,prompts,blk);
        
	case 'InheritXIncr'
		% Enable XIncr if InheritXIncr off (not checked)
		if strcmp(vals{22},'off'), sw='on'; else sw='off'; end
		ena{23} = sw;
		
    case 'OpenScope'
        % Open scope GUI in response to "immediate" toggle
        
        % Always attempt to open the scope whenever the block dialog
        % is opened.  The mask callback fcn for each and every dialog
        % entry is run whenever the dialog is reopened.  Thus, while
        % a model is running and the scope is closed, a simple double-click
        % on the block will open the display (and the block dialog).
        % NOTE: when the sim is not running, a new scope if not opened.
        
        % Toggle checkbox off to simulate a pushbutton:
        set_param(blk,'OpenScopeImmediately','off');
        % Open scope figure window:
        sdspfscope2([],[],[],'OpenScope',blk);
        
    otherwise
        error('Unknown dynamic dialog callback');
    end
    
    if ~isequal(vis,orig_vis) | ~isequal(prompts,orig_prompts) | ...
       ~isequal(vals,orig_vals) | ~isequal(ena,orig_ena),
        set_param(blk, ...
            'maskvisibilities',vis, ...
            'maskenables', ena, ...
            'maskvalues', vals, ...
            'maskprompts', prompts);
    end
end


% --------------------------------------------------------------------
function [vis,vals] = openTabIfSelected(vis,vals,tabNum)

if tabIsChecked(vals,tabNum),
	[vis,vals] = openTab(vis,vals,tabNum);
else
    if tabContentsAreVisible(vis,tabNum),
		[vis,vals] = openTab(vis,vals,tabNum);
    end
    % Otherwise do nothing, as another tab must be open right now.
end


% --------------------------------------------------------------------
function checked = tabIsChecked(vals,tabNum)

tab_checks = [1 10 19 29];
checked = isOn(vals(tab_checks(tabNum)));


% --------------------------------------------------------------------
function seeTab = tabContentsAreVisible(vis,tabNum)

% Are the contents of tab # (tabNum) visible?
%
% tab 1: already open if inpFftLenInherit (7) is visible
% tab 2: already open if AxisGrid (11) is visible
% tab 3: already open if XUnits (20) is visible
% tab 4: already open if LineDisables (30) is visible
%
open_checks = [7 11 20 30];
seeTab  = isOn(vis(open_checks(tabNum)));


% --------------------------------------------------------------------
function [vis,vals] = openTab(vis,vals,tabNum)

% Open tab number tabNum (1 thru 4)
% Only one tab should be open at a time

tab_checks = [1 10 19 29];
tab_entries = {3:9, [11:16 18], 20:28, 30:33}; % don't show dialog #17 -> OpenScopeImmediately

% Determine indices of entries:
open_tab_checks = tab_checks(tabNum);
closed_tab_checks=tab_checks;
closed_tab_checks(tabNum)=[];

% Determine indices of main tab checks:
open_tab_entries   = tab_entries{tabNum};     % get the open tab entries into vector
closed_tab_entries = tab_entries;             % get all entries
closed_tab_entries(tabNum)=[];                % remove open tab from cell array
closed_tab_entries = [closed_tab_entries{:}]; % convert cell to vector

% Open and close the tab checks and the tab entries:
vis(closed_tab_entries) = {'off'};
vis(open_tab_entries)   = {'on'};
vals(closed_tab_checks) = {'off'};
vals(open_tab_checks)   = {'on'};


% --------------------------------------------------------------------
function vis = updateFFTLenState(vis,vals,blk)

% Set enabled state of FFT Length edit box
ScopeProps    = vals{1};  % ScopeProperties
specifyFFTLen = vals{7};  % inpFftLenInherit

if isOn(ScopeProps),
    vis(8) = {specifyFFTLen};  %  FFT Length
end


% --------------------------------------------------------------------
function [vis] = updateBufferState(vis,vals,blk)

% Set enabled state of FFT Length edit box
ScopeProps          = vals{1};  % ScopeProperties
useBuffer           = vals{4};  % usebuffer
if isOn(ScopeProps),
    vis([5 6]) = {useBuffer};  % BufferSize and Overlap
end


% --------------------------------------------------------------------
function [vis,prompts] = updateStandardStuff(vis,prompts,blk)

% Turn off several standard Frame-Scope options, since
% this scope only operates in the frequency domain:
vis([2 3 24]) = {'off'};  % Domain, HorizSpan, XLabel
% XIncr label:
prompts{23} = 'Sample time of original time series:';


% --------------------------------------------------------------------
function y = isOn(str)
y = strcmp(str,'on');


% --------------------------------------------------------------------
function s = getWorkspaceVarsAsStruct(blk)
% Get mask workspace variables:

ss = get_param(blk,'maskwsvariables');

% Only the first "numdlg" variables are from dialog;
% others are created in the mask init fcn itself.
dlg = get_param(blk,'masknames');
numdlg = length(dlg);
ss = ss(1:numdlg);

% Create a structure with:
%   field names  = variable names
%   field values = variable values
s = cell2struct({ss.Value}',{ss.Name}',1);


% [EOF] xferscope1.m

⌨️ 快捷键说明

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