Class: Vdsp::DoubleFFT
Constant Summary
Constants included from FFT
FFT::Radix2, FFT::Radix3, FFT::Radix5
Instance Method Summary collapse
- #forward(*args) ⇒ Object (also: #forward_rect)
- #forward_polar(*args) ⇒ Object
-
#initialize(*args) ⇒ Object
constructor
Vdsp::DoubleFFT.
- #inverse(real, imag) ⇒ Object (also: #inverse_rect)
- #inverse_polar(mag, pha) ⇒ Object
Constructor Details
#initialize(*args) ⇒ Object
Vdsp::DoubleFFT
1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 |
# File 'ext/vdsp/vdsp.c', line 1110 VALUE rb_double_fft_initialize(int argc, const VALUE *argv, VALUE self) { rb_check_arity(argc, 1, 2); long length = NUM2LONG(argv[0]); FFTRadix radix = kFFTRadix2; if (argc==2) { radix = (FFTRadix)NUM2LONG(argv[1]); } VdspFFTNativeResource *p = ALLOC(VdspFFTNativeResource); p->type = 'd'; p->length = 0; p->log2n = 0; p->radix = 0; p->setup.value = NULL; VALUE resource = Data_Wrap_Struct(CLASS_OF(self), 0, vdsp_fft_native_resource_delete, p); rb_iv_set(self, "native_resource", resource); p->length = length; p->halflength = length / 2; p->log2n = log2(length); p->radix = radix; p->setup.d = vDSP_create_fftsetupD(p->log2n, radix); return self; } |
Instance Method Details
#forward(*args) ⇒ Object Also known as: forward_rect
1195 1196 1197 1198 1199 1200 1201 1202 |
# File 'ext/vdsp/vdsp.c', line 1195 VALUE rb_double_fft_forward(int argc, const VALUE *argv, VALUE self) { rb_check_arity(argc, 1, 2); if (argc==2 && argv[1]!=Qnil) { return double_fft_forward_z(self, argv[0], argv[1]); } return double_fft_forward_r(self, argv[0]); } |
#forward_polar(*args) ⇒ Object
1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 |
# File 'ext/vdsp/vdsp.c', line 1263 VALUE rb_double_fft_forward_polar(int argc, const VALUE *argv, VALUE self) { VALUE ri = rb_double_fft_forward(argc, argv, self); VALUE real = RARRAY_AREF(ri, 0); VALUE imag = RARRAY_AREF(ri, 1); VdspArrayNativeResource *_real = get_vdsp_array_native_resource(real); VdspArrayNativeResource *_imag = get_vdsp_array_native_resource(imag); DSPDoubleSplitComplex z; z.realp = _real->v.d; z.imagp = _imag->v.d; VALUE lenv = LONG2NUM(_real->length*2); VALUE tmp = rb_class_new_instance(1, &lenv, rb_cDoubleArray); VdspArrayNativeResource *_tmp = get_vdsp_array_native_resource(tmp); vDSP_ztocD(&z, 1, (DSPDoubleComplex *)_tmp->v.d, 2, _real->length); vDSP_polarD(_tmp->v.d, 2, _tmp->v.d, 2, _real->length); vDSP_ctozD((DSPDoubleComplex *)_tmp->v.d, 2, &z, 1, _real->length); return rb_assoc_new(real, imag); } |
#inverse(real, imag) ⇒ Object Also known as: inverse_rect
1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 |
# File 'ext/vdsp/vdsp.c', line 1246 VALUE rb_double_fft_inverse(VALUE self, VALUE real, VALUE imag) { VdspFFTNativeResource *_vf = get_vdsp_fft_native_resource(self); VdspArrayNativeResource *_real = get_vdsp_array_native_resource(real); VdspArrayNativeResource *_imag = get_vdsp_array_native_resource(imag); if (_vf->length==_real->length) { return double_fft_inverse_z(self, real, imag); } else if (_vf->halflength==_real->length) { return double_fft_inverse_r(self, real, imag); } else { rb_raise(rb_eArgError, "wrong length: Vdsp::FFT=%ld Vdsp::Array(real)=%ld Vdsp::Array(imag)=%ld", _vf->length, _real->length, _imag->length); } } |
#inverse_polar(mag, pha) ⇒ Object
1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 |
# File 'ext/vdsp/vdsp.c', line 1287 VALUE rb_double_fft_inverse_polar(VALUE self, VALUE mag, VALUE pha) { VdspArrayNativeResource *_mag = get_vdsp_array_native_resource(mag); VdspArrayNativeResource *_pha = get_vdsp_array_native_resource(pha); DSPDoubleSplitComplex z; z.realp = _mag->v.d; z.imagp = _pha->v.d; VALUE lenv = LONG2NUM(_mag->length*2); VALUE tmp = rb_class_new_instance(1, &lenv, rb_cDoubleArray); VdspArrayNativeResource *_tmp = get_vdsp_array_native_resource(tmp); vDSP_ztocD(&z, 1, (DSPDoubleComplex *)_tmp->v.d, 2, _mag->length); vDSP_rectD(_tmp->v.d, 2, _tmp->v.d, 2, _mag->length); vDSP_ctozD((DSPDoubleComplex *)_tmp->v.d, 2, &z, 1, _mag->length); return rb_double_fft_inverse(self, mag, pha); } |