📄 fvinit.m
字号:
function varargout = fvinit(varargin)
%FVINIT Initialize filter viewer.
% Copyright (c) 1988-98 by The MathWorks, Inc.
% $Revision: 1.31 $
save_shh = get(0,'showhiddenhandles');
set(0,'showhiddenhandles','on')
figname = prepender('Filter Viewer');
toolnum = 1; % which instance of the filter viewer
visFrame = 'off'; % set frame around single popups invisible
if strcmp(visFrame,'off')
indentPop = 15;
else
indentPop = 0;
end
% ====================================================================
% set defaults and initialize userdata structure
filtview1Prefs = sptool('getprefs','filtview1');
filtview2Prefs = sptool('getprefs','filtview2');
rulerPrefs = sptool('getprefs','ruler');
colorPrefs = sptool('getprefs','color');
ud.prefs.tool.zoompersist = filtview1Prefs.zoomFlag;
ud.prefs.colororder = colorPrefs.colorOrder;
ud.prefs.linestyleorder = colorPrefs.linestyleOrder;
% Ruler preferences
ud.prefs.tool.ruler = filtview1Prefs.rulerEnable; % rulersenabled
markerStr = { '+' 'o' '*' '.' 'x' ...
'square' 'diamond' 'v' '^' '>' '<' 'pentagram' 'hexagram' }';
typeStr = {'vertical' 'horizontal' 'track' 'slope'}';
ud.prefs.ruler.color = rulerPrefs.rulerColor;
ud.prefs.ruler.marker = markerStr{rulerPrefs.rulerMarker};
ud.prefs.ruler.markersize = rulerPrefs.markerSize;
ud.prefs.ruler.type = typeStr{rulerPrefs.initialType};
ud.linecache.h = []; % no line objects defined yet
ud.lines = [];
ud.SPToolIndices = [];
ud.focusline = [];
ud.focusIndex = 1;
ud.colorCount = 0; % number of colors allocated thus far
ud.colororder = num2cell(evalin('base',ud.prefs.colororder),2);
ud.linestyleorder = num2cell(evalin('base',ud.prefs.linestyleorder),2);
for i = 1:6 % number of subplots
ud.limits(i).xlim = [0 1];
ud.limits(i).ylim = [0 1];
end
ud.prefs.nfft = evalin('base',filtview1Prefs.nfft);
ud.prefs.nimp = evalin('base',filtview1Prefs.nimp);
% Length of impulse / step response ([] ==> auto)
ud.prefs.magmode = {'linear' 'log' 'decibels'};
ud.prefs.magmode = ud.prefs.magmode{filtview1Prefs.magscale};
ud.prefs.phasemode = {'degrees' 'radians'};
ud.prefs.phasemode = ud.prefs.phasemode{filtview1Prefs.phaseunits};
ud.prefs.freqscale = {'linear' 'log'};
ud.prefs.freqscale = ud.prefs.freqscale{filtview1Prefs.freqscale};
ud.prefs.freqrange = filtview1Prefs.freqrange;
% 1==[0 Fs/2], 2==[0 Fs], 3==[-Fs/2 Fs/2]
if filtview2Prefs.mode1
ud.prefs.tilemode = [2 3];
elseif filtview2Prefs.mode2
ud.prefs.tilemode = [3 2];
elseif filtview2Prefs.mode3
ud.prefs.tilemode = [6 1];
elseif filtview2Prefs.mode4
ud.prefs.tilemode = [1 6];
end
ud.prefs.plots = [1 1 0 0 0 0]';
realFilterFlag = 1;
ud.prefs.plottitles = filtview('plotTitles',realFilterFlag);
ud.prefs.plotspacing = [40 35 10 20];
% spacing in pixels from [left bottom right top]
% lots of room: [40 40 20 25]
scalefactor = (get(0,'screenpixelsperinch')/72)^.5;
ud.prefs.plotspacing = ud.prefs.plotspacing*scalefactor;
co = get(0,'defaultaxescolororder');
ud.prefs.linecolor = co(1,:);
ud.sz = sptsizes;
ud.sz.bw = ud.sz.bw+10;
ud.justzoom = [ 0 0 ] ; % used for mode switching (between zoom and pan)
filtDefined = 0;
%
% Initialize ud.filt
%
switch nargin
case 0
makeParams = {1 1 1};
case 1
for i = 1:length(varargin{1}) % Loop through all selected filters
if isstruct(varargin{1}(i))
[valid,ud.filt(i)] = importfilt('valid',varargin{1}(i));
if ~valid
error('Input is not a valid Filter structure.')
end
filtDefined = 1;
else
makeParams = {varargin{1} 1 1};
end
end
case 2
makeParams = {varargin{1:2} 1};
case 3
makeParams = varargin;
end
if ~filtDefined
[err,errstr,ud.filt] = importfilt('make',{1 makeParams{:}});
if err
error(errstr)
end
end
ud.prefs.Fs = sprintf('%.9g',max([ud.filt.Fs]));
ud.tilefig = []; % handle to tile dialog box figure
ud.loadfig = []; % handle to Load dialog box figure
ud.tabfig = []; % settings figure handle
ud.toolnum = toolnum;
ud.pointer = 0; % pointer mode ... == -1 watch, 0 arrow/drag indicators,
% 1 zoom, 2 help
sz = ud.sz;
screensize = get(0,'screensize');
% minimum width, height of figure window;
ud.resize.minsize = [3*sz.bw+9*sz.fus+ud.sz.rw+60 ...
sz.ih+16*sz.fus+11*sz.uh+4*sz.lh];
% actual values on PCWIN [595 419];
% Fontsize (therefore label height, sz.lh) on UNIX is smaller
% therefore actual values on UNIX [595 403]
ud.resize.leftwidth = sz.bw+6*sz.fus;
ud.resize.topheight = sz.ih;
fp = get(0,'defaultfigureposition');
% Give UNIX figures a little more height so that the ruler panel fits
% By default figures on UNIX platforms are smaller
if ~strcmp(computer,'PCWIN') & ~strcmp(computer,'MAC2')
fp = fp + [0 -20 0 20]; % Arbitrarily add (enough) 20 to the height
end
w = max(ud.resize.minsize(1),fp(3))+ud.sz.rw;
h = max(ud.resize.minsize(2),fp(4));
fp = [fp(1) fp(2)+fp(4)-h w h]; % keep upper-left corner stationary
% ====================================================================
% Save figure position for use in resizefcn:
ud.resize.figpos = fp;
% CREATE FIGURE
fig = figure('createfcn','',...
'closerequestfcn','filtview(''SPTclose'')',...
'tag','filtview',...
'numbertitle','off',...
'integerhandle','off',...
'userdata',ud,...
'units','pixels',...
'position',fp,...
'menubar','none',...
'inverthardcopy','off',...
'paperpositionmode','auto',...
'visible','off',...
'name',figname);
uibgcolor = get(0,'defaultuicontrolbackgroundcolor');
uifgcolor = get(0,'defaultuicontrolforegroundcolor');
% ====================================================================
% MENUs
% create cell array with {menu label, callback, tag}
% MENU LABEL CALLBACK TAG
mc={
'File' ' ' 'filemenu'
'>&Close^w' 'close' 'closemenu'
'&Window' winmenu('callback') 'winmenu'};
% 'Options' ' ' 'optionsmenu'
% '>&Tile Axes...' 'sbswitch(''fvtile'')' 'tilemenu'
menu_handles = makemenu(fig, char(mc(:,1)), ...
char(mc(:,2)), char(mc(:,3)));
winmenu(fig)
% set(menu_handles,'hiddenhandle','on')
% ud.ht.reloadmenu = menu_handles(3);
% set(menu_handles(3),'enable','off')
% ====================================================================
% Frames
f1 = [0 0 sz.bw+6*sz.ffs fp(4)-sz.ih];
ud.ht.frame1 = uicontrol('units','pixels',...
'style','frame','position',f1,'tag','mainframe');
pf_height = 8*sz.fus+8.5*sz.uh;
pf = [ f1(1)+sz.fus f1(2)+f1(4)-(sz.lh/2+sz.fus+pf_height) ...
f1(3)-2*sz.fus pf_height ];
ud.ht.plotsframe = uicontrol('units','pixels',...
'style','frame','position',pf,'tag','plotframe');
freqframeHt = 4*sz.fus+2*sz.uh+2.5*sz.lh;
ff = [sz.fus pf(2)-freqframeHt-sz.fus-sz.lh/2 4*sz.fus+sz.bw freqframeHt];
ud.ht.freqframe = uicontrol('units','pixels',...
'style','frame','tag','freqframe',...
'position',ff);
mf = [pf(1)+sz.fus pf(2)+pf(4)-(sz.lh/2+sz.fus+2*sz.uh+sz.fus)+4 ...
pf(3)-2*sz.fus sz.fus+1.5*sz.uh];
ud.ht.magframe = uicontrol('units','pixels','visible',visFrame,...
'style','frame','position',mf,'tag','magframe');
phf = [pf(1)+sz.fus pf(2)+pf(4)-(sz.lh/2+2*sz.fus+4*sz.uh+2*sz.fus)+5 ...
pf(3)-2*sz.fus sz.fus+1.5*sz.uh];
ud.ht.phaseframe = uicontrol('units','pixels','visible',visFrame,...
'style','frame','position',phf,'tag','phaseframe');
fsf = [ff(1)+sz.fus ff(2)+ff(4)-(sz.fus+sz.uh+1.5*sz.lh) ...
ff(3)-2*sz.fus sz.fus+sz.uh+.5*sz.lh];
ud.ht.fscaleframe = uicontrol('units','pixels','visible',visFrame,...
'style','frame','tag','freqsframe',...
'position',fsf);
frf = [ff(1)+sz.fus ff(2)+1.5*sz.fus ...
ff(3)-2*sz.fus sz.fus+sz.uh+.5*sz.lh];
ud.ht.frangeframe = uicontrol('units','pixels','visible',visFrame,...
'style','frame','tag','freqrframe',...
'position',frf);
% ud.ht.Fsframe = uicontrol('units','pixels',...
% 'style','frame','tag','fsframe','position',...
% [sz.fus sz.fus ...
% 4*sz.fus+sz.bw sz.fus+sz.uh+.5*sz.lh]);
% ====================================================================
% Labels
ud.ht.plotslabel = framelab(ud.ht.plotsframe,'Plots',sz.lfs,sz.lh,'tag','plottext');
ud.ht.freqlabel = framelab(ud.ht.freqframe,'Frequency Axis',sz.lfs,sz.lh,'tag','freqtext');
ud.ht.fscalelabel = framelab(ud.ht.fscaleframe,'Scale',sz.lfs,sz.lh,'tag','freqstext');
ud.ht.frangelabel = framelab(ud.ht.frangeframe,'Range',sz.lfs,sz.lh,'tag','freqrtext');
ud.ht.filterLabel = uicontrol('style','text',...
'horizontalalignment','left',...
'tag','filterLabel',...
'position',[sz.fus fp(4)-2-19 sz.bw 19]);
ud.ht.Fsedit = uicontrol('style','text',...
'horizontalalignment','left',...
'tag','fsbox',...
'position',[sz.fus fp(4)-4-2*19 sz.bw 19]);
[FsStr filtLabelStr] = filtview('filtFsLabelStrs', ...
ud.prefs,ud.ht,ud.filt);
set(ud.ht.filterLabel, 'string',filtLabelStr)
set( ud.ht.Fsedit,'string',FsStr)
% framelab(ud.ht.Fsframe,'Sampling Freq.',sz.lfs,sz.lh,'tag','fstext');
% ====================================================================
% Checkboxes
cb_props = {'units','pixels',...
'style','checkbox','horizontalalignment','left'};
checkbox_width = 15; % The checkbox part of the uicontrol
cb1_pos = [mf(1)+sz.fus mf(2)+sz.uh+sz.fus sz.bw sz.uh];
ud.ht.cb(1) = uicontrol(cb_props{:},...
'string','Magnitude',...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -