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

📄 viewedf.m

📁 matlab数字信号处理工具箱
💻 M
📖 第 1 页 / 共 5 页
字号:
    'HorizontalAlignment', 'left', ...
    'String', 'Physical max :', ...
    'Position', [0.52, 1-linenum*yinc, 0.45, Fnthgt]);
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'FontWeight', 'bold', ...
    'String', sprintf('%f', RecHead.PhysMax(Rec)), ...
    'Position', [0.77, 1-linenum*yinc, 0.25, Fnthgt]);
% digital min
linenum=linenum+1;
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'String', 'Digital min :', ...
    'Position', [0.02, 1-linenum*yinc, 0.45, Fnthgt]);
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'FontWeight', 'bold', ...
    'String', sprintf('%d', RecHead.DigMin(Rec)), ...
    'Position', [0.25, 1-linenum*yinc, 0.25, Fnthgt]);
% digital max
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'String', 'Digital max :', ...
    'Position', [0.52, 1-linenum*yinc, 0.45, Fnthgt]);
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'FontWeight', 'bold', ...
    'String', sprintf('%d', RecHead.DigMax(Rec)), ...
    'Position', [0.77, 1-linenum*yinc, 0.25, Fnthgt]);
% display min
linenum=linenum+1;
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'String', 'Display min :', ...
    'Position', [0.02, 1-linenum*yinc, 0.2, Fnthgt]);
dminh = uicontrol(dlgh, ...
    'Style', 'Edit', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'BackGroundColor', [1 1 1], ...
    'String', sprintf('%f', RecDisp.DisplayMin(Rec)), ...
    'Position', [0.25, 1-linenum*yinc, 0.20, Fnthgt+0.02]);
LocalResizeUI(dminh, [NaN 1.1 0 0]);
% display max
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'String', 'Display max :', ...
    'Position', [0.52, 1-linenum*yinc, 0.2, Fnthgt]);
dmaxh = uicontrol(dlgh, ...
    'Style', 'Edit', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'BackGroundColor', [1 1 1], ...
    'String', sprintf('%f', RecDisp.DisplayMax(Rec)), ...
    'Position', [0.77, 1-linenum*yinc, 0.20, Fnthgt+0.02]);
LocalResizeUI(dmaxh, [NaN 1.1 0 0]);
% Plot-type
linenum=linenum+1;
ploth = uicontrol(dlgh, ...
    'Style', 'CheckBox', ...
    'Units', 'Normalized', ...
    'String', '  Stairstep-Plot', ...
    'Value', RecDisp.StairPlot(Rec), ...
    'Position', [0.02, 1-linenum*yinc, 0.7, Fnthgt]);
LocalResizeUI(ploth, [1 1 0.05 0]);
% Invert plot
updownh = uicontrol(dlgh, ...
    'Style', 'CheckBox', ...
    'Units', 'Normalized', ...
    'String', '  Plot upside down', ...
    'Value', RecDisp.UpDownPlot(Rec), ...
    'Position', [0.52, 1-linenum*yinc, 0.7, Fnthgt]);
LocalResizeUI(updownh, [1 1 0.05 0]);
% buttons
linenum=linenum+1;
uicontrol(dlgh, ...
    'Style', 'PushButton', ...
    'Units', 'Normalized', ...
    'String', 'OK', ...
    'Position', [0.05, 0.02, 0.3, 0.08], ...
    'Callback', 'set(gco,''UserData'',''OK'');uiresume;');
uicontrol(dlgh, ...
    'Style', 'PushButton', ...
    'Units', 'Normalized', ...
    'String', 'Apply to all', ...
    'Position', [0.4, 0.02, 0.2, 0.08], ...
    'Callback', 'set(gco,''UserData'',''ApplyAll'');uiresume;');
