DoubleSineWaveSource.java
/*
* $Id: SineWaveSource.java,v 1.7 2008/07/15 15:27:15 koga Exp $
*
* Copyright (C) 2004 Koga Laboratory. All rights reserved.
*
*/
package org.mklab.tool.control.system.source;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.tool.control.system.parameter.Parameter;
import org.mklab.tool.control.system.parameter.SIunit;
import org.mklab.tool.control.system.parameter.StringExternalizable;
/**
* 正弦波信号を発生するシステムを表すクラスです。
*
* @author Koga Laboratory
* @version $Revision: 1.7 $, 2005/06/15
*/
public class DoubleSineWaveSource extends DoubleContinuousSource implements StringExternalizable {
/** 振幅のバイアス */
@Parameter(name = "bias", description = "SineWaveSource.1", internationalization = true)
private double bias = 0;
/** 振幅 */
@Parameter(name = "amplitude", description = "SineWaveSource.3", internationalization = true)
private double amplitude = 1.0;
/** 周波数 */
@Parameter(name = "frequency", unit = {SIunit.rad, SIunit.s_1}, description = "SineWaveSource.5", internationalization = true)
private double frequency = 1;
/** 位相 */
@Parameter(name = "phase", unit = SIunit.rad, description = "SineWaveSource.7", internationalization = true)
private double phase = 0;
/**
* 新しく生成された<code>PulseSignalSource</code>オブジェクトを初期化します。
*
* @param bias 振幅のバイアス
* @param amplitude 振幅
* @param frequency 周波数
* @param phase 位相
*/
public DoubleSineWaveSource(final double bias, final double amplitude, final double frequency, final double phase) {
super(1);
this.bias = bias;
this.amplitude = amplitude;
this.frequency = frequency;
this.phase = phase;
}
/**
* 新しく生成された<code>PulseSignalSource</code>オブジェクトを初期化します。
*
* @param amplitude 振幅
* @param frequency 周波数
*/
public DoubleSineWaveSource(final double amplitude, final double frequency) {
this(0, amplitude, frequency, 0);
}
/**
* 新しく生成された<code>StepSignalSource</code>オブジェクトを初期化します。
*/
public DoubleSineWaveSource() {
this(1.0, 1);
}
/**
* {@inheritDoc}
*/
@Override
public DoubleMatrix outputEquation(final double t) {
final double y = this.amplitude * (Math.sin(this.frequency * t + this.phase)) + this.bias;
return new DoubleMatrix(new double[] {y});
}
/**
* 振幅のバイアスを設定します。
*
* @param bias 振幅のバイアス
*/
public void setBias(final double bias) {
this.bias = bias;
}
/**
* 振幅のバイアスを返します。
*
* @return 振幅のバイアス
*/
public double getBias() {
return this.bias;
}
/**
* 振幅を設定します。
*
* @param amplitude 振幅
*/
public void setAmplitude(final double amplitude) {
this.amplitude = amplitude;
}
/**
* 振幅を返します。
*
* @return 振幅
*/
public double getAmplitude() {
return this.amplitude;
}
/**
* 周波数を設定します。
*
* @param frequency 周波数
*/
public void setFrequency(final double frequency) {
this.frequency = frequency;
}
/**
* 周波数を返します。
*
* @return 周波数
*/
public double getFrequency() {
return this.frequency;
}
/**
* 位相差を設定します。
*
* @param phase 位相差
*/
public void setPhase(final double phase) {
this.phase = phase;
}
/**
* 位相差を返します。
*
* @return 位相差
*/
public double getPhase() {
return this.phase;
}
/**
* @see org.mklab.tool.control.system.parameter.StringExternalizable#getString(java.lang.String)
*/
public String getString(String key) {
return Messages.getString(key);
}
/**
* @see org.mklab.tool.control.system.SystemOperator#equals(java.lang.Object)
*/
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
if (o == null) {
return false;
}
if (o.getClass() != getClass()) {
return false;
}
DoubleSineWaveSource castedObj = (DoubleSineWaveSource)o;
return ((this.bias == castedObj.bias) && (this.amplitude == castedObj.amplitude) && (this.frequency == castedObj.frequency) && (this.phase == castedObj.phase));
}
/**
* @see org.mklab.tool.control.system.SystemOperator#hashCode()
*/
@Override
public int hashCode() {
int hashCode = super.hashCode();
hashCode = 31 * hashCode + (int)(Double.doubleToLongBits(this.bias) ^ (Double.doubleToLongBits(this.bias) >>> 32));
hashCode = 31 * hashCode + (int)(Double.doubleToLongBits(this.amplitude) ^ (Double.doubleToLongBits(this.amplitude) >>> 32));
hashCode = 31 * hashCode + (int)(Double.doubleToLongBits(this.frequency) ^ (Double.doubleToLongBits(this.frequency) >>> 32));
hashCode = 31 * hashCode + (int)(Double.doubleToLongBits(this.phase) ^ (Double.doubleToLongBits(this.phase) >>> 32));
return hashCode;
}
}