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

📄 viewedf.m

📁 matlab数字信号处理工具箱
💻 M
📖 第 1 页 / 共 5 页
字号:
Data.Display.Plugin(ind).DisplayMin = Data.Plugin(ind).EDF.Head.PhysMin;
Data.Display.Plugin(ind).DisplayMax = Data.Plugin(ind).EDF.Head.PhysMax;
Data.Display.Plugin(ind).StairPlot = ...
    zeros(1, Data.Plugin(ind).EDF.Head.NS);
Data.Display.Plugin(ind).UpDownPlot = ...
    zeros(1, Data.Plugin(ind).EDF.Head.NS);
MaxDur = max(LocalGetEDFInfo('Dur', Data.EDF));
Data.Display.Plugin(ind).ShowRecords = [0 ...
      round(Data.Plugin(ind).EDF.Head.Dur / MaxDur)];

% Add menu entry to options menu
Data.Display.PluginMenu.Sub(ind) = uimenu(Data.Display.PluginMenu.Main, ...
    'Label', [pluglabel, ' (File ', upper(plugname), ')'], ...
    'UserData', ind, ...
    'Callback', 'viewedf PluginMenu');
set(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);
LocalRepaint(0);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% LocalRemovePlugin
% Remove plugin function
function LocalRemovePlugin(whichplugin)
Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');

if nargin == 0
  % determine which plugin to remove
  if length(Data.EDF)==0
    errordlg('No EDF-File is open!', 'Error');
    return;
  end
  if length(Data.Plugin) == 0
    errordlg('No Plugins are loaded!', 'Error');
    return;
  end

  dlgh = dialog(...
      'Name', 'Remove Plugin', ...
      'CloseRequestFcn', 'set(gcf,''UserData'',''Cancel'');uiresume;');
  dlgpos = get(dlgh, 'Position');
  set(dlgh, 'Position', [dlgpos(1),dlgpos(2),200,100]);

  PlugNames = {};
  % get Plugin names
  for i = 1:length(Data.Plugin)
    PlugNames = {PlugNames{:}, [Data.Plugin(i).Label, ' (File ', ...
            upper(Data.Plugin(i).Name), ')']};
  end
  
  poph = uicontrol(dlgh, ...
      'Style', 'Popup', ...
      'Units', 'Normalized', ...
      'String', PlugNames, ...
      'Value', 1, ...
      'Position', [0.05, 0.5, 0.9, 0.35]);
  % buttons
  uicontrol(dlgh, ...
      'Style', 'PushButton', ...
      'Units', 'Normalized', ...
      'String', 'Remove', ...
      'Position', [0.1, 0.05, 0.3, 0.3], ...
      'Callback', 'set(gco,''UserData'',''OK'');uiresume;');
  uicontrol(dlgh, ...
      'Style', 'PushButton', ...
      'Units', 'Normalized', ...
      'String', 'Cancel', ...
      'Position', [0.6, 0.05, 0.3, 0.3], ...
      'Callback', 'set(gco,''UserData'',''Cancel'');uiresume;');
  
  drawnow;
  uiwait(dlgh);
  whichplugin = get(poph, 'Value');
  selbutton = get(gco,'UserData');
  delete(dlgh);
  if strcmp(selbutton,'Cancel')
    return
  end
end

delete(Data.Display.PluginMenu.Sub(whichplugin));
for i = whichplugin:length(Data.Plugin)-1
  Data.Display.PluginMenu.Sub(i) = Data.Display.PluginMenu.Sub(i+1);
  set(Data.Display.PluginMenu.Sub(i), 'UserData', i);
  Data.Display.Plugin(i) = Data.Display.Plugin(i+1);
  Data.Plugin(i) = Data.Plugin(i+1);
end
ind = length(Data.Plugin) - 1;
if ind == 0
  Data.Plugin = [];
  Data.Display.Plugin = [];
  Data.Display.PluginMenu.Sub = [];
else
  Data.Plugin = Data.Plugin(1:ind);
  Data.Display.Plugin = Data.Display.Plugin(1:ind);
  Data.Display.PluginMenu.Sub = Data.Display.PluginMenu.Sub(1:ind);
end
set(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);
LocalRepaint;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LocalPluginMenu
% Call plugin for setup
function LocalPluginMenu()
ind = get(gcbo, 'UserData');
Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');
[Data.Plugin(ind).EDF, Data.Plugin(ind).UserData] = ...
    feval(Data.Plugin(ind).Name, Data.EDF(Data.Plugin(ind).EDFFile), ...
    Data.Plugin(ind).UserData, 'Menu');
