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

📄 filtview.m

📁 matlabDigitalSigalProcess内有文件若干
💻 M
📖 第 1 页 / 共 5 页
字号:
            if ud.prefs.tool.ruler, ruler('hidelines',fig,'all'), end
            filtview('plots',ud.prefs.plots,fig,need_update)
            
            ud = get(fig,'userdata');
            bringToFront(fig,ud.focusIndex)

            % New filter. Set the focusline correctly so that the rulers
            % will be set on appropriate subplot and focus on
            % correct line - if rulers were on imaginary line of complex
            % filter and new filter is also complex, focus rulers on the 
            % imaginary line of new filter.
            if ~isempty(f(ind)) 
                plotIndex = find(ud.mainaxes==ud.ht.a);
                ud = filtview('setudlimits',ud,ud.ht.a,plotIndex);
                realFilterFlag = (isreal(ud.filt(ud.focusIndex).tf.num) &...
                    isreal(ud.filt(ud.focusIndex).tf.den));

                if isempty(ud.focusIndex) 
                    h = [];
                else
                    hstepc = ud.lines(ud.focusIndex).stepc;
                    himpc = ud.lines(ud.focusIndex).impc;
                    h = [hstepc himpc];
                end
                if isempty(ud.focusline) | isempty(h) | realFilterFlag | ...
                        all(ud.focusline~=h)
                    realDataFlag = 1;   % data is real
                else    
                    realDataFlag = 0;   % data is complex
                end
                
                ud.focusline = setFocusLine(ud.mainaxes,ud.lines,...
                    plotIndex, ud.focusIndex,realDataFlag);
                set(fig,'userdata',ud)
                if ud.prefs.tool.ruler
                    ruler('newlimits',fig,plotIndex)
                    ruler('newsig',fig,plotIndex)
                    ruler('showlines',fig,ud.focusline)
                end
            end

            ud = get(fig,'userdata');
            
            if isempty(ind)     % No filters in SPTool
                sptlegend('setstring',{ },{},fig,0)
            else
                sptlegend('setstring',{ud.filt.label},{},fig,0)
                if isempty(find(ud.prefs.plots)) & ~isempty(ud.filt)
                    sptlegend('setvalue',ud.legend.legendline,...
                        ud.focusIndex,1,fig)
                    set(ud.legend.legendline,'color',...
                        ud.filt(ud.focusIndex).lineinfo.color)
                else
                    sptlegend('setvalue',ud.focusline,ud.focusIndex,1,fig)
                end
                set(ud.legend.legendline,'linestyle',...
                    ud.filt(ud.focusIndex).lineinfo.linestyle)
            end
            
        end   % newly selected filter(s) (f(ind)) doesn't equal ud.filt
    end   % filter viewer exists - fig is not empty
    
%------------------------------------------------------------------------
% enable = filtview('action',verb.action)
%  respond to button push in SPTool
% possible actions are
%    'view'
%
case 'action'
    SPTfig = gcf;
    fig = findobj('type','figure','tag','filtview');
    
    % get all filters (f) and the indexes (ind) of the selected filters
    [f,ind] = sptool('Filters',1,SPTfig);

    if isempty(fig)  % create the filter viewer
        filtview(f(ind))
    else             % set filter viewer's visibility 'ON'
        set(fig,'visible','on')
        figure(fig)
        ud = get(fig,'userdata');
        if ~isequal(f(ind),ud.filt)
            ud.filt = f(ind);
            ud.prefs.Fs = sprintf('%.9g',max([f(ind).Fs]));
            set(ud.ht.Fsedit,'string',ud.prefs.Fs)
            set(fig,'userdata',ud)
            filtview('plots',ud.prefs.plots,fig)

            ud.prefs.Fs = sprintf('%.9g',max([f(ind).Fs]));
            [FsStr filtLabelStr] = filtFsLabelStrs(ud.prefs,ud.ht,ud.filt);
            set(ud.ht.filterLabel,'string',filtLabelStr)
            set(ud.ht.Fsedit,'string',FsStr) 
            set(fig,'userdata',ud)
        end
    end

%------------------------------------------------------------------------
% filtview('SPTclose',verb.action)
%  respond to SPTool closing
% possible actions are
%    'view'
%
case 'SPTclose'
    fig = findobj('type','figure','tag','filtview');
    if ~isempty(fig)  % destroy the filtview tool
        ud = get(fig,'userdata');
        delete(fig)
    end
%------------------------------------------------------------------------
% filtview('print')
%  print contents of filtview (assumed in gcf)
%
case 'print'
    

