vdsp 1.11.0 → 1.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/vdsp/vdsp.c +95 -11
- data/lib/vdsp/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a957ab0300b98fe324433a6ce9c6df4a7675fb9a0236121277cf9108f4296afa
|
4
|
+
data.tar.gz: f5496fd85f20e5101453cf42bd290c58d7d13b5cb1fde34bad41c53bc7901285
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 150786ad2737a6fd5eb949c0a8e1aeea96650f051463bc21d70f92770b5694947db0067b6b2cf865331d3a0590be99767729418b0a64b05f5f0fd1ad81591b11
|
7
|
+
data.tar.gz: 250b4b1ebce4641842d2b683695bab52c4c4db062a4358b8ea1aa81d0d500ae41f080c936d8434872b83670a551644774de2d5f61b7e1f072fb9ad548fb5791e
|
data/ext/vdsp/vdsp.c
CHANGED
@@ -1135,7 +1135,7 @@ VALUE rb_double_fft_initialize(int argc, const VALUE *argv, VALUE self)
|
|
1135
1135
|
return self;
|
1136
1136
|
}
|
1137
1137
|
|
1138
|
-
VALUE
|
1138
|
+
VALUE double_fft_forward_r(VALUE fft, VALUE va)
|
1139
1139
|
{
|
1140
1140
|
VdspFFTNativeResource *_vf = get_vdsp_fft_native_resource(fft);
|
1141
1141
|
VdspArrayNativeResource *_va = get_vdsp_array_native_resource(va);
|
@@ -1164,7 +1164,7 @@ VALUE double_fft_forward1(VALUE fft, VALUE va)
|
|
1164
1164
|
return rb_assoc_new(real, imag);
|
1165
1165
|
}
|
1166
1166
|
|
1167
|
-
VALUE
|
1167
|
+
VALUE double_fft_forward_z(VALUE fft, VALUE real, VALUE imag)
|
1168
1168
|
{
|
1169
1169
|
VdspFFTNativeResource *_vf = get_vdsp_fft_native_resource(fft);
|
1170
1170
|
VdspArrayNativeResource *_real = get_vdsp_array_native_resource(real);
|
@@ -1196,9 +1196,68 @@ VALUE rb_double_fft_forward(int argc, const VALUE *argv, VALUE self)
|
|
1196
1196
|
{
|
1197
1197
|
rb_check_arity(argc, 1, 2);
|
1198
1198
|
if (argc==2 && argv[1]!=Qnil) {
|
1199
|
-
return
|
1199
|
+
return double_fft_forward_z(self, argv[0], argv[1]);
|
1200
|
+
}
|
1201
|
+
return double_fft_forward_r(self, argv[0]);
|
1202
|
+
}
|
1203
|
+
|
1204
|
+
VALUE double_fft_inverse_r(VALUE fft, VALUE real, VALUE imag)
|
1205
|
+
{
|
1206
|
+
real = rb_funcall(real, rb_intern("clone"), 0);
|
1207
|
+
imag = rb_funcall(imag, rb_intern("clone"), 0);
|
1208
|
+
|
1209
|
+
VdspFFTNativeResource *_vf = get_vdsp_fft_native_resource(fft);
|
1210
|
+
VdspArrayNativeResource *_real = get_vdsp_array_native_resource(real);
|
1211
|
+
VdspArrayNativeResource *_imag = get_vdsp_array_native_resource(imag);
|
1212
|
+
|
1213
|
+
DSPDoubleSplitComplex z;
|
1214
|
+
z.realp = _real->v.d;
|
1215
|
+
z.imagp = _imag->v.d;
|
1216
|
+
|
1217
|
+
vDSP_fft_zripD(_vf->setup.d, &z, 1, _vf->log2n, FFT_INVERSE);
|
1218
|
+
|
1219
|
+
VALUE lenv = LONG2NUM(_vf->length);
|
1220
|
+
VALUE inverse = rb_class_new_instance(1, &lenv, rb_cDoubleArray);
|
1221
|
+
VdspArrayNativeResource *_inverse = get_vdsp_array_native_resource(inverse);
|
1222
|
+
|
1223
|
+
vDSP_ztocD(&z, 1, (DSPDoubleComplex *)_inverse->v.d, 2, _vf->halflength);
|
1224
|
+
|
1225
|
+
return rb_assoc_new(inverse, Qnil);
|
1226
|
+
}
|
1227
|
+
|
1228
|
+
VALUE double_fft_inverse_z(VALUE fft, VALUE real, VALUE imag)
|
1229
|
+
{
|
1230
|
+
real = rb_funcall(real, rb_intern("clone"), 0);
|
1231
|
+
imag = rb_funcall(imag, rb_intern("clone"), 0);
|
1232
|
+
|
1233
|
+
VdspFFTNativeResource *_vf = get_vdsp_fft_native_resource(fft);
|
1234
|
+
VdspArrayNativeResource *_real = get_vdsp_array_native_resource(real);
|
1235
|
+
VdspArrayNativeResource *_imag = get_vdsp_array_native_resource(imag);
|
1236
|
+
|
1237
|
+
DSPDoubleSplitComplex z;
|
1238
|
+
z.realp = _real->v.d;
|
1239
|
+
z.imagp = _imag->v.d;
|
1240
|
+
|
1241
|
+
vDSP_fft_zipD(_vf->setup.d, &z, 1, _vf->log2n, FFT_INVERSE);
|
1242
|
+
|
1243
|
+
return rb_assoc_new(real, imag);
|
1244
|
+
}
|
1245
|
+
|
1246
|
+
VALUE rb_double_fft_inverse(VALUE self, VALUE real, VALUE imag)
|
1247
|
+
{
|
1248
|
+
VdspFFTNativeResource *_vf = get_vdsp_fft_native_resource(self);
|
1249
|
+
VdspArrayNativeResource *_real = get_vdsp_array_native_resource(real);
|
1250
|
+
VdspArrayNativeResource *_imag = get_vdsp_array_native_resource(imag);
|
1251
|
+
|
1252
|
+
if (_vf->length==_real->length) {
|
1253
|
+
return double_fft_inverse_z(self, real, imag);
|
1254
|
+
|
1255
|
+
} else if (_vf->halflength==_real->length) {
|
1256
|
+
return double_fft_inverse_r(self, real, imag);
|
1257
|
+
|
1258
|
+
} else {
|
1259
|
+
rb_raise(rb_eArgError, "wrong length: Vdsp::FFT=%ld Vdsp::Array(real)=%ld Vdsp::Array(imag)=%ld", _vf->length, _real->length, _imag->length);
|
1200
1260
|
}
|
1201
|
-
return double_fft_forward1(self, argv[0]);
|
1202
1261
|
}
|
1203
1262
|
|
1204
1263
|
VALUE rb_double_fft_spectrum(int argc, const VALUE *argv, VALUE self)
|
@@ -1207,19 +1266,42 @@ VALUE rb_double_fft_spectrum(int argc, const VALUE *argv, VALUE self)
|
|
1207
1266
|
VALUE real = RARRAY_AREF(ri, 0);
|
1208
1267
|
VALUE imag = RARRAY_AREF(ri, 1);
|
1209
1268
|
|
1210
|
-
VdspFFTNativeResource *_vf = get_vdsp_fft_native_resource(self);
|
1211
1269
|
VdspArrayNativeResource *_real = get_vdsp_array_native_resource(real);
|
1212
1270
|
VdspArrayNativeResource *_imag = get_vdsp_array_native_resource(imag);
|
1213
1271
|
|
1214
|
-
|
1215
|
-
|
1272
|
+
DSPDoubleSplitComplex z;
|
1273
|
+
z.realp = _real->v.d;
|
1274
|
+
z.imagp = _imag->v.d;
|
1275
|
+
|
1276
|
+
VALUE lenv = LONG2NUM(_real->length*2);
|
1277
|
+
VALUE tmp = rb_class_new_instance(1, &lenv, rb_cDoubleArray);
|
1278
|
+
VdspArrayNativeResource *_tmp = get_vdsp_array_native_resource(tmp);
|
1279
|
+
|
1280
|
+
vDSP_ztocD(&z, 1, (DSPDoubleComplex *)_tmp->v.d, 2, _real->length);
|
1281
|
+
vDSP_polarD(_tmp->v.d, 2, _tmp->v.d, 2, _real->length);
|
1282
|
+
vDSP_ctozD((DSPDoubleComplex *)_tmp->v.d, 2, &z, 1, _real->length);
|
1283
|
+
|
1284
|
+
return rb_assoc_new(real, imag);
|
1285
|
+
}
|
1286
|
+
|
1287
|
+
VALUE rb_double_fft_inverse_spectrum(VALUE self, VALUE mag, VALUE pha)
|
1288
|
+
{
|
1216
1289
|
VdspArrayNativeResource *_mag = get_vdsp_array_native_resource(mag);
|
1290
|
+
VdspArrayNativeResource *_pha = get_vdsp_array_native_resource(pha);
|
1291
|
+
|
1292
|
+
DSPDoubleSplitComplex z;
|
1293
|
+
z.realp = _mag->v.d;
|
1294
|
+
z.imagp = _pha->v.d;
|
1295
|
+
|
1296
|
+
VALUE lenv = LONG2NUM(_mag->length*2);
|
1297
|
+
VALUE tmp = rb_class_new_instance(1, &lenv, rb_cDoubleArray);
|
1298
|
+
VdspArrayNativeResource *_tmp = get_vdsp_array_native_resource(tmp);
|
1217
1299
|
|
1218
|
-
|
1219
|
-
|
1220
|
-
|
1300
|
+
vDSP_ztocD(&z, 1, (DSPDoubleComplex *)_tmp->v.d, 2, _mag->length);
|
1301
|
+
vDSP_rectD(_tmp->v.d, 2, _tmp->v.d, 2, _mag->length);
|
1302
|
+
vDSP_ctozD((DSPDoubleComplex *)_tmp->v.d, 2, &z, 1, _mag->length);
|
1221
1303
|
|
1222
|
-
return mag;
|
1304
|
+
return rb_double_fft_inverse(self, mag, pha);
|
1223
1305
|
}
|
1224
1306
|
|
1225
1307
|
|
@@ -2983,7 +3065,9 @@ void Init_vdsp()
|
|
2983
3065
|
rb_include_module(rb_cDoubleFFT, rb_mVdspFFT);
|
2984
3066
|
rb_define_method(rb_cDoubleFFT, "initialize", rb_double_fft_initialize, -1);
|
2985
3067
|
rb_define_method(rb_cDoubleFFT, "forward", rb_double_fft_forward, -1);
|
3068
|
+
rb_define_method(rb_cDoubleFFT, "inverse", rb_double_fft_inverse, 2);
|
2986
3069
|
rb_define_method(rb_cDoubleFFT, "spectrum", rb_double_fft_spectrum, -1);
|
3070
|
+
rb_define_method(rb_cDoubleFFT, "inverse_spectrum", rb_double_fft_inverse_spectrum, 2);
|
2987
3071
|
|
2988
3072
|
// Vdsp::UnsafeDouble
|
2989
3073
|
rb_mUnsafeDouble = rb_define_module_under(rb_mVdsp, "UnsafeDouble");
|
data/lib/vdsp/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vdsp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoshida Tetsuya
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-11-
|
11
|
+
date: 2019-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|