uicontrol(dlgh, ...
    'Style', 'PushButton', ...
    'Units', 'Normalized', ...
    'String', 'Cancel', ...
    'Position', [0.65, 0.02, 0.3, 0.08], ...
    'Callback', 'set(gco,''UserData'',''Cancel'');uiresume;');

drawnow;
uiwait(dlgh);
changed = 0;
if ~strcmp(get(gco,'UserData'),'Cancel')
  dmin = str2num(get(dminh, 'String'));
  dmax = str2num(get(dmaxh, 'String'));
  stplot = get(ploth, 'Value');
  udplot = get(updownh, 'Value');
  if (length(dmin) == 1) & (length(dmax) == 1) & (dmin < dmax)
    changed = 1;
    if strcmp(get(gco,'UserData'),'OK')
      switch(whichbut{1})
       case 'EDF'
        Data.Display.EDF(Num).DisplayMin(Rec) = dmin;
        Data.Display.EDF(Num).DisplayMax(Rec) = dmax;
        Data.Display.EDF(Num).StairPlot(Rec) = stplot;
        Data.Display.EDF(Num).UpDownPlot(Rec) = udplot;
       case 'PLUGIN'
        Data.Display.Plugin(Num).DisplayMin(Rec) = dmin;
        Data.Display.Plugin(Num).DisplayMax(Rec) = dmax;
        Data.Display.Plugin(Num).StairPlot(Rec) = stplot;
        Data.Display.Plugin(Num).UpDownPlot(Rec) = udplot;
      end
    else
      % set all files
      for fnum = 1:length(Data.Display.EDF)
        for rec = 1:length(Data.Display.EDF(fnum).DisplayMin)
          Data.Display.EDF(fnum).DisplayMin(rec) = dmin;
          Data.Display.EDF(fnum).DisplayMax(rec) = dmax;
          Data.Display.EDF(fnum).StairPlot(rec) = stplot;
          Data.Display.EDF(fnum).UpDownPlot(rec) = udplot;
        end
      end
      if isfield(Data.Display, 'Plugin')
        for fnum = 1:length(Data.Display.Plugin)
          for rec = 1:length(Data.Display.Plugin(fnum).DisplayMin)
            Data.Display.Plugin(fnum).DisplayMin(rec) = dmin;
            Data.Display.Plugin(fnum).DisplayMax(rec) = dmax;
            Data.Display.Plugin(fnum).StairPlot(rec) = stplot;
            Data.Display.Plugin(fnum).UpDownPlot(rec) = udplot;
          end
        end
      end
    end
  end
end
delete(dlgh);
if changed
  set(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);
  LocalRepaint;
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% LocalRescale
% change range of a plot
function LocalRescale(Mode)
Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');
whichbut = get(gcbo, 'UserData');
Rec = whichbut{2};
Num = whichbut{3};

switch(whichbut{1})
  case 'EDF'
    DisData = Data.Display.EDF(Num);
    [DisData.DisplayMin(Rec), DisData.DisplayMax(Rec)] = ...
        LocalCalcNewRange(DisData.DisplayMin(Rec), DisData.DisplayMax(Rec), ...
        Mode);
    Data.Display.EDF(Num) = DisData;
  case 'PLUGIN'
    DisData = Data.Display.Plugin(Num);
    [DisData.DisplayMin(Rec), DisData.DisplayMax(Rec)] = ...
        LocalCalcNewRange(DisData.DisplayMin(Rec), DisData.DisplayMax(Rec), ...
        Mode);
    Data.Display.Plugin(Num) = DisData;
end
set(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);
LocalRepaint;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% LocalRescaleAll
% change range of all plots
function LocalRescaleAll(Mode)
Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');
if length(Data.EDF)==0
  return;
end
% EDF files
for i=1:length(Data.EDF)
  DisData = Data.Display.EDF(i);
  [DisData.DisplayMin, DisData.DisplayMax] = ...
      LocalCalcNewRange(DisData.DisplayMin, DisData.DisplayMax, Mode);
  Data.Display.EDF(i) = DisData;
