Module: Convolver
- Defined in:
- lib/convolver-light.rb,
lib/convolver/version.rb,
ext/convolver/convolver.c
Constant Summary collapse
- VERSION =
"0.3.3"
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
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 112 113 114 115 116 117 |
# File 'ext/convolver/convolver.c', line 79
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;
}
|