% Uncomment to reset display properties after a call of the plugin-menu
%Data.Display.Plugin(ind).ShowSignals = 1:Data.Plugin(ind).EDF.Head.NS;
%Data.Display.Plugin(ind).DisplayMin = Data.Plugin(ind).EDF.Head.PhysMin;
%Data.Display.Plugin(ind).DisplayMax = Data.Plugin(ind).EDF.Head.PhysMax;
%Data.Display.Plugin(ind).StairPlot = ...
%    zeros(1, Data.Plugin(ind).EDF.Head.NS);
%Data.Display.Plugin(ind).UpDownPlot = ...
%    zeros(1, Data.Plugin(ind).EDF.Head.NS);
set(findobj('Tag', 'ViewEDFFigure'), 'UserData',Data);
LocalRepaint(0);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% LocalChangeRecord
% Change displayed page
function LocalChangeRecord(increment, changetype)
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);
[MDur, MDInd] = max(Dur);
FLen = max(LocalGetEDFInfo('FileDur', Data.EDF));
[MFLen, MFInd] = max(FLen);

RelInc = round(ones(size(Dur)) * max(Dur) ./ Dur);
Inc = increment * RelInc;

for i = 1:length(Data.EDF)
  switch changetype
    case 0 % incremental
      Data.Display.EDF(i).ShowRecords(1) = Data.Display.EDF(i).ShowRecords(1) ...
          + Inc(i) * Data.Display.EDF(MDInd).ShowRecords(2); 
    case 1 % absolute
      Data.Display.EDF(i).ShowRecords(1) = Inc(i);
  end
end

% check whether we are moving to far
temp = Data.Display.EDF(MDInd).ShowRecords(1);
if temp < 0
  for i = 1:length(Data.EDF)
    Data.Display.EDF(i).ShowRecords(1) = Data.Display.EDF(i).ShowRecords(1) ...
        - temp * RelInc(i);
  end
end

temp = sum(Data.Display.EDF(MFInd).ShowRecords(1:2)) - ...
    Data.EDF(MFInd).Head.NRec; 
if temp > 0
  temp = ceil(temp / RelInc(MFInd));
  for i = 1:length(Data.EDF)
    Data.Display.EDF(i).ShowRecords(1) = Data.Display.EDF(i).ShowRecords(1) - ...
        temp * RelInc(i); 
  end
end
  
for i=1:length(Data.EDF)
  temp = sum(Data.Display.EDF(i).ShowRecords(1:2)) - ...
      Data.EDF(i).Head.NRec;
  whichrec(1) = Data.Display.EDF(i).ShowRecords(1);
  if temp > 0
    % do not read to much data
    whichrec(2) = Data.Display.EDF(i).ShowRecords(2) - temp;
    if (whichrec(2) < 0)
      whichrec(2) = 0;
    end
    [temp, Data.EDF(i).Head] = LocalEDFRead(Data.EDF(i).Head, whichrec);
    for j = 1:Data.EDF(i).Head.NS
      Data.EDF(i).Record{j} = zeros(Data.Display.EDF(i).ShowRecords(2) * ...
          Data.EDF(i).Head.SPR(j));
      if ~isempty(temp)
        Data.EDF(i).Record{j}(1:length(temp{j})) = temp{j};
      end
    end

  else
    [Data.EDF(i).Record, Data.EDF(i).Head] = ...
        LocalEDFRead(Data.EDF(i).Head, Data.Display.EDF(i).ShowRecords); 
  end
end
set(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);
LocalRepaint(1);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% LocalHSroll
% Goto record
function LocalHScroll
Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');
MaxVal = max(LocalGetEDFInfo('FileDur',Data.EDF));
MaxDur = max(LocalGetEDFInfo('Dur', Data.EDF));
pos = get(gcbo, 'Value');
LocalChangeRecord(round(pos*MaxVal/MaxDur), 1);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% LocalGotoRecord
% Goto record
function LocalGotoRecord(Pos)
Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');
if length(Data.EDF)==0
  errordlg('No EDF-File is open!', 'Error');
  return;
end

[temp, ind] = max(LocalGetEDFInfo('Dur', Data.EDF));

if (nargin == 0)
  answer = inputdlg({'Select record'}, 'Change start record', 1, ...
                    {int2str(Data.Display.EDF(ind).ShowRecords(1))});
  if (length(answer) ~= 0)
    answer = str2num(answer{1});
    if ~isempty(answer)
      LocalChangeRecord(answer, 1);
    end
  end
else
  Pos = round(Pos);
  if Pos >= 0
    LocalChangeRecord(Pos, 1);
  end
end
    

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% LocalGotoSecond
% Goto second
function LocalGotoSecond(Pos)
Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');
if length(Data.EDF)==0
  errordlg('No EDF-File is open!', 'Error');
  return;