end
% plugins
for i=1:length(Data.Plugin)
  DisData = Data.Display.Plugin(i);
  [DisData.DisplayMin, DisData.DisplayMax] = ...
      LocalCalcNewRange(DisData.DisplayMin, DisData.DisplayMax, Mode);
  Data.Display.Plugin(i) = DisData;
end
set(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);
LocalRepaint;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% LocalCalcNewRange
% calculate new range for plots
function [ResMin, ResMax] = LocalCalcNewRange(PMin, PMax, Mode)
dmean = (PMin+PMax) / 2;
switch Mode
  case 'up'
    ResMin = (PMin - dmean)*0.5 + dmean;
    ResMax = (PMax - dmean)*0.5 + dmean;
  case 'down'
    ResMin = (PMin - dmean)*2 + dmean;
    ResMax = (PMax - dmean)*2 + dmean;
  otherwise
    ResMin = PMin;
    ResMax = PMax;
end


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% LocalToggleUpdatePlugin
% Toggle flag for updating plugin-results 
function LocalToggleUpdatePlugin()
Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');
Data.UpdatePlugin = ~Data.UpdatePlugin;
if Data.UpdatePlugin
  set(gcbo, 'Checked', 'on');
else
  set(gcbo, 'Checked', 'off');
end
set(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% LocalToggleShowRange
% Toggle flag for showing plot ranges
function LocalToggleShowRange()
Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');
Data.ShowRange = ~Data.ShowRange;
if Data.ShowRange
  set(gcbo, 'Checked', 'on');
else
  set(gcbo, 'Checked', 'off');
end
set(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);
LocalRepaint;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% LocalToggleShowCursor
% Toggle flag for showing cursor 
function LocalToggleShowCursor()
figure(findobj('Tag', 'ViewEDFFigure'));
Data = get(gcf, 'UserData');
Data.ShowCursor = ~Data.ShowCursor;
if Data.ShowCursor
  set(gcbo, 'Checked', 'on');
  set(gcf, 'WindowButtonDownFcn', 'viewedf MoveCursor Down');
  Data.Display.Cursor = LocalDrawCursor(Data.Display);
else
  delete(Data.Display.Cursor.Line(:));
  delete(Data.Display.Cursor.Menu.Text);
  delete(Data.Display.Cursor.Menu.Menu);
  Data.Display.Cursor = [];
  set(gcbo, 'Checked', 'off');
  set(gcf, 'WindowButtonMotionFcn', '', ...
           'WindowButtonDownFcn', '', ...
           'WindowButtonUpFcn', '');
end
set(gcf, 'UserData', Data);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% LocalDrawCursor
% Show cursor
function Cursor = LocalDrawCursor(DisplayData, NewPos, TimeStr)
if nargin ~= 3
  % find good placement for lines
  Cursor.Pos = 0.5;
  Cursor.Menu.Menu = uicontextmenu;
  Cursor.Menu.Text  = uimenu(Cursor.Menu.Menu, ...
                             'Label', '', ...
                             'Callback', '');
  % generate lines
  for i=1:length(DisplayData.Axes)
    Cursor.AxesLim(i, :) = get(DisplayData.Axes(i).Plot, 'XLim');
    XPos = Cursor.AxesLim(i,1) + (Cursor.AxesLim(i,2) - Cursor.AxesLim(i,1)) ...
           * Cursor.Pos;
    Cursor.Line(i) = line('Parent', DisplayData.Axes(i).Plot, ...
                          'XData', [XPos XPos], ...
                          'YData', get(DisplayData.Axes(i).Plot, 'YLim'), ...
                          'EraseMode', 'xor', ...
                          'UIContextMenu', Cursor.Menu.Menu, ...
                          'Color', [1 0.2 0.2]);
    Cursor.AxesPos(i, :) = get(DisplayData.Axes(i).Plot, 'Position');
  end
else
  Cursor = DisplayData.Cursor;
  Cursor.Pos = NewPos;
  for i=1:length(DisplayData.Axes)
    XPos = Cursor.AxesLim(i,1) + (Cursor.AxesLim(i,2) - Cursor.AxesLim(i,1)) ...
           * Cursor.Pos;
    set(Cursor.Line(i), 'XData', [XPos XPos]);
  end
  set(Cursor.Menu.Text, 'Label', TimeStr);
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% LocalMoveCursor
% Move cursor
function LocalMoveCursor(Option)
Data = get(gcf, 'UserData');
CurrPt = get(gcf, 'CurrentPoint');
% check if click was in axis
AxPos = Data.Display.Cursor.AxesPos;
temp = CurrPt(1) > AxPos(:,1) & CurrPt(1) < (AxPos(:,1) + AxPos(:,3)) & ...
       CurrPt(2) > AxPos(:,2) & CurrPt(2) < (AxPos(:,2) + AxPos(:,4));
if ~any(temp)
  return;
end

% find axis under pointer and calculate position
ax = find(temp);
Pos = get(Data.Display.Axes(ax).Plot, 'CurrentPoint');
Pos = Pos(2,1);
Pos = (Pos - Data.Display.Cursor.AxesLim(ax,1)) / (Data.Display.Cursor.AxesLim(ax,2) ...
                                                  - Data.Display.Cursor.AxesLim(ax,1));

tsec = Data.EDF(1).Head.Dur * Data.Display.EDF(1).ShowRecords(1) + ...
       Data.EDF(1).Head.Dur * Data.Display.EDF(1).ShowRecords(2) * Pos;
tmin = floor(tsec/60);
tsec = rem(tsec,60);
th = floor(tmin/60);
tmin = rem(tmin, 60);
TimeStr = sprintf('%02d:%02d:%02.1f', th,tmin,tsec);

switch Option
 case 'Down'
  Data.Display.Cursor = LocalDrawCursor(Data.Display, Pos, TimeStr);
  set(gcf, 'WindowButtonMotionFcn', 'viewedf MoveCursor Move', ...
           'WindowButtonUpFcn', 'viewedf MoveCursor Up');
 case 'Move'
  Data.Display.Cursor = LocalDrawCursor(Data.Display, Pos, TimeStr);
 case 'Up'
  set(gcf, 'WindowButtonMotionFcn', '');
end
set(gcf, 'UserData', Data);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LocalResizeUI
% resize UI control according to label size
function uihandle = LocalResizeUI(uihandle, options)
if nargin < 2
  options = [1 1 0 0];
end
ext = get(uihandle, 'Extent');
pos = get(uihandle, 'Position');
if ~isnan(options(1))
  pos(3) = ext(3)*options(1) + options(3);
end
if ~isnan(options(2))
  pos(4) = ext(4)*options(2) + options(4);
end
set(uihandle, 'Position', pos);
  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% LocalNumRecords
% select the number of records to be shown simultaniously
function LocalNumRecords()
Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');
if length(Data.EDF) == 0
  errordlg('No EDF-File is open!', 'Error');
  return;
end

Dur = LocalGetEDFInfo('Dur', Data.EDF);
[MaxDur, MDInd] = max(Dur);

answer = inputdlg({'Select number of records'}, ...
    'Number of records on screen', 1, ...
    {int2str(Data.Display.EDF(MDInd).ShowRecords(2))});
if (length(answer) ~= 0)
  answer = str2num(answer{1});
  if ~isempty(answer)
    for i=1:length(Data.EDF)
      Data.Display.EDF(i).ShowRecords(2) = answer * MaxDur / Dur(i);  
      [Data.EDF(i).Record, Data.EDF(i).Head] = ...
          LocalEDFRead(Data.EDF(i).Head, Data.Display.EDF(i).ShowRecords); 
    end
    set(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);

⌨️ 快捷键说明

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