comparison 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
comparison
equal deleted inserted replaced
37:771a643d5c29 38:c2204b18f4a2
1 function [pooledIPIdata,ctr] = poolIPI_across_channels(IPIhisttime,IPIhistweight)
2
3 %function that pools IPIdata across all channels in order to plot the data
4 %as in Secker-Walker JASA 1990 Fig. 6
5
6 %plots IPI-Histograms in a matrix display as in Secker-Walker JASA 1990
7 %Fig. 4
8 %
9 % Tim Jürgens, February 2011
10 %
11 % input: IPIhisttime: matrix containing the interval times found in the
12 % analysis
13 % first dimension: frequency channel
14 % second dimension: time step (hop position)
15 % third dimension: interval dimension (max 3)
16 % IPIhistweight: matrix containing the interval weights found in the
17 % analysis, same dimensions as IPIhisttime
18 % output: pooledIPIdata: matrix containing the pooled and weighted IPI
19 % histograms as a function of time (hop position)
20 % first dimension: time step (hop position)
21 % second dimension: IPI intervals
22 % ctr: center values of classes of IPI intervals
23 % ATTENTION: depending on the amplitude of the signals the value
24 % 'verticalshift' might have to be adjusted in order to see structures in
25 % the plot
26
27 verticalshift = 3000; %0.008;%vertical shift of single time series in z-coordinate units
28 ctr = [0:0.02:5].*1e-3; %classes (center-values) of 20 microsec width
29
30 %preallocation of variables
31 pooledIPIdata = zeros(size(IPIhisttime,2),length(ctr));
32 smoothed_pooledIPI = zeros(size(IPIhisttime,2),length(ctr)-5);
33
34 for iCounter = 1:size(IPIhisttime,2) %one for time spacing
35 %cannot use matlabs hist function because weighting must be applied
36
37 tmpIPIhisttime = squeeze(IPIhisttime(:,iCounter,:));
38 tmpIPIhistweight = squeeze(IPIhistweight(:,iCounter,:));
39 tmpIPIhisttime = tmpIPIhisttime(:);
40 tmpIPIhistweight = tmpIPIhistweight(:);
41 for jCounter = 1:length(tmpIPIhisttime)
42 %look which class
43 [tmp1,classindex] = min(abs(tmpIPIhisttime(jCounter)-ctr));
44 pooledIPIdata(iCounter,classindex) = pooledIPIdata(iCounter,classindex)+tmpIPIhistweight(jCounter);
45 end
46
47 end
48
49 %smooth data using a 5-point hamming window
50 hamm_window = hamming(5);
51 for iCounter = 1:size(pooledIPIdata,1)
52 for jCounter = 3:length(ctr)-2 %start with 3 and end with 2 samples
53 %less the length of ctr in order not to get in conflict with the length of
54 %the hamm_window
55 smoothed_pooledIPI(iCounter,jCounter-2) = ...
56 pooledIPIdata(iCounter,(jCounter-2):(jCounter+2))*hamm_window./sum(hamm_window);
57 end
58 end
59 smoothed_ctr = ctr(3:end-2);
60
61
62 figure;
63
64 Tickvector = [];
65 TickLabels = [];
66 for iCounter = 1:size(IPIhisttime,2)
67 hold on;
68 verticalposition = verticalshift*(iCounter-1);
69 %multiply by 1000 to set abscissa to ms units
70 plot(1000.*smoothed_ctr, ...
71 smoothed_pooledIPI(iCounter,:)+verticalposition, ...
72 'k','LineWidth',2);
73 if mod(iCounter,5) == 1 %set best frequency as a label every 10 channels
74 Tickvector = [Tickvector verticalposition];
75 TickLabels = [TickLabels; (iCounter-1)*3]; %time spacing is every 3ms
76 end
77 end
78 set(gca,'yTick',Tickvector,'yTickLabel',num2str(TickLabels,'%4.0f'));
79 ylabel('Stimulus Time (ms)');
80 xlabel('Interval (ms)');
81 xlim([min(1000*ctr) max(1000*ctr)]);
82 ylim([-verticalshift verticalposition+3*verticalshift]);
83 box on;