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

📄 xferscope1.m

📁 MATLAB的FPGA数字信号处理程序 类似于DSP的C语言 简称SG
💻 M
字号:
function varargout = xferscope1(action, varargin)% Buffered Xfer function scope block helper function.% Copyright 1995-2001 The MathWorks, Inc.% $Revision: 1.1.2.1 $ $Date: 2003/03/06 00:39:12 $% 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 stringif nargin==0, action = 'dynamic'; endblk = gcb;domain = get_param(blk,'Domain');switch actioncase 'icon'        if ~strcmp(domain,'Frequency'),        error('Invalid domain for Xfer Scope');    end    x = [0 NaN 100 NaN ...            8 8 92 92 8 NaN 16 16 84 NaN 24 24 NaN 32 32 32 NaN ...            40 40 NaN 48 48 NaN 56 56 NaN 64 64 NaN ...            80 80 80 80 NaN 72 72 72];    y = [0 NaN 100 NaN ...            92 40 40 92 92 NaN 88 48 48 NaN 76 48 NaN 65 48 48 NaN ...            79 48 NaN 60 48 NaN 58 48 NaN 64 48 NaN ...            49 49 48 48 NaN 48 48 54];        useBuffer = isOn(get_param(blk,'useBuffer'));    if useBuffer,        str='B-Xfer';    else        str='Xfer';    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);    endend% --------------------------------------------------------------------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 timetab_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 vectorclosed_tab_entries = tab_entries;             % get all entriesclosed_tab_entries(tabNum)=[];                % remove open tab from cell arrayclosed_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 boxScopeProps    = vals{1};  % ScopePropertiesspecifyFFTLen = vals{7};  % inpFftLenInheritif isOn(ScopeProps),    vis(8) = {specifyFFTLen};  %  FFT Lengthend% --------------------------------------------------------------------function [vis] = updateBufferState(vis,vals,blk)% Set enabled state of FFT Length edit boxScopeProps          = vals{1};  % ScopePropertiesuseBuffer           = vals{4};  % usebufferif isOn(ScopeProps),    vis([5 6]) = {useBuffer};  % BufferSize and Overlapend% --------------------------------------------------------------------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 valuess = cell2struct({ss.Value}',{ss.Name}',1);% [EOF] xferscope1.m

⌨️ 快捷键说明

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