further convolving optimisaions

This commit is contained in:
minjaesong
2023-11-28 19:25:42 +09:00
parent af48a171eb
commit 6059ba92ac
2 changed files with 35 additions and 37 deletions

View File

@@ -49,6 +49,20 @@ private val IM1 = 0
*/
object FFT: Disposable {
private val ffts = hashMapOf(
128 to FloatFFT_1D(128),
256 to FloatFFT_1D(256),
512 to FloatFFT_1D(512),
1024 to FloatFFT_1D(1024),
2048 to FloatFFT_1D(2048),
4096 to FloatFFT_1D(4096),
8192 to FloatFFT_1D(8192),
16384 to FloatFFT_1D(16384),
32768 to FloatFFT_1D(32768),
65536 to FloatFFT_1D(65536),
)
init {
// Loader.load(org.bytedeco.fftw.global.fftw3::class.java)
@@ -102,8 +116,7 @@ object FFT: Disposable {
// USING JTRANSFORMS //
val signal = FloatArray(signal0.size * 2) { if (it % 2 == 0) signal0[it / 2] else 0f }
val fft = FloatFFT_1D(signal0.size.toLong())
fft.complexForward(signal)
ffts[signal0.size]!!.complexForward(signal)
return ComplexArray(signal)
}
@@ -137,12 +150,17 @@ object FFT: Disposable {
// USING JTRANSFORMS //
val signal = signal0.reim
val fft = FloatFFT_1D(signal0.size.toLong())
fft.complexInverse(signal, true)
ffts[signal0.size]!!.complexInverse(signal0.reim, true)
return signal0.getReal()
}
fun ifftAndGetReal(signal0: ComplexArray, output: FloatArray) {
ffts[signal0.size]!!.complexInverse(signal0.reim, true)
for (i in 0 until signal0.size) {
output[i] = signal0.reim[i * 2]
}
}
// org.apache.commons.math3.transform.FastFouriesTransformer.java:214
/**
* Computes the standard transform of the specified complex data. The