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;
}
}