Module: Convolver
- Defined in:
- lib/convolver-light.rb,
lib/convolver/version.rb,
ext/convolver/convolver.c
Constant Summary collapse
- VERSION =
"0.3.2"
Class Method Summary collapse
-
.convolve(signal, kernel) ⇒ NArray
The two parameters must have the same rank.
-
.convolve_basic(signal, kernel) ⇒ NArray
Calculates convolution of an array of floats representing a signal, with a second array representing a kernel.
Class Method Details
.convolve(signal, kernel) ⇒ NArray
The two parameters must have the same rank. The output has same rank, its size in each dimension d is given by
signal.shape[d] - kernel.shape[d] + 1
12 13 14 |
# File 'lib/convolver-light.rb', line 12 def self.convolve(signal, kernel) convolve_basic signal, kernel end |
.convolve_basic(signal, kernel) ⇒ NArray
Calculates convolution of an array of floats representing a signal, with a second array representing a kernel. The two parameters must have the same rank. The output has same rank, its size in each dimension d is given by
signal.shape[d] - kernel.shape[d] + 1
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'ext/convolver/convolver.c', line 73 static VALUE narray_convolve( VALUE self, VALUE a, VALUE b ) { struct NARRAY *na_a, *na_b, *na_c; volatile VALUE val_a, val_b, val_c; int target_rank, i; int target_shape[LARGEST_RANK]; val_a = na_cast_object(a, NA_SFLOAT); GetNArray( val_a, na_a ); val_b = na_cast_object(b, NA_SFLOAT); GetNArray( val_b, na_b ); if ( na_a->rank != na_b->rank ) { rb_raise( rb_eArgError, "narray a must have equal rank to narray b (a rack %d, b rank %d)", na_a->rank, na_b->rank ); } if ( na_a->rank > LARGEST_RANK ) { rb_raise( rb_eArgError, "exceeded maximum narray rank for convolve of %d", LARGEST_RANK ); } target_rank = na_a->rank; for ( i = 0; i < target_rank; i++ ) { target_shape[i] = na_a->shape[i] - na_b->shape[i] + 1; if ( target_shape[i] < 1 ) { rb_raise( rb_eArgError, "narray b is bigger in one or more dimensions than narray a" ); } } val_c = na_make_object( NA_SFLOAT, target_rank, target_shape, CLASS_OF( val_a ) ); GetNArray( val_c, na_c ); convolve_raw( target_rank, na_a->shape, (float*) na_a->ptr, target_rank, na_b->shape, (float*) na_b->ptr, target_rank, target_shape, (float*) na_c->ptr ); return val_c; } |