vdsp 1.11.0 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|