Sawtooth.java

/*
 * $Id: Sawtooth.java,v 1.15 2008/03/15 00:23:44 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;
import org.mklab.nfc.scalar.DoubleNumber;


/**
 * ノコギリ波状の信号を生成するクラスです。
 * 
 * <p>Sawtooth wave
 * 
 * @author koga
 * @version $Revision: 1.15 $
 * @see org.mklab.tool.signal.Square
 */
public class Sawtooth {

  /**
   * 時刻の列<code>t</code>に対して、周期<code>2*PI</code>の ノコギリ状の信号を返します。
   * 
   * @param t 時刻の列
   * @return ノコギリ波状の信号 (sawtooth wave)
   */
  public static DoubleMatrix sawtooth(DoubleMatrix t) {
    DoubleNumber unit = t.getElement(1, 1);
    DoubleNumber pi = unit.createPI();
    DoubleNumber c05 = unit.createUnit().divide(2);

    IntMatrix idx = t.compareElementWise(".<", 0).find(); //$NON-NLS-1$
    DoubleMatrix tmp = t.createZero();
    tmp.setSubVector(idx, t.createOnes(1, idx.length()));

    DoubleMatrix wv = tmp.add(t.remainderElementWise(pi.multiply(2)).divide(pi.multiply(2)).subtractElementWise(c05)).multiply(2);
    return wv;
  }

}