You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by le...@apache.org on 2024/10/27 15:41:51 UTC

(iotdb) 11/31: add

This is an automated email from the ASF dual-hosted git repository.

leirui pushed a commit to branch research/LTS-visualization
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit a2c986a765aac4425dbe3bfae4ab6e64abd172bf
Author: Lei Rui <10...@qq.com>
AuthorDate: Wed Oct 2 01:57:04 2024 +0800

    add
---
 .../org/apache/iotdb/db/query/simpiece/DFT.java    |   2 +-
 .../org/apache/iotdb/db/query/simpiece/DWT.java    |   2 +-
 .../iotdb/db/query/simpiece/SamplingTest.java      |  50 ++
 .../iotdb/db/query/simpiece/jwave/JWave.java       | 136 +++++
 .../iotdb/db/query/simpiece/jwave/Transform.java   | 459 ++++++++++++++++
 .../db/query/simpiece/jwave/TransformBuilder.java  |  99 ++++
 .../simpiece/jwave/compressions/Compressor.java    | 229 ++++++++
 .../jwave/compressions/CompressorMagnitude.java    | 121 +++++
 .../jwave/compressions/CompressorPeaksAverage.java | 150 ++++++
 .../db/query/simpiece/jwave/datatypes/Super.java   |  92 ++++
 .../query/simpiece/jwave/datatypes/SuperLine.java  | 184 +++++++
 .../simpiece/jwave/datatypes/blocks/Block.java     | 228 ++++++++
 .../simpiece/jwave/datatypes/blocks/BlockFull.java | 187 +++++++
 .../simpiece/jwave/datatypes/blocks/BlockHash.java | 201 +++++++
 .../query/simpiece/jwave/datatypes/lines/Line.java | 184 +++++++
 .../simpiece/jwave/datatypes/lines/LineFull.java   | 178 ++++++
 .../simpiece/jwave/datatypes/lines/LineHash.java   | 215 ++++++++
 .../simpiece/jwave/datatypes/natives/Complex.java  | 384 +++++++++++++
 .../simpiece/jwave/datatypes/spaces/Space.java     | 280 ++++++++++
 .../simpiece/jwave/datatypes/spaces/SpaceFull.java | 190 +++++++
 .../simpiece/jwave/datatypes/spaces/SpaceHash.java | 205 +++++++
 .../simpiece/jwave/exceptions/JWaveError.java      |  55 ++
 .../simpiece/jwave/exceptions/JWaveException.java  | 114 ++++
 .../simpiece/jwave/exceptions/JWaveFailure.java    |  55 ++
 .../jwave/exceptions/JWaveFailureNotAllocated.java |  45 ++
 .../jwave/exceptions/JWaveFailureNotFound.java     |  45 ++
 .../exceptions/JWaveFailureNotImplemented.java     |  45 ++
 .../jwave/exceptions/JWaveFailureNotKnown.java     |  45 ++
 .../jwave/exceptions/JWaveFailureNotValid.java     |  46 ++
 .../db/query/simpiece/jwave/tools/MathToolKit.java | 242 +++++++++
 .../transforms/AncientEgyptianDecomposition.java   | 173 ++++++
 .../simpiece/jwave/transforms/BasicTransform.java  | 596 +++++++++++++++++++++
 .../jwave/transforms/DiscreteFourierTransform.java | 266 +++++++++
 .../jwave/transforms/FastWaveletTransform.java     | 141 +++++
 .../jwave/transforms/ShiftingWaveletTransform.java | 126 +++++
 .../jwave/transforms/WaveletPacketTransform.java   | 171 ++++++
 .../jwave/transforms/WaveletTransform.java         | 164 ++++++
 .../jwave/transforms/wavelets/Wavelet.java         | 264 +++++++++
 .../jwave/transforms/wavelets/WaveletBuilder.java  | 499 +++++++++++++++++
 .../wavelets/biorthogonal/BiOrthogonal.java        | 127 +++++
 .../wavelets/biorthogonal/BiOrthogonal11.java      |  63 +++
 .../wavelets/biorthogonal/BiOrthogonal13.java      |  83 +++
 .../wavelets/biorthogonal/BiOrthogonal15.java      |  74 +++
 .../wavelets/biorthogonal/BiOrthogonal22.java      |  83 +++
 .../wavelets/biorthogonal/BiOrthogonal24.java      |  74 +++
 .../wavelets/biorthogonal/BiOrthogonal26.java      |  82 +++
 .../wavelets/biorthogonal/BiOrthogonal28.java      |  90 ++++
 .../wavelets/biorthogonal/BiOrthogonal31.java      |  62 +++
 .../wavelets/biorthogonal/BiOrthogonal33.java      |  70 +++
 .../wavelets/biorthogonal/BiOrthogonal35.java      |  78 +++
 .../wavelets/biorthogonal/BiOrthogonal37.java      |  86 +++
 .../wavelets/biorthogonal/BiOrthogonal39.java      |  94 ++++
 .../wavelets/biorthogonal/BiOrthogonal44.java      |  74 +++
 .../wavelets/biorthogonal/BiOrthogonal55.java      | 107 ++++
 .../wavelets/biorthogonal/BiOrthogonal68.java      |  90 ++++
 .../transforms/wavelets/coiflet/Coiflet1.java      |  63 +++
 .../transforms/wavelets/coiflet/Coiflet2.java      |  64 +++
 .../transforms/wavelets/coiflet/Coiflet3.java      |  70 +++
 .../transforms/wavelets/coiflet/Coiflet4.java      |  76 +++
 .../transforms/wavelets/coiflet/Coiflet5.java      |  82 +++
 .../wavelets/daubechies/Daubechies10.java          |  93 ++++
 .../wavelets/daubechies/Daubechies11.java          |  75 +++
 .../wavelets/daubechies/Daubechies12.java          |  77 +++
 .../wavelets/daubechies/Daubechies13.java          |  79 +++
 .../wavelets/daubechies/Daubechies14.java          |  81 +++
 .../wavelets/daubechies/Daubechies15.java          |  83 +++
 .../wavelets/daubechies/Daubechies16.java          |  85 +++
 .../wavelets/daubechies/Daubechies17.java          |  87 +++
 .../wavelets/daubechies/Daubechies18.java          |  89 +++
 .../wavelets/daubechies/Daubechies19.java          |  91 ++++
 .../wavelets/daubechies/Daubechies2.java           |  63 +++
 .../wavelets/daubechies/Daubechies20.java          |  92 ++++
 .../wavelets/daubechies/Daubechies3.java           |  66 +++
 .../wavelets/daubechies/Daubechies4.java           |  61 +++
 .../wavelets/daubechies/Daubechies5.java           |  63 +++
 .../wavelets/daubechies/Daubechies6.java           |  65 +++
 .../wavelets/daubechies/Daubechies7.java           |  67 +++
 .../wavelets/daubechies/Daubechies8.java           |  69 +++
 .../wavelets/daubechies/Daubechies9.java           |  71 +++
 .../jwave/transforms/wavelets/haar/Haar1.java      |  86 +++
 .../transforms/wavelets/haar/Haar1Orthogonal.java  | 196 +++++++
 .../transforms/wavelets/legendre/Legendre1.java    |  60 +++
 .../transforms/wavelets/legendre/Legendre2.java    |  61 +++
 .../transforms/wavelets/legendre/Legendre3.java    |  63 +++
 .../jwave/transforms/wavelets/other/Battle23.java  |  90 ++++
 .../jwave/transforms/wavelets/other/CDF53.java     |  73 +++
 .../jwave/transforms/wavelets/other/CDF97.java     |  80 +++
 .../transforms/wavelets/other/DiscreteMayer.java   | 115 ++++
 .../transforms/wavelets/symlets/Symlet10.java      |  72 +++
 .../transforms/wavelets/symlets/Symlet11.java      |  75 +++
 .../transforms/wavelets/symlets/Symlet12.java      |  77 +++
 .../transforms/wavelets/symlets/Symlet13.java      |  79 +++
 .../transforms/wavelets/symlets/Symlet14.java      |  81 +++
 .../transforms/wavelets/symlets/Symlet15.java      |  83 +++
 .../transforms/wavelets/symlets/Symlet16.java      |  85 +++
 .../transforms/wavelets/symlets/Symlet17.java      |  87 +++
 .../transforms/wavelets/symlets/Symlet18.java      |  89 +++
 .../transforms/wavelets/symlets/Symlet19.java      |  91 ++++
 .../jwave/transforms/wavelets/symlets/Symlet2.java |  74 +++
 .../transforms/wavelets/symlets/Symlet20.java      |  92 ++++
 .../jwave/transforms/wavelets/symlets/Symlet3.java |  58 ++
 .../jwave/transforms/wavelets/symlets/Symlet4.java |  60 +++
 .../jwave/transforms/wavelets/symlets/Symlet5.java |  62 +++
 .../jwave/transforms/wavelets/symlets/Symlet6.java |  64 +++
 .../jwave/transforms/wavelets/symlets/Symlet7.java |  66 +++
 .../jwave/transforms/wavelets/symlets/Symlet8.java |  68 +++
 .../jwave/transforms/wavelets/symlets/Symlet9.java |  70 +++
 107 files changed, 12272 insertions(+), 2 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/DFT.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/DFT.java
