Mercurial > hg > map
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; |