This shows you the differences between two versions of the page.
— |
convones [2010/06/22 05:10] (current) jochen created |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== convones ====== | ||
+ | ===== Motivation ===== | ||
+ | The main motivation to use convones is to have a faster routine for the special case where one of the arguments of a one-dimensional convolution is a series of all-1 values. | ||
+ | |||
+ | ===== Reference ===== | ||
+ | <file> convones - convoles a function with a number of consecutive ones | ||
+ | |||
+ | FORMAT: cfunc = convones(f, cnum [, w]) | ||
+ | |||
+ | Input fields: | ||
+ | |||
+ | f function to convolve | ||
+ | cnum number of consecutive ones to use | ||
+ | w if 1x1 true, weight (divide by number of samples) | ||
+ | |||
+ | Output fields: | ||
+ | |||
+ | cfunc ones-convolved function | ||
+ | |||
+ | See also conv</file> | ||
+ | |||
+ | ===== Used by ===== | ||
+ | The main internal use for this function is the creation of design matrices. Opposed to SPM (which typically uses a 16 timebin-per-TR resolution), the [[prt.CreateSDM|design matrix creation]] in NeuroElf uses a millisecond resolution. While differences between convolved time courses are small (the HRF does not have frequency components for which the maximally occurring shift would matter much w.r.t. their phase), I like the idea of being precise wherever possible. And since onset times are commonly given in milliseconds (and people seem to make a whole lot of fuss about stimulus timing these days), I figured it would be nice to have this implemented... | ||
+ | |||
+ | ===== Exemplary use ===== | ||
+ | <code matlab conv_ones_rectwindow.m>% create a large gaussian kernel | ||
+ | k = smoothkern(2000); | ||
+ | |||
+ | % convolve with a all-ones vector of equal length | ||
+ | tic, ko = convones(k, numel(k)); toc | ||
+ | % reference: Elapsed time is 0.024565 seconds. | ||
+ | |||
+ | % and now the same with conv | ||
+ | tic, koc = conv(k, ones(numel(k), 1)); toc | ||
+ | % reference: Elapsed time is 0.240042 seconds.</code> | ||
+ | |||
+ | Note: the difference gets larger the longer the vectors become!! |