Triang.java

/*
 * $Id: Triang.java,v 1.9 2008/03/08 00:17:40 koga Exp $
 * 
 * Copyright (C) 2004 Koga Laboratory. All rights reserved.
 */
package org.mklab.tool.signal;

import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.nfc.matrix.IntMatrix;


/**
 * 三角波状の信号を生成するクラスです。
 * 
 * <p>Triangular window
 * 
 * @author koga
 * @version $Revision: 1.9 $
 * @see org.mklab.tool.signal.Blackman
 * @see org.mklab.tool.signal.Boxcar
 */
public class Triang {

  /**
   * <code>length</code>点の三角波状の信号を返します。
   * 
   * @param length データ数
   * @return 三角波状の信号 traiangular window
   */
  public static DoubleMatrix triang(int length) {
    DoubleMatrix window;
    if (length % 2 != 0) {
      window = new DoubleMatrix(IntMatrix.series(1, (length + 1) / 2)).multiply(2.0 / (length + 1));
      window = window.appendRight(window.getSubVector(IntMatrix.series((length - 1) / 2, 1)));
    } else {
      window = new DoubleMatrix(IntMatrix.series(1, (length + 1) / 2)).multiply(2).subtractElementWise(1).divide((double)length);
      window = window.appendRight(window.getSubVector(IntMatrix.series(length / 2, 1)));
    }

    return window;
  }

}