Home > FMAToolbox > Analyses > SpectrogramBands.m

SpectrogramBands

PURPOSE ^

SpectrogramBands - Determine running power in physiological bands.

SYNOPSIS ^

function bands = SpectrogramBands(spectrogram,frequencies,varargin)

DESCRIPTION ^

SpectrogramBands - Determine running power in physiological bands.

  USAGE

    bands = SpectrogramBands(spectrogram,frequencies,<options>)

    spectrogram    spectrogram obtained using <a href="matlab:help MTSpectrogram">MTSpectrogram</a>
    frequencies    frequency bins for spectrogram
    <options>      optional list of property-value pairs (see table below)

    =========================================================================
     Properties    Values
    -------------------------------------------------------------------------
     'smooth'      smoothing for ratio (0 = no smoothing) (default = 2)
     'delta'       set delta band (default = [0 4])
     'theta'       set theta band (default = [7 10])
     'spindles'    set spindle band (default = [10 20])
     'lowGamma'    set low gamma band (default = [30 80])
     'highGamma'   set high gamma band (default = [80 120])
     'ripples'     set ripple band (default = [100 250])
     'broadLow'    set broad low frequency band (default = [1 12])
     'amyGamma'    set amygdala gamma band (default = [45 65])
    =========================================================================

  OUTPUT

    bands.delta      delta power
    bands.theta      theta power
    bands.spindles   spindle power
    bands.lowGamma   low gamma power
    bands.highGamma  high gamma power
    bands.ripples    ripple power
    bands.broadLow   broad low frequency power
    bands.amyGamma   amygdala gamma power

    bands.ratios.hippocampus      theta/delta ratio
    bands.ratios.cortex           [0.5 4.5]/[0.5 9] and [0.5 20]/[0.5 55]
    bands.ratios.amygdala         gamma/broad low ratio

    Heuristic ratios for cortex are from Gervasoni et al. (2004).

  SEE

    See also MTSpectrogram.

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function bands = SpectrogramBands(spectrogram,frequencies,varargin)
0002 
0003 %SpectrogramBands - Determine running power in physiological bands.
0004 %
0005 %  USAGE
0006 %
0007 %    bands = SpectrogramBands(spectrogram,frequencies,<options>)
0008 %
0009 %    spectrogram    spectrogram obtained using <a href="matlab:help MTSpectrogram">MTSpectrogram</a>
0010 %    frequencies    frequency bins for spectrogram
0011 %    <options>      optional list of property-value pairs (see table below)
0012 %
0013 %    =========================================================================
0014 %     Properties    Values
0015 %    -------------------------------------------------------------------------
0016 %     'smooth'      smoothing for ratio (0 = no smoothing) (default = 2)
0017 %     'delta'       set delta band (default = [0 4])
0018 %     'theta'       set theta band (default = [7 10])
0019 %     'spindles'    set spindle band (default = [10 20])
0020 %     'lowGamma'    set low gamma band (default = [30 80])
0021 %     'highGamma'   set high gamma band (default = [80 120])
0022 %     'ripples'     set ripple band (default = [100 250])
0023 %     'broadLow'    set broad low frequency band (default = [1 12])
0024 %     'amyGamma'    set amygdala gamma band (default = [45 65])
0025 %    =========================================================================
0026 %
0027 %  OUTPUT
0028 %
0029 %    bands.delta      delta power
0030 %    bands.theta      theta power
0031 %    bands.spindles   spindle power
0032 %    bands.lowGamma   low gamma power
0033 %    bands.highGamma  high gamma power
0034 %    bands.ripples    ripple power
0035 %    bands.broadLow   broad low frequency power
0036 %    bands.amyGamma   amygdala gamma power
0037 %
0038 %    bands.ratios.hippocampus      theta/delta ratio
0039 %    bands.ratios.cortex           [0.5 4.5]/[0.5 9] and [0.5 20]/[0.5 55]
0040 %    bands.ratios.amygdala         gamma/broad low ratio
0041 %
0042 %    Heuristic ratios for cortex are from Gervasoni et al. (2004).
0043 %
0044 %  SEE
0045 %
0046 %    See also MTSpectrogram.
0047 
0048 % Copyright (C) 2004-2014 by Michaƫl Zugaro, Gabrielle Girardeau
0049 %
0050 % This program is free software; you can redistribute it and/or modify
0051 % it under the terms of the GNU General Public License as published by
0052 % the Free Software Foundation; either version 3 of the License, or
0053 % (at your option) any later version.
0054 
0055 % Defaults
0056 smooth = 2;
0057 delta = [0 4];
0058 theta = [7 10];
0059 spindles = [10 20];
0060 lowGamma = [30 80];
0061 highGamma = [80 120];
0062 ripples = [100 250];
0063 broadLow = [1 12];
0064 amyGamma = [45 65];
0065 
0066 % Check number of parameters
0067 if nargin < 2,
0068   error('Incorrect number of parameters (type ''help <a href="matlab:help SpectrogramBands">SpectrogramBands</a>'' for details).');
0069 end
0070 
0071 % Check parameter sizes
0072 if ~isdmatrix(spectrogram),
0073     error('Parameter ''spectrogram'' is not a matrix (type ''help <a href="matlab:help SpectrogramBands">SpectrogramBands</a>'' for details).');
0074 end
0075 if ~isdvector(frequencies) | length(frequencies) ~= size(spectrogram,1),
0076     error('Parameter ''frequencies'' is not a vector or does not match spectrogram size (type ''help <a href="matlab:help SpectrogramBands">SpectrogramBands</a>'' for details).');
0077 end
0078 
0079 % Parse options
0080 for i = 1:2:length(varargin),
0081     if ~ischar(varargin{i}),
0082         error(['Parameter ' num2str(i) ' is not a property (type ''help <a href="matlab:help SpectrogramBands">SpectrogramBands</a>'' for details).']);
0083     end
0084     switch(lower(varargin{i})),
0085         case 'smooth',
0086             smooth = varargin{i+1};
0087             if ~isdscalar(smooth,'>=0'),
0088                 error('Incorrect value for property ''smooth'' (type ''help <a href="matlab:help SpectrogramBands">SpectrogramBands</a>'' for details).');
0089             end
0090         case 'delta',
0091             delta = varargin{i+1};
0092             if ~isdvector(delta,'>=0','<','#2'),
0093                 error('Incorrect value for property ''delta'' (type ''help <a href="matlab:help SpectrogramBands">SpectrogramBands</a>'' for details).');
0094             end
0095         case 'theta',
0096             theta = varargin{i+1};
0097             if ~isdvector(theta,'>=0','<','#2'),
0098                 error('Incorrect value for property ''theta'' (type ''help <a href="matlab:help SpectrogramBands">SpectrogramBands</a>'' for details).');
0099             end
0100         case 'spindles',
0101             spindles = varargin{i+1};
0102             if ~isdvector(spindles,'>=0','<','#2'),
0103                 error('Incorrect value for property ''spindles'' (type ''help <a href="matlab:help SpectrogramBands">SpectrogramBands</a>'' for details).');
0104             end
0105         case 'lowgamma',
0106             lowGamma = varargin{i+1};
0107             if ~isdvector(lowGamma,'>=0','<','#2'),
0108                 error('Incorrect value for property ''lowGamma'' (type ''help <a href="matlab:help SpectrogramBands">SpectrogramBands</a>'' for details).');
0109             end
0110         case 'highgamma',
0111             highGamma = varargin{i+1};
0112             if ~isdvector(highGamma,'>=0','<','#2'),
0113                 error('Incorrect value for property ''highGamma'' (type ''help <a href="matlab:help SpectrogramBands">SpectrogramBands</a>'' for details).');
0114             end
0115         case 'ripples',
0116             ripples = varargin{i+1};
0117             if ~isdvector(ripples,'>=0','<','#2'),
0118                 error('Incorrect value for property ''ripples'' (type ''help <a href="matlab:help SpectrogramBands">SpectrogramBands</a>'' for details).');
0119             end
0120         case 'broadlow',
0121             broadLow = varargin{i+1};
0122             if ~isdvector(broadLow,'>=0','<','#2'),
0123                 error('Incorrect value for property ''broadLow'' (type ''help <a href="matlab:help SpectrogramBands">SpectrogramBands</a>'' for details).');
0124             end
0125         case 'amygamma',
0126             amyGamma = varargin{i+1};
0127             if ~isdvector(amyGamma,'>=0','<','#2'),
0128                 error('Incorrect value for property ''amyGamma'' (type ''help <a href="matlab:help SpectrogramBands">SpectrogramBands</a>'' for details).');
0129             end
0130         otherwise,
0131             error(['Unknown property ''' num2str(varargin{i}) ''' (type ''help <a href="matlab:help SpectrogramBands">SpectrogramBands</a>'' for details).']);
0132     end
0133 end
0134 
0135 n = size(spectrogram,1);
0136 
0137 % Select relevant frequency bins
0138 thetaBins = frequencies >= theta(1) & frequencies <= theta(2);
0139 deltaBins = frequencies >= delta(1) & frequencies <= delta(2);
0140 spindleBins = frequencies >= spindles(1) & frequencies <= spindles(2);
0141 lowGammaBins = frequencies >= lowGamma(1) & frequencies <= lowGamma(2);
0142 highGammaBins = frequencies >= highGamma(1) & frequencies <= highGamma(2);
0143 rippleBins = frequencies >= ripples(1) & frequencies <= ripples(2);
0144 broadLowBins = frequencies >= broadLow(1) & frequencies <= broadLow(2);
0145 amyGammaBins = frequencies >= amyGamma(1) & frequencies <= amyGamma(2);
0146 
0147 % Compute physiological bands
0148 bands.theta = mean(spectrogram(thetaBins,:))';
0149 bands.delta = mean(spectrogram(deltaBins,:))';
0150 bands.spindles = mean(spectrogram(spindleBins,:))';
0151 bands.lowGamma = mean(spectrogram(lowGammaBins,:))';
0152 bands.highGamma = mean(spectrogram(highGammaBins,:))';
0153 bands.ripples = mean(spectrogram(rippleBins,:))';
0154 bands.broadLow = mean(spectrogram(broadLowBins,:))';
0155 bands.amyGamma = mean(spectrogram(amyGammaBins,:))';
0156 
0157 % Theta/delta ratio
0158 bands.ratios.hippocampus = Smooth(bands.theta./(bands.delta+eps),smooth);
0159 bands.ratio = bands.ratios.hippocampus;
0160 
0161 % Heuristic ratios from Gervasoni et al. (2004)
0162 range1 = [0.5 4.5];
0163 bins1 = frequencies >= range1(1) & frequencies <= range1(2);
0164 band1 =  mean(spectrogram(bins1,:))';
0165 range2 = [0.5 9];
0166 bins2 = frequencies >= range2(1) & frequencies <= range2(2);
0167 band2 =  mean(spectrogram(bins2,:))';
0168 bands.ratios.cortex(:,1) = Smooth(band1./(band2+eps),smooth);
0169 bands.ratio1 = bands.ratios.cortex;
0170 
0171 range1 = [0.5 20];
0172 bins1 = frequencies >= range1(1) & frequencies <= range1(2);
0173 band1 =  mean(spectrogram(bins1,:))';
0174 range2 = [0.5 55];
0175 bins2 = frequencies >= range2(1) & frequencies <= range2(2);
0176 band2 =  mean(spectrogram(bins2,:))';
0177 bands.ratios.cortex(:,2) = Smooth(band1./(band2+eps),smooth);
0178 bands.ratio2 = bands.ratios.cortex(:,2);
0179 
0180 % Amygdala ratio
0181 bands.ratios.amygdala = Smooth(bands.amyGamma./(bands.broadLow+eps),smooth);
0182 bands.ratio3 = bands.ratios.amygdala;

Generated on Fri 16-Mar-2018 13:00:20 by m2html © 2005