README.md in convolver-0.0.2 vs README.md in convolver-0.1.0

- old
+ new

@@ -3,22 +3,28 @@ [![Build Status](https://travis-ci.org/neilslater/convolver.png?branch=master)](http://travis-ci.org/neilslater/convolver) Adds a convolve operation to NArray floats. It is around 250 times faster than equivalents in pure Ruby. -Note that convolves based on FFTW3 could well be faster still for large arrays with large kernels. -Benchmark tests suggest that the kernel needs to be a few hundred items, and be significantly smaller -than the signal before FFTW3 offers a significant advantage. +The gem makes convolution via FFTW3 library available. This is faster for convolutions with +larger kernels and signals. The relationship is complex, but as a rule of thumb, the kernel +needs to be around 1000 entries or larger before it is worth switching to FFTW3-based convolves. ## Planned features The *convolver* gem will eventually contain a basic kit for creating, training and running convolutional neural networks. As a side effect of this plan, it will also contain efficient code for calculating signal convolutions for other types of analysis. ## Installation +### Dependency: FFTW3 + +Before you install *convolver*, you should install FFTW3. See http://www.fftw.org/ for details. + +### Installing the gem + Add this line to your application's Gemfile: gem 'convolver' And then execute: @@ -39,14 +45,21 @@ => NArray.float(2): [ 0.19, 0.27 ] * Convolver only works on single-precision floats internally. It will cast NArray types to this, if possible, prior to calculating. - * The convolution is an "inner" one. The output is smaller than the input, each dimension is reduced -by 1 less than the width of the kernel in the same dimension. + * The output is smaller than the input, each dimension is reduced by 1 less than the width of the +kernel in the same dimension. * Convolver expects input a and kernel b to have the same rank, and for the kernel to be same size or smaller in all dimensions as the input. + +FFTW3 convolution: + + a = NArray[0.3,0.4,0.5] + b = NArray[1.3, -0.5] + c = Convolver.convolve_fftw3( a, b ) + => NArray.float(2): [ 0.19, 0.27 ] ## Contributing 1. Fork it 2. Create your feature branch (`git checkout -b my-new-feature`)