%------------------------------------------------------------------------
% filtview('help')
% Callback of help button in toolbar
%
case 'help'
    fig = gcf;
    ud = get(fig,'userdata');
    if ud.pointer ~= 2   % if not in help mode
        % enter help mode
        saveEnableControls = [ud.legend.legendpopup
                              ud.legend.legendbutton
                              ud.ht.magpop
                              ud.ht.phasepop];
        ax = [ud.ht.a ud.toolbar.toolbar];
        titleStr = 'Filter Viewer Help';
        helpFcn = 'fvhelpstr';
        spthelp('enter',fig,saveEnableControls,ax,titleStr,helpFcn)
    else
        spthelp('exit')
    end
    
%------------------------------------------------------------------------
% errstr = filtview('setprefs',panelName,p)
% Set preferences for the panel with name panelName
%
% Inputs:
%   panelName - string; must be either 'ruler','color', 'filtview1', 
%               or 'filtview2'
%              (see sptprefreg for definitions)
%   p - preference structure for this panel
%
case 'setprefs'
    errstr = '';
    panelName = varargin{2};
    p = varargin{3};
    % first do error checking
    switch panelName        
    case 'filtview1'
        arbitrary_obj = {'arb' 'obj'};
        nfft = evalin('base',p.nfft,'arbitrary_obj');
        if isequal(nfft,arbitrary_obj)
            errstr = 'Sorry, the FFT Length you entered could not be evaluated';
        elseif isempty(nfft) | (round(nfft)~=nfft | nfft<=0 | ~isreal(nfft))
            errstr = ['The FFT Length must be a positive integer.'];
        end
        if isempty(errstr)
            nimp = evalin('base',p.nimp,'arbitrary_obj');
            if isequal(nimp,arbitrary_obj)
                errstr = 'Sorry, the Time Response Length you entered could not be evaluated';
            elseif ~isempty(nimp) & (round(nimp)~=nimp | nimp<=0 | ~isreal(nimp))
                errstr = ['The Time Response Length must be a positive integer' ...
                          ' or the empty matrix ''[]'' (to get the default value).'];
            end
        end
        if isempty(errstr) & (p.freqscale == 2 & p.freqrange == 3)
            errstr = ['You can''t have frequency log scaling with a negative ' ...
                      'frequency range.'];
        end
    case 'filtview2'  % tiling
    end
    
    varargout{1} = errstr;
    if ~isempty(errstr)
        return
    end
        
    % now set preferences
    fig = findobj('type','figure','tag','filtview');
    if ~isempty(fig)
        ud = get(fig,'userdata');
        newprefs = ud.prefs;
        switch panelName
        case 'ruler'
	    markerStr = { '+' 'o' '*' '.' 'x' ...
               'square' 'diamond' 'v' '^' '>' '<' 'pentagram' 'hexagram'}';
            newprefs.ruler.color = p.rulerColor;
            newprefs.ruler.marker = markerStr{p.rulerMarker};
            newprefs.ruler.markersize = p.markerSize;
            
            if ud.prefs.tool.ruler
                rc = evalin('base',newprefs.ruler.color);
                set(ud.ruler.lines,'color',rc);
                set(ud.ruler.markers,'color',rc,'marker',newprefs.ruler.marker,...
                   'markersize',evalin('base',newprefs.ruler.markersize))
            end
        case 'color'
            newprefs.colororder = p.colorOrder;
            newprefs.linestyleorder = p.linestyleOrder;
            ud.colororder = num2cell(evalin('base',newprefs.colororder),2);
            ud.linestyleorder = num2cell(evalin('base',newprefs.linestyleorder),2);            
        case 'filtview1'
            newprefs.tool.zoompersist = p.zoomFlag;
            newprefs.tool.ruler = p.rulerEnable;
            newprefs.nfft = evalin('base',p.nfft);
            newprefs.nimp = evalin('base',p.nimp);
            
            set(ud.ht.magpop,'value',p.magscale)
            set(ud.ht.phasepop,'value',p.phaseunits)
            set(ud.ht.fscalepop,'value',p.freqscale)
            set(ud.ht.frangepop,'value',p.freqrange)
                        
            newprefs.magmode = {'linear' 'log' 'decibels'};
            newprefs.magmode = newprefs.magmode{p.magscale};
            newprefs.phasemode = {'degrees' 'radians'};
            newprefs.phasemode = newprefs.phasemode{p.phaseunits};
            newprefs.freqscale = {'linear' 'log'};
            newprefs.freqscale = newprefs.freqscale{p.freqscale};
            newprefs.freqrange = p.freqrange;

            % enable / disable ruler
            if ud.prefs.tool.ruler ~= newprefs.tool.ruler
                if newprefs.tool.ruler
                    % Enable ruler and ruler popupmenu 
                    rulerPrefs = sptool('getprefs','ruler');
                    typeStr = {'vertical','horizontal','track','slope'};
                    ud.prefs.ruler.type = typeStr{rulerPrefs.initialType};
                    set(fig,'userdata',ud)

                    % Account for the case where the filter was cleared
                    % while viewing it in the filter viewer
                    if isfield(ud,'filt.tf.den')
                        realFilterFlag = (isreal(ud.filt(ud.focusIndex).tf.num)...
                            & isreal(ud.filt(ud.focusIndex).tf.den));
                    else
                        realFilterFlag = 1;
                    end

                    % Find mainaxes to focus rulers                    
                    [ud.mainaxes,ud.focusline,plotIndex,visPlots] = ...
                        setMainaxes(ud.mainaxes,ud.ht.a,ud.lines,realFilterFlag);
                    set(fig,'userdata',ud)

                    % Update rulerpopup; display (initialize) ruler panel
                    % and focus ruler on appropriate subplot
                    rulerPopStr = filtview('plotTitles',realFilterFlag);
                    rulerPopVal = min(plotIndex,length(rulerPopStr));
                    popupCallback = 'filtview(''rulerpopup'')';	
                    ruler('init',fig,rulerPopStr,rulerPopVal,...
                        popupCallback,ud.ht.a)
                    ud = get(fig,'userdata');
                    new_ud = filtview('setudlimits',ud,ud.ht.a,plotIndex);
                    set(fig,'userdata',new_ud)
                    ruler('newlimits',fig,plotIndex)
                    ruler('newsig',fig,plotIndex)
                    noTrackZeroPole(fig,new_ud)
                else
                    ruler('close',fig)
                end
                ud = get(fig,'userdata');
            end

        case 'filtview2'
            if p.mode1
                newprefs.tilemode = [2 3];
            elseif p.mode2
                newprefs.tilemode = [3 2];
            elseif p.mode3
                newprefs.tilemode = [6 1];
            elseif p.mode4
                newprefs.tilemode = [1 6];
            end
        end
        ud.prefs = newprefs;
        set(fig,'userdata',ud)

        fvresize(1,fig)
        if newprefs.tool.ruler
            ruler('resizebtns',fig)
        end
        fvzoom('zoomout',ud.prefs.plots,fig)
        filtview('plots',ud.prefs.plots,fig)

        % Update ruler's XY limits; limits might have changed due to
        % preferences changes
        if ud.prefs.tool.ruler & newprefs.tool.ruler
            ud = get(fig,'userdata');
            plotIndex = find(ud.mainaxes==ud.ht.a);
            new_ud = filtview('setudlimits',ud,ud.ht.a,plotIndex);
            set(fig,'userdata',new_ud)
            ruler('newlimits',fig,plotIndex)
            ruler('newsig',fig,plotIndex)
        end
    end
    
