Rceps.java
/*
* $Id: Rceps.java,v 1.23 2008/03/26 14:31:23 koga Exp $
*
* Copyright (C) 2004 Koga Laboratory. All rights reserved.
*/
package org.mklab.tool.signal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.tool.matrix.Makecolv;
/**
* 実ケプストラムを求めるクラスです。
*
* <p>Real cepstrum
*
* @author koga
* @version $Revision: 1.23 $
* @see org.mklab.tool.signal.Cceps
*/
public class Rceps {
/**
* <code>x</code> の実ケプストラムと最小位相信号を返します。
*
* @param x データ
* @return 実ケプストラム (real cepstrum)
*/
public static List<DoubleMatrix> rceps(DoubleMatrix x) {
int length = x.length();
DoubleMatrix xc = (((x.fft()).absElementWise()).logElementWise()).ifft().getRealPart();
int oe = length % 2;
DoubleMatrix win = x.createUnit(1).appendDown(x.createOnes((length + oe) / 2 - 1, 1)).appendDown(x.createUnit(1)).appendDown(x.createZero((length - oe) / 2 - 1, 1));
DoubleMatrix yc = ((win.multiplyElementWise(Makecolv.makecolv(xc)).fft()).expElementWise()).ifft().getRealPart();
return new ArrayList<>(Arrays.asList(new DoubleMatrix[] {xc, yc}));
}
}