index e890d0f76d1..f6f6021125d 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/simpiece/DFT.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/DFT.java
@@ -23,7 +23,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 public class DFT {
-  public static List<Point> reducePoints(List<Point> points, double epsilon) {
+  public static List<Point> reducePoints(List<Point> points, double threshold) {
     int length = points.size();
 
     List<Point> result = new ArrayList<>();
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/DWT.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/DWT.java
index 46a67f38c10..bd6e8e9f2a2 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/simpiece/DWT.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/DWT.java
@@ -23,7 +23,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 public class DWT {
-  public static List<Point> reducePoints(List<Point> points, double epsilon) {
+  public static List<Point> reducePoints(List<Point> points, double threshold) {
     int length = points.size();
 
     List<Point> result = new ArrayList<>();
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/SamplingTest.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/SamplingTest.java
new file mode 100644
index 00000000000..cbe66a17546
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/SamplingTest.java
@@ -0,0 +1,50 @@
+package org.apache.iotdb.db.query.simpiece;
+
+import org.apache.iotdb.db.query.simpiece.jwave.Transform;
+import org.apache.iotdb.db.query.simpiece.jwave.TransformBuilder;
+import org.apache.iotdb.db.query.simpiece.jwave.tools.MathToolKit;
+
+public class SamplingTest {
+
+  public static void main(String[] args) {
+    int samplingRate = 1024 * 1024; // sampling rate
+    int noOfOscillations = 1024;
+
+    // generate sampled (discrete) sine over 2 pi
+    double[] arrTime = MathToolKit.createSineOscillation(samplingRate, noOfOscillations);
+
+    Transform transform = TransformBuilder.create("Fast Wavelet Transform", "Haar");
+
+    double[] arrHilb = transform.forward(arrTime);
+
+    double[] arrReco = transform.reverse(arrHilb);
+
+    //    assertArray(arrTime, arrReco, 1e-10);
+
+    // generate sampled (discrete) sine over 2 pi
+    arrTime = MathToolKit.createCosineOscillation(samplingRate, noOfOscillations);
+
+    arrHilb = transform.forward(arrTime);
+
+    arrReco = transform.reverse(arrHilb);
+
+    //    assertArray(arrTime, arrReco, 1e-10);
+
+    transform = TransformBuilder.create("Wavelet Packet Transform", "Haar");
+
+    arrHilb = transform.forward(arrTime);
+
+    arrReco = transform.reverse(arrHilb);
+
+    //    assertArray(arrTime, arrReco, 1e-10);
+
+    // generate sampled (discrete) sine over 2 pi
+    arrTime = MathToolKit.createCosineOscillation(samplingRate, noOfOscillations);
+
+    arrHilb = transform.forward(arrTime);
+
+    arrReco = transform.reverse(arrHilb);
+
+    //    assertArray(arrTime, arrReco, 1e-10);
+  }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/JWave.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/JWave.java
new file mode 100644
index 00000000000..1a552436248
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/JWave.java
@@ -0,0 +1,136 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.DiscreteFourierTransform;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.WaveletBuilder;
+
+/**
+ * Main class can be used to do a little console test by entering a transform type and a wavelet by
+ * their names. However, this should only make a quick n dirty test available by skipping the JUnit
+ * framework. JWave is supported as a library and foreseen to be used like this.
+ *
+ * @date 23.02.2010 14:26:47
+ * @author Christian (graetz23@gmail.com)
+ */
+public class JWave {
+
+  /**
+   * Main method for doing little test runs for different transform types and different wavelets
+   * without JUnit. Type in the name of the transform and the name of the wavelet. The result is an
+   * array of length 16 (2^p | p E N) is transformed in four hierarchical steps (16/2=8 .. 8/2=4 ..
+   * 4/2=2 .. 2/1=1) and reduced by 1/sqrt(2.). The result is an array in Hilbert space keeping only
+   * one coefficient, the energy of value 4. (low pass), in the first position of the array. All
+   * detail coefficients (high pass of four stages) are zero, due to the fact that the input array
+   * was constant. This shows an application of a loss less compression of 93.75 % (15/16 * 100 %).
+   * Therefore, the reverse transform allows, due to orthogonality (even orthonormality) a located
+   * reconstruction of any coefficient that is currently supported in Hilbert space. Anyway, this
+   * little example already reveals the application power of wavelets. that can be used for any kind
+   * of data!
+   *
+   * @date 23.02.2010 14:26:47
+   * @author Christian (graetz23@gmail.com)
+   * @param args [transformType] [waveletType]
+   */
+  public static void main(String[] args) {
+
+    if (args.length < 3 || args.length > 5) {
+      System.err.println("example usage: JWave [transformType] {waveletType}");
+      System.err.println("");
+      System.err.println(
+          "Transform names: "
+              + "'Discrete Fourier Transform'"
+              + " "
+              + "'Fast Wavelet Transform'"
+              + " "
+              + "'Wavelet Packet Transform'");
+      System.err.println(
+          "Wavelet names: "
+              + "'Haar',"
+              + " "
+              + "'Haar orthogonal',"
+              + " "
+              + "'Daubechies 2'"
+              + " "
+              + ".."
+              + " "
+              + "'Daubechies 20',"
+              + " "
+              + "'Symlet 2'"
+              + " "
+              + ".."
+              + " "
+              + "'Symlet 20',"
+              + " "
+              + "'Coiflet 1'"
+              + " "
+              + ".."
+              + " "
+              + "'Coiflet 5',"
+              + " "
+              + "'Legendre 1'"
+              + " "
+              + ".."
+              + " "
+              + "'Legendre 3',"
+              + " "
+              + " ... 'BiOrthogonal 1/1'"
+              + " have a look for more in the 'transform.wavelets' package!");
+      return;
+    } // if args
+
+    String waveletIdentifier = "";
+    if (args.length > 4) waveletIdentifier = args[3] + " " + args[4]; // raw n dirty but working
+    else waveletIdentifier = args[3]; // if "Haar" is used
+    String transformIdentifier = args[0] + " " + args[1] + " " + args[2]; // raw n dirty but working
+
+    Transform transform = TransformBuilder.create(transformIdentifier, waveletIdentifier);
+
+    Wavelet wavelet = transform.getWavelet();
+
+    double[] arrTime = {1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.};
+
+    if (transform.getBasicTransform() instanceof DiscreteFourierTransform)
+      System.out.print(TransformBuilder.identify(transform));
+    else
+      System.out.print(
+          TransformBuilder.identify(transform) + " using " + WaveletBuilder.identify(wavelet));
+    System.out.println("");
+    System.out.println("time domain:");
+    for (int p = 0; p < arrTime.length; p++) System.out.printf("%7.4f", arrTime[p]);
+    System.out.println("");
+
+    double[] arrFreqOrHilb = transform.forward(arrTime);
+
+    if (transform.getBasicTransform() instanceof DiscreteFourierTransform)
+      System.out.println("frequency domain:");
+    else System.out.println("Hilbert domain:");
+    for (int p = 0; p < arrTime.length; p++) System.out.printf("%7.4f", arrFreqOrHilb[p]);
+    System.out.println("");
+
+    double[] arrReco = transform.reverse(arrFreqOrHilb);
+
+    System.out.println("reconstruction:");
+    for (int p = 0; p < arrTime.length; p++) System.out.printf("%7.4f", arrReco[p]);
+    System.out.println("");
+  } // main
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/Transform.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/Transform.java
new file mode 100644
index 00000000000..0ad44291f5b
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/Transform.java
@@ -0,0 +1,459 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 23.05.2008 17:42:23
+ */
+package org.apache.iotdb.db.query.simpiece.jwave;
+
+import org.apache.iotdb.db.query.simpiece.jwave.datatypes.natives.Complex;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailure;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.BasicTransform;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Base class for transforms like DiscreteFourierTransform, FastBasicTransform, and
+ * WaveletPacketTransform.
+ *
+ * @date 19.05.2009 09:43:40
+ * @author Christian (graetz23@gmail.com)
+ */
+public final class Transform {
+
+  /** Transform object of type base class */
+  protected final BasicTransform _basicTransform;
+
+  /**
+   * Constructor; needs some object like DiscreteFourierTransform, FastBasicTransform,
+   * WaveletPacketTransfom, ...
+   *
+   * @date 19.05.2009 09:50:24
+   * @author Christian (graetz23@gmail.com)
+   * @param transform Transform object
+   */
+  public Transform(BasicTransform transform) {
+    _basicTransform = transform;
+    try {
+      if (_basicTransform == null) throw new JWaveFailure("given object is null!");
+      if (!(_basicTransform instanceof BasicTransform))
+        throw new JWaveFailure("given object is not of type BasicTransform");
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+  } // Transform
+
+  /**
+   * Performs the forward transform of the specified BasicWave object.
+   *
+   * @date 10.02.2010 09:41:01
+   * @author Christian (graetz23@gmail.com)
+   * @param arrTime coefficients of time domain
+   * @return coefficients of frequency or Hilbert domain
+   */
+  public final double[] forward(double[] arrTime) {
+    double[] arrHilb = null;
+    try {
+      arrHilb = _basicTransform.forward(arrTime);
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+    return arrHilb;
+  } // forward
+
+  /**
+   * Performs the reverse transform of the specified BasicWave object.
+   *
+   * @date 10.02.2010 09:42:18
+   * @author Christian (graetz23@gmail.com)
+   * @param arrHilb coefficients of frequency or Hilbert domain
+   * @return coefficients of time domain
+   */
+  public final double[] reverse(double[] arrHilb) {
+    double[] arrTime = null;
+    try {
+      arrTime = _basicTransform.reverse(arrHilb);
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+    return arrTime;
+  } // reverse
+
+  /**
+   * Performs a forward transform to a certain level of Hilbert space.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 11:53:05
+   * @param arrTime array of length 2^p | p E N .. 2, 4, 8, 16, 32, 64, ...
+   * @param level a certain level that matches the array
+   * @return Hilbert space of certain level
+   */
+  public final double[] forward(double[] arrTime, int level) {
+    double[] arrHilb = null;
+    try {
+      arrHilb = _basicTransform.forward(arrTime, level);
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+    return arrHilb;
+  } // forward
+
+  /**
+   * Performs a reverse transform for a Hilbert space of certain level; level has to match the
+   * supported coefficients in the array!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 11:54:59
+   * @param arrHilb Hilbert space by an array of length 2^p | p E N .. 2, 4, 8, 16, 32, 64, ...
+   * @param level the certain level the supported hilbert space
+   * @return time domain for a certain level of Hilbert space
+   */
+  public final double[] reverse(double[] arrHilb, int level) {
+    double[] arrTime = null;
+    try {
+      arrTime = _basicTransform.reverse(arrHilb, level);
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+    return arrTime;
+  } // reverse
+
+  /**
+   * Performs the forward transform from time domain to frequency or Hilbert domain for a given
+   * array depending on the used transform algorithm by inheritance.
+   *
+   * @date 23.11.2010 19:19:24
+   * @author Christian (graetz23@gmail.com)
+   * @param arrTime coefficients of 1-D time domain
+   * @return coefficients of 1-D frequency or Hilbert domain
+   */
+  public final Complex[] forward(Complex[] arrTime) {
+    Complex[] arrFreq = null;
+    try {
+      arrFreq = ((BasicTransform) _basicTransform).forward(arrTime);
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+    return arrFreq;
+  } // forward
+
+  /**
+   * Performs the reverse transform from frequency or Hilbert domain to time domain for a given
+   * array depending on the used transform algorithm by inheritance.
+   *
+   * @date 23.11.2010 19:19:33
+   * @author Christian (graetz23@gmail.com)
+   * @param arrFreq coefficients of 1-D frequency or Hilbert domain
+   * @return coefficients of 1-D time domain
+   */
+  public final Complex[] reverse(Complex[] arrFreq) {
+    Complex[] arrTime = null;
+    try {
+      arrTime = ((BasicTransform) _basicTransform).reverse(arrFreq);
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+    return arrTime;
+  } // reverse
+
+  /**
+   * Performs the 2-D forward transform of the specified BasicWave object.
+   *
+   * @date 10.02.2010 10:58:54
+   * @author Christian (graetz23@gmail.com)
+   * @param matrixTime coefficients of 2-D time domain; internal M(i),N(j)
+   * @return coefficients of 2-D frequency or Hilbert domain
+   */
+  public final double[][] forward(double[][] matrixTime) {
+    double[][] matrixHilb = null;
+    try {
+      matrixHilb = _basicTransform.forward(matrixTime);
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+    return matrixHilb;
+  } // forward
+
+  /**
+   * Performs the 2-D reverse transform of the specified BasicWave object.
+   *
+   * @date 10.02.2010 10:59:32
+   * @author Christian (graetz23@gmail.com)
+   * @param matrixFreq coefficients of 2-D frequency or Hilbert domain; internal M(i),N(j)
+   * @return coefficients of 2-D time domain
+   */
+  public final double[][] reverse(double[][] matrixHilb) {
+    double[][] matrixTime = null;
+    try {
+      matrixTime = _basicTransform.reverse(matrixHilb);
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+    return matrixTime;
+  } // reverse
+
+  /**
+   * Performs the 2-D forward transform of the specified BasicWave object.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 14:40:54
+   * @param matrixTime coefficients of 2-D time domain; internal M(i),N(j)
+   * @param levelM a certain level to stop transform for over rows
+   * @param levelN a certain level to stop transform for over columns
+   * @return coefficients of 2-D frequency or Hilbert domain
+   */
+  public final double[][] forward(double[][] matrixTime, int levelM, int levelN) {
+    double[][] matrixHilb = null;
+    try {
+      matrixHilb = _basicTransform.forward(matrixTime, levelM, levelN);
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+    return matrixHilb;
+  } // forward
+
+  /**
+   * Performs the 2-D reverse transform of the specified BasicWave object.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 14:42:12
+   * @param matrixFreq coefficients of 2-D frequency or Hilbert domain; internal M(i),N(j)
+   * @param levelM a certain level to stop transform for over rows
+   * @param levelN a certain level to stop transform for over columns
+   * @return coefficients of 2-D time domain
+   */
+  public final double[][] reverse(double[][] matrixHilb, int levelM, int levelN) {
+    double[][] matrixTime = null;
+    try {
+      matrixTime = _basicTransform.reverse(matrixHilb, levelM, levelN);
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+    return matrixTime;
+  } // reverse
+
+  /**
+   * Performs the 3-D forward transform of the specified BasicWave object.
+   *
+   * @date 10.07.2010 18:15:22
+   * @author Christian (graetz23@gmail.com)
+   * @param matrixTime coefficients of 2-D time domain; internal M(i),N(j),O(k)
+   * @return coefficients of 2-D frequency or Hilbert domain
+   */
+  public final double[][][] forward(double[][][] spaceTime) {
+    double[][][] spaceHilb = null;
+    try {
+      spaceHilb = _basicTransform.forward(spaceTime);
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+    return spaceHilb;
+  } // forward
+
+  /**
+   * Performs the 3-D reverse transform of the specified BasicWave object.
+   *
+   * @date 10.07.2010 18:15:33
+   * @author Christian (graetz23@gmail.com)
+   * @param matrixFreq coefficients of 2-D frequency or Hilbert domain; internal M(i),N(j),O(k)
+   * @return coefficients of 2-D time domain
+   */
+  public final double[][][] reverse(double[][][] spaceHilb) {
+    double[][][] spaceTime = null;
+    try {
+      spaceTime = _basicTransform.reverse(spaceHilb);
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+    return spaceTime;
+  } // reverse
+
+  /**
+   * Performs the 3-D forward transform of the specified BasicWave object.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 14:45:46
+   * @param spaceTime coefficients of 2-D time domain; internal M(i),N(j),O(k)
+   * @param levelP a certain level to stop transform for over rows
+   * @param levelQ a certain level to stop transform for over columns
+   * @param levelR a certain level to stop transform for over height
+   * @return coefficients of 2-D frequency or Hilbert domain
+   */
+  public final double[][][] forward(double[][][] spaceTime, int levelP, int levelQ, int levelR) {
+    double[][][] spaceHilb = null;
+    try {
+      spaceHilb = _basicTransform.forward(spaceTime, levelP, levelQ, levelR);
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+    return spaceHilb;
+  } // forward
+
+  /**
+   * Performs the 3-D reverse transform of the specified BasicWave object.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 14:46:09
+   * @param spaceHilb coefficients of 2-D frequency or Hilbert domain; internal M(i),N(j),O(k)
+   * @param levelP a certain level to start transform from over rows
+   * @param levelQ a certain level to stop transform for over columns
+   * @param levelR a certain level to start transform from over height
+   * @return coefficients of 2-D time domain
+   */
+  public final double[][][] reverse(double[][][] spaceHilb, int levelP, int levelQ, int levelR) {
+    double[][][] spaceTime = null;
+    try {
+      spaceTime = _basicTransform.reverse(spaceHilb, levelP, levelQ, levelR);
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+    return spaceTime;
+  } // reverse
+
+  /**
+   * Generates from a 1D signal a 2D output, where the second dimension are the levels of the
+   * wavelet transform.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 17.08.2014 10:07:19
+   * @param arrTime coefficients of time domain
+   * @return matDeComp 2-D Hilbert spaces: [ 0 .. p ][ 0 .. N ] where p is the exponent of N=2^p
+   */
+  public final double[][] decompose(double[] arrTime) {
+    double[][] matDeComp = null;
+    try {
+      matDeComp = _basicTransform.decompose(arrTime);
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+    return matDeComp;
+  } // decompose
+
+  /**
+   * Generates from a 2-D decomposition a 1-D time series.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 17.08.2014 10:07:19
+   * @param matDeComp 2-D Hilbert spaces: [ 0 .. p ][ 0 .. N ] where p is the exponent of N=2^p
+   * @return a 1-D time domain signal
+   */
+  public final double[] recompose(double[][] matDeComp) {
+    double[] arrTime = null;
+    try {
+      arrTime = _basicTransform.recompose(matDeComp);
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+    return arrTime;
+  } // recompose
+
+  /**
+   * Recompose signal from a certain level of decomposition.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 10:08:52
+   * @param matDeComp
+   * @param level
+   * @return
+   */
+  public final double[] recompose(double[][] matDeComp, int level) {
+    double[] arrTime = null;
+    try {
+      arrTime = _basicTransform.recompose(matDeComp, level);
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+    return arrTime;
+  } // recompose
+
+  /**
+   * Return the used object of type BasicTransform.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.03.2015 18:19:13
+   * @return identifier of object of type Basic Transform
+   */
+  public final BasicTransform getBasicTransform() {
+
+    BasicTransform basicTransform = null;
+
+    try {
+
+      if (_basicTransform == null)
+        throw new JWaveFailure("Transform - BasicTransform object is null!");
+
+      if (!(_basicTransform instanceof BasicTransform))
+        throw new JWaveFailure(
+            "Transform - getBasicTransform - " + "member is not of type BasicTransform!");
+
+      basicTransform = _basicTransform;
+
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+
+    return basicTransform;
+  } // getBasicTransform
+
+  /**
+   * Returns the used Wavelet object or null pointer.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.03.2015 18:58:50
+   * @return object of type Wavelet
+   * @throws JWaveFailure if Wavelet object is not available
+   */
+  public final Wavelet getWavelet() {
+
+    Wavelet wavelet = null;
+    BasicTransform basicTransform = null;
+
+    try {
+
+      basicTransform = getBasicTransform();
+      wavelet = basicTransform.getWavelet();
+
+    } catch (JWaveException e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+
+    return wavelet;
+  } // getWavelet
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/TransformBuilder.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/TransformBuilder.java
new file mode 100644
index 00000000000..5ea947e7c18
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/TransformBuilder.java
@@ -0,0 +1,99 @@
+/**
+ * Create Transform objects ...
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 14.03.2015 14:25:21
+ *     <p>TransformBuilder.java
+ */
+package org.apache.iotdb.db.query.simpiece.jwave;
+
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailure;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.BasicTransform;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.DiscreteFourierTransform;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.FastWaveletTransform;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.WaveletPacketTransform;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.WaveletBuilder;
+
+/**
+ * Class for creating and identifying Transform object.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 14.03.2015 14:25:21
+ */
+public class TransformBuilder {
+
+  /**
+   * Create a Transform object by a given string and a given Wavelet object. Look into each
+   * Transform for matching string identifier. By the way the method requires Java 7, due to the
+   * switch statement on a string. *rofl*
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.03.2015 14:35:12
+   * @param transformName identifier as stored in Transform object
+   * @param wavelet
+   * @return a matching object of type Transform
+   */
+  public static Transform create(String transformName, Wavelet wavelet) {
+
+    BasicTransform basicTransform = null;
+
+    try {
+
+      switch (transformName) {
+        case "Discrete Fourier Transform":
+          basicTransform = new DiscreteFourierTransform();
+          break;
+
+        case "Fast Wavelet Transform":
+          basicTransform = new FastWaveletTransform(wavelet);
+          break;
+
+        case "Wavelet Packet Transform":
+          basicTransform = new WaveletPacketTransform(wavelet);
+          break;
+
+        default:
+          throw new JWaveFailure(
+              "TransformBuilder::create - unknown type of transform for given string!");
+      } // switch
+
+    } catch (JWaveException e) {
+
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+
+    return new Transform(basicTransform);
+  } // create
+
+  /**
+   * Create a Transform object by a given string and a given string for a Wavelet object. Look into
+   * each Transform and Wavelet for matching string identifier.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.03.2015 14:37:30
+   * @param transformName identifier as stored in Transform object
+   * @param waveletName
+   * @return identifier as stored in Wavelet object
+   */
+  public static Transform create(String transformName, String waveletName) {
+
+    return create(transformName, WaveletBuilder.create(waveletName));
+  } // create
+
+  /**
+   * Returns the identifier string of a given Transform object.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.03.2015 14:34:20
+   * @param transform string identifier of the given Transform object
+   * @return a string as the identifier of the given Transform object
+   */
+  public static String identify(Transform transform) {
+
+    BasicTransform basicTransform = transform.getBasicTransform();
+    return basicTransform.getName();
+  } // identify
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/compressions/Compressor.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/compressions/Compressor.java
new file mode 100644
index 00000000000..e493a222aef
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/compressions/Compressor.java
@@ -0,0 +1,229 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.compressions;
+
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailure;
+
+/**
+ * Some how this class is doing the same as the technical counterpart is doing - compressing data
+ * that is transformed to Hilbert space by different methods.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 20.02.2014 23:41:35
+ */
+public abstract class Compressor {
+
+  /**
+   * A threshold that is used in several compression methods.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 20.02.2014 23:44:26
+   */
+  protected double _threshold = 1.;
+
+  /**
+   * The calculated magnitude by algorithm of derived class.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.05.2015 18:36:17
+   */
+  protected double _magnitude = 0.;
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 20.02.2014 23:41:35
+   */
+  public Compressor() {
+
+    _magnitude = 0.;
+    _threshold = 1.;
+  } // Compressor
+
+  public Compressor(double threshold) {
+
+    _magnitude = 0.;
+
+    try {
+
+      if (threshold <= 0.)
+        throw new JWaveFailure("Compressor - given threshold should be larger than zero!");
+    } catch (JWaveException e) {
+
+      e.showMessage();
+      System.out.println("Compressor - setting threshold to default value: " + 1.);
+      threshold = 1.;
+    }
+
+    _threshold = threshold;
+  } // Compressor
+
+  /**
+   * Compresses by comparing the magnitude value by the set compression factor, the threshold, and
+   * the sets all lower values to zero.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.05.2015 18:06:52
+   * @param arr
+   * @param magnitude
+   * @return
+   */
+  protected double[] compress(double[] arr, double magnitude) {
+
+    int arrLength = arr.length;
+
+    double[] arrComp = new double[arrLength];
+
+    for (int i = 0; i < arrLength; i++)
+      if (Math.abs(arr[i]) >= magnitude * _threshold) arrComp[i] = arr[i];
+      else arrComp[i] = 0.; // compression be setting to zero
+
+    return arrComp;
+  } // compress
+
+  /**
+   * Compresses by comparing the magnitude value by the set compression factor, the threshold, and
+   * the sets all lower values to zero.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.05.2015 18:17:31
+   * @param mat
+   * @param magnitude
+   * @return
+   */
+  protected double[][] compress(double[][] mat, double magnitude) {
+
+    int matHilbNoOfRows = mat.length;
+    int matHilbNoOfCols = mat[0].length;
+
+    double[][] matComp = new double[matHilbNoOfRows][matHilbNoOfCols];
+
+    for (int i = 0; i < matHilbNoOfRows; i++)
+      for (int j = 0; j < matHilbNoOfCols; j++)
+        if (Math.abs(mat[i][j]) >= magnitude * _threshold) matComp[i][j] = mat[i][j];
+        else matComp[i][j] = 0.;
+
+    return matComp;
+  } // compress
+
+  /**
+   * Compresses by comparing the magnitude value by the set compression factor, the threshold, and
+   * the sets all lower values to zero.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.05.2015 18:18:44
+   * @param spc
+   * @param magnitude
+   * @return
+   */
+  protected double[][][] compress(double[][][] spc, double magnitude) {
+
+    int matHilbNoOfRows = spc.length;
+    int matHilbNoOfCols = spc[0].length;
+    int matHilbNoOfLvls = spc[0][0].length;
+
+    double[][][] spcComp = new double[matHilbNoOfRows][matHilbNoOfCols][matHilbNoOfLvls];
+
+    for (int i = 0; i < matHilbNoOfRows; i++)
+      for (int j = 0; j < matHilbNoOfCols; j++)
+        for (int k = 0; k < matHilbNoOfLvls; k++)
+          if (Math.abs(spc[i][j][k]) >= magnitude * _threshold) spcComp[i][j][k] = spc[i][j][k];
+          else spcComp[i][j][k] = 0.;
+
+    return spcComp;
+  } // compress
+
+  /**
+   * Calculate the compression rate for a given array; means the percentage of the number of zeros
+   * kept by the array.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 06.01.2016 23:47:06
+   * @param arr the input of array keeping values and zeros
+   * @return the compression rate as a percentage: [0 .. 100] %
+   */
+  public double calcCompressionRate(double[] arr) {
+
+    double compressionRate = 0.;
+    int noOfZeros = 0;
+    int length = arr.length;
+    for (int i = 0; i < length; i++) {
+      if (arr[i] == 0.) noOfZeros++;
+    } // i
+    if (noOfZeros != 0) compressionRate = (double) noOfZeros / (double) length * 100.;
+    else compressionRate = (double) noOfZeros;
+    return compressionRate;
+  } // calcCompressionRate
+
+  /**
+   * Getter for _threshold member.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.05.2015 18:38:33
+   * @return value of threshold member
+   */
+  public double getThreshold() {
+
+    return _threshold;
+  } // getThreshold
+
+  /**
+   * Getter for calculated _magnitude member.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.05.2015 18:39:32
+   * @return value of magnitude member
+   */
+  public double getMagnitude() {
+
+    return _magnitude;
+  } // getMagnitude
+
+  /**
+   * Interface for arrays for driving the different compression methods.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 20.02.2014 23:48:06
+   * @param arrHilb
+   * @return
+   */
+  public abstract double[] compress(double[] arrHilb);
+
+  /**
+   * Interface for matrices for driving the different compression methods.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 20.02.2014 23:54:11
+   * @param matHilb
+   * @return
+   */
+  public abstract double[][] compress(double[][] matHilb);
+
+  /**
+   * Interface for spaces for driving the different compression methods.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 20.02.2014 23:54:52
+   * @param spcHilb
+   * @return
+   */
+  public abstract double[][][] compress(double[][][] spcHilb);
+} // Compressor
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/compressions/CompressorMagnitude.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/compressions/CompressorMagnitude.java
new file mode 100644
index 00000000000..8a853cc7845
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/compressions/CompressorMagnitude.java
@@ -0,0 +1,121 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.compressions;
+
+/**
+ * Compression algorithm is adding up all magnitudes of an array, a matrix, or a space and dividing
+ * this absolute value by the number of given data samples.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 20.02.2014 23:56:09
+ */
+public class CompressorMagnitude extends Compressor {
+
+  /**
+   * Threshold is set to one, which should always guarantee a rather good compression result.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 20.02.2014 23:56:09
+   */
+  public CompressorMagnitude() {
+
+    _magnitude = 0.;
+    _threshold = 1.;
+  } // CompressorMagnitude
+
+  /**
+   * Threshold is set a chosen; value 0 means no compression.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 20.02.2014 23:56:09
+   * @param threshold has to be positive value starting at 0 - 0 means no compression.
+   * @throws JWaveException
+   */
+  public CompressorMagnitude(double threshold) {
+
+    super(threshold);
+
+    _magnitude = 0.;
+  } // CompressorMagnitude
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 20.02.2014 23:56:09 (non-Javadoc)
+   * @see jwave.compressions.Compressor#compress(double[])
+   */
+  @Override
+  public double[] compress(double[] arrHilb) {
+
+    _magnitude = 0.;
+
+    int arrHilbLength = arrHilb.length;
+
+    for (int i = 0; i < arrHilbLength; i++) _magnitude += Math.abs(arrHilb[i]);
+
+    _magnitude /= (double) arrHilbLength;
+
+    return compress(arrHilb, _magnitude); // generates new array
+  } // compress
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 20.02.2014 23:56:09 (non-Javadoc)
+   * @see jwave.compressions.Compressor#compress(double[][])
+   */
+  @Override
+  public double[][] compress(double[][] matHilb) {
+
+    _magnitude = 0.;
+
+    int matHilbNoOfRows = matHilb.length;
+    int matHilbNoOfCols = matHilb[0].length;
+
+    for (int i = 0; i < matHilbNoOfRows; i++)
+      for (int j = 0; j < matHilbNoOfCols; j++) _magnitude += Math.abs(matHilb[i][j]);
+
+    _magnitude /= (double) matHilbNoOfRows * (double) matHilbNoOfCols;
+
+    return compress(matHilb, _magnitude);
+  } // compress
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 20.02.2014 23:56:09 (non-Javadoc)
+   * @see jwave.compressions.Compressor#compress(double[][][])
+   */
+  @Override
+  public double[][][] compress(double[][][] spcHilb) {
+
+    _magnitude = 0.;
+
+    int matHilbNoOfRows = spcHilb.length;
+    int matHilbNoOfCols = spcHilb[0].length;
+    int matHilbNoOfLvls = spcHilb[0][0].length;
+
+    for (int i = 0; i < matHilbNoOfRows; i++)
+      for (int j = 0; j < matHilbNoOfCols; j++)
+        for (int k = 0; k < matHilbNoOfLvls; k++) _magnitude += Math.abs(spcHilb[i][j][k]);
+
+    _magnitude /= (double) matHilbNoOfRows * (double) matHilbNoOfCols * (double) matHilbNoOfLvls;
+
+    return compress(spcHilb, _magnitude);
+  } // compress
+} // CompressorMagnitude
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/compressions/CompressorPeaksAverage.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/compressions/CompressorPeaksAverage.java
new file mode 100644
index 00000000000..39af7653004
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/compressions/CompressorPeaksAverage.java
@@ -0,0 +1,150 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.compressions;
+
+/**
+ * This compression takes the average of the min and absolute the max of a given array, matrix, or
+ * space as thresholding value.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 14.05.2015 17:57:19
+ */
+public class CompressorPeaksAverage extends Compressor {
+
+  protected double _peakMinimum;
+
+  protected double _peakMaximum;
+
+  /**
+   * Compression by average of peak min & max.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.05.2015 17:57:19
+   */
+  public CompressorPeaksAverage() {
+
+    _peakMinimum = 0.;
+    _peakMaximum = 0.;
+    _magnitude = 0.;
+  } // CompressorPeaksAverage
+
+  /**
+   * Compression by average of peak min & max.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.05.2015 17:57:19
+   * @param threshold
+   * @throws JWaveException
+   */
+  public CompressorPeaksAverage(double threshold) {
+
+    super(threshold);
+
+    _peakMinimum = 0.;
+    _peakMaximum = 0.;
+    _magnitude = 0.;
+  } // CompressorPeaksAverage
+
+  /**
+   * Calculating the average by maximal distance between minimal and maximal absolute value.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.05.2015 17:57:19 (non-Javadoc)
+   * @see jwave.compressions.Compressor#compress(double[])
+   */
+  @Override
+  public double[] compress(double[] arrHilb) {
+
+    for (double val : arrHilb) {
+
+      double absVal = Math.abs(val);
+
+      if (absVal <= _peakMinimum) _peakMinimum = absVal;
+
+      if (absVal >= _peakMaximum) _peakMaximum = absVal;
+    } // loop over all entries
+
+    _magnitude = .5 * (_peakMaximum - _peakMinimum);
+
+    return compress(arrHilb, _magnitude);
+  } // compress
+
+  /**
+   * Calculating the average by maximal distance between minimal and maximal absolute value.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.05.2015 17:57:19 (non-Javadoc)
+   * @see jwave.compressions.Compressor#compress(double[][])
+   */
+  @Override
+  public double[][] compress(double[][] matHilb) {
+
+    int matHilbNoOfRows = matHilb.length;
+    int matHilbNoOfCols = matHilb[0].length;
+
+    for (int i = 0; i < matHilbNoOfRows; i++) {
+      for (int j = 0; j < matHilbNoOfCols; j++) {
+
+        double absVal = Math.abs(matHilb[i][j]);
+
+        if (absVal <= _peakMinimum) _peakMinimum = absVal;
+
+        if (absVal >= _peakMaximum) _peakMaximum = absVal;
+      } // j
+    } // i - loop over all entries
+
+    _magnitude = .5 * (_peakMaximum - _peakMinimum);
+
+    return compress(matHilb, _magnitude);
+  } // compress
+
+  /**
+   * Calculating the average by maximal distance between minimal and maximal absolute value.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.05.2015 17:57:19 (non-Javadoc)
+   * @see jwave.compressions.Compressor#compress(double[][][])
+   */
+  @Override
+  public double[][][] compress(double[][][] spcHilb) {
+
+    int matHilbNoOfRows = spcHilb.length;
+    int matHilbNoOfCols = spcHilb[0].length;
+    int matHilbNoOfLvls = spcHilb[0][0].length;
+
+    for (int i = 0; i < matHilbNoOfRows; i++) {
+      for (int j = 0; j < matHilbNoOfCols; j++) {
+        for (int k = 0; k < matHilbNoOfLvls; k++) {
+
+          double absVal = Math.abs(spcHilb[i][j][k]);
+
+          if (absVal <= _peakMinimum) _peakMinimum = absVal;
+
+          if (absVal >= _peakMaximum) _peakMaximum = absVal;
+        } // k
+      } // j
+    } // i - loop over all entries
+
+    _magnitude = .5 * (_peakMaximum - _peakMinimum);
+
+    return compress(spcHilb, _magnitude);
+  } // compress
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/Super.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/Super.java
new file mode 100644
index 00000000000..1e83589c194
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/Super.java
@@ -0,0 +1,92 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.datatypes;
+
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailureNotAllocated;
+
+/**
+ * Instead using Java's Object class as super type, a named Super typed is used for grouping data
+ * containers like Line, Block, or Space objects together!
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.05.2015 19:27:00
+ */
+public abstract class Super {
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 19:27:01
+   */
+  public Super() {} // Super
+
+  /**
+   * Checks whether memory is allocated for this Line object or not. If not a "not allocated"
+   * failure is thrown.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:36:45
+   * @throws JWaveException if no memory is allocated
+   */
+  protected void checkMemory() throws JWaveException {
+
+    if (!isAllocated())
+      throw new JWaveFailureNotAllocated(
+          "Super#checkMemory - no memory allocated for this object!");
+  } // checkMemory( )
+
+  /**
+   * Returns a copy of the object - if allocated, with all data!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:56:50
+   * @return copy of itself, if allocated with all data stored
+   */
+  public abstract Super copy();
+
+  /**
+   * If memory is allocated then return true else return false.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 18:03:55
+   * @return true if memory is allocated
+   */
+  public abstract boolean isAllocated();
+
+  /**
+   * Allocates the memory of the object internally, but only if no memory is allocated yet. However,
+   * there can be different strategies in data storage for each object.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 17:59:24
+   * @throws JWaveException if memory is already occupied or if memory cannot be allocated
+   */
+  public abstract void alloc() throws JWaveException;
+
+  /**
+   * Simply drops the internal storage and places a null pointer in Java.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 18:01:56
+   * @throws JWaveException if internal memory is already erased
+   */
+  public abstract void erase() throws JWaveException;
+} // Super
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/SuperLine.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/SuperLine.java
new file mode 100644
index 00000000000..c5201a56cb3
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/SuperLine.java
@@ -0,0 +1,184 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.datatypes;
+
+import org.apache.iotdb.db.query.simpiece.jwave.datatypes.lines.Line;
+import org.apache.iotdb.db.query.simpiece.jwave.datatypes.lines.LineFull;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailureNotValid;
+import org.apache.iotdb.db.query.simpiece.jwave.tools.MathToolKit;
+
+import java.util.ArrayList;
+
+/**
+ * SuperLine consists of several Line objects of different sizes.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.05.2015 19:30:28
+ */
+public class SuperLine {
+
+  /** maximal size of a line object, */
+  private int _maxLineSize;
+
+  /** no of entries in the Line object. */
+  private int _noOfRows;
+
+  /**
+   * However, who knows how many blocks are delivered!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:02:59
+   */
+  ArrayList<Super> _listOfLines;
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 19:30:28
+   */
+  public SuperLine() {
+
+    _noOfRows = 0;
+    _maxLineSize = 1;
+    _listOfLines = new ArrayList<Super>();
+  } // SuperLine
+
+  /**
+   * Set a SuperLine object by the noOfRows or noOfEntries.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 12.01.2016 23:35:12
+   * @param noOfRows the number of entries
+   */
+  public SuperLine(int noOfRows) {
+
+    _noOfRows = noOfRows;
+    _maxLineSize = 1;
+    _listOfLines = new ArrayList<Super>();
+  } // SuperLine
+
+  /**
+   * Set the SuperLine object by the noOfRows and the maximal block size.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 12.01.2016 23:36:23
+   * @param noOfRows the number of entries
+   * @param maxBlockSize the maximal block size, should be << number of entries
+   */
+  public SuperLine(int noOfRows, int maxBlockSize) {
+
+    _noOfRows = noOfRows;
+    _maxLineSize = maxBlockSize;
+    _listOfLines = new ArrayList<Super>();
+  } // SuperLine
+
+  /**
+   * Set up a configured an empty SuperLine object by allocating empty Block objects.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @throws JWaveException is throwsn while parameters are calcualted wrong
+   * @date 12.01.2016 23:38:50
+   */
+  public void init() throws JWaveException {
+
+    int noOfLineObjects = (int) (_noOfRows / _maxLineSize); // 29 / 8  = 3
+
+    int leftEntries = _noOfRows % _maxLineSize; // 29 % 8 = 5
+
+    if (leftEntries + _maxLineSize * noOfLineObjects != _noOfRows)
+      throw new JWaveFailureNotValid("calculated splitting to Block objects is not valid");
+
+    for (int i = 0; i < noOfLineObjects; i++) add(new LineFull(i * _maxLineSize, _maxLineSize));
+
+    int[] arrBinaries = MathToolKit.decompose(leftEntries);
+    for (int i = 0; i < arrBinaries.length; i++)
+      arrBinaries[i] = (int) MathToolKit.scalb(1., arrBinaries[i]);
+
+    for (int a = 0; a < arrBinaries.length; a++)
+      System.out.println("arrbBinaries[ " + a + " ] = " + arrBinaries[a]);
+
+    int offset = noOfLineObjects * _maxLineSize;
+    for (int i = 0; i < arrBinaries.length; i++) {
+      if (i == 0) add(new LineFull(offset, arrBinaries[i]));
+      else {
+        offset += arrBinaries[i - 1];
+        add(new LineFull(offset, arrBinaries[i]));
+      }
+    }
+  } // init
+
+  /**
+   * Returns the number of stored Line objects.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 19:36:13
+   * @return number of Line objects
+   */
+  public int getNoOfLines() {
+
+    return _listOfLines.size();
+  } // getNoOfLines
+
+  /**
+   * Add a Line object to list
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 19:36:54
+   * @param line object of type Line
+   */
+  public void add(Line line) {
+
+    _listOfLines.add(line);
+  } // add
+
+  /**
+   * Return Line object at position p; 0 .. N-1
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 18:16:27
+   * @param p
+   * @return
+   * @throws JWaveException
+   */
+  public Line get(int p) throws JWaveException {
+
+    Line line = null;
+
+    if (p < 0 || p >= getNoOfLines())
+      throw new JWaveFailureNotValid("SuperLine#get - position p is out of bound!");
+
+    line = (Line) _listOfLines.get(p);
+
+    return line;
+  } // get
+
+  /**
+   * Return the set number of rows
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 12.01.2016 23:34:12
+   * @return
+   */
+  public int getNoOfRows() {
+
+    return _noOfRows;
+  } // getNoOfRows
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/blocks/Block.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/blocks/Block.java
new file mode 100644
index 00000000000..aad9b700437
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/blocks/Block.java
@@ -0,0 +1,228 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.datatypes.blocks;
+
+import org.apache.iotdb.db.query.simpiece.jwave.datatypes.Super;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailure;
+
+/**
+ * A block of Data; 2-D organized by (0,0) .. (noOfRows,noOfCols). This object is strictly using the
+ * Line objects, due to having here the possibility to implement different strategies on values
+ * storage.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.05.2015 14:39:22
+ */
+public abstract class Block extends Super {
+
+  /**
+   * The number of rows of this Block.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 14:41:23
+   */
+  protected int _noOfRows;
+
+  /**
+   * The number of columns of this Block.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 14:41:42
+   */
+  protected int _noOfCols;
+
+  /**
+   * The row position where the block starts from as a sub set in the context of SuperBlock; check
+   * _offSetRow in class Line for more details.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 23.05.2015 19:50:40
+   */
+  protected int _offSetRow;
+
+  /**
+   * The column position where the block starts from as a sub set in the context of SuperBlock;
+   * check _offSetRow in class Line for more details.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 23.05.2015 19:52:19
+   */
+  protected int _offSetCol;
+
+  /**
+   * Create an object of a sub type; e.g. as pattern.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 23.05.2015 19:53:18
+   */
+  public Block() {
+    _offSetRow = 0;
+    _offSetCol = 0;
+    _noOfRows = 0;
+    _noOfCols = 0;
+  } // Block
+
+  /**
+   * Copy constructor - attention in base class there are only boundaries passed to the new object.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 23.05.2015 19:54:16
+   * @param block
+   */
+  public Block(Block block) {
+    _offSetRow = block._offSetRow;
+    _offSetCol = block._offSetCol;
+    _noOfRows = block._offSetRow;
+    _noOfCols = block._noOfCols;
+  } // Block
+
+  /**
+   * Taking the block object as a single global object by setting both off sets to zero.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:21:17
+   * @param noOfRows stores the noOfRows exclusively, even if each Line object stores that value
+   *     again.
+   * @param noOfCols the no of columns or the number of Line objects.
+   */
+  public Block(int noOfRows, int noOfCols) {
+    _offSetRow = 0;
+    _offSetCol = 0;
+    _noOfRows = noOfRows;
+    _noOfCols = noOfCols;
+  } // Block
+
+  /**
+   * Passing information that takes the block as a part of a global structure; e.g. a SuperBlock.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 14:03:45
+   * @param offSetRow the global off set of rows of the block
+   * @param offSetCol the global off set of columns of the block
+   * @param noOfRows the number of rows of the block
+   * @param noOfCols the number of columns of the block
+   */
+  public Block(int offSetRow, int offSetCol, int noOfRows, int noOfCols) {
+    _offSetRow = offSetRow;
+    _offSetCol = offSetCol;
+    _noOfRows = noOfRows;
+    _noOfCols = noOfCols;
+  } // Block
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 14:43:41
+   * @return the _noOfRows
+   */
+  public int getNoOfRows() {
+    return _noOfRows;
+  } // getNoOfRows
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 14:43:41
+   * @return the _noOfCols
+   */
+  public int getNoOfCols() {
+    return _noOfCols;
+  } // getNoOfCols
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 18:31:31
+   * @return the off set of the row
+   */
+  public int getOffSetRow() {
+    return _offSetRow;
+  } // getOffSetRow
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 18:31:54
+   * @return the off set of the column
+   */
+  public int getOffSetCol() {
+    return _offSetCol;
+  } // getOffSetCol
+
+  /**
+   * Check the given input of j is in bound of the number of columns, otherwise throw a failure
+   * (exception) if j is not valid.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:37:57
+   * @param j from 0 to noOfCols-1
+   * @throws JWaveException
+   */
+  protected void check(int j) throws JWaveException {
+
+    if (j < 0) throw new JWaveFailure("Block - i is smaller than zero");
+
+    if (j == _noOfCols) throw new JWaveFailure("Block - i is equal to noOfCols: " + _noOfCols);
+
+    if (j > _noOfCols) throw new JWaveFailure("Block - i is greater than noOfCols: " + _noOfCols);
+  } // check
+
+  /**
+   * Check the given input of (i,j) and throws a failure (exception) if position is not valid.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:33:14
+   * @param i from 0 to noOfRows-1
+   * @param j from 0 to noOfCols-1
+   * @throws JWaveException if (i,j) is out of bounds
+   */
+  protected void check(int i, int j) throws JWaveException {
+
+    if (i < 0) throw new JWaveFailure("Block - i is smaller than zero");
+
+    if (i == _noOfRows) throw new JWaveFailure("Block - i is equal to noOfRows: " + _noOfRows);
+
+    if (i > _noOfRows) throw new JWaveFailure("Block - i is greater than noOfRows: " + _noOfRows);
+
+    check(j); // for checking j, while i is in every Line object stored.
+  } // check
+
+  /**
+   * Getter for a stored value of type double.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:23:22
+   * @param i position in rows of the block
+   * @param j position in columns of the block
+   * @return the stored value
+   * @throws JWaveException if i and / or j are out of bounds
+   */
+  public abstract double get(int i, int j) throws JWaveException;
+
+  /**
+   * Setter for a stored value of type double!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:42:53
+   * @param i position in rows of the block
+   * @param j position in columns of the block
+   * @param value any value in range of a double type is possible
+   * @throws JWaveException if i and / or j are out of bounds
+   */
+  public abstract void set(int i, int j, double value) throws JWaveException;
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/blocks/BlockFull.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/blocks/BlockFull.java
new file mode 100644
index 00000000000..66e101c1271
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/blocks/BlockFull.java
@@ -0,0 +1,187 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.datatypes.blocks;
+
+import org.apache.iotdb.db.query.simpiece.jwave.datatypes.lines.Line;
+import org.apache.iotdb.db.query.simpiece.jwave.datatypes.lines.LineFull;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+
+/**
+ * A block that uses a full array for storage of Line objects.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.05.2015 14:45:52
+ */
+public class BlockFull extends Block {
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:26:11
+   */
+  protected Line[] _arrLines = null;
+
+  /**
+   * Create an object of a sub type; e.g. as pattern.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 13:57:28
+   */
+  public BlockFull() {
+    super();
+  } // BlockFull
+
+  /**
+   * Copy constructor that takes over - if available - the values of another type of block.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 14:01:22
+   * @param block object of type block; e.g. BlockHash
+   */
+  public BlockFull(Block block) {
+
+    super(block); // takes the off sets and the dimension
+
+    try {
+      alloc();
+      for (int i = 0; i < _noOfRows; i++)
+        for (int j = 0; j < _noOfCols; j++) set(i, j, block.get(i, j));
+    } catch (JWaveException e) {
+      e.printStackTrace();
+    } // try
+
+    // TODO optimize this constructor by instanceof
+
+  } // BlockFull
+
+  /**
+   * Constructor setting members for and allocating memory!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 14:45:52
+   * @param noOfRows
+   * @param noOfCols
+   */
+  public BlockFull(int noOfRows, int noOfCols) {
+    super(noOfRows, noOfCols); // store does exclusively
+  } // BlockFull
+
+  /**
+   * Passing information that takes the block as a part of a global structure; e.g. a SuperBlock.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 14:05:55
+   * @param offSetRow the global off set of rows of the block
+   * @param offSetCol the global off set of columns of the block
+   * @param noOfRows the number of rows of the block
+   * @param noOfCols the number of columns of the block
+   */
+  public BlockFull(int offSetRow, int offSetCol, int noOfRows, int noOfCols) {
+    super(offSetRow, offSetCol, noOfRows, noOfCols);
+  } // BlockFull
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 15:12:35 (non-Javadoc)
+   * @see jwave.datatypes.Super#copy()
+   */
+  @Override
+  public Block copy() {
+    return new BlockFull(this);
+  } // copy
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 15:01:42 (non-Javadoc)
+   * @see jwave.datatypes.Super#isAllocated()
+   */
+  @Override
+  public boolean isAllocated() {
+    boolean isAllocated = true;
+    if (_arrLines == null) isAllocated = false;
+    return isAllocated;
+  } // isAllocated
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 15:01:42 (non-Javadoc)
+   * @see jwave.datatypes.Super#alloc()
+   */
+  @Override
+  public void alloc() throws JWaveException {
+    if (!isAllocated()) {
+      _arrLines = new Line[_noOfCols];
+      for (int j = 0; j < _noOfCols; j++) {
+        Line line = new LineFull(_offSetRow, _noOfRows);
+        line.alloc();
+        _arrLines[j] = line;
+      } // for
+    } // if
+  } // alloc
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 15:01:42 (non-Javadoc)
+   * @see jwave.datatypes.Super#erase()
+   */
+  @Override
+  public void erase() throws JWaveException {
+    if (_arrLines != null) {
+      for (int j = 0; j < _noOfCols; j++)
+        if (_arrLines[j] != null) {
+          Line line = _arrLines[j];
+          line.erase();
+          _arrLines[j] = null;
+        } // for
+      _arrLines = null;
+    } // if
+  } // erase
+
+  /*
+   * Getter!
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:34:59 (non-Javadoc)
+   * @see jwave.datatypes.blocks.Block#get(int, int)
+   */
+  @Override
+  public double get(int i, int j) throws JWaveException {
+    checkMemory();
+    // check( j );
+    check(i, j);
+    Line line = _arrLines[j];
+    double value = line.get(i);
+    return value; // checks i again
+  } // get
+
+  /*
+   * Setter!
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 15:24:39 (non-Javadoc)
+   * @see jwave.datatypes.blocks.Block#set(int, int, double)
+   */
+  @Override
+  public void set(int i, int j, double value) throws JWaveException {
+    checkMemory();
+    // check( j );
+    check(i, j);
+    Line line = _arrLines[j];
+    line.set(i, value); // checks i again
+  } // set
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/blocks/BlockHash.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/blocks/BlockHash.java
new file mode 100644
index 00000000000..0279218dcfe
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/blocks/BlockHash.java
@@ -0,0 +1,201 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.datatypes.blocks;
+
+import org.apache.iotdb.db.query.simpiece.jwave.datatypes.lines.Line;
+import org.apache.iotdb.db.query.simpiece.jwave.datatypes.lines.LineHash;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailure;
+
+import java.util.HashMap;
+
+/**
+ * Uses HashMap generic for sparse data representations.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.05.2015 16:41:53
+ */
+public class BlockHash extends Block {
+
+  /**
+   * Storing LineHash objects in a HashMap for sparse representation.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 16:43:03
+   */
+  HashMap<Integer, Line> _hashMapLines = null;
+
+  /**
+   * Create an object of a sub type; e.g. as pattern.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 13:58:16
+   */
+  public BlockHash() {
+    super();
+  } // BlockHash
+
+  /**
+   * Copy constructor that takes over - if available - the values of another type of block.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 13:59:49
+   * @param block object of type block; e.g. BlockFull
+   */
+  public BlockHash(Block block) {
+
+    super(block); // takes the off sets and the dimension
+
+    try {
+      alloc();
+      for (int i = 0; i < _noOfRows; i++)
+        for (int j = 0; j < _noOfCols; j++) set(i, j, block.get(i, j));
+    } catch (JWaveException e) {
+      e.printStackTrace();
+    } // try
+
+    // TODO optimize this constructor by instanceof
+
+  } // BlockHash
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 16:41:53
+   * @param noOfRows
+   * @param noOfCols
+   */
+  public BlockHash(int noOfRows, int noOfCols) {
+    super(noOfRows, noOfCols);
+  } // BlockHash
+
+  /**
+   * Passing information that takes the block as a part of a global structure; e.g. a SuperBlock.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 14:03:36
+   * @param offSetRow the global off set of rows of the block
+   * @param offSetCol the global off set of columns of the block
+   * @param noOfRows the number of rows of the block
+   * @param noOfCols the number of columns of the block
+   */
+  public BlockHash(int offSetRow, int offSetCol, int noOfRows, int noOfCols) {
+    super(offSetRow, offSetCol, noOfRows, noOfCols);
+  } // BlockHash
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 15:13:30 (non-Javadoc)
+   * @see jwave.datatypes.Super#copy()
+   */
+  @Override
+  public Block copy() {
+    return new BlockHash(this);
+  } // copy
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 15:02:40 (non-Javadoc)
+   * @see jwave.datatypes.Super#isAllocated()
+   */
+  @Override
+  public boolean isAllocated() {
+    boolean isAllocated = true;
+    if (_hashMapLines == null) isAllocated = false;
+    return isAllocated;
+  } // isAllocated
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 15:02:40 (non-Javadoc)
+   * @see jwave.datatypes.Super#alloc()
+   */
+  @Override
+  public void alloc() throws JWaveException {
+    if (!isAllocated()) _hashMapLines = new HashMap<Integer, Line>();
+  } // alloc
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 15:02:40 (non-Javadoc)
+   * @see jwave.datatypes.Super#erase()
+   */
+  @Override
+  public void erase() throws JWaveException {
+    if (_hashMapLines != null) _hashMapLines.clear();
+    _hashMapLines = null;
+  } // erase
+
+  /*
+   * Getter!
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 16:41:53 (non-Javadoc)
+   * @see jwave.datatypes.blocks.Block#get(int, int)
+   */
+  @Override
+  public double get(int i, int j) throws JWaveException {
+
+    checkMemory();
+
+    check(i, j);
+
+    Line line = null;
+    double value = 0.;
+
+    if (_hashMapLines.containsKey(j)) {
+
+      line = _hashMapLines.get(j);
+
+      value = line.get(i);
+
+    } else throw new JWaveFailure("Line - no value stored for requested i: " + i);
+
+    return value;
+  } // get
+
+  /*
+   * Setter!
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 16:41:53 (non-Javadoc)
+   * @see jwave.datatypes.blocks.Block#set(int, int, double)
+   */
+  @Override
+  public void set(int i, int j, double value) throws JWaveException {
+
+    checkMemory();
+
+    check(i, j);
+
+    Line line = null;
+
+    if (_hashMapLines.containsKey(j)) {
+
+      line = _hashMapLines.get(j);
+      line.set(i, value);
+
+    } else {
+
+      line = new LineHash(_offSetRow, _noOfRows);
+      line.alloc();
+      line.set(i, value);
+      _hashMapLines.put(j, line);
+    } // if
+  } // set
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/lines/Line.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/lines/Line.java
new file mode 100644
index 00000000000..583345b5856
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/lines/Line.java
@@ -0,0 +1,184 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.datatypes.lines;
+
+import org.apache.iotdb.db.query.simpiece.jwave.datatypes.Super;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailureNotValid;
+
+/**
+ * A line of Data; 1-D organized by (0) .. (noOfRows).
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.05.2015 15:00:01
+ */
+public abstract class Line extends Super {
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:02:58
+   */
+  protected int _noOfRows;
+
+  /**
+   * The position where the line start from as a sub set in the context of SuperLine. For example a
+   * SuperLine Objects defines 0 .. 10 and by three Line objects this results in - e.g. - 0 .. 3 and
+   * 4 .. 7 and 8 .. 9. the off sets of theses Line objects are: 0, 4, and 8.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 17:44:48
+   */
+  protected int _offSetRow;
+
+  /**
+   * Create an object of a sub type; e.g. as pattern.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:27:57
+   */
+  public Line() {
+    _offSetRow = 0; // the block itself is global
+    _noOfRows = 0;
+  } // Line
+
+  /**
+   * Copy constructor - attention in base class there are only boundaries passed to the new object.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 20.05.2015 07:23:56
+   * @param line
+   */
+  public Line(Line line) {
+    _offSetRow = line._noOfRows;
+    _noOfRows = line._offSetRow;
+  } // Line
+
+  /**
+   * Create a Line object by a certain number of rows.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:03:33
+   * @param noOfRows the size or length of this Line object
+   */
+  public Line(int noOfRows) {
+    _offSetRow = 0; // the block itself is global
+    _noOfRows = noOfRows;
+  } // Line
+
+  /**
+   * Create a Line object by an off set and the number of rows. Set the off set of row starting for
+   * this line; e.g. _offSetRow + _noOfRows => next_offSetRow of next_lineObject!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 17:54:29
+   * @param offSetRow the global off set of this Line object in a SuperLine object
+   * @param noOfRows the size or length of this Line object
+   */
+  public Line(int offSetRow, int noOfRows) {
+    _offSetRow = offSetRow;
+    _noOfRows = noOfRows;
+  } // Line
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:06:52
+   * @return the _noOfRows
+   */
+  public int getNoOfRows() {
+    return _noOfRows;
+  } // getNoOfRows
+
+  public void setNoOfRows(int noOfRows) throws JWaveException {
+
+    if (isAllocated())
+      throw new JWaveFailureNotValid(
+          "Line - "
+              + "setting new number of rows is not valid "
+              + "while memory is already allocated");
+
+    _noOfRows = noOfRows;
+  } // setNoOfRows
+
+  /**
+   * Getter for the global off set of this Line object in a SuperLine object.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 17:52:00
+   * @return the global off set of this Line object in a SuperLine object
+   */
+  public int getOffSetRow() {
+    return _offSetRow;
+  } // getOffSetRow
+
+  /**
+   * Set the off set of row starting for this line; e.g. _offSetRow + _noOfRows => next_offSetRow of
+   * next_lineObject!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 17:51:02
+   * @param offSetRows the global off set of this Line object in a SuperLine object
+   */
+  protected void setOffSetRow(int offSetRow) { // set to protected due to miss usage
+    _offSetRow = offSetRow;
+  } // setOffSetRow
+
+  /**
+   * Check the given input of i as position in number of rows, otherwise throw a failure (exception)
+   * if i as position is not valid.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:13:18
+   * @param i from 0 to noOfRows-1
+   * @throws JWaveException if i is out of bounds
+   */
+  protected void checkIndex(int i) throws JWaveException {
+
+    if (i < 0) throw new JWaveFailureNotValid("Line - i is smaller than zero");
+
+    if (i == _noOfRows)
+      throw new JWaveFailureNotValid("Line - i is equal to noOfRows: " + _noOfRows);
+
+    if (i > _noOfRows)
+      throw new JWaveFailureNotValid("Line - i is greater than noOfRows: " + _noOfRows);
+  } // checkIndex
+
+  /**
+   * Getter for the stored values.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:10:04
+   * @param pos from 0 to noOfRows-1 as range of input
+   * @return the stored double value
+   * @throws JWaveException if i is out of bounds
+   */
+  public abstract double get(int i) throws JWaveException;
+
+  /**
+   * Setter to store values.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:16:42
+   * @param i from 0 to noOfRows-1 as range of input
+   * @param val the value to be stored in Line object.
+   * @throws JWaveException if i out of bounds
+   */
+  public abstract void set(int i, double val) throws JWaveException;
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/lines/LineFull.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/lines/LineFull.java
new file mode 100644
index 00000000000..46a2993ace7
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/lines/LineFull.java
@@ -0,0 +1,178 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.datatypes.lines;
+
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+
+/**
+ * A line of Data; 1-D organized by (0) .. (noOfRows), using a double array for storage of data.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.05.2015 15:05:28
+ */
+public class LineFull extends Line {
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:24:50
+   */
+  protected double[] _arr;
+
+  /**
+   * Pass nothing, use this a a place holder.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:40:08
+   */
+  public LineFull() {
+    super();
+  } // LineFull
+
+  /**
+   * Copy constructor that takes over - if available - the values of another type of Line object.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 20.05.2015 07:26:25
+   * @param line an object of type Line
+   */
+  public LineFull(Line line) {
+
+    super(line); // takes the number of rows and the off set value
+
+    try {
+
+      alloc();
+
+      for (int i = 0; i < line._noOfRows; i++) set(i, line.get(i));
+
+    } catch (JWaveException e) {
+      e.printStackTrace();
+    } // try
+
+    // TODO improve constructor memory passing by (instance of); e.g. LineHash
+
+  } // LineFull
+
+  /**
+   * Pass the number of rows - global line?!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:05:28
+   * @param noOfRows
+   */
+  public LineFull(int noOfRows) {
+    super(noOfRows);
+  } // LineFull
+
+  /**
+   * Pass an of set to the line and a number of rows.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:38:38
+   * @param offSetRow
+   * @param noOfRows
+   */
+  public LineFull(int offSetRow, int noOfRows) {
+    super(offSetRow, noOfRows);
+  } // LineFull
+
+  /*
+   * Get a full copy of this Line object!
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 21:01:23 (non-Javadoc)
+   * @see jwave.datatypes.lines.Line#copy()
+   */
+  @Override
+  public Line copy() {
+
+    Line line = new LineFull(_offSetRow, _noOfRows);
+
+    try {
+      if (isAllocated()) {
+        line.alloc();
+        for (int i = 0; i < line.getNoOfRows(); i++) line.set(i, get(i));
+      } // isAllocated
+    } catch (JWaveException e) {
+      e.printStackTrace();
+    } // try - never ever
+
+    return line;
+  } // copy
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 18:07:07 (non-Javadoc)
+   * @see jwave.datatypes.lines.Line#isAllocated()
+   */
+  @Override
+  public boolean isAllocated() {
+    boolean isAllocated = true;
+    if (_arr == null) isAllocated = false;
+    return isAllocated;
+  } // isAllocated
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 18:07:14 (non-Javadoc)
+   * @see jwave.datatypes.lines.Line#alloc()
+   */
+  @Override
+  public void alloc() throws JWaveException {
+    if (!isAllocated()) _arr = new double[_noOfRows];
+  } // alloc
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 18:07:21 (non-Javadoc)
+   * @see jwave.datatypes.lines.Line#erase()
+   */
+  @Override
+  public void erase() throws JWaveException {
+    _arr = null;
+  } // erase
+
+  /*
+   * Getter!
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:18:14 (non-Javadoc)
+   * @see jwave.datatypes.lines.Line#get(int)
+   */
+  @Override
+  public double get(int i) throws JWaveException {
+    checkMemory();
+    checkIndex(i);
+    double value = _arr[i];
+    return value;
+  } // get
+
+  /*
+   * Setter!
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:18:26 (non-Javadoc)
+   * @see jwave.datatypes.lines.Line#set(int, double)
+   */
+  @Override
+  public void set(int i, double value) throws JWaveException {
+    checkMemory();
+    checkIndex(i);
+    _arr[i] = value;
+  } // set
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/lines/LineHash.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/lines/LineHash.java
new file mode 100644
index 00000000000..9062d1237d5
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/lines/LineHash.java
@@ -0,0 +1,215 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.datatypes.lines;
+
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailureNotFound;
+
+import java.util.HashMap;
+
+/**
+ * Uses HashMap generic for sparse data representations.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.05.2015 16:30:00
+ */
+public class LineHash extends Line {
+
+  /**
+   * Simple hash mapping for sparse data.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 16:31:41
+   */
+  HashMap<Integer, Double> _hashMap;
+
+  /**
+   * Pass nothing, use this a a place holder.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:41:15
+   */
+  public LineHash() {
+    super();
+  } // LineHash
+
+  /**
+   * Copy constructor that takes over - if available - the values of another type of Line object.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 20.05.2015 07:28:18
+   * @param line an object of type Line
+   */
+  public LineHash(Line line) {
+
+    super(line); // takes the number of rows and the off set value
+
+    try {
+
+      alloc();
+
+      for (int i = 0; i < line._noOfRows; i++) {
+        set(i, line.get(i));
+      }
+
+    } catch (JWaveException e) {
+      e.printStackTrace();
+    } // try
+
+    // TODO improve constructor memory passing by (instance of)
+
+  } // LineHash
+
+  /**
+   * Pass the number of rows - global line?!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 16:30:00
+   * @param noOfRows
+   */
+  public LineHash(int noOfRows) {
+    super(noOfRows);
+  } // LineHash
+
+  /**
+   * Pass an of set to the line and a number of rows.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:40:38
+   * @param offSetRow
+   * @param noOfRows
+   */
+  public LineHash(int offSetRow, int noOfRows) {
+    super(offSetRow, noOfRows);
+  } // LineHash
+
+  /*
+   * Get a full copy of this Line object!
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 21:02:37 (non-Javadoc)
+   * @see jwave.datatypes.lines.Line#copy()
+   */
+  @Override
+  public Line copy() {
+
+    int offSetRow = getOffSetRow();
+    int noOfRows = getNoOfRows();
+
+    Line line = new LineHash(offSetRow, noOfRows);
+
+    try {
+      if (isAllocated()) {
+        line.alloc();
+        for (int i = 0; i < noOfRows; i++) {
+          try {
+            line.set(i, get(i));
+          } catch (JWaveFailureNotFound notFound) {
+            // do nothing, no value stored
+          } catch (JWaveException e) {
+            e.printStackTrace();
+          } // try - never ever
+        } // i
+      } // isAllocated
+    } catch (JWaveException e) {
+      e.printStackTrace();
+    } // try - never ever
+
+    return line;
+  } // copy
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 18:11:28 (non-Javadoc)
+   * @see jwave.datatypes.lines.Line#isAllocated()
+   */
+  @Override
+  public boolean isAllocated() {
+    boolean isAllocated = true;
+    if (_hashMap == null) {
+      isAllocated = false;
+    }
+    return isAllocated;
+  } // isAllocated
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 18:12:03 (non-Javadoc)
+   * @see jwave.datatypes.lines.Line#alloc()
+   */
+  @Override
+  public void alloc() throws JWaveException {
+
+    if (!isAllocated()) {
+      _hashMap = new HashMap<Integer, Double>();
+    }
+  } // alloc
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 18:12:13 (non-Javadoc)
+   * @see jwave.datatypes.lines.Line#erase()
+   */
+  @Override
+  public void erase() throws JWaveException {
+
+    _hashMap = null;
+  } // erase
+
+  /*
+   * Getter!
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 16:30:00 (non-Javadoc)
+   * @see jwave.datatypes.lines.Line#get(int)
+   */
+  @Override
+  public double get(int i) throws JWaveException {
+
+    checkMemory();
+
+    checkIndex(i);
+
+    double value = 0.;
+
+    if (_hashMap.containsKey(i)) {
+      value = _hashMap.get(i);
+    } else {
+      throw new JWaveFailureNotFound("Line - no value stored for requested i: " + i);
+    }
+
+    return value;
+  } // get
+
+  /*
+   * Setter!
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 16:30:00 (non-Javadoc)
+   * @see jwave.datatypes.lines.Line#set(int, double)
+   */
+  @Override
+  public void set(int i, double value) throws JWaveException {
+
+    checkMemory();
+
+    checkIndex(i);
+
+    _hashMap.put(i, value);
+  } // set
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/natives/Complex.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/natives/Complex.java
new file mode 100644
index 00000000000..f526876f424
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/natives/Complex.java
@@ -0,0 +1,384 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.datatypes.natives;
+
+/**
+ * A class to represent a complex number. A Complex object is immutable once created; the add,
+ * subtract and multiply routines return newly-created Complex objects containing each requested
+ * result.
+ *
+ * @date 19.11.2010 13:20:48
+ * @author Christian (graetz23@gmail.com)
+ */
+public class Complex {
+
+  /** The real number. */
+  private double _r;
+
+  /** The imaginary number. */
+  private double _j;
+
+  /**
+   * Standard constructor.
+   *
+   * @date 19.11.2010 13:38:56
+   * @author Christian (graetz23@gmail.com)
+   */
+  public Complex() {
+    _r = 0.;
+    _j = 0.;
+  } // Complex
+
+  /**
+   * Copy constructor.
+   *
+   * @date 19.11.2010 13:22:54
+   * @author Christian (graetz23@gmail.com)
+   * @param c complex number
+   */
+  public Complex(Complex c) {
+    _r = c._r;
+    _j = c._j;
+  } // Complex
+
+  /**
+   * Constructor taking real and imaginary number.
+   *
+   * @date 19.11.2010 13:21:48
+   * @author Christian (graetz23@gmail.com)
+   * @param r real number
+   * @param j imaginary number
+   */
+  public Complex(double r, double j) {
+    _r = r;
+    _j = j;
+  } // Complex
+
+  /**
+   * Display the current Complex as a String, for usage in println( ) or writing the complex into a
+   * file.
+   *
+   * @date 19.11.2010 13:23:13
+   * @author Christian (graetz23@gmail.com)
+   */
+  @Override
+  public String toString() {
+    StringBuffer sb = new StringBuffer().append(_r);
+    if (_j >= 0) sb.append('+');
+    else sb.append('-');
+    return sb.append(_j).append('j').toString();
+  } // toString
+
+  /**
+   * Return the real number.
+   *
+   * @date 19.11.2010 13:23:34
+   * @author Christian (graetz23@gmail.com)
+   * @return real number of this complex number
+   */
+  public double getReal() {
+    return _r;
+  } // getReal( )
+
+  /**
+   * Return the imaginary number.
+   *
+   * @date 19.11.2010 13:23:51
+   * @author Christian (graetz23@gmail.com)
+   * @return imaginary number of this complex number
+   */
+  public double getImag() {
+    return _j;
+  } // getImag
+
+  /**
+   * Set the real number.
+   *
+   * @date 23.11.2010 18:44:52
+   * @author Christian (graetz23@gmail.com)
+   * @param r the real number
+   */
+  public void setReal(double r) {
+    _r = r;
+  } // setReal
+
+  /**
+   * Set the imaginary number.
+   *
+   * @date 23.11.2010 18:45:16
+   * @author Christian (graetz23@gmail.com)
+   * @param j the imaginary number
+   */
+  public void setImag(double j) {
+    _j = j;
+  } // setImag
+
+  /**
+   * Add to real number.
+   *
+   * @date 23.11.2010 18:49:57
+   * @author Christian (graetz23@gmail.com)
+   * @param r the real number
+   */
+  public void addReal(double r) {
+    _r += r;
+  } // addReal
+
+  /**
+   * Add to imaginary number.
+   *
+   * @date 23.11.2010 18:50:23
+   * @author Christian (graetz23@gmail.com)
+   * @param j the imaginary number
+   */
+  public void addImag(double j) {
+    _j += j;
+  } // addImag
+
+  /**
+   * multiply scalar to real number.
+   *
+   * @date 23.11.2010 18:53:27
+   * @author Christian (graetz23@gmail.com)
+   * @param s scalar
+   */
+  public void mulReal(double s) {
+    _r *= s;
+  } // mulReal
+
+  /**
+   * multiply scalar to imaginary number.
+   *
+   * @date 23.11.2010 18:54:48
+   * @author Christian (graetz23@gmail.com)
+   * @param s scalar
+   */
+  public void mulImag(double s) {
+    _j *= s;
+  } // mulImag
+
+  /**
+   * Calculate the magnitude of the complex number.
+   *
+   * @date 19.11.2010 13:24:28
+   * @author Christian (graetz23@gmail.com)
+   * @return magnitude of this complex number
+   */
+  public double getMag() {
+    return Math.sqrt(_r * _r + _j * _j);
+  } // getMag( )
+
+  /**
+   * Calculates the angle phi of a complex number.
+   *
+   * @date 19.11.2010 13:24:48
+   * @author Christian (graetz23@gmail.com)
+   * @return angle of this complex number
+   */
+  public double getPhi() {
+    if (_r == 0. && _j == 0) return 0.;
+    double phi = Math.toDegrees(Math.atan(Math.abs(_j / _r)));
+    if (_r >= 0. && _j >= 0.) // 1. quadrant
+    return phi;
+    if (_r <= 0. && _j >= 0.) // 2. quadrant
+    return 180. - phi;
+    if (_r <= 0. && _j <= 0.) // 3. quadrant
+    return phi + 180.;
+    if (_r >= 0. && _j <= 0.) // 4. quadrant
+    return 360. - phi;
+    return Math.toDegrees(Math.atan(Math.abs(_j / _r)));
+  } // getPhi( )
+
+  /**
+   * Returns the stored values as new double array: [ real, imag ].
+   *
+   * @date 19.11.2010 13:25:38
+   * @author Christian (graetz23@gmail.com)
+   * @return returns stored values as array [ real, imag ]
+   */
+  public double[] toArr() {
+    double[] arr = {_r, _j};
+    return arr;
+  } // toArr
+
+  /**
+   * Returns the conjugate complex number of this complex number.
+   *
+   * @date 19.11.2010 19:36:52
+   * @author Thomas Leduc
+   * @return new object of Complex keeping the result
+   */
+  public Complex conjugate() {
+    return new Complex(_r, -_j);
+  } // conjugate
+
+  /**
+   * Add another complex number to this one and return.
+   *
+   * @date 19.11.2010 13:25:55
+   * @author Christian (graetz23@gmail.com)
+   * @param c complex number
+   * @return new object of Complex keeping the result
+   */
+  public Complex add(Complex c) {
+    return new Complex(_r + c._r, _j + c._j);
+  } // add
+
+  /**
+   * Subtract another complex number from this one.
+   *
+   * @date 19.11.2010 13:27:05
+   * @author Christian (graetz23@gmail.com)
+   * @param c complex number
+   * @return new object of Complex keeping the result
+   */
+  public Complex sub(Complex c) {
+    return new Complex(_r - c._r, _j - c._j);
+  } // sub
+
+  /**
+   * Multiply this complex number times another one.
+   *
+   * @date 19.11.2010 13:27:36
+   * @author Christian (graetz23@gmail.com)
+   * @param c complex number
+   * @return new object of Complex keeping the result
+   */
+  public Complex mul(Complex c) {
+    return new Complex(_r * c._r - _j * c._j, _r * c._j + _j * c._r);
+  } // mul
+
+  /**
+   * Multiply this complex number times a scalar.
+   *
+   * @date 19.11.2010 13:28:03
+   * @author Christian (graetz23@gmail.com)
+   * @param s scalar
+   * @return new object of Complex keeping the result
+   */
+  public Complex mul(double s) {
+    return new Complex(_r * s, _j * s);
+  } // mul
+
+  /**
+   * Divide this complex number by another one.
+   *
+   * @date 19.11.2010 19:45:02
+   * @author Thomas Leduc
+   * @param c complex number
+   * @return new object of Complex keeping the result
+   */
+  public Complex div(Complex c) {
+    return mul(c.conjugate()).div(c._r * c._r + c._j * c._j);
+  } // div
+
+  /**
+   * Divide this complex number by a scalar.
+   *
+   * @date 19.11.2010 13:29:49
+   * @author Thomas Leduc
+   * @param s scalar
+   * @return new object of Complex keeping the result
+   */
+  public Complex div(double s) {
+    return mul(1. / s);
+  } // div
+
+  /**
+   * Generates a hash code for this object.
+   *
+   * @date 19.11.2010 19:42:39
+   * @author Thomas Leduc
+   * @see Object#hashCode()
+   */
+  @Override
+  public int hashCode() {
+    final int prime = 31;
+    int result = 1;
+    long temp;
+    temp = Double.doubleToLongBits(_j);
+    result = prime * result + (int) (temp ^ (temp >>> 32));
+    temp = Double.doubleToLongBits(_r);
+    result = prime * result + (int) (temp ^ (temp >>> 32));
+    return result;
+  } // hashCode
+
+  /**
+   * Compare this Complex number with another one.
+   *
+   * @date 19.11.2010 13:30:35
+   * @author Thomas Leduc
+   * @see Object#equals(Object)
+   */
+  @Override
+  public boolean equals(Object obj) {
+    if (this == obj) return true;
+    if (obj == null) return false;
+    if (getClass() != obj.getClass()) return false;
+    Complex other = (Complex) obj;
+    if (Double.doubleToLongBits(_j) != Double.doubleToLongBits(other._j)) return false;
+    if (Double.doubleToLongBits(_r) != Double.doubleToLongBits(other._r)) return false;
+    return true;
+  } // equals
+
+  /**
+   * Print this complex number to console.
+   *
+   * @date 19.11.2010 13:31:16
+   * @author Christian (graetz23@gmail.com)
+   */
+  public void show() {
+    if (_j < 0) System.out.println(getReal() + " - j" + Math.abs(getImag()));
+    else System.out.println(getReal() + " + j" + getImag());
+  } // show
+
+  /**
+   * Print this complex number to console with an identifier before.
+   *
+   * @date 19.11.2010 13:31:32
+   * @author Christian (graetz23@gmail.com)
+   * @param ident string to label this complex number
+   */
+  public void show(String ident) {
+    if (_j < 0) System.out.println(ident + ": " + getReal() + " - j" + Math.abs(getImag()));
+    else System.out.println(ident + ": " + getReal() + " + j" + getImag());
+  } // show
+
+  /**
+   * Print magnitude to console out.
+   *
+   * @date 19.11.2010 13:32:15
+   * @author Christian (graetz23@gmail.com)
+   */
+  public void showMag() {
+    System.out.println(getMag());
+  } // showMag
+
+  /**
+   * Print angle to console out.
+   *
+   * @date 19.11.2010 13:32:33
+   * @author Christian (graetz23@gmail.com)
+   */
+  public void showPhi() {
+    System.out.println(getPhi());
+  } // showPhi
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/spaces/Space.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/spaces/Space.java
new file mode 100644
index 00000000000..7b47fd4fd66
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/spaces/Space.java
@@ -0,0 +1,280 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.datatypes.spaces;
+
+import org.apache.iotdb.db.query.simpiece.jwave.datatypes.Super;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailure;
+
+/**
+ * A space of Data; 3-D organized by (0,0,0) .. (noOfRows,noOfCols,noOfBlocks).
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.05.2015 14:47:21
+ */
+public abstract class Space extends Super {
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:46:06
+   */
+  protected int _noOfRows;
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:46:07
+   */
+  protected int _noOfCols;
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:46:08
+   */
+  protected int _noOfLvls;
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 18:23:47
+   */
+  protected int _offSetRow;
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 18:23:49
+   */
+  protected int _offSetCol;
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 18:23:51
+   */
+  protected int _offSetLvl;
+
+  /**
+   * Create an object of a sub type; e.g. as pattern.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 18:28:20
+   */
+  public Space() {
+    _offSetRow = 0;
+    _offSetCol = 0;
+    _offSetLvl = 0;
+    _noOfRows = 0;
+    _noOfCols = 0;
+    _noOfLvls = 0;
+  } // Space
+
+  /**
+   * Copy constructor passes the off sets and the dimesion of the passed space object.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 18:29:35
+   * @param space object of type space
+   */
+  public Space(Space space) {
+    _offSetRow = space._offSetRow;
+    _offSetCol = space._offSetCol;
+    _offSetLvl = space._offSetLvl;
+    _noOfRows = space._noOfRows;
+    _noOfCols = space._noOfCols;
+    _noOfLvls = space._noOfLvls;
+  } // Space
+
+  /**
+   * Use this space as a single space that has all its off set at zero.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 14:47:21
+   * @param noOfRows the number of rows
+   * @param noOfCols the number of columns
+   * @param noOfLvls the number of levels (height)
+   */
+  public Space(int noOfRows, int noOfCols, int noOfLvls) {
+    _offSetRow = 0;
+    _offSetCol = 0;
+    _offSetLvl = 0;
+    _noOfRows = noOfRows;
+    _noOfCols = noOfCols;
+    _noOfLvls = noOfLvls;
+  } // Space
+
+  /**
+   * Configure a space (a cube) as a part of a super space.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 18:25:13
+   * @param offSetRow the starting position for the row of the space
+   * @param offSetCol the starting position for the column of the space
+   * @param offSetLvl the starting position for the level (height) of the space
+   * @param noOfRows the number of rows
+   * @param noOfCols the number of columns
+   * @param noOfLvls the number of levels (height)
+   */
+  public Space(
+      int offSetRow, int offSetCol, int offSetLvl, int noOfRows, int noOfCols, int noOfLvls) {
+    _offSetRow = offSetRow;
+    _offSetCol = offSetCol;
+    _offSetLvl = offSetLvl;
+    _noOfRows = noOfRows;
+    _noOfCols = noOfCols;
+    _noOfLvls = noOfLvls;
+  } // Space
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:47:27
+   * @return the _noOfRows
+   */
+  public int getNoOfRows() {
+    return _noOfRows;
+  } // getNoOfRows
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:47:27
+   * @return the _noOfCols
+   */
+  public int getNoOfCols() {
+    return _noOfCols;
+  } // getNoOfCols
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:47:27
+   * @return the _noOfLvls
+   */
+  public int getNoOfLvls() {
+    return _noOfLvls;
+  } // getNoOfLvls
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 18:32:13
+   * @return the off set of the row
+   */
+  public int getOffSetRow() {
+    return _offSetRow;
+  } // getOffSetRow
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 18:32:23
+   * @return the off set of the column
+   */
+  public int getOffSetCol() {
+    return _offSetCol;
+  } // getOffSetCol
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 18:32:39
+   * @return the off set of the level (height)
+   */
+  public int getOffSetLvl() {
+    return _offSetLvl;
+  } // getOffSetLvl
+
+  /**
+   * Check the given input of i as position in number of levels, otherwise throw a failure
+   * (exception) if i as position is not valid.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:49:28
+   * @param k from 0 to noOfLvls-1
+   * @throws JWaveException if i is out of bounds
+   */
+  protected void check(int k) throws JWaveException {
+
+    if (k < 0) throw new JWaveFailure("Space - i is smaller than zero");
+
+    if (k == _noOfLvls) throw new JWaveFailure("Space - i is equal to noOfLvls: " + _noOfLvls);
+
+    if (k > _noOfLvls) throw new JWaveFailure("Space - i is greater than noOfLvls: " + _noOfLvls);
+  } // check
+
+  /**
+   * Check the given input of (j,k) and throws a failure (exception) if position is not valid.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:52:00
+   * @param j from 0 to noOfCols-1
+   * @param k from 0 to noOfLvls-1
+   * @throws JWaveException if (j,k) is out of bounds
+   */
+  protected void check(int j, int k) throws JWaveException {
+
+    if (j < 0) throw new JWaveFailure("Space - i is smaller than zero");
+
+    if (j == _noOfCols) throw new JWaveFailure("Space - i is equal to noOfCols: " + _noOfCols);
+
+    if (j > _noOfCols) throw new JWaveFailure("Space - i is greater than noOfCols: " + _noOfCols);
+
+    check(k); // for checking k, while j is in every Block object stored.
+  } // check
+
+  /**
+   * Check the given input of (i,j,k) and throws a failure (exception) if position is not valid.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:54:08
+   * @param i from 0 to noOfRows-1
+   * @param j from 0 to noOfCols-1
+   * @param k from 0 to noOfLvls-1
+   * @throws JWaveException if (i,j,k) is out of bounds
+   */
+  protected void check(int i, int j, int k) throws JWaveException {
+
+    if (i < 0) throw new JWaveFailure("Space - i is smaller than zero");
+
+    if (i == _noOfRows) throw new JWaveFailure("Space - i is equal to noOfRows: " + _noOfRows);
+
+    if (i > _noOfRows) throw new JWaveFailure("Space - i is greater than noOfRows: " + _noOfRows);
+
+    check(j, k); // for checking (j,k), while i is in every Line object stored.
+  } // check
+
+  /**
+   * Getter!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:55:57
+   * @param i from 0 to noOfRows-1
+   * @param j from 0 to noOfCols-1
+   * @param k from 0 to noOfLvls-1
+   * @return the stored double value
+   * @throws JWaveException if (i,j,k) is out of bounds
+   */
+  public abstract double get(int i, int j, int k) throws JWaveException;
+
+  /**
+   * Setter!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:56:24
+   * @param i from 0 to noOfRows-1
+   * @param j from 0 to noOfCols-1
+   * @param k from 0 to noOfLvls-1
+   * @param value any value of type double
+   * @throws JWaveException if (i,j,k) is out of bounds
+   */
+  public abstract void set(int i, int j, int k, double value) throws JWaveException;
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/spaces/SpaceFull.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/spaces/SpaceFull.java
new file mode 100644
index 00000000000..a0b93fdab8e
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/spaces/SpaceFull.java
@@ -0,0 +1,190 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.datatypes.spaces;
+
+import org.apache.iotdb.db.query.simpiece.jwave.datatypes.blocks.Block;
+import org.apache.iotdb.db.query.simpiece.jwave.datatypes.blocks.BlockFull;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+
+/**
+ * A space that uses a full array for storage of Block objects.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.05.2015 15:57:35
+ */
+public class SpaceFull extends Space {
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 16:00:11
+   */
+  protected Block[] _arrBlocks = null;
+
+  /**
+   * A space object with no input; e.g. as a pattern.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 18:51:54
+   */
+  public SpaceFull() {
+    super();
+  } // SpaceFull
+
+  /**
+   * Copy constructor for generating the same space (cube) object again.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 18:53:30
+   * @param space
+   */
+  public SpaceFull(Space space) {
+    super(space);
+
+    try {
+      alloc();
+      for (int i = 0; i < _noOfRows; i++)
+        for (int j = 0; j < _noOfCols; j++)
+          for (int k = 0; k < _noOfLvls; k++) set(i, j, k, space.get(i, j, k));
+    } catch (JWaveException e) {
+      e.printStackTrace();
+    } // try
+
+    // TODO implement more efficient by using instanceof
+
+  } // Space
+
+  /**
+   * Constructor setting members for and allocating memory!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:57:35
+   * @param i from 0 to noOfRows-1
+   * @param j from 0 to noOfCols-1
+   * @param k from 0 to noOfLvls-1
+   */
+  public SpaceFull(int noOfRows, int noOfCols, int noOfLvls) {
+    super(noOfRows, noOfCols, noOfLvls);
+  } // SpaceFull
+
+  /**
+   * Configure a space (a cube) as a part of a super space.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 18:50:59
+   * @param offSetRow the starting position for the row of the space
+   * @param offSetCol the starting position for the column of the space
+   * @param offSetLvl the starting position for the level (height) of the space
+   * @param noOfRows the number of rows
+   * @param noOfCols the number of columns
+   * @param noOfLvls the number of levels (height)
+   */
+  public SpaceFull(
+      int offSetRow, int offSetCol, int offSetLvl, int noOfRows, int noOfCols, int noOfLvls) {
+    super(offSetRow, offSetCol, offSetLvl, noOfRows, noOfCols, noOfLvls);
+  } // SpaceFull
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 15:14:11 (non-Javadoc)
+   * @see jwave.datatypes.Super#copy()
+   */
+  @Override
+  public Space copy() {
+    return new SpaceFull(this);
+  } // copy
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 15:04:11 (non-Javadoc)
+   * @see jwave.datatypes.Super#isAllocated()
+   */
+  @Override
+  public boolean isAllocated() {
+    boolean isAllocated = true;
+    if (_arrBlocks == null) isAllocated = false;
+    return isAllocated;
+  } // isAllocated
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 15:04:11 (non-Javadoc)
+   * @see jwave.datatypes.Super#alloc()
+   */
+  @Override
+  public void alloc() throws JWaveException {
+    if (!isAllocated()) {
+      _arrBlocks = new Block[_noOfLvls];
+      for (int k = 0; k < _noOfLvls; k++) {
+        Block block = new BlockFull(_offSetRow, _offSetCol, _noOfRows, _noOfCols);
+        block.alloc();
+        _arrBlocks[k] = block;
+      } // for
+    }
+  } // alloc
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 15:04:11 (non-Javadoc)
+   * @see jwave.datatypes.Super#erase()
+   */
+  @Override
+  public void erase() throws JWaveException {
+    if (_arrBlocks != null) {
+      for (int k = 0; k < _noOfLvls; k++) {
+        if (_arrBlocks[k] != null) {
+          Block block = _arrBlocks[k];
+          block.erase();
+          _arrBlocks[k] = null;
+        } // if
+      } // for
+      _arrBlocks = null;
+    } // if
+  } // erase
+
+  /*
+   * Getter!
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:57:35 (non-Javadoc)
+   * @see jwave.datatypes.spaces.Space#get(int, int, int)
+   */
+  @Override
+  public double get(int i, int j, int k) throws JWaveException {
+    checkMemory();
+    check(i, j, k);
+    Block block = _arrBlocks[k];
+    double value = block.get(i, j);
+    return value;
+  } // get
+
+  /*
+   * Setter!
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 15:57:35 (non-Javadoc)
+   * @see jwave.datatypes.spaces.Space#set(int, int, int, double)
+   */
+  @Override
+  public void set(int i, int j, int k, double value) throws JWaveException {
+    checkMemory();
+    check(i, j, k);
+    Block block = _arrBlocks[k];
+    block.set(i, j, value);
+  } // set
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/spaces/SpaceHash.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/spaces/SpaceHash.java
new file mode 100644
index 00000000000..d58cfdbfdf7
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/datatypes/spaces/SpaceHash.java
@@ -0,0 +1,205 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.datatypes.spaces;
+
+import org.apache.iotdb.db.query.simpiece.jwave.datatypes.blocks.Block;
+import org.apache.iotdb.db.query.simpiece.jwave.datatypes.blocks.BlockHash;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailure;
+
+import java.util.HashMap;
+
+/**
+ * Uses HashMap generic for sparse data representations.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.05.2015 16:52:40
+ */
+public class SpaceHash extends Space {
+
+  /**
+   * Storing BlockHash objects in a HashMap for sparse representation.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 16:55:22
+   */
+  HashMap<Integer, Block> _hashMapBlocks = null;
+
+  /**
+   * A space object with no input; e.g. as a pattern.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 19:05:01
+   */
+  public SpaceHash() {
+    super();
+  } // SpaceHash
+
+  /**
+   * Copy constructor for generating the same space (cube) object again.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 19:06:25
+   * @param space
+   */
+  public SpaceHash(Space space) {
+    super(space);
+
+    try {
+      alloc();
+      for (int i = 0; i < _noOfRows; i++)
+        for (int j = 0; j < _noOfCols; j++)
+          for (int k = 0; k < _noOfLvls; k++) set(i, j, k, space.get(i, j, k));
+    } catch (JWaveException e) {
+      e.printStackTrace();
+    } // try
+
+    // TODO implement more efficient by using instanceof
+
+  } // SpaceHash
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 16:52:40
+   * @param noOfRows 0 ..
+   * @param noOfCols 0 ..
+   * @param noOfLvls 0 ..
+   */
+  public SpaceHash(int noOfRows, int noOfCols, int noOfLvls) {
+    super(noOfRows, noOfCols, noOfLvls);
+  } // SpaceHash
+
+  /**
+   * Configure a space (a cube) as a part of a super space.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 19:07:05
+   * @param offSetRow the starting position for the row of the space
+   * @param offSetCol the starting position for the column of the space
+   * @param offSetLvl the starting position for the level (height) of the space
+   * @param noOfRows the number of rows
+   * @param noOfCols the number of columns
+   * @param noOfLvls the number of levels (height)
+   */
+  public SpaceHash(
+      int offSetRow, int offSetCol, int offSetLvl, int noOfRows, int noOfCols, int noOfLvls) {
+    super(offSetRow, offSetCol, offSetLvl, noOfRows, noOfCols, noOfLvls);
+  } // SpaceHash
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 15:14:34 (non-Javadoc)
+   * @see jwave.datatypes.Super#copy()
+   */
+  @Override
+  public Space copy() {
+    return new SpaceHash(this);
+  } // copy
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 15:03:28 (non-Javadoc)
+   * @see jwave.datatypes.Super#isAllocated()
+   */
+  @Override
+  public boolean isAllocated() {
+    boolean isAllocated = true;
+    if (_hashMapBlocks == null) isAllocated = false;
+    return isAllocated;
+  } // isAllocated
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 15:03:28 (non-Javadoc)
+   * @see jwave.datatypes.Super#alloc()
+   */
+  @Override
+  public void alloc() throws JWaveException {
+    if (!isAllocated()) _hashMapBlocks = new HashMap<Integer, Block>();
+  } // alloc
+
+  /*
+   * @author Christian (graetz23@gmail.com)
+   * @date 24.05.2015 15:03:28 (non-Javadoc)
+   * @see jwave.datatypes.Super#erase()
+   */
+  @Override
+  public void erase() throws JWaveException {
+    if (_hashMapBlocks != null) _hashMapBlocks.clear();
+    _hashMapBlocks = null;
+  } // erase
+
+  /*
+   * Getter!
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 16:52:40 (non-Javadoc)
+   * @see jwave.datatypes.spaces.Space#get(int, int, int)
+   */
+  @Override
+  public double get(int i, int j, int k) throws JWaveException {
+
+    checkMemory();
+
+    check(i, j, k);
+
+    Block block = null;
+    double value = 0.;
+
+    if (_hashMapBlocks.containsKey(k)) {
+
+      block = _hashMapBlocks.get(k);
+
+      value = block.get(i, j);
+
+    } else throw new JWaveFailure("Line - no value stored for requested i: " + i);
+
+    return value;
+  } // get
+
+  /*
+   * Setter!
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 16:52:40 (non-Javadoc)
+   * @see jwave.datatypes.spaces.Space#set(int, int, int, double)
+   */
+  @Override
+  public void set(int i, int j, int k, double value) throws JWaveException {
+
+    checkMemory();
+
+    check(i, j, k);
+
+    Block block = null;
+
+    if (_hashMapBlocks.containsKey(k)) {
+
+      block = _hashMapBlocks.get(k);
+      block.set(i, j, value);
+
+    } else {
+
+      block = new BlockHash(_offSetRow, _offSetCol, _noOfRows, _noOfCols);
+      block.alloc();
+      block.set(i, j, value);
+      _hashMapBlocks.put(k, block);
+    } // if
+  } // set
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveError.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveError.java
new file mode 100644
index 00000000000..56711b54397
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveError.java
@@ -0,0 +1,55 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.exceptions;
+
+/**
+ * Marking errors for this package; failures that are not recoverable
+ *
+ * @date 19.05.2009 09:28:17
+ * @author Christian (graetz23@gmail.com)
+ */
+public class JWaveError extends JWaveException {
+
+  /**
+   * Generated serial ID for this error
+   *
+   * @date 19.05.2009 09:29:04
+   * @author Christian (graetz23@gmail.com)
+   */
+  private static final long serialVersionUID = -2757378141408012245L;
+
+  /**
+   * constructor taking an error message
+   *
+   * @date 19.05.2009 09:28:17
+   * @author Christian (graetz23@gmail.com)
+   * @param message stored message for this error
+   */
+  public JWaveError(String message) {
+    super(message);
+    _message = "JWave"; // overwrite
+    _message += ": "; // separator
+    _message += "Error"; // Exception type
+    _message += ": "; // separator
+    _message += message; // add message
+    _message += "\n"; // break line
+  } // TransformError
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveException.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveException.java
new file mode 100644
index 00000000000..2fe9326579d
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveException.java
@@ -0,0 +1,114 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.exceptions;
+
+/**
+ * General exception class of the JWave package.
+ *
+ * @date 16.10.2008 07:30:20
+ * @author Christian (graetz23@gmail.com)
+ */
+public class JWaveException extends Throwable {
+
+  /**
+   * @date 27.05.2009 06:58:27
+   * @author Christian (graetz23@gmail.com)
+   */
+  private static final long serialVersionUID = -4165486739091019056L;
+
+  /** Member string for the stored exception message. */
+  protected String _message; // exception message
+
+  /**
+   * Constructor for storing a handed exception message.
+   *
+   * @date 27.05.2009 06:51:57
+   * @author Christian (graetz23@gmail.com)
+   * @param message this message should tell exactly what went wrong
+   */
+  public JWaveException(String message) {
+    _message = "JWave "; // overwrite
+    _message += "- "; // separator
+    _message += "Exception"; // Exception type
+    _message += "- "; // separator
+    _message += message; // add message
+    _message += "\n"; // break line
+  } // TransformException
+
+  /**
+   * Copy constructor; use this for a quick fix of sub types.
+   *
+   * @date 29.07.2009 07:03:45
+   * @author Christian (graetz23@gmail.com)
+   * @param e an object of this class
+   */
+  public JWaveException(Exception e) {
+    _message = e.getMessage();
+  } // TransformException
+
+  /**
+   * Returns the stored exception message as a string.
+   *
+   * @date 27.05.2009 06:52:46
+   * @author Christian (graetz23@gmail.com)
+   * @return exception message that should tell exactly what went wrong
+   */
+  @Override
+  public String getMessage() {
+    return _message;
+  } // getMessage
+
+  /**
+   * Displays the stored exception message at console out.
+   *
+   * @date 27.05.2009 06:53:23
+   * @author Christian (graetz23@gmail.com)
+   */
+  public void showMessage() {
+    System.out.println(_message);
+  } // showMessage
+
+  /**
+   * Nuke the run and print stack trace.
+   *
+   * @date 02.07.2009 05:07:42
+   * @author Christian (graetz23@gmail.com)
+   */
+  public void nuke() {
+    System.out.println("");
+    System.out.println("                  ____             ");
+    System.out.println("          __,-~~/~    `---.        ");
+    System.out.println("        _/_,---(      ,    )       ");
+    System.out.println("    __ /        NUKED     ) \\ __  ");
+    System.out.println("   ====------------------===;;;==  ");
+    System.out.println("      /  ~\"~\"~\"~\"~\"~~\"~)     ");
+    System.out.println("      (_ (      (     >    \\)     ");
+    System.out.println("       \\_( _ <         >_>\'      ");
+    System.out.println("           ~ `-i' ::>|--\"         ");
+    System.out.println("               I;|.|.|             ");
+    System.out.println("              <|i::|i|>            ");
+    System.out.println("               |[::|.|             ");
+    System.out.println("                ||: |              ");
+    System.out.println("");
+    this.showMessage();
+    this.printStackTrace();
+  } // nuke
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailure.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailure.java
new file mode 100644
index 00000000000..ba6e545621e
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailure.java
@@ -0,0 +1,55 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.exceptions;
+
+/**
+ * Marking failures for this package; failures that are recoverable
+ *
+ * @date 19.05.2009 09:26:22
+ * @author Christian (graetz23@gmail.com)
+ */
+public class JWaveFailure extends JWaveException {
+
+  /**
+   * Generated serial ID for this failure
+   *
+   * @date 19.05.2009 09:27:18
+   * @author Christian (graetz23@gmail.com)
+   */
+  private static final long serialVersionUID = 5471588833755939370L;
+
+  /**
+   * Constructor taking a failure message
+   *
+   * @date 19.05.2009 09:26:22
+   * @author Christian (graetz23@gmail.com)
+   * @param message the stored failure message for this exception
+   */
+  public JWaveFailure(String message) {
+    super(message);
+    _message = "JWave"; // overwrite
+    _message += ": "; // separator
+    _message += "Failure"; // Exception type
+    _message += ": "; // separator
+    _message += message; // add message
+    _message += "\n"; // break line
+  } // TransformFailure
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailureNotAllocated.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailureNotAllocated.java
new file mode 100644
index 00000000000..94f8363c03c
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailureNotAllocated.java
@@ -0,0 +1,45 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.exceptions;
+
+/**
+ * This exception should be thrown if some memory is not allocated.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 18.05.2015 20:11:28
+ */
+public class JWaveFailureNotAllocated extends JWaveFailure {
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:12:36
+   */
+  private static final long serialVersionUID = 2187309268927118324L;
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:11:28
+   * @param message
+   */
+  public JWaveFailureNotAllocated(String message) {
+    super(message);
+  } // JWaveFailureNotAllocated
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailureNotFound.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailureNotFound.java
new file mode 100644
index 00000000000..c6bcca24146
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailureNotFound.java
@@ -0,0 +1,45 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.exceptions;
+
+/**
+ * This exception should be thrown if something is searched and not found.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 18.05.2015 20:09:52
+ */
+public class JWaveFailureNotFound extends JWaveFailure {
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:10:47
+   */
+  private static final long serialVersionUID = 7185956692241086674L;
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:09:52
+   * @param message
+   */
+  public JWaveFailureNotFound(String message) {
+    super(message);
+  } // JWaveFailureNotFound
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailureNotImplemented.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailureNotImplemented.java
new file mode 100644
index 00000000000..fdd90234da1
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailureNotImplemented.java
@@ -0,0 +1,45 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.exceptions;
+
+/**
+ * This exception should be thrown if some code is not implemented yet.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 18.05.2015 20:15:06
+ */
+public class JWaveFailureNotImplemented extends JWaveFailure {
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:16:06
+   */
+  private static final long serialVersionUID = 5830042445149954785L;
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:15:06
+   * @param message
+   */
+  public JWaveFailureNotImplemented(String message) {
+    super(message);
+  } // JWaveFailureNotImplemented
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailureNotKnown.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailureNotKnown.java
new file mode 100644
index 00000000000..189037f5c2b
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailureNotKnown.java
@@ -0,0 +1,45 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.exceptions;
+
+/**
+ * This exception should be thrown if some type, especially object type, is not known.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 18.05.2015 20:21:52
+ */
+public class JWaveFailureNotKnown extends JWaveFailure {
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:22:50
+   */
+  private static final long serialVersionUID = 2216625923966203000L;
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:21:52
+   * @param message
+   */
+  public JWaveFailureNotKnown(String message) {
+    super(message);
+  } // JWaveFailureNotKnown
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailureNotValid.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailureNotValid.java
new file mode 100644
index 00000000000..d67cb6a96e2
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/exceptions/JWaveFailureNotValid.java
@@ -0,0 +1,46 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.exceptions;
+
+/**
+ * This exception should be thrown if some input or something else is not valid. For example, due to
+ * set or known boundaries.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 18.05.2015 20:30:12
+ */
+public class JWaveFailureNotValid extends JWaveFailure {
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:31:23
+   */
+  private static final long serialVersionUID = -2046012862738040230L;
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 18.05.2015 20:30:12
+   * @param message
+   */
+  public JWaveFailureNotValid(String message) {
+    super(message);
+  } // JWaveFailureNotValid
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/tools/MathToolKit.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/tools/MathToolKit.java
new file mode 100644
index 00000000000..7c9a6aae600
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/tools/MathToolKit.java
@@ -0,0 +1,242 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.tools;
+
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveError;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailure;
+
+/** @author Christian (graetz23@gmail.com) date Feb 11, 2013 1:42:37 PM */
+public class MathToolKit {
+
+  /**
+   * Some how useless ~8>
+   *
+   * @author Christian (graetz23@gmail.com) date Feb 11, 2013 1:42:37 PM
+   */
+  public MathToolKit() {} // MathToolKit
+
+  /**
+   * The method converts a positive integer to the ancient Egyptian multipliers which are actually
+   * the multipliers to display the number by a sum of the largest possible powers of two. E.g. 42 =
+   * 2^5 + 2^3 + 2^1 = 32 + 8 + 2. However, odd numbers always 2^0 = 1 as the last entry. Also see:
+   * http://en.wikipedia.org/wiki/Ancient_Egyptian_multiplication
+   *
+   * @author Christian (graetz23@gmail.com) date Feb 11, 2013 1:50:42 PM
+   * @param number
+   * @return
+   * @throws JWaveException
+   */
+  public static int[] decompose(int number) throws JWaveException {
+
+    if (number < 1)
+      throw new JWaveFailure("the supported number for decomposition is smaller than one");
+
+    int power = getExponent((double) number);
+
+    int[] tmpArr = new int[power + 1]; // max no of possible multipliers
+
+    int pos = 0;
+    double current = (double) number;
+    while (current >= 1.) {
+
+      power = getExponent(current);
+      tmpArr[pos] = power;
+      current = current - scalb(1., power); // 1. * 2 ^ power
+      pos++;
+    } // while
+
+    int[] ancientEgyptianMultipliers = new int[pos]; // shrink
+    for (int c = 0; c < pos; c++) ancientEgyptianMultipliers[c] = tmpArr[c];
+
+    return ancientEgyptianMultipliers;
+  } // decompose
+
+  /**
+   * splits the given length of the data array to a possible number of blocks in block size and then
+   * handles the rest as the ancient egyptian decomposition: e. g. 127 by block size 32 ends up as:
+   * 32 | 32 | 32 | 16 | 8 | 4 | 2 | 1.
+   *
+   * @param number the number that should be decompose; greater than block size
+   * @param blockSize the block size as a type of 2^p|p={1,2,4,..} that is first used blocks until a
+   *     rest is left; smaller than parameter number.
+   * @return an array keeping splits by several time the given block size first and then of a rest
+   *     split by the ancient egyptian decomposition.
+   * @throws JWaveException if block size is not of type 2^p|p={1,2,4,..}, if block size is smaller
+   *     than number or negative input is given.
+   */
+  public static int[] decompose(int number, int blockSize) throws JWaveException {
+
+    int[] blockedAncientEgyptianMultipliers = null;
+
+    if (!isBinary(blockSize))
+      throw new JWaveFailure(
+          "given block size is not 2^p|p={1,2,3,4,..}. "
+              + "block size shold be e. g.: 4, 8, 16, 32, ..");
+
+    if (number < blockSize)
+      throw new JWaveFailure(
+          "Given blockSize is greater than the given number " + "to be split by it");
+
+    int noOfBlocks = number % blockSize; // 127 % 32 = 3
+
+    int rest = number - noOfBlocks * blockSize; // 127 - 3 * 32 = 31
+
+    int[] ancientEgyptianMultipliers = decompose(rest);
+
+    int blockedAncientEgyptianMultipliersSize = ancientEgyptianMultipliers.length + noOfBlocks;
+
+    blockedAncientEgyptianMultipliers = new int[blockedAncientEgyptianMultipliersSize];
+
+    int j = 0;
+    for (int i = 0; i < blockedAncientEgyptianMultipliersSize; i++)
+      if (i < noOfBlocks) blockedAncientEgyptianMultipliers[i] = blockSize;
+      else {
+        blockedAncientEgyptianMultipliers[i] = ancientEgyptianMultipliers[j];
+        j++;
+      }
+
+    return blockedAncientEgyptianMultipliers;
+  } // decompose
+
+  /**
+   * The method converts a list of ancient Egyptian multipliers to the corresponding integer. The
+   * ancient Egyptian multipliers are actually the multipliers to display am integer by a sum of the
+   * largest possible powers of two. E.g. 42 = 2^5 + 2^3 + 2^1 = 32 + 8 + 2. Also see:
+   * http://en.wikipedia.org/wiki/Ancient_Egyptian_multiplication
+   *
+   * @author Christian (graetz23@gmail.com) date Feb 11, 2013 1:55:54 PM
+   * @param ancientEgyptianMultipliers an integer array keeping the ancient Egyptian multipliers
+   * @return resulting integer as sum of powers of two
+   * @throws JWaveException
+   */
+  public static int compose(int[] ancientEgyptianMultipliers) throws JWaveException {
+
+    if (ancientEgyptianMultipliers == null) throw new JWaveError("given array is null");
+
+    int number = 0;
+
+    int noOfAncientEgyptianMultipliers = ancientEgyptianMultipliers.length;
+    for (int m = 0; m < noOfAncientEgyptianMultipliers; m++) {
+
+      int ancientEgyptianMultiplier = ancientEgyptianMultipliers[m];
+
+      number += (int) scalb(1., ancientEgyptianMultiplier); // 1. * 2^p
+    } // compose
+
+    return number;
+  }
+
+  /**
+   * Checks if given number is of type 2^p = 1, 2, 4, 8, 18, 32, 64, .., 1024, ..
+   *
+   * @author Christian (graetz23@gmail.com) 10.02.2014 20:18:26
+   * @param number any positive integer
+   * @return true if is 2^p else false
+   */
+  public static boolean isBinary(int number) {
+    // DLM#23 Power of 2 test
+    return number > 0 && ((number & (number - 1)) == 0);
+  } // isBinary
+
+  /**
+   * Replaced Math.getExponent due to google's Android OS is not supporting it in Math library.
+   *
+   * @author Christian (graetz23@gmail.com) date Feb 11, 2013 1:47:05 PM
+   * @author sashi
+   * @date 19.04.2011 15:43:16
+   * @param f
+   * @return p of 2^p <= f < 2^(p+1)
+   */
+  public static int getExponent(double f) {
+
+    int exp = (int) (Math.log(f) / Math.log(2.));
+
+    return exp;
+  } // exp
+
+  /**
+   * Replaced Math.scalb due to google's Android OS is not supporting it in Math library.
+   *
+   * @author Christian (graetz23@gmail.com) date Feb 11, 2013 1:46:33 PM
+   * @param f
+   * @param scaleFactor
+   * @return f times 2^(scaleFactor)
+   */
+  public static double scalb(double f, int scaleFactor) {
+
+    double res = f * Math.pow(2., scaleFactor);
+
+    return res;
+  } // scalb
+
+  /**
+   * Returns a sampled array of sine waves for given number of oscillations.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.03.2015 19:38:39
+   * @param samplingRate should be great than 2 and likely to be of 2^p | p E N
+   * @param noOfOscillations should be of natural numbers except zero
+   * @return sampled array keeping a number of sine waves
+   */
+  public static double[] createSineOscillation(int samplingRate, int noOfOscillations) {
+
+    if (samplingRate < 1) samplingRate = 2;
+
+    if (noOfOscillations < 1) noOfOscillations = 1;
+
+    double[] arrTime = new double[samplingRate];
+
+    for (int i = 0; i < samplingRate; i++) {
+      double arg = 2. * Math.PI * (double) i / (double) samplingRate * (double) noOfOscillations;
+      double sine = Math.sin(arg);
+      arrTime[i] = sine;
+    } // i
+
+    return arrTime;
+  } // createSineOscillation
+
+  /**
+   * Returns a sampled array of cosine waves for given number of oscillations.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.03.2015 19:41:16
+   * @param samplingRate should be great than 2 and likely to be of 2^p | p E N
+   * @param noOfOscillations should be of natural numbers except zero
+   * @return sampled array keeping a number of cosine waves
+   */
+  public static double[] createCosineOscillation(int samplingRate, int noOfOscillations) {
+
+    if (samplingRate < 1) samplingRate = 2;
+
+    if (noOfOscillations < 1) noOfOscillations = 1;
+
+    double[] arrTime = new double[samplingRate];
+
+    for (int i = 0; i < samplingRate; i++) {
+      double arg = 2. * Math.PI * (double) i / (double) samplingRate * (double) noOfOscillations;
+      double sine = Math.cos(arg);
+      arrTime[i] = sine;
+    } // i
+
+    return arrTime;
+  } // createCoSineOscillation
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/AncientEgyptianDecomposition.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/AncientEgyptianDecomposition.java
new file mode 100644
index 00000000000..c97ef47ef84
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/AncientEgyptianDecomposition.java
@@ -0,0 +1,173 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms;
+
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.tools.MathToolKit;
+
+/**
+ * A wavelet transform method for arrays and signals of arbitrary lengths, even odd lengths. The
+ * array is decomposed in several parts of optimal lengths by applying the ancient Egyptian
+ * decomposition. Hereby, the array or signal is decomposed to the largest possible sub arrays of
+ * two the power of p. Afterwards each sub array is transformed forward and copied back to the
+ * discrete position of the input array. The reverse transform applies the same vice versa. In more
+ * detail the ancient Egyptian Multiplication can be easily explained by the following example: 42 =
+ * 2^5 + 2^3 + 2^1 = 32 + 8 + 2. However, an array or signal of odd length produces the smallest
+ * ancient Egyptian multiplier 2^0 which is actually 1. Therefore, the matching sub array or signal
+ * is untouched an the coefficient is actually the wavelet coefficient of wavelet space of level 0.
+ * For an "orthonormal" wavelet this holds. See:
+ * http://en.wikipedia.org/wiki/Ancient_Egyptian_multiplication
+ *
+ * @date 14.08.2010 10:43:28
+ * @author Christian (graetz23@gmail.com)
+ */
+public class AncientEgyptianDecomposition extends BasicTransform {
+
+  /**
+   * The selected Transform (FWT or WPT) used for the sub arrays of the ancient Egyptian
+   * decomposition. Actually, this displays somehow the Composite Pattern of software design
+   * pattern. See: http://en.wikipedia.org/wiki/Composite_pattern#Java
+   */
+  protected BasicTransform _basicTransform;
+
+  /**
+   * the base block size for spitting an array; e. g. 127 with block size of 32 ends up as: 32 | 32
+   * | 32 | 16 | 8 | 4 | 2 | 1.
+   */
+  @SuppressWarnings("unused")
+  private int _initialWaveletSpaceSize;
+
+  /**
+   * Constructor taking the
+   *
+   * @date 14.08.2010 10:43:28
+   * @author Christian (graetz23@gmail.com)
+   */
+  public AncientEgyptianDecomposition(BasicTransform basicTransform) {
+
+    _basicTransform = basicTransform;
+
+    _initialWaveletSpaceSize = 0;
+  } // FastBasicTransformArbitrary
+
+  public AncientEgyptianDecomposition(BasicTransform waveTransform, int initialWaveletSpaceSize) {
+
+    _basicTransform = waveTransform;
+
+    _initialWaveletSpaceSize = initialWaveletSpaceSize;
+  } // AncientEgyptianDecomposition
+
+  /**
+   * This forward method decomposes the given array of arbitrary length to sub arrays while applying
+   * the ancient Egyptian decomposition. Each sub array is transformed by the selected basic
+   * transform and the resulting wavelet coefficients are copied back to their original discrete
+   * positions.
+   *
+   * @date 14.08.2010 10:43:28
+   * @author Christian (graetz23@gmail.com)
+   * @throws JWaveException
+   * @see jwave.transforms.BasicTransform#forward(double[])
+   */
+  @Override
+  public double[] forward(double[] arrTime) throws JWaveException {
+
+    double[] arrHilb = new double[arrTime.length];
+
+    int[] ancientEgyptianMultipliers = null;
+
+    ancientEgyptianMultipliers = MathToolKit.decompose(arrTime.length);
+
+    int offSet = 0;
+    for (int m = 0; m < ancientEgyptianMultipliers.length; m++) {
+
+      int ancientEgyptianMultiplier = ancientEgyptianMultipliers[m];
+
+      int arrTimeSubLength = (int) MathToolKit.scalb(1., ancientEgyptianMultiplier);
+
+      double[] arrTimeSub = new double[arrTimeSubLength];
+
+      for (int i = 0; i < arrTimeSub.length; i++) {
+        arrTimeSub[i] = arrTime[i + offSet];
+      }
+
+      double[] arrHilbSub = _basicTransform.forward(arrTimeSub);
+
+      for (int i = 0; i < arrHilbSub.length; i++) {
+        arrHilb[i + offSet] = arrHilbSub[i];
+      }
+
+      offSet += arrHilbSub.length;
+    } // m - no of sub transforms
+
+    return arrHilb;
+  } // forward
+
+  /**
+   * This reverse method awaits an array of arbitrary length in wavelet space keeping the wavelet
+   * already decomposed by the ancient Egyptian decomposition. Therefore, each of the existing sub
+   * arrays of length 2^p is reverse transformed by the selected basic transform and the resulting
+   * coefficients of time domain are copied back to their original discrete positions.
+   *
+   * @date 14.08.2010 10:43:28
+   * @author Christian (graetz23@gmail.com)
+   * @throws JWaveException
+   * @see jwave.transforms.BasicTransform#reverse(double[])
+   */
+  @Override
+  public double[] reverse(double[] arrHilb) throws JWaveException {
+
+    double[] arrTime = new double[arrHilb.length];
+
+    int[] ancientEgyptianMultipliers = null;
+    try {
+
+      ancientEgyptianMultipliers = MathToolKit.decompose(arrHilb.length);
+
+    } catch (JWaveException e) {
+
+      e.printStackTrace();
+    }
+
+    int offSet = 0;
+    for (int m = 0; m < ancientEgyptianMultipliers.length; m++) {
+
+      int ancientEgyptianMultiplier = ancientEgyptianMultipliers[m];
+
+      int arrHilbSubLength = (int) MathToolKit.scalb(1., ancientEgyptianMultiplier);
+
+      double[] arrHilbSub = new double[arrHilbSubLength];
+
+      for (int i = 0; i < arrHilbSub.length; i++) {
+        arrHilbSub[i] = arrHilb[i + offSet];
+      }
+
+      double[] arrTimeSub = _basicTransform.reverse(arrHilbSub);
+
+      for (int i = 0; i < arrTimeSub.length; i++) {
+        arrTime[i + offSet] = arrTimeSub[i];
+      }
+
+      offSet += arrHilbSub.length;
+    } // m - no of sub transforms
+
+    return arrTime;
+  } // reverse
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/BasicTransform.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/BasicTransform.java
new file mode 100644
index 00000000000..3201f193ab3
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/BasicTransform.java
@@ -0,0 +1,596 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms;
+
+import org.apache.iotdb.db.query.simpiece.jwave.datatypes.natives.Complex;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveError;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailure;
+import org.apache.iotdb.db.query.simpiece.jwave.tools.MathToolKit;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Basic Wave for transformations like Fast Fourier Transform (FFT), Fast Wavelet Transform (FWT),
+ * Fast Wavelet Packet Transform (WPT), or Discrete Wavelet Transform (DWT). Naming of this class
+ * due to en.wikipedia.org; to write Fourier series in terms of the 'basic waves' of function:
+ * e^(2*pi*i*w).
+ *
+ * @date 08.02.2010 11:11:59
+ * @author Christian (graetz23@gmail.com)
+ */
+public abstract class BasicTransform {
+
+  /**
+   * String identifier of the current Transform object.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.03.2015 14:25:56
+   */
+  protected String _name;
+
+  /**
+   * @author Christian (graetz23@gmail.com)
+   * @date 19.02.2014 18:38:21
+   */
+  public BasicTransform() {
+
+    _name = null;
+  } // BasicTransform
+
+  /**
+   * Returns String identifier of current type of BasicTransform Object.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.03.2015 18:13:34
+   * @return identifier as String
+   */
+  public String getName() {
+    return _name;
+  } // getName
+
+  /**
+   * Returns the stored Wavelet object or null pointer.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.03.2015 18:26:44
+   * @return object of type Wavelet of null pointer
+   * @throws JWaveFailure if Wavelet object is not available
+   */
+  public Wavelet getWavelet() throws JWaveFailure {
+    throw new JWaveFailure("BasicTransform#getWavelet - not available");
+  } // getWavelet
+
+  /**
+   * Performs the forward transform from time domain to frequency or Hilbert domain for a given
+   * array depending on the used transform algorithm by inheritance.
+   *
+   * @date 10.02.2010 08:23:24
+   * @author Christian (graetz23@gmail.com)
+   * @param arrTime coefficients of 1-D time domain
+   * @return coefficients of 1-D frequency or Hilbert space
+   * @throws JWaveException
+   */
+  public abstract double[] forward(double[] arrTime) throws JWaveException;
+
+  /**
+   * Performs the reverse transform from frequency or Hilbert domain to time domain for a given
+   * array depending on the used transform algorithm by inheritance.
+   *
+   * @date 10.02.2010 08:23:24
+   * @author Christian (graetz23@gmail.com)
+   * @param arrFreq coefficients of 1-D frequency or Hilbert domain
+   * @return coefficients of time series of 1-D frequency or Hilbert space
+   * @throws JWaveException
+   */
+  public abstract double[] reverse(double[] arrFreq) throws JWaveException;
+
+  /**
+   * Performs the forward transform from time domain to Hilbert domain of a given level depending on
+   * the used transform algorithm by inheritance.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 11:33:11
+   * @param arrTime
+   * @param level the level of Hilbert space; energy & detail coefficients
+   * @return array keeping Hilbert space of requested level
+   * @throws JWaveException if given array is not of type 2^p | p E N or given level does not match
+   *     the possibilities of given array.
+   */
+  public double[] forward(double[] arrTime, int level) throws JWaveException {
+
+    throw new JWaveError(
+        "BasicTransform#forward - " + "method is not implemented for this transform type!");
+  } // forward
+
+  /**
+   * Performs the reverse transform from Hilbert domain of a given level to time domain depending on
+   * the used transform algorithm by inheritance.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 11:34:27
+   * @param arrFreq
+   * @param level the level of Hilbert space; energy & detail coefficients
+   * @return array keeping Hilbert space of requested level
+   * @throws JWaveException if given array is not of type 2^p | p E N or given level does not match
+   *     the possibilities of given array.
+   */
+  public double[] reverse(double[] arrFreq, int level) throws JWaveException {
+
+    throw new JWaveError(
+        "BasicTransform#reverse - " + "method is not implemented for this transform type!");
+  } // reverse
+
+  /**
+   * Generates from a 2-D decomposition a 1-D time series.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 17.08.2014 10:07:19
+   * @param matDeComp 2-D Hilbert spaces: [ 0 .. p ][ 0 .. N ] where p is the exponent of N=2^p
+   * @return a 1-D time domain signal
+   * @throws JWaveException
+   */
+  public double[][] decompose(double[] arrTime) throws JWaveException {
+
+    throw new JWaveError(
+        "BasicTransform#decompose - " + "method is not implemented for this transform type!");
+  } // decompose
+
+  /**
+   * Generates from a 1-D signal a 2-D output, where the second dimension are the levels of the
+   * wavelet transform. The first level should keep the original coefficients. All following levels
+   * should keep each step of the decomposition of the Fast Wavelet Transform. However, each level
+   * of the this decomposition matrix is having the full set, full energy and full details, that are
+   * needed to do a full reconstruction. So one can select a level filter it and then do
+   * reconstruction only from this single line! BY THIS METHOD, THE _HIGHEST_ LEVEL IS _ALWAYS_
+   * TAKEN FOR RECONSTRUCTION!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 17.08.2014 10:07:19
+   * @param matDeComp 2-D Hilbert spaces: [ 0 .. p ][ 0 .. M ] where p is the exponent of M=2^p |
+   *     pEN
+   * @return a 1-D time domain signal
+   */
+  public double[] recompose(double[][] matDeComp) throws JWaveException {
+
+    // Each level of the matrix is having the full set (full energy + details)
+    // of decomposition. Therefore, each level can be used to do a full reconstruction,
+    int level = matDeComp.length - 1; // selected highest level in general.
+    double[] arrTime = null;
+    try {
+      arrTime = recompose(matDeComp, level);
+    } catch (JWaveFailure e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+
+    return arrTime;
+  } // recompose
+
+  /**
+   * Generates from a 1-D signal a 2-D output, where the second dimension are the levels of the
+   * wavelet transform. The first level should keep the original coefficients. All following levels
+   * should keep each step of the decomposition of the Fast Wavelet Transform. However, each level
+   * of the this decomposition matrix is having the full set, full energy and full details, that are
+   * needed to do a full reconstruction. So one can select a level filter it and then do
+   * reconstruction only from this single line!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 15:12:19
+   * @param matDeComp 2-D Hilbert spaces: [ 0 .. p ][ 0 .. M ] where p is the exponent of M=2^p |
+   *     pEN
+   * @param level the level that should be used for reconstruction
+   * @return the reconstructed time series of a selected level
+   * @throws JWaveException
+   */
+  public double[] recompose(double[][] matDeComp, int level) throws JWaveException {
+
+    double[] arrTime = null;
+    try {
+      arrTime = recompose(matDeComp, level);
+    } catch (JWaveFailure e) {
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+
+    return arrTime;
+  } // recompose
+
+  /**
+   * Performs the forward transform from time domain to frequency or Hilbert domain for a given
+   * array depending on the used transform algorithm by inheritance.
+   *
+   * @date 16.02.2014 14:42:57
+   * @author Christian (graetz23@gmail.com)
+   * @param arrTime coefficients of 1-D time domain
+   * @return coefficients of 1-D frequency or Hilbert domain
+   * @throws JWaveException
+   */
+  public Complex[] forward(Complex[] arrTime) throws JWaveException {
+
+    double[] arrTimeBulk = new double[2 * arrTime.length];
+
+    for (int i = 0; i < arrTime.length; i++) {
+
+      // TODO rehack complex number splitting this to: { r1, r2, r3, .., c1, c2, c3, .. }
+      int k = i * 2;
+      arrTimeBulk[k] = arrTime[i].getReal();
+      arrTimeBulk[k + 1] = arrTime[i].getImag();
+    } // i blown to k = 2 * i
+
+    double[] arrHilbBulk = forward(arrTimeBulk);
+
+    Complex[] arrHilb = new Complex[arrTime.length];
+
+    for (int i = 0; i < arrTime.length; i++) {
+
+      int k = i * 2;
+      arrHilb[i] = new Complex(arrHilbBulk[k], arrHilbBulk[k + 1]);
+    } // k = 2 * i shrink to i
+
+    return arrHilb;
+  } // forward
+
+  /**
+   * Performs the reverse transform from frequency or Hilbert domain to time domain for a given
+   * array depending on the used transform algorithm by inheritance.
+   *
+   * @date 16.02.2014 14:42:57
+   * @author Christian (graetz23@gmail.com)
+   * @param arrFreq coefficients of 1-D frequency or Hilbert domain
+   * @return coefficients of 1-D time domain
+   * @throws JWaveException
+   */
+  public Complex[] reverse(Complex[] arrHilb) throws JWaveException {
+
+    double[] arrHilbBulk = new double[2 * arrHilb.length];
+
+    for (int i = 0; i < arrHilb.length; i++) {
+
+      int k = i * 2;
+      arrHilbBulk[k] = arrHilb[i].getReal();
+      arrHilbBulk[k + 1] = arrHilb[i].getImag();
+    } // i blown to k = 2 * i
+
+    double[] arrTimeBulk = reverse(arrHilbBulk);
+
+    Complex[] arrTime = new Complex[arrHilb.length];
+
+    for (int i = 0; i < arrTime.length; i++) {
+
+      int k = i * 2;
+      arrTime[i] = new Complex(arrTimeBulk[k], arrTimeBulk[k + 1]);
+    } // k = 2 * i shrink to i
+
+    return arrTime;
+  } // reverse
+
+  /**
+   * Performs the 2-D forward transform from time domain to frequency or Hilbert domain for a given
+   * matrix depending on the used transform algorithm by inheritance.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 12:47:01
+   * @param matTime
+   * @return
+   * @throws JWaveException if matrix id not of matching dimension like 2^p | pEN
+   */
+  public double[][] forward(double[][] matTime) throws JWaveException {
+
+    int maxM = MathToolKit.getExponent(matTime.length);
+    int maxN = MathToolKit.getExponent(matTime[0].length);
+    return forward(matTime, maxM, maxN);
+  } // forward
+
+  /**
+   * Performs the 2-D forward transform from time domain to frequency or Hilbert domain of a certain
+   * level for a given matrix depending on the used transform algorithm by inheritance. The
+   * supported level has to match the possible dimensions of the given matrix.
+   *
+   * @date 10.02.2010 11:00:29
+   * @author Christian (graetz23@gmail.com)
+   * @param matTime coefficients of 2-D time domain
+   * @param lvlM level to stop in dimension M of the matrix
+   * @param lvlN level to stop in dimension N of the matrix
+   * @return coefficients of 2-D frequency or Hilbert domain
+   * @throws JWaveException
+   */
+  public double[][] forward(double[][] matTime, int lvlM, int lvlN) throws JWaveException {
+
+    int noOfRows = matTime.length;
+    int noOfCols = matTime[0].length;
+
+    double[][] matHilb = new double[noOfRows][noOfCols];
+
+    for (int i = 0; i < noOfRows; i++) {
+
+      double[] arrTime = new double[noOfCols];
+
+      for (int j = 0; j < noOfCols; j++) arrTime[j] = matTime[i][j];
+
+      double[] arrHilb = forward(arrTime, lvlN);
+
+      for (int j = 0; j < noOfCols; j++) matHilb[i][j] = arrHilb[j];
+    } // rows
+
+    for (int j = 0; j < noOfCols; j++) {
+
+      double[] arrTime = new double[noOfRows];
+
+      for (int i = 0; i < noOfRows; i++) arrTime[i] = matHilb[i][j];
+
+      double[] arrHilb = forward(arrTime, lvlM);
+
+      for (int i = 0; i < noOfRows; i++) matHilb[i][j] = arrHilb[i];
+    } // cols
+
+    return matHilb;
+  } // forward
+
+  /**
+   * Performs the 2-D reverse transform from frequency or Hilbert or time domain to time domain for
+   * a given matrix depending on the used transform algorithm by inheritance.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 10.02.2010 11:01:38
+   * @param matFreq
+   * @return
+   * @throws JWaveException
+   */
+  public double[][] reverse(double[][] matFreq) throws JWaveException {
+
+    int maxM = MathToolKit.getExponent(matFreq.length);
+    int maxN = MathToolKit.getExponent(matFreq[0].length);
+    return reverse(matFreq, maxM, maxN);
+  } // reverse
+
+  /**
+   * Performs the 2-D reverse transform from frequency or Hilbert or time domain to time domain of a
+   * certain level for a given matrix depending on the used transform algorithm by inheritance.
+   *
+   * @date 22.03.2015 12:49:16
+   * @author Christian (graetz23@gmail.com)
+   * @param matFreq coefficients of 2-D frequency or Hilbert domain
+   * @param lvlM level to start reconstruction for dimension M of the matrix
+   * @param lvlN level to start reconstruction for dimension N of the matrix
+   * @return coefficients of 2-D time domain
+   * @throws JWaveException
+   */
+  public double[][] reverse(double[][] matFreq, int lvlM, int lvlN) throws JWaveException {
+
+    int noOfRows = matFreq.length;
+    int noOfCols = matFreq[0].length;
+
+    double[][] matTime = new double[noOfRows][noOfCols];
+
+    for (int j = 0; j < noOfCols; j++) {
+
+      double[] arrFreq = new double[noOfRows];
+
+      for (int i = 0; i < noOfRows; i++) arrFreq[i] = matFreq[i][j];
+
+      double[] arrTime = reverse(arrFreq, lvlM); // AED
+
+      for (int i = 0; i < noOfRows; i++) matTime[i][j] = arrTime[i];
+    } // cols
+
+    for (int i = 0; i < noOfRows; i++) {
+
+      double[] arrFreq = new double[noOfCols];
+
+      for (int j = 0; j < noOfCols; j++) arrFreq[j] = matTime[i][j];
+
+      double[] arrTime = reverse(arrFreq, lvlN); // AED
+
+      for (int j = 0; j < noOfCols; j++) matTime[i][j] = arrTime[j];
+    } // rows
+
+    return matTime;
+  } // reverse
+
+  /**
+   * Performs the 3-D forward transform from time domain to frequency or Hilbert domain for a given
+   * space (3-D) depending on the used transform algorithm by inheritance.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 10.07.2010 18:08:17
+   * @param spcTime
+   * @return
+   * @throws JWaveException
+   */
+  public double[][][] forward(double[][][] spcTime) throws JWaveException {
+
+    int maxP = MathToolKit.getExponent(spcTime.length);
+    int maxQ = MathToolKit.getExponent(spcTime[0].length);
+    int maxR = MathToolKit.getExponent(spcTime[0][0].length);
+    return forward(spcTime, maxP, maxQ, maxR);
+  } // forward
+
+  /**
+   * Performs the 3-D forward transform from time domain to frequency or Hilbert domain of a certain
+   * level for a given space (3-D) depending on the used transform algorithm by inheritance.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 12:58:34
+   * @param spcTime coefficients of 3-D time domain domain
+   * @return coefficients of 3-D frequency or Hilbert domain
+   * @throws JWaveException
+   */
+  public double[][][] forward(double[][][] spcTime, int lvlP, int lvlQ, int lvlR)
+      throws JWaveException {
+
+    int noOfRows = spcTime.length; // first dimension
+    int noOfCols = spcTime[0].length; // second dimension
+    int noOfHigh = spcTime[0][0].length; // third dimension
+
+    double[][][] spcHilb = new double[noOfRows][noOfCols][noOfHigh];
+
+    for (int i = 0; i < noOfRows; i++) {
+
+      double[][] matTime = new double[noOfCols][noOfHigh];
+
+      for (int j = 0; j < noOfCols; j++) {
+
+        for (int k = 0; k < noOfHigh; k++) {
+
+          matTime[j][k] = spcTime[i][j][k];
+        } // high
+      } // cols
+
+      double[][] matHilb = forward(matTime, lvlP, lvlQ); // 2-D forward
+
+      for (int j = 0; j < noOfCols; j++) {
+
+        for (int k = 0; k < noOfHigh; k++) {
+
+          spcHilb[i][j][k] = matHilb[j][k];
+        } // high
+      } // cols
+    } // rows
+
+    for (int j = 0; j < noOfCols; j++) {
+
+      for (int k = 0; k < noOfHigh; k++) {
+
+        double[] arrTime = new double[noOfRows];
+
+        for (int i = 0; i < noOfRows; i++) arrTime[i] = spcHilb[i][j][k];
+
+        double[] arrHilb = forward(arrTime, lvlR); // 1-D forward
+
+        for (int i = 0; i < noOfRows; i++) spcHilb[i][j][k] = arrHilb[i];
+      } // high
+    } // cols
+
+    return spcHilb;
+  } // forward
+
+  /**
+   * Performs the 3-D reverse transform from frequency or Hilbert domain to time domain for a given
+   * space (3-D) depending on the used transform algorithm by inheritance.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 10.07.2010 18:09:54
+   * @param spcHilb
+   * @return
+   * @throws JWaveException
+   */
+  public double[][][] reverse(double[][][] spcHilb) throws JWaveException {
+
+    int maxP = MathToolKit.getExponent(spcHilb.length);
+    int maxQ = MathToolKit.getExponent(spcHilb[0].length);
+    int maxR = MathToolKit.getExponent(spcHilb[0][0].length);
+    return reverse(spcHilb, maxP, maxQ, maxR);
+  } // reverse
+
+  /**
+   * Performs the 3-D reverse transform from frequency or Hilbert domain of a certain level to time
+   * domain for a given space (3-D) depending on the used transform algorithm by inheritance. The
+   * supported coefficients have to match the level of Hilbert space.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 13:01:47
+   * @param spcHilb coefficients of 3-D frequency or Hilbert domain
+   * @return coefficients of 3-D time domain
+   * @throws JWaveException
+   */
+  public double[][][] reverse(double[][][] spcHilb, int lvlP, int lvlQ, int lvlR)
+      throws JWaveException {
+
+    int noOfRows = spcHilb.length; // first dimension
+    int noOfCols = spcHilb[0].length; // second dimension
+    int noOfHigh = spcHilb[0][0].length; // third dimension
+
+    double[][][] spcTime = new double[noOfRows][noOfCols][noOfHigh];
+
+    for (int i = 0; i < noOfRows; i++) {
+
+      double[][] matHilb = new double[noOfCols][noOfHigh];
+
+      for (int j = 0; j < noOfCols; j++) {
+
+        for (int k = 0; k < noOfHigh; k++) {
+
+          matHilb[j][k] = spcHilb[i][j][k];
+        } // high
+      } // cols
+
+      double[][] matTime = reverse(matHilb, lvlP, lvlQ); // 2-D reverse
+
+      for (int j = 0; j < noOfCols; j++) {
+
+        for (int k = 0; k < noOfHigh; k++) {
+
+          spcTime[i][j][k] = matTime[j][k];
+        } // high
+      } // cols
+    } // rows
+
+    for (int j = 0; j < noOfCols; j++) {
+
+      for (int k = 0; k < noOfHigh; k++) {
+
+        double[] arrHilb = new double[noOfRows];
+
+        for (int i = 0; i < noOfRows; i++) arrHilb[i] = spcTime[i][j][k];
+
+        double[] arrTime = reverse(arrHilb, lvlR); // 1-D reverse
+
+        for (int i = 0; i < noOfRows; i++) spcTime[i][j][k] = arrTime[i];
+      } // high
+    } // cols
+
+    return spcTime;
+  } // reverse
+
+  /**
+   * Returns true if given integer is of type binary (2, 4, 8, 16, ..) else the method returns
+   * false.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 13:31:39
+   * @param number an integer of type 2, 4, 8, 16, 32, 64, ...
+   * @return true if number is a binary number else false
+   */
+  protected boolean isBinary(int number) {
+
+    return MathToolKit.isBinary(number); // use MathToolKit or implement
+  } // isBinary
+
+  /**
+   * Return the exponent of a binary a number
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 13:35:50
+   * @param number any integer that fulfills 2^p | pEN
+   * @return p as number = 2^p | pEN
+   * @throws JWaveException if given number is not a binary number
+   */
+  protected int calcExponent(int number) throws JWaveException {
+
+    if (!isBinary(number))
+      throw new JWaveFailure(
+          "BasicTransform#calcExponent - "
+              + "given number is not binary: "
+              + "2^p | pEN .. = 1, 2, 4, 8, 16, 32, .. ");
+
+    return (int) (MathToolKit.getExponent((int) (number))); // use MathToolKit or implement
+  } // calcExponent
+} // BasicTransform
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/DiscreteFourierTransform.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/DiscreteFourierTransform.java
new file mode 100644
index 00000000000..ab9012dab4b
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/DiscreteFourierTransform.java
@@ -0,0 +1,266 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms;
+
+/**
+ * The Discrete Fourier Transform (DFT) is - as the name says - the discrete version of the Fourier
+ * Transform applied to a discrete complex valued series. While the DFT can be applied to any
+ * complex valued series; of any length, in practice for large series it can take considerable time
+ * to compute, while the time taken being proportional to the square of the number on points in the
+ * series.
+ *
+ * @date 25.03.2010 19:56:29
+ * @author Christian (graetz23@gmail.com)
+ */
+import org.apache.iotdb.db.query.simpiece.jwave.datatypes.natives.Complex;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailure;
+
+/**
+ * Discrete Fast Fourier Transform (dFFT)
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 14.03.2015 18:30:35
+ */
+public class DiscreteFourierTransform extends BasicTransform {
+
+  /**
+   * Constructor; does nothing
+   *
+   * @date 25.03.2010 19:56:29
+   * @author Christian (graetz23@gmail.com)
+   */
+  public DiscreteFourierTransform() {
+
+    _name = "Discrete Fourier Transform";
+  } // DiscreteFourierTransform
+
+  /**
+   * The 1-D forward version of the Discrete Fourier Transform (DFT); The input array arrTime is
+   * organized by real and imaginary parts of a complex number using even and odd places for the
+   * index. For example: arrTime[ 0 ] = real1, arrTime[ 1 ] = imag1, arrTime[ 2 ] = real2, arrTime[
+   * 3 ] = imag2, ... The output arrFreq is organized by the same scheme.
+   *
+   * @date 25.03.2010 19:56:29
+   * @author Christian (graetz23@gmail.com)
+   * @throws JWaveException
+   * @see jwave.transforms.BasicTransform#forward(double[])
+   */
+  @Override
+  public double[] forward(double[] arrTime) throws JWaveException {
+
+    if (!isBinary(arrTime.length))
+      throw new JWaveFailure(
+          "DiscreteFourierTransform#forward - "
+              + "given array length is not 2^p | p E N "
+              + "... = 1, 2, 4, 8, 16, 32, .. "
+              + "please use the Ancient Egyptian "
+              + "Decomposition for any other array length!");
+
+    int m = arrTime.length;
+    double[] arrFreq = new double[m]; // result
+
+    int n = m >> 1; // half of m
+
+    for (int i = 0; i < n; i++) {
+
+      int iR = i * 2;
+      int iC = i * 2 + 1;
+
+      arrFreq[iR] = 0.;
+      arrFreq[iC] = 0.;
+
+      double arg = -2. * Math.PI * (double) i / (double) n;
+
+      for (int k = 0; k < n; k++) {
+
+        int kR = k * 2;
+        int kC = k * 2 + 1;
+
+        double cos = Math.cos(k * arg);
+        double sin = Math.sin(k * arg);
+
+        arrFreq[iR] += arrTime[kR] * cos - arrTime[kC] * sin;
+        arrFreq[iC] += arrTime[kR] * sin + arrTime[kC] * cos;
+      } // k
+
+      arrFreq[iR] /= (double) n;
+      arrFreq[iC] /= (double) n;
+    } // i
+
+    return arrFreq;
+  } // forward
+
+  /**
+   * The 1-D reverse version of the Discrete Fourier Transform (DFT); The input array arrFreq is
+   * organized by real and imaginary parts of a complex number using even and odd places for the
+   * index. For example: arrTime[ 0 ] = real1, arrTime[ 1 ] = imag1, arrTime[ 2 ] = real2, arrTime[
+   * 3 ] = imag2, ... The output arrTime is organized by the same scheme.
+   *
+   * @date 25.03.2010 19:56:29
+   * @author Christian (graetz23@gmail.com)
+   * @throws JWaveException
+   * @see jwave.transforms.BasicTransform#reverse(double[])
+   */
+  @Override
+  public double[] reverse(double[] arrFreq) throws JWaveException {
+
+    if (!isBinary(arrFreq.length))
+      throw new JWaveFailure(
+          "DiscreteFourierTransform#reverse - "
+              + "given array length is not 2^p | p E N "
+              + "... = 1, 2, 4, 8, 16, 32, .. "
+              + "please use the Ancient Egyptian "
+              + "Decomposition for any other array length!");
+
+    int m = arrFreq.length;
+    double[] arrTime = new double[m]; // result
+
+    int n = m >> 1; // half of m
+
+    for (int i = 0; i < n; i++) {
+
+      int iR = i * 2;
+      int iC = i * 2 + 1;
+
+      arrTime[iR] = 0.;
+      arrTime[iC] = 0.;
+
+      double arg = 2. * Math.PI * (double) i / (double) n;
+
+      for (int k = 0; k < n; k++) {
+
+        int kR = k * 2;
+        int kC = k * 2 + 1;
+
+        double cos = Math.cos(k * arg);
+        double sin = Math.sin(k * arg);
+
+        arrTime[iR] += arrFreq[kR] * cos - arrFreq[kC] * sin;
+        arrTime[iC] += arrFreq[kR] * sin + arrFreq[kC] * cos;
+      } // k
+    } // i
+
+    return arrTime;
+  } // reverse
+
+  /*
+   * ATTENTION - yet no level implemented; it is ognored!
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 21:18:34 (non-Javadoc)
+   * @see jwave.transforms.BasicTransform#forward(double[], int)
+   */
+  @Override
+  public double[] forward(double[] arrTime, int level) throws JWaveException {
+
+    return forward(arrTime);
+  } // forward
+
+  /*
+   * ATTENTION - yet no level implemented; it is ognored!
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.05.2015 21:18:34 (non-Javadoc)
+   * @see jwave.transforms.BasicTransform#reverse(double[], int)
+   */
+  @Override
+  public double[] reverse(double[] arrFreq, int level) throws JWaveException {
+
+    return reverse(arrFreq);
+  } // reverse
+
+  /**
+   * The 1-D forward version of the Discrete Fourier Transform (DFT); The input array arrTime is
+   * organized by a class called Complex keeping real and imaginary part of a complex number. The
+   * output arrFreq is organized by the same scheme.
+   *
+   * @date 23.11.2010 18:57:34
+   * @author Christian (graetz23@gmail.com)
+   * @param arrTime array of type Complex keeping coefficients of complex numbers
+   * @return array of type Complex keeping the discrete fourier transform coefficients
+   */
+  public Complex[] forward(Complex[] arrTime) {
+
+    int n = arrTime.length;
+
+    Complex[] arrFreq = new Complex[n]; // result
+
+    for (int i = 0; i < n; i++) {
+
+      arrFreq[i] = new Complex(); // 0. , 0.
+
+      double arg = -2. * Math.PI * (double) i / (double) n;
+
+      for (int k = 0; k < n; k++) {
+
+        double cos = Math.cos(k * arg);
+        double sin = Math.sin(k * arg);
+
+        double real = arrTime[k].getReal();
+        double imag = arrTime[k].getImag();
+
+        arrFreq[i].addReal(real * cos - imag * sin);
+        arrFreq[i].addImag(real * sin + imag * cos);
+      } // k
+
+      arrFreq[i].mulReal(1. / (double) n);
+      arrFreq[i].mulImag(1. / (double) n);
+    } // i
+
+    return arrFreq;
+  } // forward
+
+  /**
+   * The 1-D reverse version of the Discrete Fourier Transform (DFT); The input array arrFreq is
+   * organized by a class called Complex keeping real and imaginary part of a complex number. The
+   * output arrTime is organized by the same scheme.
+   *
+   * @date 23.11.2010 19:02:12
+   * @author Christian (graetz23@gmail.com)
+   * @param arrFreq array of type Complex keeping the discrete fourier transform coefficients
+   * @return array of type Complex keeping coefficients of tiem domain
+   */
+  public Complex[] reverse(Complex[] arrFreq) {
+
+    int n = arrFreq.length;
+    Complex[] arrTime = new Complex[n]; // result
+
+    for (int i = 0; i < n; i++) {
+
+      arrTime[i] = new Complex(); // 0. , 0.
+
+      double arg = 2. * Math.PI * (double) i / (double) n;
+
+      for (int k = 0; k < n; k++) {
+
+        double cos = Math.cos(k * arg);
+        double sin = Math.sin(k * arg);
+
+        double real = arrFreq[k].getReal();
+        double imag = arrFreq[k].getImag();
+
+        arrTime[i].addReal(real * cos - imag * sin);
+        arrTime[i].addImag(real * sin + imag * cos);
+      } // k
+    } // i
+
+    return arrTime;
+  } // reverse
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/FastWaveletTransform.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/FastWaveletTransform.java
new file mode 100644
index 00000000000..3614c79cac5
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/FastWaveletTransform.java
@@ -0,0 +1,141 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms;
+
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailure;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+import java.util.Arrays;
+
+/**
+ * Base class for - stepping - forward and reverse methods, due to one kind of a Fast Wavelet
+ * Transform (FWD) in 1-D using a specific Wavelet.
+ *
+ * @date 10.02.2010 08:10:42
+ * @author Christian (graetz23@gmail.com)
+ */
+public class FastWaveletTransform extends WaveletTransform {
+
+  /**
+   * Constructor receiving a Wavelet object and setting identifier of transform.
+   *
+   * @date 10.02.2010 08:10:42
+   * @author Christian (graetz23@gmail.com)
+   * @param wavelet object of type Wavelet
+   */
+  public FastWaveletTransform(Wavelet wavelet) {
+
+    super(wavelet);
+    _name = "Fast Wavelet Transform"; // set identifier of transform; keep constant
+  } // FastWaveletTransform
+
+  /**
+   * Performs a 1-D forward transform from time domain to Hilbert domain using one kind of a Fast
+   * Wavelet Transform (FWT) algorithm for a given array of dimension (length) 2^p | pEN; N = 2, 4,
+   * 8, 16, 32, 64, 128, .., and so on. However, the algorithms stops for a supported level that has
+   * be in the range 0, .., p of the dimension of the input array; 0 is the time series itself and p
+   * is the maximal number of possible levels.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 11:58:37
+   * @throws JWaveException if given array is not of length 2^p | pEN or given level does not match
+   *     the supported domain (array)
+   * @see jwave.transforms.BasicTransform#forward(double[], int)
+   */
+  @Override
+  public double[] forward(double[] arrTime, int level) throws JWaveException {
+
+    if (!isBinary(arrTime.length))
+      throw new JWaveFailure(
+          "FastWaveletTransform#forward - "
+              + "given array length is not 2^p | p E N ... = 1, 2, 4, 8, 16, 32, .. "
+              + "please use the Ancient Egyptian Decomposition for any other array length!");
+
+    int noOfLevels = calcExponent(arrTime.length);
+    if (level < 0 || level > noOfLevels)
+      throw new JWaveFailure(
+          "FastWaveletTransform#forward - " + "given level is out of range for given array");
+
+    double[] arrHilb = Arrays.copyOf(arrTime, arrTime.length);
+
+    int l = 0;
+    int h = arrHilb.length;
+    int transformWavelength = _wavelet.getTransformWavelength(); // normally 2
+    while (h >= transformWavelength && l < level) {
+
+      double[] arrTempPart = _wavelet.forward(arrHilb, h);
+      System.arraycopy(arrTempPart, 0, arrHilb, 0, h);
+      h = h >> 1;
+      l++;
+    } // levels
+
+    return arrHilb;
+  } // forward
+
+  /**
+   * Performs a 1-D reverse transform from Hilbert domain to time domain using one kind of a Fast
+   * Wavelet Transform (FWT) algorithm for a given array of dimension (length) 2^p | pEN; N = 2, 4,
+   * 8, 16, 32, 64, 128, .., and so on. However, the algorithms starts for at a supported level that
+   * has be in the range 0, .., p of the dimension of the input array; 0 is the time series itself
+   * and p is the maximal number of possible levels. The coefficients of the input array have to
+   * match to the supported level.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 12:00:10
+   * @throws JWaveException if given array is not of length 2^p | pEN or given level does not match
+   *     the supported domain (array)
+   * @see jwave.transforms.BasicTransform#reverse(double[], int)
+   */
+  @Override
+  public double[] reverse(double[] arrHilb, int level) throws JWaveException {
+
+    if (!isBinary(arrHilb.length))
+      throw new JWaveFailure(
+          "FastWaveletTransform#reverse - "
+              + "given array length is not 2^p | p E N ... = 1, 2, 4, 8, 16, 32, .. "
+              + "please use the Ancient Egyptian Decomposition for any other array length!");
+
+    int noOfLevels = calcExponent(arrHilb.length);
+    if (level < 0 || level > noOfLevels)
+      throw new JWaveFailure(
+          "FastWaveletTransform#reverse - " + "given level is out of range for given array");
+
+    int length = arrHilb.length; // length of first Hilbert space
+    double[] arrTime = Arrays.copyOf(arrHilb, length);
+
+    int transformWavelength = _wavelet.getTransformWavelength(); // normally 2
+    int h = transformWavelength;
+
+    int steps = calcExponent(length);
+    for (int l = level; l < steps; l++)
+      h = h << 1; // begin reverse transform at certain - matching - level of Hilbert space
+
+    while (h <= arrTime.length && h >= transformWavelength) {
+
+      double[] arrTempPart = _wavelet.reverse(arrTime, h);
+      System.arraycopy(arrTempPart, 0, arrTime, 0, h);
+      h = h << 1;
+    } // levels
+
+    return arrTime;
+  } // reverse
+} // FastWaveletTransfrom
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/ShiftingWaveletTransform.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/ShiftingWaveletTransform.java
new file mode 100644
index 00000000000..798cfc3b529
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/ShiftingWaveletTransform.java
@@ -0,0 +1,126 @@
+/**
+ * Shifting Wavelet Transform shifts a wavelet of smallest wavelength over the input array, then by
+ * the double wavelength, .., and so on.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 15.02.2016 23:12:55
+ *     <p>ShiftingWaveletTransform.java
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms;
+
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Shifting Wavelet Transform shifts a wavelet of smallest wavelength over the input array, then by
+ * the double wavelength, .., and so on.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 15.02.2016 23:12:55
+ */
+public class ShiftingWaveletTransform extends WaveletTransform {
+
+  /**
+   * Constructor taking Wavelet object for performing the transform.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 15.02.2016 23:12:55
+   */
+  public ShiftingWaveletTransform(Wavelet wavelet) {
+    super(wavelet);
+  } // ShiftingWaveletTransform
+
+  /**
+   * Forward method that uses strictly the abilities of an orthogonal transform.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 15.02.2016 23:12:55 (non-Javadoc)
+   * @see jwave.transforms.BasicTransform#forward(double[])
+   */
+  @Override
+  public double[] forward(double[] arrTime) throws JWaveException {
+
+    int length = arrTime.length;
+
+    int div = 2;
+    int odd = length % div; // if odd == 1 => steps * 2 + odd else steps * 2
+
+    double[] arrHilb = new double[length];
+    for (int i = 0; i < length; i++) arrHilb[i] = arrTime[i];
+
+    while (div <= length) {
+
+      int splits = length / div; // cuts the digits == round down to full
+
+      // doing smallest wavelength of div by no of steps
+
+      for (int s = 0; s < splits; s++) {
+
+        double[] arrDiv = new double[div];
+        double[] arrRes = null;
+
+        for (int p = 0; p < div; p++) arrDiv[p] = arrHilb[s * div + p];
+
+        arrRes = _wavelet.forward(arrDiv, div);
+
+        for (int q = 0; q < div; q++) arrHilb[s * div + q] = arrRes[q];
+      } // s
+
+      div *= 2;
+    } // while
+
+    if (odd == 1) arrHilb[length - 1] = arrTime[length - 1];
+
+    return arrHilb;
+  } // forward
+
+  /**
+   * Reverse method that uses strictly the abilities of an orthogonal transform.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 15.02.2016 23:12:55 (non-Javadoc)
+   * @see jwave.transforms.BasicTransform#reverse(double[])
+   */
+  @Override
+  public double[] reverse(double[] arrHilb) throws JWaveException {
+
+    int length = arrHilb.length;
+
+    int div = 0;
+    if (length % 2 == 0) div = length;
+    else {
+      div = length / 2; // 2 = 4.5 => 4
+      div *= 2; // 4 * 2 = 8
+    }
+
+    int odd = length % div; // if odd == 1 => steps * 2 + odd else steps * 2
+
+    double[] arrTime = new double[length];
+    for (int i = 0; i < length; i++) arrTime[i] = arrHilb[i];
+
+    while (div >= 2) {
+
+      int splits = length / div; // cuts the digits == round down to full
+
+      // doing smallest wavelength of div by no of steps
+
+      for (int s = 0; s < splits; s++) {
+
+        double[] arrDiv = new double[div];
+        double[] arrRes = null;
+
+        for (int p = 0; p < div; p++) arrDiv[p] = arrTime[s * div + p];
+
+        arrRes = _wavelet.reverse(arrDiv, div);
+
+        for (int q = 0; q < div; q++) arrTime[s * div + q] = arrRes[q];
+      } // s
+
+      div /= 2;
+    } // while
+
+    if (odd == 1) arrTime[length - 1] = arrHilb[length - 1];
+
+    return arrTime;
+  } // reverse
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/WaveletPacketTransform.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/WaveletPacketTransform.java
new file mode 100644
index 00000000000..750acea1826
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/WaveletPacketTransform.java
@@ -0,0 +1,171 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms;
+
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailure;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+import java.util.Arrays;
+
+/**
+ * Base class for - stepping - forward and reverse methods, due to one kind of a Fast Wavelet Packet
+ * Transform (WPT) or Wavelet Packet Decomposition (WPD) in 1-D using a specific Wavelet.
+ *
+ * @date 23.02.2010 13:44:05
+ * @author Christian (graetz23@gmail.com)
+ */
+public class WaveletPacketTransform extends WaveletTransform {
+
+  /**
+   * Constructor receiving a Wavelet object and setting identifier of transform.
+   *
+   * @date 23.02.2010 13:44:05
+   * @author Christian (graetz23@gmail.com)
+   * @param wavelet object of type Wavelet
+   */
+  public WaveletPacketTransform(Wavelet wavelet) {
+
+    super(wavelet);
+
+    _name = "Wavelet Packet Transform";
+  } // WaveletPacketTransform
+
+  /**
+   * Performs a 1-D forward transform from time domain to Hilbert domain using one kind of a Wavelet
+   * Packet Transform (WPT) algorithm for a given array of dimension (length) 2^p | pEN; N = 2, 4,
+   * 8, 16, 32, 64, 128, .., and so on. However, the algorithms stops for a supported level that has
+   * be in the range 0, .., p of the dimension of the input array; 0 is the time series itself and p
+   * is the maximal number of possible levels.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 12:35:15
+   * @throws JWaveException if givven array is not of length 2^p | pEN or the given level is out of
+   *     range for the supported Hilbert space (array).
+   * @see jwave.transforms.BasicTransform#forward(double[], int)
+   */
+  @Override
+  public double[] forward(double[] arrTime, int level) throws JWaveException {
+
+    if (!isBinary(arrTime.length))
+      throw new JWaveFailure(
+          "given array length is not 2^p | p E N ... = 1, 2, 4, 8, 16, 32, .. "
+              + "please use the Ancient Egyptian Decomposition for any other array length!");
+
+    int noOfLevels = calcExponent(arrTime.length);
+    if (level < 0 || level > noOfLevels)
+      throw new JWaveFailure(
+          "WaveletPacketTransform#forward - given level is out of range for given array");
+
+    double[] arrHilb = new double[arrTime.length];
+    for (int i = 0; i < arrTime.length; i++) arrHilb[i] = arrTime[i];
+
+    int k = arrTime.length;
+
+    int h = arrTime.length;
+
+    int transformWavelength = _wavelet.getTransformWavelength(); // 2, 4, 8, 16, 32, ...
+
+    int l = 0;
+
+    while (h >= transformWavelength && l < level) {
+
+      int g = k / h; // 1 -> 2 -> 4 -> 8 -> ...
+
+      for (int p = 0; p < g; p++) {
+
+        double[] iBuf = new double[h];
+
+        for (int i = 0; i < h; i++) iBuf[i] = arrHilb[i + (p * h)];
+
+        double[] oBuf = _wavelet.forward(iBuf, h);
+
+        for (int i = 0; i < h; i++) arrHilb[i + (p * h)] = oBuf[i];
+      } // packets
+
+      h = h >> 1;
+
+      l++;
+    } // levels
+
+    return arrHilb;
+  } // forward
+
+  /**
+   * Performs a 1-D reverse transform from Hilbert domain to time domain using one kind of a Wavelet
+   * Packet Transform (WPT) algorithm for a given array of dimension (length) 2^p | pEN; N = 2, 4,
+   * 8, 16, 32, 64, 128, .., and so on. However, the algorithms starts for at a supported level that
+   * has be in the range 0, .., p of the dimension of the input array; 0 is the time series itself
+   * and p is the maximal number of possible levels. The coefficients of the input array have to
+   * match to the supported level.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 12:38:23
+   * @throws JWaveException (non-Javadoc)
+   * @see jwave.transforms.BasicTransform#reverse(double[], int)
+   */
+  @Override
+  public double[] reverse(double[] arrHilb, int level) throws JWaveException {
+
+    if (!isBinary(arrHilb.length))
+      throw new JWaveFailure(
+          "given array length is not 2^p | p E N ... = 1, 2, 4, 8, 16, 32, .. "
+              + "please use the Ancient Egyptian Decomposition for any other array length!");
+
+    int noOfLevels = calcExponent(arrHilb.length);
+    if (level < 0 || level > noOfLevels)
+      throw new JWaveFailure(
+          "WaveletPacketTransform#reverse - given level is out of range for given array");
+
+    int length = arrHilb.length; // length of first Hilbert space
+    double[] arrTime = Arrays.copyOf(arrHilb, length);
+
+    int transformWavelength = _wavelet.getTransformWavelength(); // 2, 4, 8, 16, 32, ...
+
+    int k = arrTime.length;
+
+    int h = transformWavelength;
+
+    int steps = calcExponent(length);
+    for (int l = level; l < steps; l++)
+      h = h << 1; // begin reverse transform at certain - matching - level of hilbert space
+
+    while (h <= arrTime.length && h >= transformWavelength) {
+
+      int g = k / h; // ... -> 8 -> 4 -> 2 -> 1
+
+      for (int p = 0; p < g; p++) {
+
+        double[] iBuf = new double[h];
+
+        for (int i = 0; i < h; i++) iBuf[i] = arrTime[i + (p * h)];
+
+        double[] oBuf = _wavelet.reverse(iBuf, h);
+
+        for (int i = 0; i < h; i++) arrTime[i + (p * h)] = oBuf[i];
+      } // packets
+
+      h = h << 1;
+    } // levels
+
+    return arrTime;
+  } // reverse
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/WaveletTransform.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/WaveletTransform.java
new file mode 100644
index 00000000000..3490bdad7c9
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/WaveletTransform.java
@@ -0,0 +1,164 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms;
+
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailure;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * @author Christian (graetz23@gmail.com)
+ * @date 15.02.2014 21:05:33
+ */
+public abstract class WaveletTransform extends BasicTransform {
+
+  /**
+   * The used wavelet for transforming
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 15.02.2014 21:05:33
+   */
+  protected Wavelet _wavelet;
+
+  /**
+   * Constructor checks whether the given object is all right.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 15.02.2014 21:05:33
+   * @param wavelet object of type Wavelet
+   */
+  protected WaveletTransform(Wavelet wavelet) {
+    _wavelet = wavelet;
+  } // check for objects od type Wavelet
+
+  /*
+   * Returns the stored Wavelet object.
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.03.2015 18:27:05 (non-Javadoc)
+   * @see jwave.transforms.BasicTransform#getWavelet()
+   */
+  public Wavelet getWavelet() {
+    return _wavelet;
+  } // getWavelet
+
+  /**
+   * Performs a 1-D forward transform from time domain to Hilbert domain using one kind of wavelet
+   * transform algorithm for a given array of dimension (length) 2^p | pEN; N = 2, 4, 8, 16, 32, 64,
+   * 128, .., and so on.
+   *
+   * @date 10.02.2010 08:23:24
+   * @author Christian (graetz23@gmail.com)
+   * @throws JWaveException if given array is not of length 2^p | pEN
+   * @see jwave.transforms.BasicTransform#forward(double[])
+   */
+  @Override
+  public double[] forward(double[] arrTime) throws JWaveException {
+
+    if (!isBinary(arrTime.length))
+      throw new JWaveFailure(
+          "WaveletTransform#forward - "
+              + "given array length is not 2^p | p E N ... = 1, 2, 4, 8, 16, 32, .. "
+              + "please use the Ancient Egyptian Decomposition for any other array length!");
+
+    int maxLevel = calcExponent(arrTime.length);
+    return forward(arrTime, maxLevel); // forward by maximal steps
+  } // forward
+
+  /**
+   * Performs a 1-D reverse transform from Hilbert domain to time domain using one kind of wavelet
+   * transform algorithm for a given array of dimension (length) 2^p | pEN; N = 2, 4, 8, 16, 32, 64,
+   * 128, .., and so on.
+   *
+   * @date 10.02.2010 08:23:24
+   * @author Christian (graetz23@gmail.com)
+   * @throws JWaveException if given array is not of length 2^p | pEN
+   * @see jwave.transforms.BasicTransform#reverse(double[])
+   */
+  @Override
+  public double[] reverse(double[] arrHilb) throws JWaveException {
+
+    if (!isBinary(arrHilb.length))
+      throw new JWaveFailure(
+          "WaveletTransform#reverse - "
+              + "given array length is not 2^p | p E N ... = 1, 2, 4, 8, 16, 32, .. "
+              + "please use the Ancient Egyptian Decomposition for any other array length!");
+
+    int maxLevel = calcExponent(arrHilb.length);
+    return reverse(arrHilb, maxLevel); // reverse by maximal steps
+  } // reverse
+
+  /**
+   * Performs several 1-D forward transforms from time domain to all possible Hilbert domains using
+   * one kind of wavelet transform algorithm for a given array of dimension (length) 2^p | pEN; N =
+   * 2, 4, 8, 16, 32, 64, 128, .., and so on. However, the algorithm stores all levels in a matrix
+   * that has in first dimension the range of 0, .., p and in second dimension the coefficients
+   * (energy & details) of a certain level. From any level a full reconstruction can be performed.
+   * The first dimension is keeping the time series, due to being the Hilbert space of level 0. All
+   * following dimensions are keeping the next higher Hilbert spaces, so the next step in wavelet
+   * filtering.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 14:28:49
+   * @param arrTime coefficients of time domain
+   * @return matDeComp coefficients of frequency or Hilbert domain in 2-D spaces: [ 0 .. p ][ 0 .. M
+   *     ] where p is the exponent of M=2^p | pEN
+   * @throws JWaveException if something does not match upon the criteria of input
+   * @see jwave.transforms.BasicTransform#decompose(double[])
+   */
+  @Override
+  public double[][] decompose(double[] arrTime) throws JWaveException {
+
+    int length = arrTime.length;
+    int levels = calcExponent(length);
+    double[][] matDeComp = new double[levels + 1][length];
+    for (int p = 0; p <= levels; p++)
+      System.arraycopy(forward(arrTime, p), 0, matDeComp[p], 0, length);
+    return matDeComp;
+  } // decompose
+
+  /**
+   * Performs one 1-D reverse transform from Hilbert domain to time domain using one kind of wavelet
+   * transform algorithm for a given array of dimension (length) 2^p | pEN; N = 2, 4, 8, 16, 32, 64,
+   * 128, .., and so on. However, the algorithm uses on of level in a matrix that has in first
+   * dimension the range of 0, .., p and in second dimension the coefficients (energy & details) the
+   * level. From any level a full a reconstruction can be performed; so from the selected by
+   * "level". Anyway, the first dimension is keeping the time series, due to being the Hilbert space
+   * of level 0. All following dimensions are keeping the next higher Hilbert spaces, so the next
+   * step in wavelet filtering. If one want to denoise each level in the same way and compare
+   * results after reverse transform, this is the best input for it.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 14:29:01
+   * @see jwave.transforms.BasicTransform#recompose(double[][], int)
+   * @param matDeComp 2-D Hilbert spaces: [ 0 .. p ][ 0 .. M ] where p is the exponent of M=2^p |
+   *     pEN
+   * @throws JWaveException if something does not match upon the criteria of input
+   * @return a 1-D time domain signal
+   * @see jwave.transforms.BasicTransform#recompose(double[])
+   */
+  public double[] recompose(double[][] matDeComp, int level) throws JWaveException {
+
+    if (level < 0 || level >= matDeComp.length)
+      throw new JWaveFailure("WaveletTransform#recompose - " + "given level is out of range");
+
+    return reverse(matDeComp[level], level);
+  } // recompose
+} // WaveletTransform
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/Wavelet.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/Wavelet.java
new file mode 100644
index 00000000000..d3c24f7a803
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/Wavelet.java
@@ -0,0 +1,264 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets;
+
+import java.util.Arrays;
+
+/**
+ * Basic class for one wavelet keeping coefficients of the wavelet function, the scaling function,
+ * the base wavelength, the forward transform method, and the reverse transform method.
+ *
+ * @date 10.02.2010 08:54:48
+ * @author Christian (graetz23@gmail.com)
+ */
+public abstract class Wavelet {
+
+  /** The name of the wavelet. */
+  protected String _name;
+
+  /** The wavelength of the base or so called mother wavelet and its matching scaling function. */
+  protected int _motherWavelength;
+
+  /** The minimal wavelength of a signal that can be transformed */
+  protected int _transformWavelength;
+
+  /** The coefficients of the mother scaling (low pass filter) for decomposition. */
+  protected double[] _scalingDeCom;
+
+  /** The coefficients of the mother wavelet (high pass filter) for decomposition. */
+  protected double[] _waveletDeCom;
+
+  /** The coefficients of the mother scaling (low pass filter) for reconstruction. */
+  protected double[] _scalingReCon;
+
+  /** The coefficients of the mother wavelet (high pass filter) for reconstruction. */
+  protected double[] _waveletReCon;
+
+  /**
+   * Constructor; predefine members to default values or null!
+   *
+   * @date 15.02.2014 22:16:27
+   * @author Christian (graetz23@gmail.com)
+   */
+  public Wavelet() {
+    _name = null;
+    _motherWavelength = 0;
+    _transformWavelength = 0;
+    _scalingDeCom = null;
+    _waveletDeCom = null;
+    _scalingReCon = null;
+    _waveletReCon = null;
+  } // Wavelet
+
+  /**
+   * The method builds form the scaling (low pass) coefficients for decomposition of a filter, the
+   * matching coefficients for the wavelet (high pass) for decomposition, for the scaling (low pass)
+   * for reconstruction, and for the wavelet (high pass) of reconstruction. This method should be
+   * called in the constructor of an orthonormal filter directly after defining the orthonormal
+   * coefficients of the scaling (low pass) for decomposition!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 13:19:27
+   */
+  protected void _buildOrthonormalSpace() {
+    // building wavelet as orthogonal (orthonormal) space from
+    // scaling coefficients (low pass filter). Have a look into
+    // Alfred Haar's wavelet or the Daubechies Wavelet with 2
+    // vanishing moments for understanding what is done here. ;-)
+    _waveletDeCom = new double[_motherWavelength];
+    for (int i = 0; i < _motherWavelength; i++)
+      if (i % 2 == 0) _waveletDeCom[i] = _scalingDeCom[(_motherWavelength - 1) - i];
+      else _waveletDeCom[i] = -_scalingDeCom[(_motherWavelength - 1) - i];
+    // Copy to reconstruction filters due to orthogonality (orthonormality)!
+    _scalingReCon = new double[_motherWavelength];
+    _waveletReCon = new double[_motherWavelength];
+    for (int i = 0; i < _motherWavelength; i++) {
+      _scalingReCon[i] = _scalingDeCom[i];
+      _waveletReCon[i] = _waveletDeCom[i];
+    } // i
+  } // _buildOrthonormalSpace
+
+  /**
+   * Returns a String keeping the name of the current Wavelet.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 17.08.2014 11:02:31
+   * @return String keeping the name of the wavelet
+   */
+  public String getName() {
+    return _name;
+  } // getName
+
+  /**
+   * Returns a String keeping the name of the current Wavelet. Used to override Object's toString
+   * method
+   *
+   * @author Dakota Williams
+   * @date 11.06.2015 10:12:15
+   * @return String with the name of the wavelet
+   */
+  public String toString() {
+    return getName();
+  } // toString
+
+  /**
+   * Returns the wavelength of the so called mother wavelet or scaling function.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 15.02.2014 22:06:12
+   * @return the minimal wavelength for the mother wavelet
+   */
+  public int getMotherWavelength() {
+    return _motherWavelength;
+  } // getMotherWavelength
+
+  /**
+   * Returns the minimal necessary wavelength for a signal that can be transformed by this wavelet.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 15.02.2014 22:08:43
+   * @return integer representing minimal wavelength of the input signal that should be transformed
+   *     by this wavelet.
+   */
+  public int getTransformWavelength() {
+    return _transformWavelength;
+  } // getTransformWavelength
+
+  /**
+   * Returns a copy of the scaling (low pass filter) coefficients of decomposition.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 15.02.2010 22:11:42
+   * @return array of length of the mother wavelet wavelength keeping the decomposition low pass
+   *     filter coefficients
+   */
+  public final double[] getScalingDeComposition() {
+    return Arrays.copyOf(_scalingDeCom, _scalingDeCom.length);
+  } // getScalingDeComposition
+
+  /**
+   * Returns a copy of the wavelet (high pass filter) coefficients of decomposition.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 15.02.2014 22:11:25
+   * @return array of length of the mother wavelet wavelength keeping the decomposition high pass
+   *     filter coefficients
+   */
+  public final double[] getWaveletDeComposition() {
+    return Arrays.copyOf(_waveletDeCom, _waveletDeCom.length);
+  } // getWaveletDeComposition
+
+  /**
+   * Returns a copy of the scaling (low pass filter) coefficients of reconstruction.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 10:35:11
+   * @return array of length of the mother wavelet wavelength keeping the reconstruction low pass
+   *     filter coefficients
+   */
+  public final double[] getScalingReConstruction() {
+    return Arrays.copyOf(_scalingReCon, _scalingReCon.length);
+  } // getScalingReConstruction
+
+  /**
+   * Returns a copy of the wavelet (high pass filter) coefficients of reconstruction.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 10:35:09
+   * @return array of length of the mother wavelet wavelength keeping the reconstruction high pass
+   *     filter coefficients
+   */
+  public final double[] getWaveletReConstruction() {
+    return Arrays.copyOf(_waveletReCon, _waveletReCon.length);
+  } // getWaveletReConstruction
+
+  /**
+   * Performs the forward transform for the given array from time domain to Hilbert domain and
+   * returns a new array of the same size keeping coefficients of Hilbert domain and should be of
+   * length 2 to the power of p -- length = 2^p where p is a positive integer.
+   *
+   * @date 10.02.2010 08:18:02
+   * @author Christian (graetz23@gmail.com)
+   * @param arrTime array keeping time domain coefficients
+   * @param arrTimeLength is necessary, due to working only on a part of arrTime not on the full
+   *     length of arrTime!
+   * @return coefficients represented by frequency domain
+   */
+  public double[] forward(double[] arrTime, int arrTimeLength) {
+
+    double[] arrHilb = new double[arrTimeLength];
+
+    int h = arrHilb.length >> 1; // .. -> 8 -> 4 -> 2 .. shrinks in each step by half wavelength
+    for (int i = 0; i < h; i++) {
+
+      arrHilb[i] = arrHilb[i + h] = 0.; // set to zero before sum up
+
+      for (int j = 0; j < _motherWavelength; j++) {
+
+        int k = (i << 1) + j; // k = ( i * 2 ) + j;
+        while (k >= arrHilb.length)
+          k -= arrHilb.length; // circulate over arrays if scaling and wavelet are are larger
+
+        arrHilb[i] +=
+            arrTime[k] * _scalingDeCom[j]; // low pass filter for the energy (approximation)
+        arrHilb[i + h] += arrTime[k] * _waveletDeCom[j]; // high pass filter for the details
+      } // Sorting each step in patterns of: { scaling coefficients | wavelet coefficients }
+    } // h = 2^(p-1) | p = { 1, 2, .., N } .. shrinks in each step by half wavelength
+
+    return arrHilb;
+  } // forward
+
+  /**
+   * Performs the reverse transform for the given array from Hilbert domain to time domain and
+   * returns a new array of the same size keeping coefficients of time domain and should be of
+   * length 2 to the power of p -- length = 2^p where p is a positive integer.
+   *
+   * @date 10.02.2010 08:19:24
+   * @author Christian (graetz23@gmail.com)
+   * @param arrHilb array keeping frequency domain coefficients
+   * @param arrHilbLength is necessary, due to working only on a part of arrHilb not on the full
+   *     length of arrHilb!
+   * @return coefficients represented by time domain
+   */
+  public double[] reverse(double[] arrHilb, int arrHilbLength) {
+
+    double[] arrTime = new double[arrHilbLength];
+    for (int i = 0; i < arrTime.length; i++) arrTime[i] = 0.; // set to zero before sum up
+
+    int h = arrTime.length >> 1; // .. -> 8 -> 4 -> 2 .. shrinks in each step by half wavelength
+    for (int i = 0; i < h; i++) {
+
+      for (int j = 0; j < _motherWavelength; j++) {
+
+        int k = (i << 1) + j; // k = ( i * 2 ) + j;
+        while (k >= arrTime.length)
+          k -= arrTime.length; // circulate over arrays if scaling and wavelet are larger
+
+        // adding up energy from low pass (approximation) and details from high pass filter
+        arrTime[k] +=
+            (arrHilb[i] * _scalingReCon[j])
+                + (arrHilb[i + h] * _waveletReCon[j]); // looks better with brackets
+      } // Reconstruction from patterns of: { scaling coefficients | wavelet coefficients }
+    } // h = 2^(p-1) | p = { 1, 2, .., N } .. shrink in each step by half wavelength
+
+    return arrTime;
+  } // reverse
+} // Wavelet
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/WaveletBuilder.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/WaveletBuilder.java
new file mode 100644
index 00000000000..d6a139425b2
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/WaveletBuilder.java
@@ -0,0 +1,499 @@
+/**
+ * Create Wavelet objects ...
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 14.03.2015 13:50:30
+ *     <p>WaveletBuilder.java
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets;
+
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveException;
+import org.apache.iotdb.db.query.simpiece.jwave.exceptions.JWaveFailure;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal.BiOrthogonal11;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal.BiOrthogonal13;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal.BiOrthogonal15;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal.BiOrthogonal22;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal.BiOrthogonal24;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal.BiOrthogonal26;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal.BiOrthogonal28;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal.BiOrthogonal31;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal.BiOrthogonal33;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal.BiOrthogonal35;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal.BiOrthogonal37;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal.BiOrthogonal39;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal.BiOrthogonal44;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal.BiOrthogonal55;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal.BiOrthogonal68;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.coiflet.Coiflet1;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.coiflet.Coiflet2;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.coiflet.Coiflet3;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.coiflet.Coiflet4;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.coiflet.Coiflet5;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies10;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies11;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies12;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies13;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies14;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies15;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies16;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies17;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies18;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies19;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies2;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies20;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies3;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies4;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies5;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies6;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies7;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies8;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies.Daubechies9;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.haar.Haar1;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.haar.Haar1Orthogonal;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.legendre.Legendre1;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.legendre.Legendre2;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.legendre.Legendre3;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.other.DiscreteMayer;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet10;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet11;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet12;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet13;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet14;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet15;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet16;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet17;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet18;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet19;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet2;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet20;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet3;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet4;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet5;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet6;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet7;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet8;
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.symlets.Symlet9;
+
+import java.util.ArrayList;
+
+/**
+ * Class for creating and identifying Wavelet object.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 14.03.2015 13:50:30
+ */
+public class WaveletBuilder {
+
+  /**
+   * Create a Wavelet object by string. Look into each Wavelet for matching string identifier. By
+   * the way the method requires Java 7, due to the switch statement with at String. *rofl*
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.03.2015 14:19:09
+   * @param waveletName identifier as stored in Wavelet object
+   * @return a matching object of type Wavelet
+   */
+  public static Wavelet create(String waveletName) {
+
+    Wavelet wavelet = null;
+
+    try {
+
+      switch (waveletName) {
+        case "Haar":
+          wavelet = new Haar1();
+          break;
+
+        case "Haar orthogonal":
+          wavelet = new Haar1Orthogonal();
+          break;
+
+        case "Daubechies 2":
+          wavelet = new Daubechies2();
+          break;
+
+        case "Daubechies 3":
+          wavelet = new Daubechies3();
+          break;
+
+        case "Daubechies 4":
+          wavelet = new Daubechies4();
+          break;
+
+        case "Daubechies 5":
+          wavelet = new Daubechies5();
+          break;
+
+        case "Daubechies 6":
+          wavelet = new Daubechies6();
+          break;
+
+        case "Daubechies 7":
+          wavelet = new Daubechies7();
+          break;
+
+        case "Daubechies 8":
+          wavelet = new Daubechies8();
+          break;
+
+        case "Daubechies 9":
+          wavelet = new Daubechies9();
+          break;
+
+        case "Daubechies 10":
+          wavelet = new Daubechies10();
+          break;
+
+        case "Daubechies 11":
+          wavelet = new Daubechies11();
+          break;
+
+        case "Daubechies 12":
+          wavelet = new Daubechies12();
+          break;
+
+        case "Daubechies 13":
+          wavelet = new Daubechies13();
+          break;
+
+        case "Daubechies 14":
+          wavelet = new Daubechies14();
+          break;
+
+        case "Daubechies 15":
+          wavelet = new Daubechies15();
+          break;
+
+        case "Daubechies 16":
+          wavelet = new Daubechies16();
+          break;
+
+        case "Daubechies 17":
+          wavelet = new Daubechies17();
+          break;
+
+        case "Daubechies 18":
+          wavelet = new Daubechies18();
+          break;
+
+        case "Daubechies 19":
+          wavelet = new Daubechies19();
+          break;
+
+        case "Daubechies 20":
+          wavelet = new Daubechies20();
+          break;
+
+        case "Coiflet 1":
+          wavelet = new Coiflet1();
+          break;
+
+        case "Coiflet 2":
+          wavelet = new Coiflet2();
+          break;
+
+        case "Coiflet 3":
+          wavelet = new Coiflet3();
+          break;
+
+        case "Coiflet 4":
+          wavelet = new Coiflet4();
+          break;
+
+        case "Coiflet 5":
+          wavelet = new Coiflet5();
+          break;
+
+        case "Legendre 1":
+          wavelet = new Legendre1();
+          break;
+
+        case "Legendre 2":
+          wavelet = new Legendre2();
+          break;
+
+        case "Legendre 3":
+          wavelet = new Legendre3();
+          break;
+
+        case "Symlet 2":
+          wavelet = new Symlet2();
+          break;
+
+        case "Symlet 3":
+          wavelet = new Symlet3();
+          break;
+
+        case "Symlet 4":
+          wavelet = new Symlet4();
+          break;
+
+        case "Symlet 5":
+          wavelet = new Symlet5();
+          break;
+
+        case "Symlet 6":
+          wavelet = new Symlet6();
+          break;
+
+        case "Symlet 7":
+          wavelet = new Symlet7();
+          break;
+
+        case "Symlet 8":
+          wavelet = new Symlet8();
+          break;
+
+        case "Symlet 9":
+          wavelet = new Symlet9();
+          break;
+
+        case "Symlet 10":
+          wavelet = new Symlet10();
+          break;
+
+        case "Symlet 11":
+          wavelet = new Symlet11();
+          break;
+
+        case "Symlet 12":
+          wavelet = new Symlet12();
+          break;
+
+        case "Symlet 13":
+          wavelet = new Symlet13();
+          break;
+
+        case "Symlet 14":
+          wavelet = new Symlet14();
+          break;
+
+        case "Symlet 15":
+          wavelet = new Symlet15();
+          break;
+
+        case "Symlet 16":
+          wavelet = new Symlet16();
+          break;
+
+        case "Symlet 17":
+          wavelet = new Symlet17();
+          break;
+
+        case "Symlet 18":
+          wavelet = new Symlet18();
+          break;
+
+        case "Symlet 19":
+          wavelet = new Symlet19();
+          break;
+
+        case "Symlet 20":
+          wavelet = new Symlet20();
+          break;
+
+        case "BiOrthogonal 1/1":
+          wavelet = new BiOrthogonal11();
+          break;
+
+        case "BiOrthogonal 1/3":
+          wavelet = new BiOrthogonal13();
+          break;
+
+        case "BiOrthogonal 1/5":
+          wavelet = new BiOrthogonal15();
+          break;
+
+        case "BiOrthogonal 2/2":
+          wavelet = new BiOrthogonal22();
+          break;
+
+        case "BiOrthogonal 2/4":
+          wavelet = new BiOrthogonal24();
+          break;
+
+        case "BiOrthogonal 2/6":
+          wavelet = new BiOrthogonal26();
+          break;
+
+        case "BiOrthogonal 2/8":
+          wavelet = new BiOrthogonal28();
+          break;
+
+        case "BiOrthogonal 3/1":
+          wavelet = new BiOrthogonal31();
+          break;
+
+        case "BiOrthogonal 3/3":
+          wavelet = new BiOrthogonal33();
+          break;
+
+        case "BiOrthogonal 3/5":
+          wavelet = new BiOrthogonal35();
+          break;
+
+        case "BiOrthogonal 3/7":
+          wavelet = new BiOrthogonal37();
+          break;
+
+        case "BiOrthogonal 3/9":
+          wavelet = new BiOrthogonal39();
+          break;
+
+        case "BiOrthogonal 4/4":
+          wavelet = new BiOrthogonal44();
+          break;
+
+        case "BiOrthogonal 5/5":
+          wavelet = new BiOrthogonal55();
+          break;
+
+        case "BiOrthogonal 6/8":
+          wavelet = new BiOrthogonal68();
+          break;
+
+        case "Discrete Mayer":
+          wavelet = new DiscreteMayer();
+          break;
+
+        case "Battle 23":
+          // wavelet = new Battle23( );
+          throw new JWaveFailure(
+              "WaveletBuilder::create - Battle23 - "
+                  + "This wavelet has an odd number of coefficients, "
+                  + "due to that it is not comaptible to the implemented algorithms; somehow!");
+          // break;
+
+        case "CDF 5/3":
+          // wavelet = new CDF53( );
+          throw new JWaveFailure(
+              "WaveletBuilder::create - CDF 5/3 - "
+                  + "This wavelet has an odd number of coefficients, "
+                  + "due to that it is not comaptible to the implemented algorithms; somehow!");
+          // break;
+
+        case "CDF 9/7":
+          // wavelet = new CDF97( );
+          throw new JWaveFailure(
+              "WaveletBuilder::create - CDF 9/7 - "
+                  + "This wavelet has an odd number of coefficients, "
+                  + "due to that it is not comaptible to the implemented algorithms; somehow!");
+          // break;
+
+        default:
+          throw new JWaveFailure(
+              "WaveletBuilder::create - unknown type of wavelet for given string!");
+      } // switch
+
+    } catch (JWaveException e) {
+
+      e.showMessage();
+      e.printStackTrace();
+    } // try
+
+    return wavelet;
+  } // create
+
+  /**
+   * Returns the identifier string of a given Wavelet object.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 14.03.2015 14:22:22
+   * @param wavelet an object of type Wavelet
+   * @return identifier string of a given Wavelet object
+   */
+  public static String identify(Wavelet wavelet) {
+
+    return wavelet.getName();
+  } // identify
+
+  /**
+   * Create an array keeping all - available - wavelet objects.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 22.03.2015 15:39:15
+   * @return an array keeping all Wavelet objects
+   */
+  public static Wavelet[] create2arr() {
+
+    ArrayList<Wavelet> listWavelets = new ArrayList<Wavelet>();
+
+    listWavelets.add(WaveletBuilder.create("Haar"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 2"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 3"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 4"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 5"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 6"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 7"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 8"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 9"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 10"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 11"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 12"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 13"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 14"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 15"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 16"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 17"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 18"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 19"));
+    listWavelets.add(WaveletBuilder.create("Daubechies 20"));
+    // listWavelets.add( WaveletBuilder.create( "Legendre 1" ) ); // not passing JUnit due to sign
+    // listWavelets.add( WaveletBuilder.create( "Legendre 2" ) ); // not passing JUnit due to sign
+    // listWavelets.add( WaveletBuilder.create( "Legendre 3" ) ); // not passing JUnit due to sign
+    listWavelets.add(WaveletBuilder.create("Coiflet 1"));
+    listWavelets.add(WaveletBuilder.create("Coiflet 2"));
+    listWavelets.add(WaveletBuilder.create("Coiflet 3"));
+    listWavelets.add(WaveletBuilder.create("Coiflet 4"));
+    listWavelets.add(WaveletBuilder.create("Coiflet 5"));
+    listWavelets.add(WaveletBuilder.create("Symlet 2"));
+    listWavelets.add(WaveletBuilder.create("Symlet 3"));
+    listWavelets.add(WaveletBuilder.create("Symlet 4"));
+    listWavelets.add(WaveletBuilder.create("Symlet 5"));
+    listWavelets.add(WaveletBuilder.create("Symlet 6"));
+    listWavelets.add(WaveletBuilder.create("Symlet 7"));
+    listWavelets.add(WaveletBuilder.create("Symlet 8"));
+    listWavelets.add(WaveletBuilder.create("Symlet 9"));
+    listWavelets.add(WaveletBuilder.create("Symlet 10"));
+    listWavelets.add(WaveletBuilder.create("Symlet 11"));
+    listWavelets.add(WaveletBuilder.create("Symlet 12"));
+    listWavelets.add(WaveletBuilder.create("Symlet 13"));
+    listWavelets.add(WaveletBuilder.create("Symlet 14"));
+    listWavelets.add(WaveletBuilder.create("Symlet 15"));
+    listWavelets.add(WaveletBuilder.create("Symlet 16"));
+    listWavelets.add(WaveletBuilder.create("Symlet 17"));
+    listWavelets.add(WaveletBuilder.create("Symlet 18"));
+    listWavelets.add(WaveletBuilder.create("Symlet 19"));
+    listWavelets.add(WaveletBuilder.create("Symlet 20"));
+    listWavelets.add(WaveletBuilder.create("BiOrthogonal 1/1"));
+    listWavelets.add(WaveletBuilder.create("BiOrthogonal 1/3"));
+    listWavelets.add(WaveletBuilder.create("BiOrthogonal 1/5"));
+    // listWavelets.add( WaveletBuilder.create( "BiOrthogonal 2/2" ) ); // not passing JUnit due to
+    // shifting one position
+    // listWavelets.add( WaveletBuilder.create( "BiOrthogonal 2/4" ) ); // not passing JUnit due to
+    // lifting scheme
+    // listWavelets.add( WaveletBuilder.create( "BiOrthogonal 2/6" ) ); // not passing JUnit due to
+    // lifting scheme
+    // listWavelets.add( WaveletBuilder.create( "BiOrthogonal 2/8" ) ); // not passing JUnit due to
+    // lifting scheme
+    listWavelets.add(WaveletBuilder.create("BiOrthogonal 3/1"));
+    listWavelets.add(WaveletBuilder.create("BiOrthogonal 3/3"));
+    listWavelets.add(WaveletBuilder.create("BiOrthogonal 3/5"));
+    listWavelets.add(WaveletBuilder.create("BiOrthogonal 3/7"));
+    listWavelets.add(WaveletBuilder.create("BiOrthogonal 3/9"));
+    // listWavelets.add( WaveletBuilder.create( "BiOrthogonal 4/4" ) ); // not passing JUnit due to
+    // lifting scheme
+    // listWavelets.add( WaveletBuilder.create( "BiOrthogonal 5/5" ) ); // not passing JUnit due to
+    // lifting scheme
+    // listWavelets.add( WaveletBuilder.create( "BiOrthogonal 6/8" ) ); // not passing JUnit due to
+    // lifting scheme
+    // listWavelets.add( WaveletBuilder.create( "Discrete Mayer" ) ); // not passing JUnit due to
+    // precision
+
+    int noOfWavelets = listWavelets.size();
+    Wavelet[] arrWavelets = new Wavelet[noOfWavelets];
+    for (int w = 0; w < noOfWavelets; w++) arrWavelets[w] = listWavelets.get(w);
+
+    return arrWavelets;
+  } // create2arr
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal.java
new file mode 100644
index 00000000000..88cd63442c4
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal.java
@@ -0,0 +1,127 @@
+/**
+ * Base class for BiOrthogonal wavelet keeping construction and different forward and reverse
+ * methods.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 28.03.2015 18:42:08
+ *     <p>BiOrthogonal.java
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Base class for BiOrthogonal wavelets.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 28.03.2015 18:42:08
+ */
+public class BiOrthogonal extends Wavelet {
+
+  /**
+   * no jobs done here ..
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 28.03.2015 18:42:08
+   */
+  public BiOrthogonal() {} // BiOrthogonal
+
+  /**
+   * The method builds form the scaling (low pass) coefficients for decomposition and wavelet (high
+   * pass) coefficients for decomposition of a filter, the matching coefficients for the scaling
+   * (low pass) for reconstruction, and for the wavelet (high pass) of reconstruction. This method
+   * should be called in the constructor of an biorthogonal (biorthonormal) filter directly after
+   * defining the orthonormal coefficients of the scaling (low pass) and wavelet (high pass) for
+   * decomposition!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 17:04:44
+   */
+  protected void _buildBiOrthonormalSpace() {
+    // building wavelet and scaling function for reconstruction
+    // as orthogonal (orthonormal) spaces from scaling and wavelet
+    // of decomposition. ;-)
+    _scalingReCon = new double[_motherWavelength];
+    _waveletReCon = new double[_motherWavelength];
+    for (int i = 0; i < _motherWavelength; i++) {
+      //      if( i % 2 == 0 ) {
+      //        _scalingReCon[ i ] = _waveletDeCom[ ( _motherWavelength - 1 ) - i ];
+      //        _waveletReCon[ i ] = _scalingDeCom[ ( _motherWavelength - 1 ) - i ];
+      //      } else {
+      //        _scalingReCon[ i ] = -_waveletDeCom[ ( _motherWavelength - 1 ) - i ];
+      //        _waveletReCon[ i ] = -_scalingDeCom[ ( _motherWavelength - 1 ) - i ];
+      //      } // if
+      if (i % 2 == 0) {
+        _scalingReCon[i] = -_waveletDeCom[i];
+        _waveletReCon[i] = -_scalingDeCom[i];
+      } else {
+        _scalingReCon[i] = _waveletDeCom[i];
+        _waveletReCon[i] = _scalingDeCom[i];
+      } // if
+    } // i
+  } // _buildBiOrthonormalSpace
+
+  /**
+   * Wavelet forward transform algorithm adapted to biorthogonal wavelets.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 28.03.2015 18:44:24 (non-Javadoc)
+   * @see Wavelet#forward(double[], int)
+   */
+  @Override
+  public double[] forward(double[] arrTime, int arrTimeLength) {
+
+    double[] arrHilb = new double[arrTimeLength];
+
+    int h = arrHilb.length >> 1; // .. -> 8 -> 4 -> 2 .. shrinks in each step by half wavelength
+    for (int i = 0; i < h; i++) {
+
+      arrHilb[i] = arrHilb[i + h] = 0.; // set to zero before sum up
+
+      for (int j = 0; j < _motherWavelength; j++) {
+
+        int k = (i << 1) + j; // k = ( i * 2 ) + j;
+        while (k >= arrHilb.length)
+          k -= arrHilb.length; // circulate over arrays if scaling and wavelet are are larger
+
+        arrHilb[i] +=
+            arrTime[k] * _scalingDeCom[j]; // low pass filter for the energy (approximation)
+        arrHilb[i + h] += arrTime[k] * _waveletDeCom[j]; // high pass filter for the details
+      } // Sorting each step in patterns of: { scaling coefficients | wavelet coefficients }
+    } // h = 2^(p-1) | p = { 1, 2, .., N } .. shrinks in each step by half wavelength
+
+    return arrHilb;
+  } // forward
+
+  /**
+   * Wavelet reverse transform algorithm adapted to biorthogonal wavelets.
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 28.03.2015 18:44:24 (non-Javadoc)
+   * @see Wavelet#reverse(double[], int)
+   */
+  @Override
+  public double[] reverse(double[] arrHilb, int arrHilbLength) {
+
+    double[] arrTime = new double[arrHilbLength];
+    for (int i = 0; i < arrTime.length; i++) arrTime[i] = 0.;
+
+    int h = arrTime.length >> 1; // .. -> 8 -> 4 -> 2 .. shrinks in each step by half wavelength
+    for (int i = 0; i < h; i++) {
+
+      for (int j = 0; j < _motherWavelength; j++) {
+
+        int k = (i << 1) + j; // k = ( i * 2 ) + j;
+        while (k >= arrTime.length)
+          k -= arrTime.length; // circulate over arrays if scaling and wavelet are larger
+
+        // adding up energy from low pass (approximation) and details from high pass filter
+        arrTime[k] +=
+            (arrHilb[i] * _scalingReCon[j])
+                + (arrHilb[i + h] * _waveletReCon[j]); // looks better with brackets
+      } // Reconstruction from patterns of: { scaling coefficients | wavelet coefficients }
+    } // h = 2^(p-1) | p = { 1, 2, .., N } .. shrink in each step by half wavelength
+
+    return arrTime;
+  } // reverse
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal11.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal11.java
new file mode 100644
index 00000000000..7f819c08b2e
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal11.java
@@ -0,0 +1,63 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal;
+
+/**
+ * BiOrthogonal Wavelet of type 1.1 - One vanishing moment in wavelet function and one vanishing
+ * moment in scaling function
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 10:15:11
+ */
+public class BiOrthogonal11 extends BiOrthogonal {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/bior1.1/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 10:15:11
+   */
+  public BiOrthogonal11() {
+
+    _name = "BiOrthogonal 1/1"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 2; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = 0.7071067811865476; // s_d0
+    _scalingDeCom[1] = 0.7071067811865476; // s_d1
+
+    _waveletDeCom = new double[_motherWavelength];
+    _waveletDeCom[0] = 0.7071067811865476; // w_d0
+    _waveletDeCom[1] = -0.7071067811865476; // w_d1
+
+    _scalingReCon = new double[_motherWavelength];
+    _scalingReCon[0] = 0.7071067811865476; // w_r0 =  w_d1 .. biorthogonal!
+    _scalingReCon[1] = 0.7071067811865476; // w_r1 = -w_d0 .. biorthogonal!
+
+    _waveletReCon = new double[_motherWavelength];
+    _waveletReCon[0] = 0.7071067811865476; // s_r0 =  s_d1 .. biorthogonal!
+    _waveletReCon[1] = -0.7071067811865476; // s_r1 = -s_d0 .. biorthogonal!
+  } // BiOrthogonal11
+} // BiOrthogonal11
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal13.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal13.java
new file mode 100644
index 00000000000..20742c98e45
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal13.java
@@ -0,0 +1,83 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal;
+
+/**
+ * BiOrthogonal Wavelet of type 1.3 - One vanishing moment in wavelet function and three vanishing
+ * moments in scaling function.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 10:31:33
+ */
+public class BiOrthogonal13 extends BiOrthogonal {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/bior1.3/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 10:31:33
+   */
+  public BiOrthogonal13() {
+
+    _name = "BiOrthogonal 1/3"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 6; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = -0.08838834764831845;
+    _scalingDeCom[1] = 0.08838834764831845;
+    _scalingDeCom[2] = 0.7071067811865476;
+    _scalingDeCom[3] = 0.7071067811865476;
+    _scalingDeCom[4] = 0.08838834764831845;
+    _scalingDeCom[5] = -0.08838834764831845;
+
+    _waveletDeCom = new double[_motherWavelength];
+    _waveletDeCom[0] = 0.;
+    _waveletDeCom[1] = 0.;
+    _waveletDeCom[2] = 0.7071067811865476;
+    _waveletDeCom[3] = -0.7071067811865476;
+    _waveletDeCom[4] = 0.;
+    _waveletDeCom[5] = 0.;
+
+    _scalingReCon = new double[_motherWavelength];
+    _scalingReCon[0] = 0.; // w_r0 =  w_d1 .. biorthogonal!
+    _scalingReCon[1] = 0.; // w_r1 = -w_d0 .. biorthogonal!
+    _scalingReCon[2] = 0.7071067811865476; // w_r0 =  w_d1 .. biorthogonal!
+    _scalingReCon[3] = 0.7071067811865476; // w_r1 = -w_d0 .. biorthogonal!
+    _scalingReCon[4] = 0.; // w_r0 =  w_d1 .. biorthogonal!
+    _scalingReCon[5] = 0.; // w_r1 = -w_d0 .. biorthogonal!
+
+    _waveletReCon = new double[_motherWavelength];
+    _waveletReCon[0] = -0.08838834764831845;
+    _waveletReCon[1] = -0.08838834764831845;
+    _waveletReCon[2] = 0.7071067811865476;
+    _waveletReCon[3] = -0.7071067811865476;
+    _waveletReCon[4] = 0.08838834764831845;
+    _waveletReCon[5] = 0.08838834764831845;
+
+    // build all other coefficients from low & high pass decomposition
+    // _buildBiOrthonormalSpace( );
+
+  } // BiOrthogonal13
+} // BiOrthogonal13
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal15.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal15.java
new file mode 100644
index 00000000000..d422329b8b8
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal15.java
@@ -0,0 +1,74 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal;
+
+/**
+ * BiOrthogonal Wavelet of type 1.5 - One vanishing moment in wavelet function and five vanishing
+ * moments in scaling function.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 11:27:59
+ */
+public class BiOrthogonal15 extends BiOrthogonal {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/bior1.5/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 11:27:59
+   */
+  public BiOrthogonal15() {
+
+    _name = "BiOrthogonal 1/5"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 10; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = 0.01657281518405971;
+    _scalingDeCom[1] = -0.01657281518405971;
+    _scalingDeCom[2] = -0.12153397801643787;
+    _scalingDeCom[3] = 0.12153397801643787;
+    _scalingDeCom[4] = 0.7071067811865476;
+    _scalingDeCom[5] = 0.7071067811865476;
+    _scalingDeCom[6] = 0.12153397801643787;
+    _scalingDeCom[7] = -0.12153397801643787;
+    _scalingDeCom[8] = -0.01657281518405971;
+    _scalingDeCom[9] = 0.01657281518405971;
+
+    _waveletDeCom = new double[_motherWavelength];
+    _waveletDeCom[0] = 0.;
+    _waveletDeCom[1] = 0.;
+    _waveletDeCom[2] = 0.;
+    _waveletDeCom[3] = 0.;
+    _waveletDeCom[4] = -0.7071067811865476;
+    _waveletDeCom[5] = 0.7071067811865476;
+    _waveletDeCom[6] = 0.;
+    _waveletDeCom[7] = 0.;
+    _waveletDeCom[8] = 0.;
+    _waveletDeCom[9] = 0.;
+
+    // build all other coefficients from low & high pass decomposition
+    _buildBiOrthonormalSpace();
+  } // BiOrthogonal15
+} // BiOrthogonal15
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal22.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal22.java
new file mode 100644
index 00000000000..47b79544d4b
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal22.java
@@ -0,0 +1,83 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal;
+
+/**
+ * BiOrthogonal Wavelet of type 2.2 - Two vanishing moments in wavelet function and two vanishing
+ * moments in scaling function.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 16:15:01
+ */
+public class BiOrthogonal22 extends BiOrthogonal {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/bior2.2/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 16:15:01
+   */
+  public BiOrthogonal22() {
+
+    _name = "BiOrthogonal 2/2"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 6; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = 0.;
+    _scalingDeCom[1] = -0.1767766952966369;
+    _scalingDeCom[2] = 0.3535533905932738;
+    _scalingDeCom[3] = 1.0606601717798214;
+    _scalingDeCom[4] = 0.3535533905932738;
+    _scalingDeCom[5] = -0.1767766952966369;
+
+    _waveletDeCom = new double[_motherWavelength];
+    _waveletDeCom[0] = 0.;
+    _waveletDeCom[1] = 0.3535533905932738;
+    _waveletDeCom[2] = -0.7071067811865476;
+    _waveletDeCom[3] = 0.3535533905932738;
+    _waveletDeCom[4] = 0.;
+    _waveletDeCom[5] = 0.;
+
+    _scalingReCon = new double[_motherWavelength];
+    _scalingReCon[0] = 0.;
+    _scalingReCon[1] = 0.3535533905932738;
+    _scalingReCon[2] = 0.7071067811865476;
+    _scalingReCon[3] = 0.3535533905932738;
+    _scalingReCon[4] = 0.;
+    _scalingReCon[5] = 0.;
+
+    _waveletReCon = new double[_motherWavelength];
+    _waveletReCon[0] = 0.;
+    _waveletReCon[1] = 0.1767766952966369;
+    _waveletReCon[2] = 0.3535533905932738;
+    _waveletReCon[3] = -1.0606601717798214;
+    _waveletReCon[4] = 0.3535533905932738;
+    _waveletReCon[5] = 0.1767766952966369;
+
+    // build all other coefficients from low & high pass decomposition
+    // _buildBiOrthonormalSpace( );
+
+  } // BiOrthogonal22
+} // BiOrthogonal22
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal24.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal24.java
new file mode 100644
index 00000000000..e67af7a099a
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal24.java
@@ -0,0 +1,74 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal;
+
+/**
+ * BiOrthogonal Wavelet of type 2.4 - Two vanishing moments in wavelet function and four vanishing
+ * moments in scaling function.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 16:24:22
+ */
+public class BiOrthogonal24 extends BiOrthogonal {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/bior2.4/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 16:24:22
+   */
+  public BiOrthogonal24() {
+
+    _name = "BiOrthogonal 2/4"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 10; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = 0.;
+    _scalingDeCom[1] = 0.03314563036811942;
+    _scalingDeCom[2] = -0.06629126073623884;
+    _scalingDeCom[3] = -0.1767766952966369;
+    _scalingDeCom[4] = 0.4198446513295126;
+    _scalingDeCom[5] = 0.9943689110435825;
+    _scalingDeCom[6] = 0.4198446513295126;
+    _scalingDeCom[7] = -0.1767766952966369;
+    _scalingDeCom[8] = -0.06629126073623884;
+    _scalingDeCom[9] = 0.03314563036811942;
+
+    _waveletDeCom = new double[_motherWavelength];
+    _waveletDeCom[0] = 0.;
+    _waveletDeCom[1] = 0.;
+    _waveletDeCom[2] = 0.;
+    _waveletDeCom[3] = 0.3535533905932738;
+    _waveletDeCom[4] = -0.7071067811865476;
+    _waveletDeCom[5] = 0.3535533905932738;
+    _waveletDeCom[6] = 0.;
+    _waveletDeCom[7] = 0.;
+    _waveletDeCom[8] = 0.;
+    _waveletDeCom[9] = 0.;
+
+    // build all other coefficients from low & high pass decomposition
+    _buildBiOrthonormalSpace();
+  } // BiOrthogonal24
+} // BiOrthogonal24
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal26.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal26.java
new file mode 100644
index 00000000000..7a9c2bc2e2b
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal26.java
@@ -0,0 +1,82 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal;
+
+/**
+ * BiOrthogonal Wavelet of type 2.6 - Two vanishing moments in wavelet function and six vanishing
+ * moments in scaling function.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 16:31:32
+ */
+public class BiOrthogonal26 extends BiOrthogonal {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/bior2.6/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 16:31:32
+   */
+  public BiOrthogonal26() {
+
+    _name = "BiOrthogonal 2/6"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 14; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = 0.;
+    _scalingDeCom[1] = -0.006905339660024878;
+    _scalingDeCom[2] = 0.013810679320049757;
+    _scalingDeCom[3] = 0.046956309688169176;
+    _scalingDeCom[4] = -0.10772329869638811;
+    _scalingDeCom[5] = -0.16987135563661201;
+    _scalingDeCom[6] = 0.4474660099696121;
+    _scalingDeCom[7] = 0.966747552403483;
+    _scalingDeCom[8] = 0.4474660099696121;
+    _scalingDeCom[9] = -0.16987135563661201;
+    _scalingDeCom[10] = -0.10772329869638811;
+    _scalingDeCom[11] = 0.046956309688169176;
+    _scalingDeCom[12] = 0.013810679320049757;
+    _scalingDeCom[13] = -0.006905339660024878;
+
+    _waveletDeCom = new double[_motherWavelength];
+    _waveletDeCom[0] = 0.;
+    _waveletDeCom[1] = 0.;
+    _waveletDeCom[2] = 0.;
+    _waveletDeCom[3] = 0.;
+    _waveletDeCom[4] = 0.;
+    _waveletDeCom[5] = 0.3535533905932738;
+    _waveletDeCom[6] = -0.7071067811865476;
+    _waveletDeCom[7] = 0.3535533905932738;
+    _waveletDeCom[8] = 0.;
+    _waveletDeCom[9] = 0.;
+    _waveletDeCom[10] = 0.;
+    _waveletDeCom[11] = 0.;
+    _waveletDeCom[12] = 0.;
+    _waveletDeCom[13] = 0.;
+
+    // build all other coefficients from low & high pass decomposition
+    _buildBiOrthonormalSpace();
+  } // BiOrthogonal26
+} // BiOrthogonal26
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal28.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal28.java
new file mode 100644
index 00000000000..6961abc1ef7
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal28.java
@@ -0,0 +1,90 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal;
+
+/**
+ * BiOrthogonal Wavelet of type 2.8 - Two vanishing moments in wavelet function and eight vanishing
+ * moments in scaling function.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 16:37:35
+ */
+public class BiOrthogonal28 extends BiOrthogonal {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/bior2.8/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 16:37:35
+   */
+  public BiOrthogonal28() {
+
+    _name = "BiOrthogonal 2/8"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 18; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = 0.;
+    _scalingDeCom[1] = 0.0015105430506304422;
+    _scalingDeCom[2] = -0.0030210861012608843;
+    _scalingDeCom[3] = -0.012947511862546647;
+    _scalingDeCom[4] = 0.02891610982635418;
+    _scalingDeCom[5] = 0.052998481890690945;
+    _scalingDeCom[6] = -0.13491307360773608;
+    _scalingDeCom[7] = -0.16382918343409025;
+    _scalingDeCom[8] = 0.4625714404759166;
+    _scalingDeCom[9] = 0.9516421218971786;
+    _scalingDeCom[10] = 0.4625714404759166;
+    _scalingDeCom[11] = -0.16382918343409025;
+    _scalingDeCom[12] = -0.13491307360773608;
+    _scalingDeCom[13] = 0.052998481890690945;
+    _scalingDeCom[14] = 0.02891610982635418;
+    _scalingDeCom[15] = -0.012947511862546647;
+    _scalingDeCom[16] = -0.0030210861012608843;
+    _scalingDeCom[17] = 0.0015105430506304422;
+
+    _waveletDeCom = new double[_motherWavelength];
+    _waveletDeCom[0] = 0.;
+    _waveletDeCom[1] = 0.;
+    _waveletDeCom[2] = 0.;
+    _waveletDeCom[3] = 0.;
+    _waveletDeCom[4] = 0.;
+    _waveletDeCom[5] = 0.;
+    _waveletDeCom[6] = 0.;
+    _waveletDeCom[7] = 0.3535533905932738;
+    _waveletDeCom[8] = -0.7071067811865476;
+    _waveletDeCom[9] = 0.3535533905932738;
+    _waveletDeCom[10] = 0.;
+    _waveletDeCom[11] = 0.;
+    _waveletDeCom[12] = 0.;
+    _waveletDeCom[13] = 0.;
+    _waveletDeCom[14] = 0.;
+    _waveletDeCom[15] = 0.;
+    _waveletDeCom[16] = 0.;
+    _waveletDeCom[17] = 0.;
+
+    // build all other coefficients from low & high pass decomposition
+    _buildBiOrthonormalSpace();
+  } // BiOrthogonal28
+} // BiOrthogonal28
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal31.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal31.java
new file mode 100644
index 00000000000..d12f45db336
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal31.java
@@ -0,0 +1,62 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal;
+
+/**
+ * BiOrthogonal Wavelet of type 3.1 - Three vanishing moments in wavelet function and one vanishing
+ * moment in scaling function.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 16:50:58
+ */
+public class BiOrthogonal31 extends BiOrthogonal {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/bior3.1/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 16:50:58
+   */
+  public BiOrthogonal31() {
+
+    _name = "BiOrthogonal 3/1"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 4; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = -0.3535533905932738;
+    _scalingDeCom[1] = 1.0606601717798214;
+    _scalingDeCom[2] = 1.0606601717798214;
+    _scalingDeCom[3] = -0.3535533905932738;
+
+    _waveletDeCom = new double[_motherWavelength];
+    _waveletDeCom[0] = -0.1767766952966369;
+    _waveletDeCom[1] = 0.5303300858899107;
+    _waveletDeCom[2] = -0.5303300858899107;
+    _waveletDeCom[3] = 0.1767766952966369;
+
+    // build all other coefficients from low & high pass decomposition
+    _buildBiOrthonormalSpace();
+  } // BiOrthogonal31
+} // BiOrthogonal31
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal33.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal33.java
new file mode 100644
index 00000000000..c7bc4c6f594
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal33.java
@@ -0,0 +1,70 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal;
+
+/**
+ * BiOrthogonal Wavelet of type 3.3 - Three vanishing moments in wavelet function and three
+ * vanishing moments in scaling function.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 17:14:24
+ */
+public class BiOrthogonal33 extends BiOrthogonal {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/bior3.3/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 17:14:24
+   */
+  public BiOrthogonal33() {
+
+    _name = "BiOrthogonal 3/3"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 8; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = 0.06629126073623884;
+    _scalingDeCom[1] = -0.19887378220871652;
+    _scalingDeCom[2] = -0.15467960838455727;
+    _scalingDeCom[3] = 0.9943689110435825;
+    _scalingDeCom[4] = 0.9943689110435825;
+    _scalingDeCom[5] = -0.15467960838455727;
+    _scalingDeCom[6] = -0.19887378220871652;
+    _scalingDeCom[7] = 0.06629126073623884;
+
+    _waveletDeCom = new double[_motherWavelength];
+    _waveletDeCom[0] = 0.;
+    _waveletDeCom[1] = 0.;
+    _waveletDeCom[2] = -0.1767766952966369;
+    _waveletDeCom[3] = 0.5303300858899107;
+    _waveletDeCom[4] = -0.5303300858899107;
+    _waveletDeCom[5] = 0.1767766952966369;
+    _waveletDeCom[6] = 0.;
+    _waveletDeCom[7] = 0.;
+
+    // build all other coefficients from low & high pass decomposition
+    _buildBiOrthonormalSpace();
+  } // BiOrthogonal33
+} // BiOrthogonal33
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal35.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal35.java
new file mode 100644
index 00000000000..2b46ebc0d7f
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal35.java
@@ -0,0 +1,78 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal;
+
+/**
+ * BiOrthogonal Wavelet of type 3.5 - Three vanishing moments in wavelet function and five vanishing
+ * moments in scaling function.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 17:17:51
+ */
+public class BiOrthogonal35 extends BiOrthogonal {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/bior3.5/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 17:17:51
+   */
+  public BiOrthogonal35() {
+
+    _name = "BiOrthogonal 3/5"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 12; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = -0.013810679320049757;
+    _scalingDeCom[1] = 0.04143203796014927;
+    _scalingDeCom[2] = 0.052480581416189075;
+    _scalingDeCom[3] = -0.26792717880896527;
+    _scalingDeCom[4] = -0.07181553246425874;
+    _scalingDeCom[5] = 0.966747552403483;
+    _scalingDeCom[6] = 0.966747552403483;
+    _scalingDeCom[7] = -0.07181553246425874;
+    _scalingDeCom[8] = -0.26792717880896527;
+    _scalingDeCom[9] = 0.052480581416189075;
+    _scalingDeCom[10] = 0.04143203796014927;
+    _scalingDeCom[11] = -0.013810679320049757;
+
+    _waveletDeCom = new double[_motherWavelength];
+    _waveletDeCom[0] = 0.;
+    _waveletDeCom[1] = 0.;
+    _waveletDeCom[2] = 0.;
+    _waveletDeCom[3] = 0.;
+    _waveletDeCom[4] = -0.1767766952966369;
+    _waveletDeCom[5] = 0.5303300858899107;
+    _waveletDeCom[6] = -0.5303300858899107;
+    _waveletDeCom[7] = 0.1767766952966369;
+    _waveletDeCom[8] = 0.;
+    _waveletDeCom[9] = 0.;
+    _waveletDeCom[10] = 0.;
+    _waveletDeCom[11] = 0.;
+
+    // build all other coefficients from low & high pass decomposition
+    _buildBiOrthonormalSpace();
+  } // BiOrthogonal35
+} // BiOrthogonal35
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal37.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal37.java
new file mode 100644
index 00000000000..730f90415cd
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal37.java
@@ -0,0 +1,86 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal;
+
+/**
+ * BiOrthogonal Wavelet of type 3.7 - Three vanishing moments in wavelet function and seven
+ * vanishing moments in scaling function.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 17:21:28
+ */
+public class BiOrthogonal37 extends BiOrthogonal {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/bior3.7/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 17:21:28
+   */
+  public BiOrthogonal37() {
+
+    _name = "BiOrthogonal 3/7"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 16; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = 0.0030210861012608843;
+    _scalingDeCom[1] = -0.009063258303782653;
+    _scalingDeCom[2] = -0.01683176542131064;
+    _scalingDeCom[3] = 0.074663985074019;
+    _scalingDeCom[4] = 0.03133297870736289;
+    _scalingDeCom[5] = -0.301159125922835;
+    _scalingDeCom[6] = -0.026499240945345472;
+    _scalingDeCom[7] = 0.9516421218971786;
+    _scalingDeCom[8] = 0.9516421218971786;
+    _scalingDeCom[9] = -0.026499240945345472;
+    _scalingDeCom[10] = -0.301159125922835;
+    _scalingDeCom[11] = 0.03133297870736289;
+    _scalingDeCom[12] = 0.074663985074019;
+    _scalingDeCom[13] = -0.01683176542131064;
+    _scalingDeCom[14] = -0.009063258303782653;
+    _scalingDeCom[15] = 0.0030210861012608843;
+
+    _waveletDeCom = new double[_motherWavelength];
+    _waveletDeCom[0] = 0.;
+    _waveletDeCom[1] = 0.;
+    _waveletDeCom[2] = 0.;
+    _waveletDeCom[3] = 0.;
+    _waveletDeCom[4] = 0.;
+    _waveletDeCom[5] = 0.;
+    _waveletDeCom[6] = -0.1767766952966369;
+    _waveletDeCom[7] = 0.5303300858899107;
+    _waveletDeCom[8] = -0.5303300858899107;
+    _waveletDeCom[9] = 0.1767766952966369;
+    _waveletDeCom[10] = 0.;
+    _waveletDeCom[11] = 0.;
+    _waveletDeCom[12] = 0.;
+    _waveletDeCom[13] = 0.;
+    _waveletDeCom[14] = 0.;
+    _waveletDeCom[15] = 0.;
+
+    // build all other coefficients from low & high pass decomposition
+    _buildBiOrthonormalSpace();
+  } // BiOrthogonal37
+} // BiOrthogonal37
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal39.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal39.java
new file mode 100644
index 00000000000..9403f51db11
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal39.java
@@ -0,0 +1,94 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal;
+
+/**
+ * BiOrthogonal Wavelet of type 3.9 - Three vanishing moments in wavelet function and nine vanishing
+ * moments in scaling function.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 17:25:01
+ */
+public class BiOrthogonal39 extends BiOrthogonal {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/bior3.9/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 17:25:01
+   */
+  public BiOrthogonal39() {
+
+    _name = "BiOrthogonal 3/9"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 20; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = -0.000679744372783699;
+    _scalingDeCom[1] = 0.002039233118351097;
+    _scalingDeCom[2] = 0.005060319219611981;
+    _scalingDeCom[3] = -0.020618912641105536;
+    _scalingDeCom[4] = -0.014112787930175846;
+    _scalingDeCom[5] = 0.09913478249423216;
+    _scalingDeCom[6] = 0.012300136269419315;
+    _scalingDeCom[7] = -0.32019196836077857;
+    _scalingDeCom[8] = 0.0020500227115698858;
+    _scalingDeCom[9] = 0.9421257006782068;
+    _scalingDeCom[10] = 0.9421257006782068;
+    _scalingDeCom[11] = 0.0020500227115698858;
+    _scalingDeCom[12] = -0.32019196836077857;
+    _scalingDeCom[13] = 0.012300136269419315;
+    _scalingDeCom[14] = 0.09913478249423216;
+    _scalingDeCom[15] = -0.014112787930175846;
+    _scalingDeCom[16] = -0.020618912641105536;
+    _scalingDeCom[17] = 0.005060319219611981;
+    _scalingDeCom[18] = 0.002039233118351097;
+    _scalingDeCom[19] = -0.000679744372783699;
+
+    _waveletDeCom = new double[_motherWavelength];
+    _waveletDeCom[0] = 0.;
+    _waveletDeCom[1] = 0.;
+    _waveletDeCom[2] = 0.;
+    _waveletDeCom[3] = 0.;
+    _waveletDeCom[4] = 0.;
+    _waveletDeCom[5] = 0.;
+    _waveletDeCom[6] = 0.;
+    _waveletDeCom[7] = 0.;
+    _waveletDeCom[8] = -0.1767766952966369;
+    _waveletDeCom[9] = 0.5303300858899107;
+    _waveletDeCom[10] = -0.5303300858899107;
+    _waveletDeCom[11] = 0.1767766952966369;
+    _waveletDeCom[12] = 0.;
+    _waveletDeCom[13] = 0.;
+    _waveletDeCom[14] = 0.;
+    _waveletDeCom[15] = 0.;
+    _waveletDeCom[16] = 0.;
+    _waveletDeCom[17] = 0.;
+    _waveletDeCom[18] = 0.;
+    _waveletDeCom[19] = 0.;
+
+    // build all other coefficients from low & high pass decomposition
+    _buildBiOrthonormalSpace();
+  } // BiOrthogonal39
+} // BiOrthogonal39
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal44.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal44.java
new file mode 100644
index 00000000000..e4746cc129c
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal44.java
@@ -0,0 +1,74 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal;
+
+/**
+ * BiOrthogonal Wavelet of type 4.4 - Four vanishing moments in wavelet function and four vanishing
+ * moments in scaling function - 44 muhahaha! ~8>
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 17:36:17
+ */
+public class BiOrthogonal44 extends BiOrthogonal {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/bior4.4/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 17:36:17
+   */
+  public BiOrthogonal44() {
+
+    _name = "BiOrthogonal 4/4"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 10; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = 0.;
+    _scalingDeCom[1] = 0.03782845550726404;
+    _scalingDeCom[2] = -0.023849465019556843;
+    _scalingDeCom[3] = -0.11062440441843718;
+    _scalingDeCom[4] = 0.37740285561283066;
+    _scalingDeCom[5] = 0.8526986790088938;
+    _scalingDeCom[6] = 0.37740285561283066;
+    _scalingDeCom[7] = -0.11062440441843718;
+    _scalingDeCom[8] = -0.023849465019556843;
+    _scalingDeCom[9] = 0.03782845550726404;
+
+    _waveletDeCom = new double[_motherWavelength];
+    _waveletDeCom[0] = 0.;
+    _waveletDeCom[1] = -0.06453888262869706;
+    _waveletDeCom[2] = 0.04068941760916406;
+    _waveletDeCom[3] = 0.41809227322161724;
+    _waveletDeCom[4] = -0.7884856164055829;
+    _waveletDeCom[5] = 0.41809227322161724;
+    _waveletDeCom[6] = 0.04068941760916406;
+    _waveletDeCom[7] = -0.06453888262869706;
+    _waveletDeCom[8] = 0.;
+    _waveletDeCom[9] = 0.;
+
+    // build all other coefficients from low & high pass decomposition
+    _buildBiOrthonormalSpace();
+  } // BiOrthogonal44
+} // BiOrthogonal44
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal55.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal55.java
new file mode 100644
index 00000000000..a1ac8c0d420
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal55.java
@@ -0,0 +1,107 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal;
+
+/**
+ * BiOrthogonal Wavelet of type 4.4 - Five vanishing moments in wavelet function and five vanishing
+ * moments in scaling function.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 17:40:01
+ */
+public class BiOrthogonal55 extends BiOrthogonal {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/bior5.5/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 17:40:01
+   */
+  public BiOrthogonal55() {
+
+    _name = "BiOrthogonal 5/5"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 12; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = 0.;
+    _scalingDeCom[1] = 0.;
+    _scalingDeCom[2] = 0.03968708834740544;
+    _scalingDeCom[3] = 0.007948108637240322;
+    _scalingDeCom[4] = -0.05446378846823691;
+    _scalingDeCom[5] = 0.34560528195603346;
+    _scalingDeCom[6] = 0.7366601814282105;
+    _scalingDeCom[7] = 0.34560528195603346;
+    _scalingDeCom[8] = -0.05446378846823691;
+    _scalingDeCom[9] = 0.007948108637240322;
+    _scalingDeCom[10] = 0.03968708834740544;
+    _scalingDeCom[11] = 0.;
+
+    _waveletDeCom = new double[_motherWavelength];
+    _waveletDeCom[0] = -0.013456709459118716;
+    _waveletDeCom[1] = -0.002694966880111507;
+    _waveletDeCom[2] = 0.13670658466432914;
+    _waveletDeCom[3] = -0.09350469740093886;
+    _waveletDeCom[4] = -0.47680326579848425;
+    _waveletDeCom[5] = 0.8995061097486484;
+    _waveletDeCom[6] = -0.47680326579848425;
+    _waveletDeCom[7] = -0.09350469740093886;
+    _waveletDeCom[8] = 0.13670658466432914;
+    _waveletDeCom[9] = -0.002694966880111507;
+    _waveletDeCom[10] = -0.013456709459118716;
+    _waveletDeCom[11] = 0.;
+
+    _scalingReCon = new double[_motherWavelength];
+    _scalingReCon[0] = 0.013456709459118716;
+    _scalingReCon[1] = -0.002694966880111507;
+    _scalingReCon[2] = -0.13670658466432914;
+    _scalingReCon[3] = -0.09350469740093886;
+    _scalingReCon[4] = 0.47680326579848425;
+    _scalingReCon[5] = 0.8995061097486484;
+    _scalingReCon[6] = 0.47680326579848425;
+    _scalingReCon[7] = -0.09350469740093886;
+    _scalingReCon[8] = -0.13670658466432914;
+    _scalingReCon[9] = -0.002694966880111507;
+    _scalingReCon[10] = 0.013456709459118716;
+    _scalingReCon[11] = 0.;
+
+    _waveletReCon = new double[_motherWavelength];
+    _waveletReCon[0] = 0.;
+    _waveletReCon[1] = 0.;
+    _waveletReCon[2] = 0.03968708834740544;
+    _waveletReCon[3] = -0.007948108637240322;
+    _waveletReCon[4] = -0.05446378846823691;
+    _waveletReCon[5] = -0.34560528195603346;
+    _waveletReCon[6] = 0.7366601814282105;
+    _waveletReCon[7] = -0.34560528195603346;
+    _waveletReCon[8] = -0.05446378846823691;
+    _waveletReCon[9] = -0.007948108637240322;
+    _waveletReCon[10] = 0.03968708834740544;
+    _waveletReCon[11] = 0.;
+
+    // build all other coefficients from low & high pass decomposition
+    // _buildBiOrthonormalSpace( );
+
+  } // BiOrthogonal55
+} // BiOrthogonal55
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal68.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal68.java
new file mode 100644
index 00000000000..e06139bbe27
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/biorthogonal/BiOrthogonal68.java
@@ -0,0 +1,90 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.biorthogonal;
+
+/**
+ * BiOrthogonal Wavelet of type 6.8 - Six vanishing moments in wavelet function and eight vanishing
+ * moments in scaling function.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 11:42:09
+ */
+public class BiOrthogonal68 extends BiOrthogonal {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/bior6.8/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 11:42:09
+   */
+  public BiOrthogonal68() {
+
+    _name = "BiOrthogonal 6/8"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 18; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = 0.;
+    _scalingDeCom[1] = 0.0019088317364812906;
+    _scalingDeCom[2] = -0.0019142861290887667;
+    _scalingDeCom[3] = -0.016990639867602342;
+    _scalingDeCom[4] = 0.01193456527972926;
+    _scalingDeCom[5] = 0.04973290349094079;
+    _scalingDeCom[6] = -0.07726317316720414;
+    _scalingDeCom[7] = -0.09405920349573646;
+    _scalingDeCom[8] = 0.4207962846098268;
+    _scalingDeCom[9] = 0.8259229974584023;
+    _scalingDeCom[10] = 0.4207962846098268;
+    _scalingDeCom[11] = -0.09405920349573646;
+    _scalingDeCom[12] = -0.07726317316720414;
+    _scalingDeCom[13] = 0.04973290349094079;
+    _scalingDeCom[14] = 0.01193456527972926;
+    _scalingDeCom[15] = -0.016990639867602342;
+    _scalingDeCom[16] = -0.0019142861290887667;
+    _scalingDeCom[17] = 0.0019088317364812906;
+
+    _waveletDeCom = new double[_motherWavelength];
+    _waveletDeCom[0] = 0.;
+    _waveletDeCom[1] = 0.;
+    _waveletDeCom[2] = 0.;
+    _waveletDeCom[3] = 0.014426282505624435;
+    _waveletDeCom[4] = -0.014467504896790148;
+    _waveletDeCom[5] = -0.07872200106262882;
+    _waveletDeCom[6] = 0.04036797903033992;
+    _waveletDeCom[7] = 0.41784910915027457;
+    _waveletDeCom[8] = -0.7589077294536541;
+    _waveletDeCom[9] = 0.41784910915027457;
+    _waveletDeCom[10] = 0.04036797903033992;
+    _waveletDeCom[11] = -0.07872200106262882;
+    _waveletDeCom[12] = -0.014467504896790148;
+    _waveletDeCom[13] = 0.014426282505624435;
+    _waveletDeCom[14] = 0.;
+    _waveletDeCom[15] = 0.;
+    _waveletDeCom[16] = 0.;
+    _waveletDeCom[17] = 0.;
+
+    // build all other coefficients from low & high pass decomposition
+    _buildBiOrthonormalSpace();
+  } // BiOrthogonal68
+} // BiOrthogonal68
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/coiflet/Coiflet1.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/coiflet/Coiflet1.java
new file mode 100644
index 00000000000..d25552eb872
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/coiflet/Coiflet1.java
@@ -0,0 +1,63 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.coiflet;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Ingrid Daubechies' orthonormal Coiflet wavelet of six coefficients.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 15.02.2014 22:27:55
+ */
+public class Coiflet1 extends Wavelet {
+
+  /**
+   * Constructor calculating analytically the orthogonal Coiflet wavelet of 6 coefficients,
+   * orthonormalizes them (normed, due to ||*||2 - euclidean norm), and spreads the scaling
+   * coefficients afterwards; .
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 15.02.2014 22:27:55
+   */
+  public Coiflet1() {
+
+    _name = "Coiflet 1"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 6; // wavelength of mother wavelet
+
+    double sqrt02 = 1.4142135623730951;
+    double sqrt15 = Math.sqrt(15.);
+
+    // these coefficients are already orthonormal
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = sqrt02 * (sqrt15 - 3.) / 32.; //  -0.01565572813546454;
+    _scalingDeCom[1] = sqrt02 * (1. - sqrt15) / 32.; // -0.0727326195128539;
+    _scalingDeCom[2] = sqrt02 * (6. - 2 * sqrt15) / 32.; //  0.38486484686420286;
+    _scalingDeCom[3] = sqrt02 * (2. * sqrt15 + 6.) / 32.; // 0.8525720202122554;
+    _scalingDeCom[4] = sqrt02 * (sqrt15 + 13.) / 32.; // 0.3378976624578092;
+    _scalingDeCom[5] = sqrt02 * (9. - sqrt15) / 32.; // -0.0727326195128539;
+
+    _buildOrthonormalSpace(); // build all other coefficients from low pass decomposition
+  } // Coiflet1
+} // class
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/coiflet/Coiflet2.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/coiflet/Coiflet2.java
new file mode 100644
index 00000000000..6ee1c09f2b4
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/coiflet/Coiflet2.java
@@ -0,0 +1,64 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.coiflet;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Ingrid Daubechies' orthonormal Coiflet wavelet of 12 coefficients.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 15.02.2014 22:33:55
+ */
+public class Coiflet2 extends Wavelet {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/coif2/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 15.02.2014 22:33:55
+   */
+  public Coiflet2() {
+
+    _name = "Coiflet 2"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 12; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = -0.0007205494453645122;
+    _scalingDeCom[1] = -0.0018232088707029932;
+    _scalingDeCom[2] = 0.0056114348193944995;
+    _scalingDeCom[3] = 0.023680171946334084;
+    _scalingDeCom[4] = -0.0594344186464569;
+    _scalingDeCom[5] = -0.0764885990783064;
+    _scalingDeCom[6] = 0.41700518442169254;
+    _scalingDeCom[7] = 0.8127236354455423;
+    _scalingDeCom[8] = 0.3861100668211622;
+    _scalingDeCom[9] = -0.06737255472196302;
+    _scalingDeCom[10] = -0.04146493678175915;
+    _scalingDeCom[11] = 0.016387336463522112;
+
+    _buildOrthonormalSpace(); // build all other coefficients from low pass decomposition
+  } // Coiflet2
+} // Coiflet2
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/coiflet/Coiflet3.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/coiflet/Coiflet3.java
new file mode 100644
index 00000000000..bd4d3b73270
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/coiflet/Coiflet3.java
@@ -0,0 +1,70 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.coiflet;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Ingrid Daubechies' orthonormal Coiflet wavelet of 18 coefficients.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 15.02.2014 22:58:59
+ */
+public class Coiflet3 extends Wavelet {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/coif3/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 15.02.2014 22:58:59
+   */
+  public Coiflet3() {
+
+    _name = "Coiflet 3"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 18; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = -3.459977283621256e-05;
+    _scalingDeCom[1] = -7.098330313814125e-05;
+    _scalingDeCom[2] = 0.0004662169601128863;
+    _scalingDeCom[3] = 0.0011175187708906016;
+    _scalingDeCom[4] = -0.0025745176887502236;
+    _scalingDeCom[5] = -0.00900797613666158;
+    _scalingDeCom[6] = 0.015880544863615904;
+    _scalingDeCom[7] = 0.03455502757306163;
+    _scalingDeCom[8] = -0.08230192710688598;
+    _scalingDeCom[9] = -0.07179982161931202;
+    _scalingDeCom[10] = 0.42848347637761874;
+    _scalingDeCom[11] = 0.7937772226256206;
+    _scalingDeCom[12] = 0.4051769024096169;
+    _scalingDeCom[13] = -0.06112339000267287;
+    _scalingDeCom[14] = -0.0657719112818555;
+    _scalingDeCom[15] = 0.023452696141836267;
+    _scalingDeCom[16] = 0.007782596427325418;
+    _scalingDeCom[17] = -0.003793512864491014;
+
+    _buildOrthonormalSpace(); // build all other coefficients from low pass decomposition
+  } // Coiflet3
+} // Coiflet3
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/coiflet/Coiflet4.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/coiflet/Coiflet4.java
new file mode 100644
index 00000000000..ba0f1fdb3d2
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/coiflet/Coiflet4.java
@@ -0,0 +1,76 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.coiflet;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Ingrid Daubechies' orthonormal Coiflet wavelet of 24 coefficients.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 01:46:10
+ */
+public class Coiflet4 extends Wavelet {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/coif4/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 01:46:11
+   */
+  public Coiflet4() {
+
+    _name = "Coiflet 4"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 24; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = -1.7849850030882614e-06;
+    _scalingDeCom[1] = -3.2596802368833675e-06;
+    _scalingDeCom[2] = 3.1229875865345646e-05;
+    _scalingDeCom[3] = 6.233903446100713e-05;
+    _scalingDeCom[4] = -0.00025997455248771324;
+    _scalingDeCom[5] = -0.0005890207562443383;
+    _scalingDeCom[6] = 0.0012665619292989445;
+    _scalingDeCom[7] = 0.003751436157278457;
+    _scalingDeCom[8] = -0.00565828668661072;
+    _scalingDeCom[9] = -0.015211731527946259;
+    _scalingDeCom[10] = 0.025082261844864097;
+    _scalingDeCom[11] = 0.03933442712333749;
+    _scalingDeCom[12] = -0.09622044203398798;
+    _scalingDeCom[13] = -0.06662747426342504;
+    _scalingDeCom[14] = 0.4343860564914685;
+    _scalingDeCom[15] = 0.782238930920499;
+    _scalingDeCom[16] = 0.41530840703043026;
+    _scalingDeCom[17] = -0.05607731331675481;
+    _scalingDeCom[18] = -0.08126669968087875;
+    _scalingDeCom[19] = 0.026682300156053072;
+    _scalingDeCom[20] = 0.016068943964776348;
+    _scalingDeCom[21] = -0.0073461663276420935;
+    _scalingDeCom[22] = -0.0016294920126017326;
+    _scalingDeCom[23] = 0.0008923136685823146;
+
+    _buildOrthonormalSpace(); // build all other coefficients from low pass decomposition
+  } // Coiflet4
+} // Coiflet4
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/coiflet/Coiflet5.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/coiflet/Coiflet5.java
new file mode 100644
index 00000000000..9e9cc985a15
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/coiflet/Coiflet5.java
@@ -0,0 +1,82 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.coiflet;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Ingrid Daubechies' orthonormal Coiflet wavelet of 30 coefficients.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 01:49:39
+ */
+public class Coiflet5 extends Wavelet {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/coif5/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 01:49:39
+   */
+  public Coiflet5() {
+
+    _name = "Coiflet 5"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 30; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = -9.517657273819165e-08;
+    _scalingDeCom[1] = -1.6744288576823017e-07;
+    _scalingDeCom[2] = 2.0637618513646814e-06;
+    _scalingDeCom[3] = 3.7346551751414047e-06;
+    _scalingDeCom[4] = -2.1315026809955787e-05;
+    _scalingDeCom[5] = -4.134043227251251e-05;
+    _scalingDeCom[6] = 0.00014054114970203437;
+    _scalingDeCom[7] = 0.00030225958181306315;
+    _scalingDeCom[8] = -0.0006381313430451114;
+    _scalingDeCom[9] = -0.0016628637020130838;
+    _scalingDeCom[10] = 0.0024333732126576722;
+    _scalingDeCom[11] = 0.006764185448053083;
+    _scalingDeCom[12] = -0.009164231162481846;
+    _scalingDeCom[13] = -0.01976177894257264;
+    _scalingDeCom[14] = 0.03268357426711183;
+    _scalingDeCom[15] = 0.0412892087501817;
+    _scalingDeCom[16] = -0.10557420870333893;
+    _scalingDeCom[17] = -0.06203596396290357;
+    _scalingDeCom[18] = 0.4379916261718371;
+    _scalingDeCom[19] = 0.7742896036529562;
+    _scalingDeCom[20] = 0.4215662066908515;
+    _scalingDeCom[21] = -0.05204316317624377;
+    _scalingDeCom[22] = -0.09192001055969624;
+    _scalingDeCom[23] = 0.02816802897093635;
+    _scalingDeCom[24] = 0.023408156785839195;
+    _scalingDeCom[25] = -0.010131117519849788;
+    _scalingDeCom[26] = -0.004159358781386048;
+    _scalingDeCom[27] = 0.0021782363581090178;
+    _scalingDeCom[28] = 0.00035858968789573785;
+    _scalingDeCom[29] = -0.00021208083980379827;
+
+    _buildOrthonormalSpace(); // build all other coefficients from low pass decomposition
+  } // Coiflet5
+} // Coiflet5
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies10.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies10.java
new file mode 100644
index 00000000000..821fb47bfd2
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies10.java
@@ -0,0 +1,93 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Ingrid Daubechies' orthonormal Daubechies wavelet of 20 coefficients.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 16.02.2014 00:41:08
+ */
+public class Daubechies10 extends Wavelet {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/db10/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 16.02.2014 00:41:08
+   */
+  public Daubechies10() {
+
+    _name = "Daubechies 10"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 20; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+    _scalingDeCom[0] = -1.326420300235487e-05;
+    _scalingDeCom[1] = 9.358867000108985e-05;
+    _scalingDeCom[2] = -0.0001164668549943862;
+    _scalingDeCom[3] = -0.0006858566950046825;
+    _scalingDeCom[4] = 0.00199240529499085;
+    _scalingDeCom[5] = 0.0013953517469940798;
+    _scalingDeCom[6] = -0.010733175482979604;
+    _scalingDeCom[7] = 0.0036065535669883944;
+    _scalingDeCom[8] = 0.03321267405893324;
+    _scalingDeCom[9] = -0.02945753682194567;
+    _scalingDeCom[10] = -0.07139414716586077;
+    _scalingDeCom[11] = 0.09305736460380659;
+    _scalingDeCom[12] = 0.12736934033574265;
+    _scalingDeCom[13] = -0.19594627437659665;
+    _scalingDeCom[14] = -0.24984642432648865;
+    _scalingDeCom[15] = 0.2811723436604265;
+    _scalingDeCom[16] = 0.6884590394525921;
+    _scalingDeCom[17] = 0.5272011889309198;
+    _scalingDeCom[18] = 0.18817680007762133;
+    _scalingDeCom[19] = 0.026670057900950818;
+
+    //    _scalingDeCom[ 0 ] = -1.326420300235487e-05;
+    //    _scalingDeCom[ 1 ] = -9.358867000108985e-05;
+    //    _scalingDeCom[ 2 ] = -0.0001164668549943862;
+    //    _scalingDeCom[ 3 ] = 0.0006858566950046825;
+    //    _scalingDeCom[ 4 ] = 0.00199240529499085;
+    //    _scalingDeCom[ 5 ] = -0.0013953517469940798;
+    //    _scalingDeCom[ 6 ] = -0.010733175482979604;
+    //    _scalingDeCom[ 7 ] = -0.0036065535669883944;
+    //    _scalingDeCom[ 8 ] = 0.03321267405893324;
+    //    _scalingDeCom[ 9 ] = 0.02945753682194567;
+    //    _scalingDeCom[ 10 ] = -0.07139414716586077;
+    //    _scalingDeCom[ 11 ] = -0.09305736460380659;
+    //    _scalingDeCom[ 12 ] = 0.12736934033574265;
+    //    _scalingDeCom[ 13 ] = 0.19594627437659665;
+    //    _scalingDeCom[ 14 ] = -0.24984642432648865;
+    //    _scalingDeCom[ 15 ] = -0.2811723436604265;
+    //    _scalingDeCom[ 16 ] = 0.6884590394525921;
+    //    _scalingDeCom[ 17 ] = -0.5272011889309198;
+    //    _scalingDeCom[ 18 ] = 0.18817680007762133;
+    //    _scalingDeCom[ 19 ] = -0.026670057900950818;
+
+    _buildOrthonormalSpace(); // build all other coefficients from low pass decomposition
+  } // Daubechies10
+} // Daubechies10
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies11.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies11.java
new file mode 100644
index 00000000000..b39d4562c30
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies11.java
@@ -0,0 +1,75 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Ingrid Daubechies' orthonormal Daubechies wavelet of 22 coefficients.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 19.08.2014 18:10:52
+ */
+public class Daubechies11 extends Wavelet {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/db11/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 19.08.2014 18:10:52
+   */
+  public Daubechies11() {
+
+    _name = "Daubechies 11"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 22; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+
+    _scalingDeCom[0] = 4.494274277236352e-06;
+    _scalingDeCom[1] = -3.463498418698379e-05;
+    _scalingDeCom[2] = 5.443907469936638e-05;
+    _scalingDeCom[3] = 0.00024915252355281426;
+    _scalingDeCom[4] = -0.0008930232506662366;
+    _scalingDeCom[5] = -0.00030859285881515924;
+    _scalingDeCom[6] = 0.004928417656058778;
+    _scalingDeCom[7] = -0.0033408588730145018;
+    _scalingDeCom[8] = -0.015364820906201324;
+    _scalingDeCom[9] = 0.02084090436018004;
+    _scalingDeCom[10] = 0.03133509021904531;
+    _scalingDeCom[11] = -0.06643878569502022;
+    _scalingDeCom[12] = -0.04647995511667613;
+    _scalingDeCom[13] = 0.14981201246638268;
+    _scalingDeCom[14] = 0.06604358819669089;
+    _scalingDeCom[15] = -0.27423084681792875;
+    _scalingDeCom[16] = -0.16227524502747828;
+    _scalingDeCom[17] = 0.41196436894789695;
+    _scalingDeCom[18] = 0.6856867749161785;
+    _scalingDeCom[19] = 0.44989976435603013;
+    _scalingDeCom[20] = 0.1440670211506196;
+    _scalingDeCom[21] = 0.01869429776147044;
+
+    _buildOrthonormalSpace(); // build all other coefficients from low pass decomposition
+  } // Daubechies11
+} // Daubechies11
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies12.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies12.java
new file mode 100644
index 00000000000..22dd3997b53
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies12.java
@@ -0,0 +1,77 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Ingrid Daubechies' orthonormal Daubechies wavelet of 24 coefficients.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 19.08.2014 18:10:53
+ */
+public class Daubechies12 extends Wavelet {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/db12/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 19.08.2014 18:10:53
+   */
+  public Daubechies12() {
+
+    _name = "Daubechies 12"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 24; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+
+    _scalingDeCom[0] = -1.5290717580684923e-06;
+    _scalingDeCom[1] = 1.2776952219379579e-05;
+    _scalingDeCom[2] = -2.4241545757030318e-05;
+    _scalingDeCom[3] = -8.850410920820318e-05;
+    _scalingDeCom[4] = 0.0003886530628209267;
+    _scalingDeCom[5] = 6.5451282125215034e-06;
+    _scalingDeCom[6] = -0.0021795036186277044;
+    _scalingDeCom[7] = 0.0022486072409952287;
+    _scalingDeCom[8] = 0.006711499008795549;
+    _scalingDeCom[9] = -0.012840825198299882;
+    _scalingDeCom[10] = -0.01221864906974642;
+    _scalingDeCom[11] = 0.04154627749508764;
+    _scalingDeCom[12] = 0.010849130255828966;
+    _scalingDeCom[13] = -0.09643212009649671;
+    _scalingDeCom[14] = 0.0053595696743599965;
+    _scalingDeCom[15] = 0.18247860592758275;
+    _scalingDeCom[16] = -0.023779257256064865;
+    _scalingDeCom[17] = -0.31617845375277914;
+    _scalingDeCom[18] = -0.04476388565377762;
+    _scalingDeCom[19] = 0.5158864784278007;
+    _scalingDeCom[20] = 0.6571987225792911;
+    _scalingDeCom[21] = 0.3773551352142041;
+    _scalingDeCom[22] = 0.10956627282118277;
+    _scalingDeCom[23] = 0.013112257957229239;
+
+    _buildOrthonormalSpace(); // build all other coefficients from low pass decomposition
+  } // Daubechies12
+} // Daubechies12
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies13.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies13.java
new file mode 100644
index 00000000000..da2b065bbee
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies13.java
@@ -0,0 +1,79 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Ingrid Daubechies' orthonormal Daubechies wavelet of 26 coefficients.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 19.08.2014 18:10:54
+ */
+public class Daubechies13 extends Wavelet {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/db13/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 19.08.2014 18:10:54
+   */
+  public Daubechies13() {
+
+    _name = "Daubechies 13"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 26; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+
+    _scalingDeCom[0] = 5.2200350984548e-07;
+    _scalingDeCom[1] = -4.700416479360808e-06;
+    _scalingDeCom[2] = 1.0441930571407941e-05;
+    _scalingDeCom[3] = 3.067853757932436e-05;
+    _scalingDeCom[4] = -0.0001651289885565057;
+    _scalingDeCom[5] = 4.9251525126285676e-05;
+    _scalingDeCom[6] = 0.000932326130867249;
+    _scalingDeCom[7] = -0.0013156739118922766;
+    _scalingDeCom[8] = -0.002761911234656831;
+    _scalingDeCom[9] = 0.007255589401617119;
+    _scalingDeCom[10] = 0.003923941448795577;
+    _scalingDeCom[11] = -0.02383142071032781;
+    _scalingDeCom[12] = 0.002379972254052227;
+    _scalingDeCom[13] = 0.056139477100276156;
+    _scalingDeCom[14] = -0.026488406475345658;
+    _scalingDeCom[15] = -0.10580761818792761;
+    _scalingDeCom[16] = 0.07294893365678874;
+    _scalingDeCom[17] = 0.17947607942935084;
+    _scalingDeCom[18] = -0.12457673075080665;
+    _scalingDeCom[19] = -0.31497290771138414;
+    _scalingDeCom[20] = 0.086985726179645;
+    _scalingDeCom[21] = 0.5888895704312119;
+    _scalingDeCom[22] = 0.6110558511587811;
+    _scalingDeCom[23] = 0.3119963221604349;
+    _scalingDeCom[24] = 0.08286124387290195;
+    _scalingDeCom[25] = 0.009202133538962279;
+
+    _buildOrthonormalSpace(); // build all other coefficients from low pass decomposition
+  } // Daubechies13
+} // Daubechies13
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies14.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies14.java
new file mode 100644
index 00000000000..adb89f33e8a
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies14.java
@@ -0,0 +1,81 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Ingrid Daubechies' orthonormal Daubechies wavelet of 28 coefficients.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 19.08.2014 18:10:55
+ */
+public class Daubechies14 extends Wavelet {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/db14/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 19.08.2014 18:10:55
+   */
+  public Daubechies14() {
+
+    _name = "Daubechies 14"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 28; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+
+    _scalingDeCom[0] = -1.7871399683109222e-07;
+    _scalingDeCom[1] = 1.7249946753674012e-06;
+    _scalingDeCom[2] = -4.389704901780418e-06;
+    _scalingDeCom[3] = -1.0337209184568496e-05;
+    _scalingDeCom[4] = 6.875504252695734e-05;
+    _scalingDeCom[5] = -4.177724577037067e-05;
+    _scalingDeCom[6] = -0.00038683194731287514;
+    _scalingDeCom[7] = 0.0007080211542354048;
+    _scalingDeCom[8] = 0.001061691085606874;
+    _scalingDeCom[9] = -0.003849638868019787;
+    _scalingDeCom[10] = -0.0007462189892638753;
+    _scalingDeCom[11] = 0.01278949326634007;
+    _scalingDeCom[12] = -0.0056150495303375755;
+    _scalingDeCom[13] = -0.030185351540353976;
+    _scalingDeCom[14] = 0.02698140830794797;
+    _scalingDeCom[15] = 0.05523712625925082;
+    _scalingDeCom[16] = -0.0715489555039835;
+    _scalingDeCom[17] = -0.0867484115681106;
+    _scalingDeCom[18] = 0.13998901658445695;
+    _scalingDeCom[19] = 0.13839521386479153;
+    _scalingDeCom[20] = -0.2180335299932165;
+    _scalingDeCom[21] = -0.27168855227867705;
+    _scalingDeCom[22] = 0.21867068775886594;
+    _scalingDeCom[23] = 0.6311878491047198;
+    _scalingDeCom[24] = 0.5543056179407709;
+    _scalingDeCom[25] = 0.25485026779256437;
+    _scalingDeCom[26] = 0.062364758849384874;
+    _scalingDeCom[27] = 0.0064611534600864905;
+
+    _buildOrthonormalSpace(); // build all other coefficients from low pass decomposition
+  } // Daubechies14
+} // Daubechies14
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies15.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies15.java
new file mode 100644
index 00000000000..f419e6c69d7
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies15.java
@@ -0,0 +1,83 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Ingrid Daubechies' orthonormal Daubechies wavelet of 30 coefficients.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 19.08.2014 18:10:56
+ */
+public class Daubechies15 extends Wavelet {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/db15/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 19.08.2014 18:10:56
+   */
+  public Daubechies15() {
+
+    _name = "Daubechies 15"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 30; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+
+    _scalingDeCom[0] = 6.133359913303714e-08;
+    _scalingDeCom[1] = -6.316882325879451e-07;
+    _scalingDeCom[2] = 1.8112704079399406e-06;
+    _scalingDeCom[3] = 3.3629871817363823e-06;
+    _scalingDeCom[4] = -2.8133296266037558e-05;
+    _scalingDeCom[5] = 2.579269915531323e-05;
+    _scalingDeCom[6] = 0.00015589648992055726;
+    _scalingDeCom[7] = -0.00035956524436229364;
+    _scalingDeCom[8] = -0.0003734823541372647;
+    _scalingDeCom[9] = 0.0019433239803823459;
+    _scalingDeCom[10] = -0.00024175649075894543;
+    _scalingDeCom[11] = -0.0064877345603061454;
+    _scalingDeCom[12] = 0.005101000360422873;
+    _scalingDeCom[13] = 0.015083918027862582;
+    _scalingDeCom[14] = -0.020810050169636805;
+    _scalingDeCom[15] = -0.02576700732836694;
+    _scalingDeCom[16] = 0.054780550584559995;
+    _scalingDeCom[17] = 0.033877143923563204;
+    _scalingDeCom[18] = -0.11112093603713753;
+    _scalingDeCom[19] = -0.0396661765557336;
+    _scalingDeCom[20] = 0.19014671400708816;
+    _scalingDeCom[21] = 0.06528295284876569;
+    _scalingDeCom[22] = -0.28888259656686216;
+    _scalingDeCom[23] = -0.19320413960907623;
+    _scalingDeCom[24] = 0.33900253545462167;
+    _scalingDeCom[25] = 0.6458131403572103;
+    _scalingDeCom[26] = 0.4926317717079753;
+    _scalingDeCom[27] = 0.20602386398692688;
+    _scalingDeCom[28] = 0.04674339489275062;
+    _scalingDeCom[29] = 0.004538537361577376;
+
+    _buildOrthonormalSpace(); // build all other coefficients from low pass decomposition
+  } // Daubechies15
+} // Daubechies15
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies16.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies16.java
new file mode 100644
index 00000000000..577ff2b68fb
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies16.java
@@ -0,0 +1,85 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Ingrid Daubechies' orthonormal Daubechies wavelet of 32 coefficients.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 19.08.2014 18:10:57
+ */
+public class Daubechies16 extends Wavelet {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/db16/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 19.08.2014 18:10:57
+   */
+  public Daubechies16() {
+
+    _name = "Daubechies 16"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 32; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+
+    _scalingDeCom[0] = -2.1093396300980412e-08;
+    _scalingDeCom[1] = 2.3087840868545578e-07;
+    _scalingDeCom[2] = -7.363656785441815e-07;
+    _scalingDeCom[3] = -1.0435713423102517e-06;
+    _scalingDeCom[4] = 1.133660866126152e-05;
+    _scalingDeCom[5] = -1.394566898819319e-05;
+    _scalingDeCom[6] = -6.103596621404321e-05;
+    _scalingDeCom[7] = 0.00017478724522506327;
+    _scalingDeCom[8] = 0.00011424152003843815;
+    _scalingDeCom[9] = -0.0009410217493585433;
+    _scalingDeCom[10] = 0.00040789698084934395;
+    _scalingDeCom[11] = 0.00312802338120381;
+    _scalingDeCom[12] = -0.0036442796214883506;
+    _scalingDeCom[13] = -0.006990014563390751;
+    _scalingDeCom[14] = 0.013993768859843242;
+    _scalingDeCom[15] = 0.010297659641009963;
+    _scalingDeCom[16] = -0.036888397691556774;
+    _scalingDeCom[17] = -0.007588974368642594;
+    _scalingDeCom[18] = 0.07592423604445779;
+    _scalingDeCom[19] = -0.006239722752156254;
+    _scalingDeCom[20] = -0.13238830556335474;
+    _scalingDeCom[21] = 0.027340263752899923;
+    _scalingDeCom[22] = 0.21119069394696974;
+    _scalingDeCom[23] = -0.02791820813292813;
+    _scalingDeCom[24] = -0.3270633105274758;
+    _scalingDeCom[25] = -0.08975108940236352;
+    _scalingDeCom[26] = 0.44029025688580486;
+    _scalingDeCom[27] = 0.6373563320829833;
+    _scalingDeCom[28] = 0.43031272284545874;
+    _scalingDeCom[29] = 0.1650642834886438;
+    _scalingDeCom[30] = 0.03490771432362905;
+    _scalingDeCom[31] = 0.0031892209253436892;
+
+    _buildOrthonormalSpace(); // build all other coefficients from low pass decomposition
+  } // Daubechies16
+} // Daubechies16
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies17.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies17.java
new file mode 100644
index 00000000000..7953f7bc6c4
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies17.java
@@ -0,0 +1,87 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Ingrid Daubechies' orthonormal Daubechies wavelet of 34 coefficients.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 19.08.2014 18:10:58
+ */
+public class Daubechies17 extends Wavelet {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/db17/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 19.08.2014 18:10:58
+   */
+  public Daubechies17() {
+
+    _name = "Daubechies 17"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 34; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+
+    _scalingDeCom[0] = 7.26749296856637e-09;
+    _scalingDeCom[1] = -8.423948446008154e-08;
+    _scalingDeCom[2] = 2.9577009333187617e-07;
+    _scalingDeCom[3] = 3.0165496099963414e-07;
+    _scalingDeCom[4] = -4.505942477225963e-06;
+    _scalingDeCom[5] = 6.990600985081294e-06;
+    _scalingDeCom[6] = 2.318681379876164e-05;
+    _scalingDeCom[7] = -8.204803202458212e-05;
+    _scalingDeCom[8] = -2.5610109566546042e-05;
+    _scalingDeCom[9] = 0.0004394654277689454;
+    _scalingDeCom[10] = -0.00032813251941022427;
+    _scalingDeCom[11] = -0.001436845304805;
+    _scalingDeCom[12] = 0.0023012052421511474;
+    _scalingDeCom[13] = 0.002967996691518064;
+    _scalingDeCom[14] = -0.008602921520347815;
+    _scalingDeCom[15] = -0.0030429899813869555;
+    _scalingDeCom[16] = 0.022733676583919053;
+    _scalingDeCom[17] = -0.0032709555358783646;
+    _scalingDeCom[18] = -0.04692243838937891;
+    _scalingDeCom[19] = 0.022312336178011833;
+    _scalingDeCom[20] = 0.08110598665408082;
+    _scalingDeCom[21] = -0.05709141963185808;
+    _scalingDeCom[22] = -0.12681569177849797;
+    _scalingDeCom[23] = 0.10113548917744287;
+    _scalingDeCom[24] = 0.19731058956508457;
+    _scalingDeCom[25] = -0.12659975221599248;
+    _scalingDeCom[26] = -0.32832074836418546;
+    _scalingDeCom[27] = 0.027314970403312946;
+    _scalingDeCom[28] = 0.5183157640572823;
+    _scalingDeCom[29] = 0.6109966156850273;
+    _scalingDeCom[30] = 0.3703507241528858;
+    _scalingDeCom[31] = 0.13121490330791097;
+    _scalingDeCom[32] = 0.025985393703623173;
+    _scalingDeCom[33] = 0.00224180700103879;
+
+    _buildOrthonormalSpace(); // build all other coefficients from low pass decomposition
+  } // Daubechies17
+} // Daubechies17
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies18.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies18.java
new file mode 100644
index 00000000000..443f97344dc
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies18.java
@@ -0,0 +1,89 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Ingrid Daubechies' orthonormal Daubechies wavelet of 36 coefficients.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 19.08.2014 18:10:59
+ */
+public class Daubechies18 extends Wavelet {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/db18/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 19.08.2014 18:10:59
+   */
+  public Daubechies18() {
+
+    _name = "Daubechies 18"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 36; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+
+    _scalingDeCom[0] = -2.507934454941929e-09;
+    _scalingDeCom[1] = 3.06883586303703e-08;
+    _scalingDeCom[2] = -1.1760987670250871e-07;
+    _scalingDeCom[3] = -7.691632689865049e-08;
+    _scalingDeCom[4] = 1.768712983622886e-06;
+    _scalingDeCom[5] = -3.3326344788769603e-06;
+    _scalingDeCom[6] = -8.520602537423464e-06;
+    _scalingDeCom[7] = 3.741237880730847e-05;
+    _scalingDeCom[8] = -1.535917123021341e-07;
+    _scalingDeCom[9] = -0.00019864855231101547;
+    _scalingDeCom[10] = 0.0002135815619103188;
+    _scalingDeCom[11] = 0.0006284656829644715;
+    _scalingDeCom[12] = -0.0013405962983313922;
+    _scalingDeCom[13] = -0.0011187326669886426;
+    _scalingDeCom[14] = 0.004943343605456594;
+    _scalingDeCom[15] = 0.00011863003387493042;
+    _scalingDeCom[16] = -0.013051480946517112;
+    _scalingDeCom[17] = 0.006262167954438661;
+    _scalingDeCom[18] = 0.026670705926689853;
+    _scalingDeCom[19] = -0.023733210395336858;
+    _scalingDeCom[20] = -0.04452614190225633;
+    _scalingDeCom[21] = 0.05705124773905827;
+    _scalingDeCom[22] = 0.0648872162123582;
+    _scalingDeCom[23] = -0.10675224665906288;
+    _scalingDeCom[24] = -0.09233188415030412;
+    _scalingDeCom[25] = 0.16708131276294505;
+    _scalingDeCom[26] = 0.14953397556500755;
+    _scalingDeCom[27] = -0.21648093400458224;
+    _scalingDeCom[28] = -0.2936540407357981;
+    _scalingDeCom[29] = 0.14722311196952223;
+    _scalingDeCom[30] = 0.571801654887122;
+    _scalingDeCom[31] = 0.5718268077650818;
+    _scalingDeCom[32] = 0.31467894133619284;
+    _scalingDeCom[33] = 0.10358846582214751;
+    _scalingDeCom[34] = 0.01928853172409497;
+    _scalingDeCom[35] = 0.0015763102184365595;
+
+    _buildOrthonormalSpace(); // build all other coefficients from low pass decomposition
+  } // Daubechies18
+} // Daubechies18
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies19.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies19.java
new file mode 100644
index 00000000000..54cde266aff
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies19.java
@@ -0,0 +1,91 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Ingrid Daubechies' orthonormal Daubechies wavelet of 38 coefficients.
+ *
+ * @author Christian (graetz23@gmail.com)
+ * @date 19.08.2014 18:11:00
+ */
+public class Daubechies19 extends Wavelet {
+
+  /**
+   * Already orthonormal coefficients taken from Filip Wasilewski's webpage
+   * http://wavelets.pybytes.com/wavelet/db19/ Thanks!
+   *
+   * @author Christian (graetz23@gmail.com)
+   * @date 19.08.2014 18:11:00
+   */
+  public Daubechies19() {
+
+    _name = "Daubechies 19"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 38; // wavelength of mother wavelet
+
+    _scalingDeCom = new double[_motherWavelength];
+
+    _scalingDeCom[0] = 8.666848839034483e-10;
+    _scalingDeCom[1] = -1.1164020670405678e-08;
+    _scalingDeCom[2] = 4.636937775802368e-08;
+    _scalingDeCom[3] = 1.447088298804088e-08;
+    _scalingDeCom[4] = -6.86275565779811e-07;
+    _scalingDeCom[5] = 1.531931476697877e-06;
+    _scalingDeCom[6] = 3.0109643163099385e-06;
+    _scalingDeCom[7] = -1.664017629722462e-05;
+    _scalingDeCom[8] = 5.105950487090694e-06;
+    _scalingDeCom[9] = 8.711270467250443e-05;
+    _scalingDeCom[10] = -0.00012460079173506306;
+    _scalingDeCom[11] = -0.0002606761356811995;
+    _scalingDeCom[12] = 0.0007358025205041731;
+    _scalingDeCom[13] = 0.00034180865344939543;
+    _scalingDeCom[14] = -0.002687551800734441;
+    _scalingDeCom[15] = 0.0007689543592242488;
+    _scalingDeCom[16] = 0.007040747367080495;
+    _scalingDeCom[17] = -0.005866922281112195;
+    _scalingDeCom[18] = -0.013988388678695632;
+    _scalingDeCom[19] = 0.019375549889114482;
+    _scalingDeCom[20] = 0.021623767409452484;
+    _scalingDeCom[21] = -0.04567422627778492;
+    _scalingDeCom[22] = -0.026501236250778635;
+    _scalingDeCom[23] = 0.0869067555554507;
+    _scalingDeCom[24] = 0.02758435062488713;
+    _scalingDeCom[25] = -0.14278569504021468;
+    _scalingDeCom[26] = -0.03351854190320226;
+    _scalingDeCom[27] = 0.21234974330662043;
+    _scalingDeCom[28] = 0.07465226970806647;
+    _scalingDeCom[29] = -0.28583863175723145;
+    _scalingDeCom[30] = -0.22809139421653665;
+    _scalingDeCom[31] = 0.2608949526521201;
+    _scalingDeCom[32] = 0.6017045491300916;
+    _scalingDeCom[33] = 0.5244363774668862;
+    _scalingDeCom[34] = 0.26438843174202237;
+    _scalingDeCom[35] = 0.08127811326580564;
+    _scalingDeCom[36] = 0.01428109845082521;
+    _scalingDeCom[37] = 0.0011086697631864314;
+
+    _buildOrthonormalSpace(); // build all other coefficients from low pass decomposition
+  } // Daubechies19
+} // Daubechies19
diff --git a/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies2.java b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies2.java
new file mode 100644
index 00000000000..0ab652459d7
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/simpiece/jwave/transforms/wavelets/daubechies/Daubechies2.java
@@ -0,0 +1,63 @@
+/**
+ * JWave is distributed under the MIT License (MIT); this file is part of.
+ *
+ * <p>Copyright (c) 2008-2024 Christian (graetz23@gmail.com)
+ *
+ * <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * <p>The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.daubechies;
+
+import org.apache.iotdb.db.query.simpiece.jwave.transforms.wavelets.Wavelet;
+
+/**
+ * Ingrid Daubechies' orthonormal wavelet of four coefficients and the scales; normed, due to ||*||2
+ * - euclidean norm.
+ *
+ * @date 10.02.2010 15:42:45
+ * @author Christian (graetz23@gmail.com)
+ */
+public class Daubechies2 extends Wavelet {
+
+  /**
+   * Constructor setting up the orthonormal Daubechie4 wavelet coeffs and the scales; normed, due to
+   * ||*||2 - euclidean norm.
+   *
+   * @date 10.02.2010 15:42:45
+   * @author Christian (graetz23@gmail.com)
+   */
+  public Daubechies2() {
+
+    _name = "Daubechies 2"; // name of the wavelet
+
+    _transformWavelength = 2; // minimal wavelength of input signal
+
+    _motherWavelength = 4; // wavelength of mother wavelet
+
+    // calculate the coefficients analytically
... 3041 lines suppressed ...