Mercurial > hg > map
diff userProgramsTim/poolIPI_across_channels.m @ 38:c2204b18f4a2 tip
End nov big change
author | Ray Meddis <rmeddis@essex.ac.uk> |
---|---|
date | Mon, 28 Nov 2011 13:34:28 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/userProgramsTim/poolIPI_across_channels.m Mon Nov 28 13:34:28 2011 +0000 @@ -0,0 +1,83 @@ +function [pooledIPIdata,ctr] = poolIPI_across_channels(IPIhisttime,IPIhistweight) + +%function that pools IPIdata across all channels in order to plot the data +%as in Secker-Walker JASA 1990 Fig. 6 + +%plots IPI-Histograms in a matrix display as in Secker-Walker JASA 1990 +%Fig. 4 +% +% Tim Jürgens, February 2011 +% +% input: IPIhisttime: matrix containing the interval times found in the +% analysis +% first dimension: frequency channel +% second dimension: time step (hop position) +% third dimension: interval dimension (max 3) +% IPIhistweight: matrix containing the interval weights found in the +% analysis, same dimensions as IPIhisttime +% output: pooledIPIdata: matrix containing the pooled and weighted IPI +% histograms as a function of time (hop position) +% first dimension: time step (hop position) +% second dimension: IPI intervals +% ctr: center values of classes of IPI intervals +% ATTENTION: depending on the amplitude of the signals the value +% 'verticalshift' might have to be adjusted in order to see structures in +% the plot + +verticalshift = 3000; %0.008;%vertical shift of single time series in z-coordinate units +ctr = [0:0.02:5].*1e-3; %classes (center-values) of 20 microsec width + +%preallocation of variables +pooledIPIdata = zeros(size(IPIhisttime,2),length(ctr)); +smoothed_pooledIPI = zeros(size(IPIhisttime,2),length(ctr)-5); + +for iCounter = 1:size(IPIhisttime,2) %one for time spacing + %cannot use matlabs hist function because weighting must be applied + + tmpIPIhisttime = squeeze(IPIhisttime(:,iCounter,:)); + tmpIPIhistweight = squeeze(IPIhistweight(:,iCounter,:)); + tmpIPIhisttime = tmpIPIhisttime(:); + tmpIPIhistweight = tmpIPIhistweight(:); + for jCounter = 1:length(tmpIPIhisttime) + %look which class + [tmp1,classindex] = min(abs(tmpIPIhisttime(jCounter)-ctr)); + pooledIPIdata(iCounter,classindex) = pooledIPIdata(iCounter,classindex)+tmpIPIhistweight(jCounter); + end + +end + +%smooth data using a 5-point hamming window +hamm_window = hamming(5); +for iCounter = 1:size(pooledIPIdata,1) + for jCounter = 3:length(ctr)-2 %start with 3 and end with 2 samples + %less the length of ctr in order not to get in conflict with the length of + %the hamm_window + smoothed_pooledIPI(iCounter,jCounter-2) = ... + pooledIPIdata(iCounter,(jCounter-2):(jCounter+2))*hamm_window./sum(hamm_window); + end +end +smoothed_ctr = ctr(3:end-2); + + +figure; + +Tickvector = []; +TickLabels = []; +for iCounter = 1:size(IPIhisttime,2) + hold on; + verticalposition = verticalshift*(iCounter-1); + %multiply by 1000 to set abscissa to ms units + plot(1000.*smoothed_ctr, ... + smoothed_pooledIPI(iCounter,:)+verticalposition, ... + 'k','LineWidth',2); + if mod(iCounter,5) == 1 %set best frequency as a label every 10 channels + Tickvector = [Tickvector verticalposition]; + TickLabels = [TickLabels; (iCounter-1)*3]; %time spacing is every 3ms + end +end +set(gca,'yTick',Tickvector,'yTickLabel',num2str(TickLabels,'%4.0f')); +ylabel('Stimulus Time (ms)'); +xlabel('Interval (ms)'); +xlim([min(1000*ctr) max(1000*ctr)]); +ylim([-verticalshift verticalposition+3*verticalshift]); +box on;