SineWaveSource.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.ComplexNumericalMatrix;
import org.mklab.nfc.matrix.RealNumericalMatrix;
import org.mklab.nfc.scalar.ComplexNumericalScalar;
import org.mklab.nfc.scalar.RealNumericalScalar;
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
* @param <RS> type of real scalar
* @param <RM> type of real matrix
* @param <CS> type of complex scalar
* @param <CM> type of complex matrix
*/
public class SineWaveSource<RS extends RealNumericalScalar<RS,RM,CS,CM>, RM extends RealNumericalMatrix<RS,RM,CS,CM>, CS extends ComplexNumericalScalar<RS,RM,CS,CM>, CM extends ComplexNumericalMatrix<RS,RM,CS,CM>> extends ContinuousSource<RS,RM,CS,CM> implements StringExternalizable {
/** 振幅のバイアス */
@Parameter(name = "bias", description = "SineWaveSource.1", internationalization = true)
private RS bias = this.sunit.create(0);
/** 振幅 */
@Parameter(name = "amplitude", description = "SineWaveSource.3", internationalization = true)
private RS amplitude = this.sunit.create(1);
/** 周波数 */
@Parameter(name = "frequency", unit = {SIunit.rad, SIunit.s_1}, description = "SineWaveSource.5", internationalization = true)
private RS frequency = this.sunit.create(1);
/** 位相 */
@Parameter(name = "phase", unit = SIunit.rad, description = "SineWaveSource.7", internationalization = true)
private RS phase = this.sunit.create(0);
/**
* 新しく生成された<code>PulseSignalSource</code>オブジェクトを初期化します。
*
* @param bias 振幅のバイアス
* @param amplitude 振幅
* @param frequency 周波数
* @param phase 位相
* @param sunit unit of scalar
*/
public SineWaveSource(final RS bias, final RS amplitude, final RS frequency, final RS phase, RS sunit) {
super(1, sunit);
this.bias = bias;
this.amplitude = amplitude;
this.frequency = frequency;
this.phase = phase;
}
/**
* 新しく生成された<code>PulseSignalSource</code>オブジェクトを初期化します。
*
* @param amplitude 振幅
* @param frequency 周波数
* @param sunit unit of scalar
*/
public SineWaveSource(final RS amplitude, final RS frequency, RS sunit) {
this(sunit.create(0), amplitude, frequency, sunit.create(0), sunit);
}
/**
* 新しく生成された<code>StepSignalSource</code>オブジェクトを初期化します。
* @param sunit unit of scalar
*/
public SineWaveSource(RS sunit) {
this(sunit.create(1), sunit.create(1), sunit);
}
/**
* {@inheritDoc}
*/
@Override
public RM outputEquation(final RS t) {
final RS y = this.amplitude .multiply(this.frequency.multiply(t).add(this.phase).sin()).add(this.bias);
RS[] oo = this.sunit.createArray(1);
oo[0]= y;
return this.sunit.createGrid(oo);
}
/**
* 振幅のバイアスを設定します。
*
* @param bias 振幅のバイアス
*/
public void setBias(final RS bias) {
this.bias = bias;
}
/**
* 振幅のバイアスを返します。
*
* @return 振幅のバイアス
*/
public RS getBias() {
return this.bias;
}
/**
* 振幅を設定します。
*
* @param amplitude 振幅
*/
public void setAmplitude(final RS amplitude) {
this.amplitude = amplitude;
}
/**
* 振幅を返します。
*
* @return 振幅
*/
public RS getAmplitude() {
return this.amplitude;
}
/**
* 周波数を設定します。
*
* @param frequency 周波数
*/
public void setFrequency(final RS frequency) {
this.frequency = frequency;
}
/**
* 周波数を返します。
*
* @return 周波数
*/
public RS getFrequency() {
return this.frequency;
}
/**
* 位相差を設定します。
*
* @param phase 位相差
*/
public void setPhase(final RS phase) {
this.phase = phase;
}
/**
* 位相差を返します。
*
* @return 位相差
*/
public RS 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;
}
SineWaveSource<RS,RM,CS,CM> castedObj = (SineWaveSource<RS,RM,CS,CM>)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 + (this.bias.hashCode() ^ (this.bias.hashCode() >>> 32));
hashCode = 31 * hashCode + (this.amplitude.hashCode() ^ (this.amplitude.hashCode() >>> 32));
hashCode = 31 * hashCode + (this.frequency.hashCode() ^ (this.frequency.hashCode() >>> 32));
hashCode = 31 * hashCode + (this.phase.hashCode() ^ (this.phase.hashCode() >>> 32));
return hashCode;
}
}