0001 function bands = SpectrogramBands(spectrogram,frequencies,varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
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
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
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
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
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
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
0158 bands.ratios.hippocampus = Smooth(bands.theta./(bands.delta+eps),smooth);
0159 bands.ratio = bands.ratios.hippocampus;
0160
0161
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
0181 bands.ratios.amygdala = Smooth(bands.amyGamma./(bands.broadLow+eps),smooth);
0182 bands.ratio3 = bands.ratios.amygdala;