end

[temp, ind] = max(LocalGetEDFInfo('Dur', Data.EDF));

if (nargin == 0)
  answer = inputdlg({'Select second'}, 'Change start time', 1, ...
    {int2str(round(Data.Display.EDF(ind).ShowRecords(1) / ...
      Data.EDF(ind).Head.Dur))});
  if (length(answer) ~= 0)
    answer = str2num(answer{1});
    if ~isempty(answer)
      LocalChangeRecord(answer / Data.EDF(ind).Head.Dur, 1);
    end
  end
else
  Pos = round(Pos / Data.EDF(ind).Head.Dur);
  if Pos >= 0
    LocalChangeRecord(Pos, 1);
  end
end
    

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% LocalRecordProp
% display channel properties
function LocalRecordProp()
Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');
if length(Data.EDF)==0
  errordlg('No EDF-File is open!', 'Error');
  return;
end

whichbut = get(gcbo, 'UserData');
Rec = whichbut{2};
Num = whichbut{3};
switch whichbut{1}
  case 'EDF'
    RecHead = Data.EDF(Num).Head;
    RecDisp = Data.Display.EDF(Num);
    DataType = 'EDF File';
    TypeString = 'Filename :';
    OptString = [Data.EDF(Num).Head.FILE.Name '.' Data.EDF(Num).Head.FILE.Ext];
  case 'PLUGIN'
    RecHead = Data.Plugin(Num).EDF.Head;
    RecDisp = Data.Display.Plugin(Num);
    DataType = 'Plugin';
    TypeString = 'Name :';
    OptString = Data.Plugin(Num).Label;
end
dlgh = dialog(...
    'Name', 'Channel Information', ...
    'CloseRequestFcn', 'set(gcf,''UserData'',''Cancel'');uiresume;');
dlgpos = get(dlgh, 'Position');
set(dlgh, 'Position', [dlgpos(1),dlgpos(2),350,300]);
Fnthgt = LocalGetFontHeight;
yinc = 0.085;
% general information
linenum=1;
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'FontWeight', 'bold', ...
    'String', [ 'Record read from ' DataType], ...
    'Position', [0.02, 1-linenum*yinc, 0.96, Fnthgt ]);
% filename
linenum=linenum+1;
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'String', TypeString, ...
    'Position', [0.02, 1-linenum*yinc, 0.96, Fnthgt]);
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'FontWeight', 'bold', ...
    'String', OptString, ...
    'Position', [0.35, 1-linenum*yinc, 0.63, Fnthgt]);
% label
linenum=linenum+1;
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'String', 'Label : ', ...
    'Position', [0.02, 1-linenum*yinc, 0.96, Fnthgt]);
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'FontWeight', 'bold', ...
    'String', RecHead.Label(Rec,:), ...
    'Position', [0.35, 1-linenum*yinc, 0.63, Fnthgt]);
% Transducer
linenum=linenum+1;
uicontrol(dlgh, ...
  'Style', 'Text', ...
  'Units', 'Normalized', ...
  'HorizontalAlignment', 'left', ...
  'String', 'Transducer :', ...
  'Position', [0.02, 1-linenum*yinc, 0.96, Fnthgt]);
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'FontWeight', 'bold', ...
    'String', RecHead.Transducer(Rec, :), ...
    'Position', [0.35, 1-linenum*yinc, 0.63, Fnthgt]);
% Prefilter
linenum=linenum+1;
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'String', 'Prefilter :', ...
    'Position', [0.02, 1-linenum*yinc, 0.96, Fnthgt]);
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'FontWeight', 'bold', ...
    'String', RecHead.PreFilt(Rec, :), ...
    'Position', [0.35, 1-linenum*yinc, 0.63, Fnthgt]);
% samples per records
linenum=linenum+1;
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'String', 'Samples per record  :', ...
    'Position', [0.02, 1-linenum*yinc, 0.96, Fnthgt]);
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'FontWeight', 'bold', ...
    'String', sprintf('%d', RecHead.SPR(Rec)), ...
    'Position', [0.35, 1-linenum*yinc, 0.63, Fnthgt]);
% physical min
linenum=linenum+1;
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'String', 'Physical min :', ...
    'Position', [0.02, 1-linenum*yinc, 0.45, Fnthgt]);
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...
    'HorizontalAlignment', 'left', ...
    'FontWeight', 'bold', ...
    'String', sprintf('%f', RecHead.PhysMin(Rec)), ...
    'Position', [0.25, 1-linenum*yinc, 0.25, Fnthgt]);
% physical max
uicontrol(dlgh, ...
    'Style', 'Text', ...
    'Units', 'Normalized', ...

⌨️ 快捷键说明

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