end  % of switch statement

function setstem(h,x,y)
%SETSTEM Set xdata and ydata of two handles for stem plots

    set(h(1),'xdata',x,'ydata',y)
    x = x(:);  % make it a column
    xx = x(:,[1 1 1])';
    xx = xx(:);
    n = nan;
    y = [zeros(size(x)) y(:) n(ones(length(x),1),:)]';
    set(h(2),'xdata',xx,'ydata',y(:));

function [mainaxes,focusline,plotIndex,visPlots] = ...
        setMainaxes(oldMainaxes,axesList,lineList,realDataFlag)
%SETMAINAXES Set a new axes (if mainaxes was set invisible), from 
%       the list of visible axes, to be the new mainaxes (where rulers
%       will be focused).  Otherwise, use the input OldMainaxes as the
%       new mainaxes.
% Inputs:
%   oldMainaxes - handle to previous mainaxes
%   axesList - list of axes handles of all possible subplots
%   lineList - structure containing the handles to each line
%              of all subplots
%   realDataFlag - flag indicating that line which rulers are focused on is
%                  real
% Outputs:
%   mainaxes - handle to the newly selected subplot axes
%   focusline - handle to the newly selected line
%   plotIndex - index into the list of the handles of all subplots
%   visPlots - indices of visible plots of vector containing
%              all subplots
%
    visPlots = find(strcmp(get(axesList,'visible'),'on'));
     

⌨️ 快捷键说明

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