示例#1
0
  public static double[] inverse(int overlap, double[][] specto) {
    DoubleFFT_1D fft = new DoubleFFT_1D(specto[0].length / 2);
    Window w = new BlackmanWindow();
    double[][] spectoNew = specto.clone();
    double[][] spectoN = new double[spectoNew.length][spectoNew[0].length * 2];
    for (int i = 0; i < spectoN.length; i++) {
      for (int j = 0; j < spectoN[0].length; j++) {
        if (j < spectoNew[0].length) spectoN[i][j] = spectoNew[i][j];
        else spectoN[i][j] = spectoNew[i][spectoNew[i].length - 1 - (j - spectoNew[i].length)];
      }
    }
    for (int i = 0; i < spectoN.length; i++) {
      spectoN[i] = w.inverseW(specto[i]);
      fft.realInverseFull(spectoN[i], true);
    }
    int window = spectoN[0].length * 2;
    double[] signal = new double[spectoN.length * (window - overlap)];

    for (int i = 0; i < spectoN.length; i++) {
      int length = spectoN[0].length;
      if ((window - overlap) * i + length > signal.length)
        length = signal.length - (window - overlap) * i;
      System.arraycopy(spectoN[i], 0, signal, (window - overlap) * i, length);
    }
    return signal;
  }